Skip to main content

Modelling: Splitting Data

Modelling merupakan salah satu tahap utama dalam Machine Learning Framework.

Pada tahap sebelumnya kita sudah mempelajari:

  • Problem Definition - menentukan masalah yang ingin diselesaikan.
  • Data - memahami data yang tersedia.
  • Evaluation - menentukan bagaimana keberhasilan model akan diukur.
  • Features - menentukan informasi yang digunakan model.

Setelah semua itu dipahami, kita masuk ke tahap Modelling.

Pertanyaan utama pada tahap ini adalah:

"Model Machine Learning apa yang harus kita gunakan berdasarkan masalah dan data yang kita miliki?"

Modelling bukan hanya tentang memilih algoritma.

Dalam praktiknya, modelling mencakup:

Choosing & Training
↓
Tuning
↓
Model Comparison
↓
Final Model

Tiga Aktivitas Utama Modelling​

Secara umum terdapat tiga aktivitas penting dalam proses modelling:

  1. Choosing and Training a Model
  2. Tuning a Model
  3. Model Comparison

Ketiganya saling berhubungan.

Data
↓
Choose Model
↓
Train Model
↓
Evaluate
↓
Tune Model
↓
Evaluate Again
↓
Compare Models
↓
Choose Final Model

Namun sebelum masuk lebih jauh, kita perlu memahami konsep yang sangat penting dalam modelling, yaitu pembagian dataset menjadi Training Set, Validation Set, dan Test Set.


The Three Sets​

Dalam Machine Learning, kita biasanya tidak menggunakan seluruh data untuk melatih model.

Dataset dibagi menjadi beberapa bagian (Splitting Data):

Dataset
│
┌─────────┼─────────┐
↓ ↓ ↓
Training Validation Test
│ │ │
↓ ↓ ↓
Training Tuning Final
Model Evaluation

Ketiga bagian tersebut memiliki fungsi yang berbeda.

DatasetFungsi
Training SetMelatih model
Validation SetMemilih dan melakukan tuning model
Test SetEvaluasi akhir

Konsep ini sangat penting karena kita ingin mengetahui apakah model mampu bekerja pada unseen data, yaitu data yang belum pernah dilihat sebelumnya.


Mengapa Dataset Harus Dibagi?​

Bayangkan seorang mahasiswa akan mengikuti ujian.

Jika mahasiswa mendapatkan semua soal ujian sebelum ujian berlangsung dan menghafalkan jawabannya, nilai ujian tidak akan menggambarkan kemampuan sebenarnya.

Hal yang sama dapat terjadi pada Machine Learning.

Jika model melihat seluruh data sebelum evaluasi:

Model
↓
Melihat data
↓
Mengingat pola spesifik
↓
Mendapatkan skor tinggi

Model mungkin terlihat sangat bagus, tetapi belum tentu mampu bekerja pada data baru.

Kita ingin model melakukan:

Belajar dari contoh
↓
Memahami pola
↓
Menghadapi data baru
↓
Membuat prediksi

Inilah yang disebut generalization.


1️⃣ Training Set​

Training Set adalah bagian dataset yang digunakan untuk melatih model.

Pada tahap training, model diberikan:

Input
+
Target

Kemudian model berusaha mempelajari hubungan antara keduanya.

Contoh:

Luas Rumah
Jumlah Kamar
Lokasi
↓
Training
↓
Harga Rumah

Model mencoba menemukan pola dari data tersebut.


Analogi Training Set​

Training Set dapat dianalogikan sebagai materi kuliah yang dipelajari mahasiswa selama semester.

Materi Kuliah
↓
Belajar
↓
Latihan
↓
Memahami konsep

Dalam Machine Learning:

Training Data
↓
Training
↓
Model belajar
↓
Menemukan pola

Contoh Training Set​

Misalnya kita memiliki 100 data pasien.

Kita dapat menggunakan:

70 pasien → Training Set

Model mempelajari pola dari 70 pasien tersebut.

Training Data
↓
Machine Learning Algorithm
↓
Learned Model

2️⃣ Validation Set​

Validation Set digunakan untuk membantu kita memilih dan menyempurnakan model.

Validation Set tidak digunakan sebagai data utama untuk melatih parameter model.

Data ini dapat digunakan untuk:

  • membandingkan konfigurasi model,
  • melakukan hyperparameter tuning,
  • memilih model,
  • menentukan threshold,
  • dan melakukan eksperimen.

Analogi Validation Set​

Validation Set dapat dianalogikan sebagai practice exam.

Mahasiswa belajar dari materi:

Materi
↓
Belajar

Kemudian melakukan:

Practice Exam
↓
Mengetahui kelemahan
↓
Belajar kembali

Dalam Machine Learning:

Training Set
↓
Training
↓
Validation Set
↓
Evaluasi
↓
Tuning
↓
Training kembali

Contoh Validation Set​

Jika terdapat 100 pasien:

70 → Training
15 → Validation
15 → Test

Validation digunakan selama proses pengembangan model.

Misalnya:

Model A → Validation Accuracy = 88%
Model B → Validation Accuracy = 92%
Model C → Validation Accuracy = 89%

Model B terlihat lebih baik berdasarkan validation set.

Kita kemudian dapat melakukan tuning terhadap Model B.


3️⃣ Test Set​

Test Set digunakan untuk melakukan evaluasi akhir.

Test Set seharusnya dianggap sebagai data yang belum pernah dilihat model selama proses pengembangan.

Analogi sederhananya adalah:

Test Set = Final Exam

Mahasiswa telah belajar dan melakukan practice exam.

Kemudian diberikan ujian akhir yang benar-benar baru.

Learning
↓
Practice
↓
Final Exam

Dalam Machine Learning:

Training
↓
Validation
↓
Final Test

Mengapa Test Set Harus Dijaga?​

Jika kita terus-menerus melihat hasil test set dan mengubah model berdasarkan hasil tersebut, test set secara tidak langsung menjadi bagian dari proses pengembangan.

Misalnya:

Model A
↓
Test Accuracy = 85%

Perbaiki model

Model B
↓
Test Accuracy = 88%

Perbaiki lagi

Model C
↓
Test Accuracy = 91%

Jika proses tersebut dilakukan berulang kali, kita sebenarnya mulai menyesuaikan model berdasarkan test set.

Akibatnya, test set tidak lagi benar-benar menjadi data yang "belum pernah dilihat".

Karena itu, test set sebaiknya digunakan di tahap akhir.


Pembagian Dataset​

Pembagian yang umum digunakan adalah:

Training → 70–80%
Validation → 10–15%
Test → 10–15%

Namun angka tersebut bukan aturan mutlak.

Pembagian dapat disesuaikan dengan:

  • ukuran dataset,
  • jumlah data,
  • jenis masalah,
  • kebutuhan validasi,
  • dan metode yang digunakan.

Contoh Dataset 100 Data​

Misalnya kita memiliki:

100 pasien

Kita dapat membaginya menjadi:

70 pasien → Training
15 pasien → Validation
15 pasien → Test

Visualisasinya:

100 Data
│
├───────────────┤
│ Training │ 70%
├───────┬───────┤
│Valid. │ Test │
│ 15% │ 15% │
└───────┴───────┘

Yang paling penting bukan angka persisnya, tetapi pemisahan data yang benar.


Data Harus Dipisahkan​

Ketiga dataset harus memiliki fungsi yang berbeda.

Training Set
→ Model belajar

Validation Set
→ Model dikembangkan dan dituning

Test Set
→ Model diuji secara final

Idealnya:

Training ≠ Validation ≠ Test

Tidak boleh terjadi data yang sama muncul pada beberapa subset secara tidak semestinya.


Shuffle Data​

Sebelum membagi dataset, data biasanya perlu diacak atau shuffle.

Mengapa?

Karena urutan data pada dataset asli mungkin memiliki pola tertentu.

Misalnya dataset pasien disusun:

Baris 1–70
→ Pasien dari Rumah Sakit A

Baris 71–100
→ Pasien dari Rumah Sakit B

Jika kita langsung mengambil:

1–70 → Training
71–85 → Validation
86–100 → Test

hasilnya dapat menjadi bias karena setiap subset memiliki karakteristik berbeda.

Dengan melakukan shuffle:

Dataset
↓
Shuffle
↓
Randomized Dataset
↓
Split

kita dapat memperoleh pembagian yang lebih representatif.


Splitting Dataset dengan Scikit-learn​

Scikit-learn menyediakan train_test_split() untuk membagi dataset.

Untuk dua subset:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42
)

Pada contoh tersebut:

80% → Training
20% → Test

Membuat Tiga Dataset​

Jika kita ingin membuat:

70% Training
15% Validation
15% Test

kita dapat melakukan splitting sebanyak dua kali.

Pertama:

X_train, X_temp, y_train, y_temp = train_test_split(
X,
y,
test_size=0.30,
random_state=42
)

Hasil:

70% → Training
30% → Temporary

Kemudian temporary dataset dibagi lagi:

X_val, X_test, y_val, y_test = train_test_split(
X_temp,
y_temp,
test_size=0.50,
random_state=42
)

Hasil akhirnya:

70% → Training
15% → Validation
15% → Test

Visualisasi:

Original Dataset
│
├────────────── 70%
│ ↓
│ Training
│
└── 30%
│
├── 15%
│ ↓
│ Validation
│
└── 15%
↓
Test

Menggunakan Stratify pada Classification​

Untuk classification, kita sering ingin mempertahankan proporsi kelas ketika melakukan splitting.

Misalnya dataset:

90% → Tidak Sakit
10% → Sakit

Kita ingin training, validation, dan test memiliki distribusi kelas yang relatif serupa.

Pada train_test_split(), kita dapat menggunakan parameter stratify.

Contoh:

X_train, X_temp, y_train, y_temp = train_test_split(
X,
y,
test_size=0.30,
random_state=42,
stratify=y
)

Kemudian:

X_val, X_test, y_val, y_test = train_test_split(
X_temp,
y_temp,
test_size=0.50,
random_state=42,
stratify=y_temp
)

stratify membantu mempertahankan proporsi kelas dalam setiap subset.


Choosing and Training a Model​

Setelah dataset dibagi, kita dapat memilih model.

Contoh classification:

Logistic Regression
Decision Tree
Random Forest
KNN
SVM

Contoh regression:

Linear Regression
Ridge
Lasso
Decision Tree Regressor
Random Forest Regressor

Pemilihan model bergantung pada masalah dan karakteristik data.


Contoh Training Model​

Misalnya kita menggunakan Random Forest:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(
random_state=42
)

model.fit(
X_train,
y_train
)

Model belajar menggunakan:

X_train
y_train

Bukan:

X_val
y_val
X_test
y_test

Evaluating pada Validation Set​

Setelah training, model dapat dievaluasi menggunakan validation set.

from sklearn.metrics import accuracy_score

y_val_pred = model.predict(X_val)

accuracy = accuracy_score(
y_val,
y_val_pred
)

print(f"Validation Accuracy: {accuracy:.2%}")

Validation set membantu kita mengetahui apakah konfigurasi model memberikan hasil yang baik.


Tuning a Model​

Model biasanya memiliki hyperparameter.

Contohnya Random Forest memiliki:

RandomForestClassifier(
n_estimators=100,
max_depth=10,
min_samples_split=2
)

Kita dapat mencoba beberapa konfigurasi.

Misalnya:

Model A
n_estimators = 50

Model B
n_estimators = 100

Model C
n_estimators = 200

Kemudian membandingkan performanya pada validation set.


Contoh Tuning Sederhana​

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

for n in [50, 100, 200]:

model = RandomForestClassifier(
n_estimators=n,
random_state=42
)

model.fit(X_train, y_train)

y_val_pred = model.predict(X_val)

score = accuracy_score(
y_val,
y_val_pred
)

print(
f"n_estimators={n}, "
f"accuracy={score:.2%}"
)

Contoh hasil:

n_estimators=50 → accuracy=88%
n_estimators=100 → accuracy=91%
n_estimators=200 → accuracy=92%

Kita dapat memilih konfigurasi berdasarkan hasil validation.


Model Comparison​

Kita tidak harus menggunakan satu algoritma saja.

Misalnya kita mencoba:

Logistic Regression
Random Forest
KNN

Hasil validation:

ModelValidation Accuracy
Logistic Regression87%
Random Forest92%
KNN89%

Berdasarkan validation set:

Random Forest

memberikan hasil terbaik.

Tetapi proses belum selesai.

Kita masih harus melakukan evaluasi final menggunakan test set.


Generalization​

Salah satu tujuan utama pembagian dataset adalah mengukur kemampuan model melakukan generalization.

Generalization adalah kemampuan model untuk menghasilkan prediksi yang baik pada data baru yang belum pernah digunakan selama training.

Secara sederhana:

Training Data
↓
Model belajar pola
↓
Unseen Data
↓
Model membuat prediksi

Model yang baik bukan model yang hanya menghafal training data.

Model yang baik harus mampu mengenali pola yang dapat diterapkan pada data baru.


Memorization​

Memorization terjadi ketika model terlalu menyesuaikan diri dengan data training sehingga tidak mampu bekerja dengan baik pada data baru.

Contoh:

Training Accuracy = 99%
Validation Accuracy = 72%

Ada perbedaan yang sangat besar.

Hal tersebut dapat menjadi indikasi bahwa model mengalami overfitting.

Model sangat baik pada data yang digunakan untuk belajar, tetapi buruk pada data yang belum pernah dilihat.


Generalization vs Memorization​

Perbandingannya:

GeneralizationMemorization
Belajar pola umumMenghafal pola spesifik
Bagus pada data baruBuruk pada data baru
Training dan validation relatif konsistenTraining jauh lebih tinggi
Tujuan utama MLMasalah yang perlu dihindari

Contoh model yang melakukan generalization:

Training Accuracy = 91%
Validation Accuracy = 90%
Test Accuracy = 90%

Performa relatif konsisten.

Contoh indikasi overfitting:

Training Accuracy = 99%
Validation Accuracy = 75%
Test Accuracy = 73%

Model kemungkinan terlalu menyesuaikan diri terhadap training data.


Data Leakage​

Salah satu masalah serius dalam Machine Learning adalah data leakage.

Data leakage terjadi ketika informasi yang seharusnya tidak tersedia pada suatu tahap proses Machine Learning masuk ke dalam proses training atau pengembangan model.

Salah satu bentuk yang penting adalah ketika test data digunakan dalam proses pengembangan model.

Contoh yang salah:

Training
↓
Test
↓
Lihat hasil
↓
Ubah model
↓
Test lagi
↓
Ubah model lagi

Jika dilakukan terus-menerus, test set tidak lagi benar-benar menjadi data yang belum diketahui.


Contoh Data Leakage​

Misalnya kita memiliki:

100 data

Kemudian:

70 → Training
15 → Validation
15 → Test

Proses yang benar:

Training
↓
Validation
↓
Tuning
↓
Model Final
↓
Test

Proses yang tidak baik:

Training
↓
Test
↓
Model diubah
↓
Test
↓
Model diubah
↓
Test

Test set seharusnya disimpan untuk evaluasi final.


Test Set sebagai Final Exam​

Cara mudah mengingat fungsi ketiga dataset:

Training Set
→ Materi belajar

Validation Set
→ Practice exam

Test Set
→ Final exam

Atau:

TRAIN
→ Belajar

VALIDATION
→ Memperbaiki

TEST
→ Membuktikan

Konsep ini sangat penting dalam Machine Learning.


Contoh Lengkap Three Sets​

Misalnya kita memiliki dataset:

100 pasien

Setelah dilakukan shuffle:

70 pasien
→ Training

15 pasien
→ Validation

15 pasien
→ Test

Kemudian:

Training
↓
Model belajar
↓
Validation
↓
Tuning
↓
Model final
↓
Test
↓
Final Performance

Ketiga dataset tetap terpisah.


Workflow Modelling Lengkap​

Jika digabungkan dengan proses modelling, workflow dapat menjadi:

Dataset
↓
Shuffle
↓
Train / Validation / Test
↓
Choose Model
↓
Train
↓
Validation
↓
Tune
↓
Compare
↓
Final Model
↓
Test
↓
Final Evaluation

Jika hasil akhir belum memenuhi target:

Final Evaluation
↓
Target belum tercapai
↓
Experimentation
↓
Feature / Model / Hyperparameter
↓
Training kembali
↓
Validation kembali
↓
Final Test

Contoh Workflow dengan Python​

Berikut contoh sederhana classification menggunakan Scikit-learn.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Load dataset
data = load_iris()

X = data.data
y = data.target

# Split training dan temporary
X_train, X_temp, y_train, y_temp = train_test_split(
X,
y,
test_size=0.30,
random_state=42,
stratify=y
)

# Split validation dan test
X_val, X_test, y_val, y_test = train_test_split(
X_temp,
y_temp,
test_size=0.50,
random_state=42,
stratify=y_temp
)

# Create model
model = RandomForestClassifier(
n_estimators=100,
random_state=42
)

# Training
model.fit(
X_train,
y_train
)

# Validation
y_val_pred = model.predict(X_val)

val_accuracy = accuracy_score(
y_val,
y_val_pred
)

print(
f"Validation Accuracy: "
f"{val_accuracy:.2%}"
)

# Final test
y_test_pred = model.predict(X_test)

test_accuracy = accuracy_score(
y_test,
y_test_pred
)

print(
f"Test Accuracy: "
f"{test_accuracy:.2%}"
)

Perhatikan bahwa model dilatih menggunakan:

X_train
y_train

Validation digunakan untuk pengembangan model:

X_val
y_val

Sedangkan test digunakan untuk evaluasi akhir:

X_test
y_test

Kapan Validation Set Tidak Digunakan Secara Eksplisit?​

Tidak semua proyek harus selalu memiliki file atau subset validation yang terpisah.

Pada dataset tertentu, terutama ketika jumlah data terbatas, kita dapat menggunakan cross-validation.

Konsepnya:

Dataset
↓
Beberapa pembagian
↓
Training + Validation
↓
Evaluasi berkali-kali
↓
Rata-rata performa

Dengan cross-validation, kita dapat menggunakan data secara lebih efisien untuk proses pengembangan model.

Namun konsep dasarnya tetap sama:

Data yang digunakan untuk memilih atau tuning model harus dipisahkan dari data yang digunakan untuk evaluasi final.


Mengapa Tidak Menggunakan Test Set untuk Tuning?​

Misalnya kita mencoba beberapa model:

Model A → Test = 85%
Model B → Test = 88%
Model C → Test = 91%
Model D → Test = 93%

Jika kita memilih Model D karena melihat hasil test, kemudian terus mencoba model lain berdasarkan test score, maka test set mulai memengaruhi keputusan kita.

Akibatnya estimasi performa final dapat menjadi terlalu optimistis.

Lebih baik:

Training
↓
Validation
↓
Model Selection
↓
Hyperparameter Tuning
↓
Final Model
↓
Test sekali

Prinsip Penting Three Sets​

Ada beberapa prinsip yang perlu selalu diingat.

Training Set untuk Belajar​

Training
→ Model belajar parameter dari data.

Validation Set untuk Pengembangan​

Validation
→ Membantu memilih model dan konfigurasi.

Test Set untuk Evaluasi Akhir​

Test
→ Mengukur performa final pada data yang belum digunakan dalam pengembangan.

Jangan Mencampurkan Data​

Hindari situasi seperti:

Training ← Test Data
Validation ← Test Data
Test ← Training Data

Ketiga subset harus memiliki fungsi yang jelas.


Checklist Modelling​

Sebelum melanjutkan ke tahap berikutnya, pastikan:

□ Dataset sudah dipahami
□ Data sudah diacak jika diperlukan
□ Training set sudah dipisahkan
□ Validation set sudah dipisahkan jika diperlukan
□ Test set sudah dipisahkan
□ Test set tidak digunakan untuk tuning
□ Model sudah dipilih berdasarkan masalah
□ Model sudah dilatih menggunakan training set
□ Validation digunakan untuk pengembangan
□ Beberapa model dapat dibandingkan
□ Hyperparameter dapat dituning
□ Final model diuji menggunakan test set

Ringkasan​

Modelling adalah tahap ketika kita mulai memilih, melatih, menyesuaikan, dan membandingkan model Machine Learning.

Tiga aktivitas utamanya adalah:

1. Choosing and Training a Model
2. Tuning a Model
3. Model Comparison

Salah satu konsep terpenting dalam modelling adalah pembagian data menjadi tiga bagian:

Dataset
│
├── Training Set
│ → Belajar
│
├── Validation Set
│ → Tuning dan pengembangan
│
└── Test Set
→ Evaluasi akhir

Pembagian umum:

Training → 70–80%
Validation → 10–15%
Test → 10–15%

Namun proporsi tersebut dapat disesuaikan dengan kondisi dataset.

Tujuan utama pembagian tersebut adalah agar model mampu melakukan generalization, bukan sekadar melakukan memorization.

Generalization
→ Belajar pola yang dapat digunakan pada data baru.

Memorization
→ Terlalu menyesuaikan diri dengan data yang sudah dilihat.

Kita juga harus berhati-hati terhadap data leakage, terutama ketika test set digunakan selama proses pengembangan model.

Cara mudah mengingat:

Training = belajar

Validation = latihan dan memperbaiki

Test = ujian akhir

Dengan memahami konsep ini, kita memiliki fondasi penting untuk masuk ke pembahasan berikutnya mengenai pemilihan model, baseline model, training model, dan bagaimana membandingkan beberapa algoritma Machine Learning secara sistematis.