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.