Lewati ke konten utama

Tutorial Machine Learning dengan Dataset Black Friday

Dalam tutorial ini, Anda akan mempelajari cara mengisi nilai null, melakukan prapemrosesan data, mengurangi dimensi menggunakan PCA, dan membagi data menggunakan K-Fold.
Diperbarui 28 Sep 2026  · 10 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Pertama, mari impor pustaka dasar yang diperlukan untuk mengolah dataset.

import pandas as pd

Sekarang mari baca dataset dan lihat isinya.

bfriday = pd.read_csv("BlackFriday.csv")
bfriday.head(10)
dataset

Baris di atas menampilkan sebagian dataset yang terdiri dari 10 baris dan semua kolom. Jika Anda mencoba memberikan bfriday.head(x,y) akan terjadi error karena komputer sudah menganggap jumlah total kolom wajib. bfriday.head() juga akan memberi output tanpa error dan komputer mengambil jumlah baris dan kolom sesuai defaultnya.

bfriday.shape #ini memberi dimensi dataset (baris, kolom)
(550068, 12)
bfriday['Stay_In_Current_City_Years'].value_counts()# menghitung jumlah nilai per setiap rentang, bfriday['City_Category'].value_counts()
1    193821
2    101838
3     95285
5     84726
0     74398
Name: Stay_In_Current_City_Years, dtype: int64
bfriday.isnull().sum() #menghitung jumlah nilai null untuk tiap kategori dalam dataset
User_ID                            0
Product_ID                         0
Gender                             0
Age                                0
Occupation                         0
City_Category                      0
Stay_In_Current_City_Years         0
Marital_Status                     0
Product_Category_1                 0
Product_Category_2            173638
Product_Category_3            383247
Purchase                           0
dtype: int64
b = ['Product_Category_2','Product_Category_3'] #di sini kita membuat array berisi 2 kolom yaitu Product_Category_2, Product_Category_3
for i in b:
    exec("bfriday.%s.fillna(bfriday.%s.value_counts().idxmax(), inplace=True)" %(i,i))

Sekarang kita akan mengisi nilai kosong dengan nilai maksimum. Kita juga bisa membersihkan atau mengisi nilai kosong dengan bfriday.Product_Category_2.fillna(bfriday.Product_Category_2.value_counts().idxmax(),inplace=True); serupa untuk kolom bernama Product_category_3.

X = bfriday.drop(["Purchase"], axis=1)

Kita sekarang menghapus kolom bernama purchase dari dataset dan membentuk array bernama X yang terdiri dari semua kolom kecuali kolom purchase.

from sklearn.preprocessing import LabelEncoder#Sekarang mari impor encoder dari pustaka sklearn
LE = LabelEncoder()
#Sekarang kita akan mengodekan data menjadi label menggunakan label encoder agar komputasi lebih mudah
X = X.apply(LE.fit_transform)#Di sini kita menerapkan encoder pada data

Sekarang kita akan mengonversi data ke bentuk numerik menggunakan pandas karena menangani data numerik lebih mudah daripada data kategorikal.

X.Gender = pd.to_numeric(X.Gender)
X.Age = pd.to_numeric(X.Age)
X.Occupation = pd.to_numeric(X.Occupation)
X.City_Category = pd.to_numeric(X.City_Category)
X.Stay_In_Current_City_Years = pd.to_numeric(X.Stay_In_Current_City_Years)
X.Marital_Status = pd.to_numeric(X.Marital_Status)
X.Product_Category_1 = pd.to_numeric(X.Product_Category_1)
X.Product_Category_2 = pd.to_numeric(X.Product_Category_2)
X.Product_Category_3 = pd.to_numeric(X.Product_Category_3)
Y = bfriday["Purchase"]#Di sini kita membuat array bernama Y yang berisi data dari kolom purchase
from sklearn.preprocessing import StandardScaler
SS = StandardScaler()

Menstandarkan fitur dengan menghilangkan mean dan menskalakan ke varians satuan. Proses centering dan scaling dilakukan secara independen pada setiap fitur dengan menghitung statistik yang relevan pada sampel di set pelatihan. Mean dan standar deviasi kemudian disimpan untuk digunakan pada data berikutnya menggunakan metode transform.

Xs = SS.fit_transform(X)
#Anda harus mengubah X ke representasi numerik (tidak harus biner). Karena semua metode machine learning beroperasi pada matriks angka
from sklearn.decomposition import PCA
pc = PCA(4)#di sini 4 menunjukkan jumlah komponen yang Anda inginkan

Reduksi dimensi linear menggunakan Singular Value Decomposition dari data untuk memproyeksikannya ke ruang berdimensi lebih rendah. PCA adalah salah satu metode reduksi dimensi yang paling sering digunakan dan terkenal. Untuk mempercepat algoritma machine learning, Anda memasang PCA hanya pada set pelatihan. Principal component analysis (PCA)

PCA menggantikan variabel asli dengan variabel baru, yang disebut komponen utama, yang memiliki kovariansi nol dan memiliki varians dalam urutan menurun. Jadi, matriks kovariansi antara komponen utama diekstraksi dari data.

pca
Sumber: 6.3 - Principal Components Analysis (PCA)

Kita punya sesuatu yang menarik di sini bernama RandomizedPCA

Catatan: Jangan pernah menggunakan RandomizedPCA untuk data sparse. Penggunaan RandomizedPCA pada data sparse tidak tepat karena kita tidak bisa melakukan centering pada data tanpa merusak sifat sparsity, yang dapat membengkakkan penggunaan memori pada data sparse berukuran realistis. Namun, centering diperlukan untuk PCA.

principalComponents = pc.fit_transform(X)#Di sini kita menerapkan PCA ke data/memasangkan data ke PCA
pc.explained_variance_ratio_
array([7.35041374e-01, 2.64935995e-01, 1.10061180e-05, 6.21704987e-06])
principalDf = pd.DataFrame(data = principalComponents, columns = ["component 1", "component 2", "component 3", "component 4"])
from sklearn.model_selection import KFold
kf = KFold(20)
#Menyediakan indeks train/test untuk membagi data menjadi set train/test. Membagi dataset menjadi k lipatan berurutan (tanpa pengacakan secara default).
#Setiap lipatan kemudian digunakan sekali sebagai validasi sementara k - 1 lipatan lainnya menjadi set pelatihan.
for a,b in kf.split(principalDf):
    X_train, X_test = Xs[a],Xs[b]
    y_train, y_test = Y[a],Y[b]
from sklearn.linear_model import LinearRegression

Regresi digunakan untuk menelaah dua hal: (1) apakah sekumpulan variabel prediktor dapat memprediksi variabel keluaran (dependen) dengan baik? (2) Variabel mana yang menjadi prediktor signifikan terhadap variabel keluaran, dan bagaimana pengaruhnya—ditunjukkan oleh besar dan tanda koefisien beta? Estimasi regresi ini digunakan untuk menjelaskan hubungan antara satu variabel dependen dan satu atau lebih variabel independen. Bentuk paling sederhana dari persamaan regresi dengan satu variabel dependen dan satu variabel independen didefinisikan oleh rumus y = c + b*x, di mana y = nilai taksiran variabel dependen, c = konstanta, b = koefisien regresi, dan x = skor pada variabel independen.

simple linear regression model
Sumber: Linear Regression
from sklearn.tree import DecisionTreeRegressor

Sebuah decision tree dibangun dari atas ke bawah dari sebuah root node dan melibatkan pemartisian data menjadi subset yang berisi instance dengan nilai serupa. Decision tree membangun model dalam bentuk struktur pohon. Ia memecah dataset menjadi subset yang semakin kecil sembari sebuah decision tree dibangun secara bertahap. Hasil akhirnya adalah pohon dengan node keputusan dan node daun. Node keputusan (misalnya, Outlook) memiliki dua atau lebih cabang (misalnya, Sunny, Overcast, dan Rainy), masing-masing mewakili nilai untuk atribut yang diuji. Node daun (misalnya, Hours Played) mewakili keputusan pada target numerik. Node keputusan teratas pada pohon yang berkorelasi dengan prediktor terbaik disebut root node. Decision tree dapat menangani data kategorikal maupun numerik. Decision tree di mana variabel target dapat bernilai kontinu (biasanya bilangan riil) disebut regression tree. Jika kedalaman maksimum pohon ditetapkan terlalu tinggi, decision tree akan mempelajari detail yang terlalu halus dari data pelatihan dan mempelajari noise, yaitu overfit.

decision tree
Sumber: Decision Trees
from sklearn.ensemble import RandomForestRegressor

Random forest adalah estimator yang melatih sejumlah pohon keputusan pengklasifikasi pada berbagai sub-sampel dari dataset dan menggunakan perataan untuk meningkatkan akurasi prediksi serta mengendalikan overfitting. Ukuran sub-sampel selalu sama dengan ukuran sampel masukan asli tetapi sampel diambil dengan penggantian jika bootstrap=True. Gagasan di balik teknik ini adalah mendekorelasi beberapa pohon. Ia menghasilkan sampel bootstrap yang berbeda (yakni sampel yang dibangkitkan sendiri) dari Data pelatihan. Lalu kita mengurangi varians pada pohon dengan meratakannya. Dengan demikian, pendekatan ini membuat sejumlah besar decision tree di Python atau R. Model random forest sangat baik dalam menangani data tabular dengan fitur numerik, atau fitur kategorikal dengan kurang dari ratusan kategori. Random forest mampu menangkap interaksi nonlinier antara fitur dan target.

Catatan: Model berbasis pohon tidak dirancang untuk bekerja dengan fitur yang sangat sparse. Saat menangani data masukan sparse, kita bisa melakukan prapemrosesan fitur sparse untuk menghasilkan statistik numerik atau beralih ke model linear yang lebih cocok untuk skenario semacam itu.

random forest simplified
Sumber: Random Forest Simple Explanation by William Koehrsen
from sklearn.ensemble import GradientBoostingRegressor

Gradient boosting adalah teknik machine learning untuk masalah regresi dan klasifikasi, yang menghasilkan model prediksi dalam bentuk ansambel model prediksi lemah, biasanya decision tree. Ia membangun model secara bertahap seperti metode boosting lainnya, dan menggeneralisasikannya dengan memungkinkan optimasi fungsi loss yang terdiferensiasi sewenang-wenang. Boosting dapat ditafsirkan sebagai algoritma optimasi pada fungsi biaya yang sesuai. Dua makalah terakhir memperkenalkan pandangan algoritma boosting sebagai algoritma gradient descent fungsional iteratif. Artinya, algoritma yang mengoptimalkan fungsi biaya pada ruang fungsi dengan berulang kali memilih sebuah fungsi (hipotesis lemah) yang mengarah ke arah gradien negatif. Pandangan gradien fungsional ini terhadap boosting telah mendorong pengembangan algoritma boosting di banyak area machine learning dan statistik di luar regresi dan klasifikasi. Gradient boosting menggabungkan "pembelajar" lemah menjadi satu pembelajar kuat secara iteratif. Paling mudah dijelaskan dalam pengaturan regresi least-squares, di mana tujuannya adalah "mengajari" model F untuk memprediksi nilai berbentuk y ^ = F ( x ) dengan meminimalkan mean squared error.

gradient boosting simple version
Sumber: Gradient Boosting Bagian 1–Visual Conceptualization
lr = LinearRegression()
dtr = DecisionTreeRegressor()
rfr = RandomForestRegressor()
gbr = GradientBoostingRegressor()
fit1 = lr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke linear regressor
fit2 = dtr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke Decision Tree Regressor
fit3 = rfr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke Random Forest Regressor
fit4 = gbr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke Gradient Boosting Regressor

Sejauh ini Anda telah melihat fit dan fit_transform tetapi belum memahami apa itu? Mari pelajari sekarang.

fit(): Digunakan untuk menghasilkan parameter model pembelajaran dari data pelatihan.

transform(): Parameter yang dihasilkan dari metode fit() diterapkan pada model untuk menghasilkan dataset yang telah ditransformasi.

fit_transform(): Kombinasi API fit() dan transform() pada dataset yang sama.

print("Accuracy Score of Linear regression on train set",fit1.score(X_train,y_train)*100)
print("Accuracy Score of Decision Tree on train set",fit2.score(X_train,y_train)*100)
print("Accuracy Score of Random Forests on train set",fit3.score(X_train,y_train)*100)
print("Accuracy Score of Gradient Boosting on train set",fit4.score(X_train,y_train)*100)
Accuracy Score of Linear regression on train set 11.829233894211866
Accuracy Score of Decision Tree on train set 100.0
Accuracy Score of Random Forests on train set 94.207451077798
Accuracy Score of Gradient Boosting on train set 65.49517152859553
print("Accuracy Score of Linear regression on test set",fit1.score(X_test,y_test)*100)
print("Accuracy Score of Decision Tree on test set",fit2.score(X_test,y_test)*100)
print("Accuracy Score of Random Forests on test set",fit3.score(X_test,y_test)*100)
print("Accuracy Score of Gradient Boosting on testset",fit4.score(X_test,y_test)*100)
Accuracy Score of Linear regression on test set 36.8210287243639
Accuracy Score of Decision Tree on test set 57.61911563230391
Accuracy Score of Random Forests on test set 74.71675935214292
Accuracy Score of Gradient Boosting on testset 72.43849411693184

Kesimpulan

Tutorial ini memberikan gambaran cepat tentang cara mengisi nilai null. Saya menulisnya karena kebanyakan data nyata jauh lebih berantakan: ada nilai null, nilai yang salah, dan banyak sisa yang harus dibersihkan. Hore! Anda telah menyelesaikan tutorial ini. Jika Anda punya pertanyaan atau pemikiran tentang tutorial ini, jangan ragu untuk menyampaikannya di kolom komentar di bawah.

Jika Anda ingin mempelajari lebih lanjut tentang Machine Learning di Python, lihat tutorial Introduction to Machine Learning in Python dan kursus Preprocessing for Machine Learning in Python dari DataCamp.

Topik
Machine Learning
Data Science
Python

Pelajari lebih lanjut tentang Python dan Machine Learning

Kursus

Prapemrosesan untuk Machine Learning di Python

4 jam
68.7K
Pelajari cara membersihkan dan mempersiapkan data Anda untuk machine learning!
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya