/* */
MEDIA PENDIDIKAN dan PEMBELAJARAN Ilmu Mantiq (Logika): Kaidah Berfikir yang Memelihara Akal, agar tidak terjadi Kerancuan dalam Berfikir.

Wednesday, February 26, 2025

Data Splitting

1. Apa Itu Data Splitting?

Data Splitting adalah proses membagi dataset menjadi beberapa bagian yang digunakan untuk melatih, menguji, dan mengevaluasi model machine learning. Tujuan utama dari data splitting adalah menghindari overfitting dan memastikan bahwa model yang dilatih dapat bekerja dengan baik pada data baru yang belum pernah dilihat sebelumnya.

Biasanya, dataset dibagi menjadi dua atau tiga bagian utama:

  1. Training Set (Data Latih) Digunakan untuk melatih model.
  2. Validation Set (Data Validasi) (Opsional) Digunakan untuk menyetel parameter model sebelum pengujian.
  3. Test Set (Data Uji) Digunakan untuk mengevaluasi performa model pada data yang belum pernah dilihat.

 

2. Mengapa Data Splitting Penting?

       Menghindari Overfitting → Model yang dilatih tanpa data uji bisa terlalu spesifik pada data latih dan gagal bekerja dengan baik pada data baru.

       Evaluasi Performa Model yang Akurat → Dengan memisahkan data uji, kita dapat mengukur seberapa baik model menangani data yang belum pernah dilihat.

       Memastikan Model Dapat Diterapkan ke Dunia Nyata → Model harus mampu bekerja pada data baru, bukan hanya data yang sudah dipelajari selama training.

 

3. Cara Melakukan Data Splitting

a. Train-Test Split (Pembagian 80-20 atau 70-30)

Metode paling dasar adalah membagi dataset menjadi training dan testing.

  • Training Set → Biasanya 70-80% dari dataset, digunakan untuk melatih model.
  • Test Set → Sisanya 20-30%, digunakan untuk mengukur kinerja model setelah pelatihan.

Contoh Implementasi dalam Python:

from sklearn.model_selection import train_test_split

 

# Contoh data

X = [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]] # Fitur

y = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1] # Label

 

# Membagi data menjadi 80% training dan 20% testing

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

 

print("Training Data:", X_train)

print("Testing Data:", X_test)

Keuntungan: Mudah diterapkan dan cepat.
Kekurangan: Pembagian ini mungkin menyebabkan variasi data yang kurang optimal, terutama jika dataset kecil.

 

b. Train-Validation-Test Split (Pembagian 60-20-20 atau 70-15-15)

Metode ini lebih baik dibandingkan train-test split, karena menambahkan validation set untuk menyetel parameter model sebelum diuji pada test set.

  • Training Set (60-70%) → Untuk melatih model.
  • Validation Set (15-20%) → Untuk menyetel parameter model sebelum diuji pada test set.
  • Test Set (15-20%) → Untuk evaluasi akhir model.

Contoh Implementasi dalam Python:

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

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

 

print("Training Data:", len(X_train))

print("Validation Data:", len(X_val))

print("Testing Data:", len(X_test))

Keuntungan: Lebih akurat karena model diuji pada validation set sebelum diuji di test set.
Kekurangan: Membutuhkan dataset yang lebih besar agar tidak kehilangan terlalu banyak data untuk training.

 

c. K-Fold Cross-Validation (Pembagian Data Secara Berulang)

K-Fold Cross-Validation adalah teknik pembagian data di mana dataset dibagi menjadi K bagian (folds), lalu model dilatih dan diuji beberapa kali dengan kombinasi data yang berbeda.

  • Misalnya K=5, maka dataset dibagi menjadi 5 bagian.
  • Model dilatih menggunakan 4 bagian dan diuji pada 1 bagian.
  • Proses diulang 5 kali, dengan setiap bagian bergantian menjadi test set.
  • Hasil akhir adalah rata-rata dari semua evaluasi.

Contoh Implementasi dalam Python:

from sklearn.model_selection import KFold

import numpy as np

 

X = np.array(range(1, 11))

y = np.array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])

 

kf = KFold(n_splits=5, shuffle=True, random_state=42)

 

for train_index, test_index in kf.split(X):

print("Train:", X[train_index], "Test:", X[test_index])

Keuntungan: Semua data digunakan sebagai training dan testing, sehingga hasil lebih akurat.
Kekurangan: Proses lebih lambat karena model dilatih dan diuji beberapa kali.

 

4. Kesalahan Umum dalam Data Splitting & Cara Menghindarinya

4.1. Melakukan Oversampling Sebelum Membagi Data

  • Masalah: Jika teknik oversampling (SMOTE, ADASYN, dll.) dilakukan sebelum data dibagi, maka sampel sintetis bisa masuk ke dalam test set, menyebabkan data leakage dan hasil evaluasi yang tidak realistis.
  • Solusi: Lakukan oversampling hanya pada training set setelah pembagian data.

Salah:

X_resampled, y_resampled = SMOTE().fit_resample(X, y)

X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2)

Benar:

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

X_train_resampled, y_train_resampled = SMOTE().fit_resample(X_train, y_train)

 

4.2. Data Tidak Teracak dengan Baik (No Shuffling)

  • Masalah: Jika dataset memiliki pola tertentu (misalnya semua data kelas "A" berada di awal, semua data kelas "B" di akhir), maka pembagian tanpa shuffling bisa menyebabkan distribusi yang tidak merata.
  • Solusi: Gunakan shuffle=True dalam train_test_split.

Contoh Benar:

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

 

4.3. Menggunakan Data Testing untuk Hyperparameter Tuning

  • Masalah: Jika kita menggunakan test set untuk menyetel parameter model, maka kita secara tidak langsung membuat model menghafal test set, yang menyebabkan overfitting.
  • Solusi: Gunakan validation set untuk tuning, bukan test set.

 

5. Kesimpulan

5.1. Data Splitting sangat penting dalam machine learning untuk memastikan model dapat bekerja dengan baik pada data baru.
5.2. Gunakan metode yang sesuai dengan ukuran dataset:

  • Train-Test Split (80-20) untuk kasus sederhana.
  • Train-Validation-Test Split (60-20-20) untuk tuning parameter.
  • K-Fold Cross-Validation jika ingin hasil lebih akurat.

Hindari kesalahan umum, seperti oversampling sebelum splitting, tidak melakukan shuffling, atau menggunakan test set untuk tuning.

 

 

 

/*
*/