Scikit-Learn Workflow & Cheatsheet
Setelah mengenal Scikit-Learn pada materi sebelumnya, sekarang kita akan mempelajari Scikit-Learn Workflow & Cheatsheet.
Workflow merupakan urutan proses yang biasanya dilakukan ketika membangun model Machine Learning.
Secara sederhana:
Data
↓
Prepare Data
↓
Choose Model
↓
Fit Model
↓
Make Predictions
↓
Evaluate
↓
Improve
↓
Save Model
Workflow ini akan menjadi pola dasar yang akan sering kita gunakan ketika membangun model Machine Learning menggunakan Scikit-Learn.
Tujuan Pembelajaran
Setelah mempelajari materi ini, kita diharapkan dapat:
- Memahami workflow Machine Learning menggunakan Scikit-Learn.
- Memisahkan feature dan target.
- Membagi dataset menjadi training dan testing.
- Memahami konsep estimator dan model.
- Melatih model menggunakan
fit(). - Membuat prediksi menggunakan
predict(). - Memahami
predict_proba(). - Melakukan evaluasi menggunakan
score(). - Memahami cross-validation.
- Menggunakan berbagai evaluation metrics.
- Memahami konsep hyperparameter tuning.
- Menyimpan dan memuat kembali model.
- Memahami pentingnya eksperimen dalam Machine Learning.
Gambaran Besar Workflow Scikit-Learn

Workflow utama dapat digambarkan sebagai berikut:
Dataset
│
▼
Prepare Data
│
▼
Define X and y
│
▼
Split the Data
│
▼
Choose Model / Estimator
│
▼
Fit Model
│
▼
Make Predictions
│
▼
Evaluate Model
│
┌─────┴─────┐
│ │
Good Enough? No
│ │
Yes ▼
│ Improve Model
│ │
│ ▼
│ Tune Parameters
│ │
│ └──────┐
│ │
▼ │
Save Model ◄──────────┘
│
▼
Use / Deploy
Tidak semua proyek harus mengikuti diagram tersebut secara persis.
Namun, diagram tersebut memberikan kerangka berpikir yang sangat berguna ketika memulai proyek Machine Learning.
Step 1 - Get Data Ready
Tahap pertama adalah mempersiapkan data.
Data Machine Learning dapat berasal dari:
- CSV.
- Excel.
- Database.
- API.
- Sensor.
- Aplikasi.
- Dataset publik.
Contoh membaca dataset menggunakan Pandas:
import pandas as pd
df = pd.read_csv("data.csv")
Kemudian kita dapat melihat beberapa baris pertama:
df.head()
Kita juga dapat memeriksa informasi dataset:
df.info()
Dan statistik dasar:
df.describe()
Tujuan tahap ini adalah memahami data sebelum memasukkannya ke dalam model.
Mengapa Data Harus Dipahami Terlebih Dahulu?
Machine Learning bukan sekadar:
Load Dataset
↓
Train Model
Sebelum training, kita perlu memahami:
- Apa arti setiap kolom?
- Kolom mana yang merupakan fitur?
- Kolom mana yang merupakan target?
- Apakah terdapat missing value?
- Apakah terdapat data kategorikal?
- Apakah terdapat outlier?
- Apakah terdapat data yang tidak valid?
- Bagaimana distribusi target?
- Apakah terdapat data leakage?
Workflow yang lebih realistis:
Load Data
↓
Understand Data
↓
Clean Data
↓
Explore Data
↓
Prepare Data
↓
Build Model
Memisahkan Feature dan Target
Dalam supervised learning, dataset biasanya dibagi menjadi:
X = Features
y = Target
Feature
Feature adalah variabel yang digunakan model untuk membuat prediksi.
Misalnya kita ingin memprediksi harga rumah.
Feature dapat berupa:
Luas Rumah
Jumlah Kamar
Jumlah Kamar Mandi
Lokasi
Umur Bangunan
Target
Target adalah nilai yang ingin diprediksi.
Untuk kasus tersebut:
Harga Rumah
Secara sederhana:
Features (X)
│
├── Luas
├── Kamar
├── Kamar Mandi
├── Lokasi
└── Umur
│
▼
Model
│
▼
Target (y)
│
└── Harga
Contoh Memisahkan X dan y
Misalnya DataFrame memiliki:
age
sex
chol
thalach
target
Jika:
target
merupakan target yang ingin diprediksi, kita dapat menulis:
X = df.drop("target", axis=1)
y = df["target"]
Sekarang:
X
├── age
├── sex
├── chol
└── thalach
y
└── target
Step 2 - Membagi Dataset
Setelah menentukan X dan y, kita biasanya membagi dataset menjadi beberapa bagian.
Pembagian sederhana:
Training Set
Testing Set
Scikit-Learn menyediakan:
train_test_split()
Import:
from sklearn.model_selection import train_test_split
Kemudian:
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42
)
Memahami train_test_split()
Kode:
train_test_split(
X,
y,
test_size=0.2,
random_state=42
)
berarti kita meminta Scikit-Learn membagi data menjadi training dan testing.
Dengan:
test_size=0.2
sekitar 20% data digunakan sebagai test set dan sisanya sebagai training set.
Secara sederhana:
100% Dataset
│
├── 80% Training
│
└── 20% Testing
Angka tersebut hanya contoh. Proporsi yang tepat bergantung pada ukuran dan karakteristik dataset.
Mengapa Dataset Harus Dibagi?
Tujuan utamanya adalah menguji apakah model dapat bekerja pada data yang tidak digunakan untuk fitting.
Jika kita melatih dan mengevaluasi model menggunakan data yang sama:
Training Data
↓
Model
↓
Training Data
↓
Evaluation
hasil evaluasi dapat memberikan gambaran yang terlalu optimistis tentang kemampuan model pada data baru.
Dengan train/test split:
Training Data
↓
Model
↓
Testing Data
↓
Evaluation
kita mendapatkan evaluasi yang lebih relevan terhadap data yang tidak digunakan untuk fitting.
random_state
Pada contoh:
random_state=42
digunakan agar pembagian data dapat direproduksi.
Tanpa random_state, hasil pembagian dapat berubah ketika kode dijalankan kembali.
Contoh:
train_test_split(
X,
y,
test_size=0.2,
random_state=42
)
Jika kode dijalankan kembali dengan dataset dan lingkungan yang sama, pembagian acak dapat direproduksi.
Angka 42 bukan angka khusus.
Kita dapat menggunakan nilai integer lain.
Step 3 - Choose a Model

Sumber Gambar: Scikit-learn machine learning map.
Setelah data siap, kita perlu memilih model atau estimator.
Estimator adalah objek Scikit-Learn yang menyediakan mekanisme untuk belajar dari data.
Pemilihan estimator bergantung pada jenis permasalahan.
Secara umum:
Machine Learning Problem
│
┌────┴────┐
│ │
Classification Regression
│ │
▼ ▼
Kategori Angka
Contoh:
Classification
Jika target berupa kategori:
Spam / Not Spam
0 / 1
Lulus / Tidak Lulus
kita dapat menggunakan:
RandomForestClassifier()
Regression
Jika target berupa angka:
Harga
Suhu
Penjualan
Pendapatan
kita dapat menggunakan:
RandomForestRegressor()
Classification vs Regression
Perbedaan sederhana:
| Jenis | Target | Contoh |
|---|---|---|
| Classification | Kategori | Spam / Not Spam |
| Classification | Kategori | Sakit / Tidak Sakit |
| Regression | Angka | Harga Rumah |
| Regression | Angka | Prediksi Penjualan |
Pemilihan algoritma harus dimulai dari memahami jenis permasalahan yang ingin diselesaikan.
Contoh Classification
Misalnya:
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
random_state=42
)
Sekarang kita memiliki estimator:
RandomForestClassifier
yang dapat digunakan untuk permasalahan classification.
Contoh Regression
Untuk regression:
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(
random_state=42
)
Perhatikan bahwa nama estimator berbeda:
RandomForestClassifier
↓
Classification
RandomForestRegressor
↓
Regression
Memilih Model dengan Scikit-Learn
Scikit-Learn memiliki banyak estimator.
Contohnya:
Classification
├── Logistic Regression
├── KNN
├── SVM
├── Decision Tree
├── Random Forest
└── Gradient Boosting
Regression
├── Linear Regression
├── Ridge
├── Lasso
├── Decision Tree
├── Random Forest
└── Gradient Boosting
Tidak semua model harus dipelajari sekaligus.
Mulailah dengan beberapa model yang sesuai dengan jenis permasalahan, kemudian lakukan eksperimen dan evaluasi.
Step 4 - Fit the Model
Setelah memilih model, langkah berikutnya adalah melatihnya.
Gunakan:
model.fit(
X_train,
y_train
)
fit() merupakan salah satu method paling penting dalam API Scikit-Learn.
Secara sederhana:
X_train
+
y_train
↓
model.fit()
↓
Trained Model
Model menggunakan training data untuk mempelajari parameter yang diperlukan algoritma.
Contoh Training
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
random_state=42
)
model.fit(
X_train,
y_train
)
Setelah fit() selesai, model telah dilatih.
Step 5 - Make Predictions
Setelah model dilatih, kita dapat membuat prediksi.
Gunakan:
model.predict(X_test)
Contoh:
y_pred = model.predict(X_test)
Sekarang:
X_test
↓
Trained Model
↓
predict()
↓
y_pred
y_pred berisi hasil prediksi model.
predict() pada Classification
Misalnya target:
0
1
0
1
Model dapat menghasilkan:
y_pred = model.predict(X_test)
dengan hasil seperti:
[0, 1, 1, 1, 0]
Hasil aktual terdapat pada:
y_test
Keduanya kemudian dapat dibandingkan menggunakan evaluation metrics.
predict_proba()
Untuk beberapa model classification, kita juga dapat menggunakan:
model.predict_proba(X_test)
Method ini menghasilkan probabilitas untuk setiap kelas.
Contoh konseptual:
Data 1
Class 0 → 0.20
Class 1 → 0.80
Artinya model memberikan probabilitas relatif 20% untuk class 0 dan 80% untuk class 1.
Kemudian predict() biasanya memilih kelas berdasarkan aturan prediksi estimator tersebut.
Penting untuk memahami bahwa probabilitas yang dihasilkan estimator tidak selalu dapat diartikan sebagai probabilitas yang terkalibrasi dengan sempurna.
Kapan predict_proba() Berguna?
Probabilitas dapat berguna ketika kita membutuhkan lebih dari sekadar label.
Misalnya:
Prediksi:
Fraud
tidak memberikan informasi seberapa kuat model mendukung prediksi tersebut.
Sedangkan:
Fraud Probability = 0.92
memberikan informasi tambahan.
Hal ini dapat berguna dalam sistem yang memiliki threshold keputusan tertentu.
Namun, penggunaan threshold dan interpretasi probabilitas harus disesuaikan dengan masalah dan model yang digunakan.
Step 6 - Evaluate the Model
Setelah membuat prediksi, kita perlu mengevaluasi performa model.
Salah satu cara sederhana adalah menggunakan:
model.score(...)
Contoh classification:
model.score(
X_test,
y_test
)
Namun, arti score() bergantung pada estimator.
Karena itu, jangan menganggap score() selalu berarti accuracy untuk semua model.
Untuk memahami metric secara eksplisit, gunakan evaluation metrics yang sesuai.
Evaluation Metrics untuk Classification
Beberapa metric yang sering digunakan:
Accuracy
Precision
Recall
F1-score
ROC AUC
Confusion Matrix
Accuracy
Mengukur proporsi prediksi yang benar.
Contoh:
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(
y_test,
y_pred
)
Precision
Precision berfokus pada proporsi prediksi positif yang benar-benar positif.
Secara konsep:
Dari semua yang diprediksi positif,
berapa banyak yang benar-benar positif?
Recall
Recall berfokus pada kemampuan model menemukan kasus positif yang sebenarnya ada.
Secara konsep:
Dari semua kasus positif yang sebenarnya,
berapa banyak yang berhasil ditemukan model?
F1-Score
F1-score menggabungkan precision dan recall dalam satu ukuran.
F1-score sering berguna ketika kita ingin mempertimbangkan kedua aspek tersebut secara bersamaan.
Confusion Matrix
Confusion matrix membantu melihat distribusi:
True Positive
True Negative
False Positive
False Negative
Contoh:
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(
y_test,
y_pred
)
Evaluation Metrics untuk Regression
Untuk regression, beberapa metric yang umum digunakan:
R²
MAE
MSE
RMSE
R²
R² memberikan ukuran seberapa baik variasi target dapat dijelaskan oleh model dalam konteks tertentu.