Sessi 7: Konsep Dasar Machine Learning
Fokus: Memahami Perbedaan Regresi dan Klasifikasi, Train-Test Split, serta Isu Overfitting dan Underfitting.
A. Paradigma Pembelajaran Mesin (*Machine Learning Paradigms*)
Dalam konteks Data Sains, sebagian besar masalah terfokus pada dua tipe pembelajaran terawasi (*Supervised Learning*), di mana kita melatih model menggunakan data berlabel.
1. Klasifikasi (*Classification*)
Tujuan: Memprediksi variabel target yang bersifat diskrit atau kategorikal (label).
- Contoh Fisika/Matematika: Mengklasifikasikan spesies bunga Iris (Setosa/Versicolor), memprediksi apakah suatu data sensor anomali (Ya/Tidak), atau mengidentifikasi jenis galaksi.
- Output Model: Kelas (e.g., 0 atau 1; A atau B).
2. Regresi (*Regression*)
Tujuan: Memprediksi variabel target yang bersifat kontinu atau numerik (nilai).
- Contoh Fisika/Matematika: Memprediksi suhu permukaan, memprediksi harga saham, atau memperkirakan masa hidup baterai (nilai waktu kontinu).
- Output Model: Nilai numerik (e.g., 15.7 °C; 1.05 V).
B. Train-Test Split: Prinsip Validasi Ilmiah
Dalam ilmu pengetahuan, validitas hasil harus selalu diuji pada data yang belum pernah dilihat sebelumnya. Dalam Machine Learning, ini dicapai melalui Train-Test Split**.
1. Pembagian Data
- Data Training: Subset data (biasanya 70% hingga 80%) yang digunakan untuk *melatih* model, memungkinkan algoritma belajar pola.
- Data Testing: Subset data yang terpisah (biasanya 20% hingga 30%) yang digunakan untuk *mengevaluasi* performa model akhir. Data ini tidak boleh disentuh selama pelatihan.
2. Keuntungan Matematis
Pemisahan ini memastikan bahwa metrik evaluasi (seperti R2 atau Akurasi) mencerminkan seberapa baik model dapat menggeneralisasi ke data dunia nyata, bukan hanya menghafal data pelatihan.
Contoh Pembagian:
Jika kita memiliki N = 1000 observasi dan menggunakan rasio 80/20, maka data pelatihan adalah Ntrain = 800 dan data pengujian adalah Ntest = 200.
C. Tantangan Pemodelan: Overfitting dan Underfitting
Dua masalah fundamental yang harus dihindari untuk mencapai model yang stabil dan dapat diandalkan:
1. Overfitting (Terlalu Cocok)
Terjadi ketika model terlalu kompleks dan menghafal *noise* atau detail spesifik dari Data Training.
- Ciri-ciri: Performa (Akurasi/R2) sangat tinggi pada Data Training, tetapi sangat rendah pada Data Testing. Model tidak dapat menggeneralisasi.
- Analogi Matematis: Mencocokkan kurva polinomial derajat tinggi pada sejumlah kecil titik data eksperimental, yang menghasilkan kurva yang berosilasi liar di luar titik-titik tersebut.
2. Underfitting (Kurang Cocok)
Terjadi ketika model terlalu sederhana untuk menangkap pola yang sebenarnya dalam data.
- Ciri-ciri: Performa rendah baik pada Data Training maupun Data Testing. Model tidak mampu belajar pola yang ada.
- Analogi Matematis: Mencoba mencocokkan garis linear pada data yang sebenarnya memiliki hubungan eksponensial.
D. Studi Kasus Praktik: Train-Test Split (Dataset Breast Cancer UCI)
Kita akan menggunakan dataset Breast Cancer (Klasifikasi) yang memerlukan prediksi biner (jinak / ganas) untuk mempraktikkan pembagian data, menyiapkan langkah untuk pemodelan di sesi berikutnya.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler # Penting karena data akan diskalakan
# 1. Asumsi Data dimuat dan dibersihkan (data fiktif)
data = {
'Radius_Mean': [17.99, 20.57, 19.69, 11.42, 12.43, 14.50, 13.00, 15.00],
'Texture_Mean': [10.38, 17.77, 21.25, 20.38, 15.70, 18.00, 19.50, 16.00],
'Diagnosis': [1, 1, 1, 0, 0, 1, 0, 1] # 1: Ganas (Malignant), 0: Jinak (Benign)
}
df = pd.DataFrame(data)
# Definisikan Fitur (X) dan Target (y)
X = df[['Radius_Mean', 'Texture_Mean']]
y = df['Diagnosis']
# Terapkan Feature Scaling pada X (Standar untuk data kedokteran/ilmiah)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 2. Implementasi Train-Test Split (Rasio 75% Training, 25% Testing)
# random_state=42 memastikan bahwa pembagian data selalu sama (reproducible)
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.25, random_state=42, stratify=y
)
# 3. Verifikasi Ukuran Data
print(f"Total Sampel (N): {len(df)}")
print("\n--- Verifikasi Pembagian Data ---")
print(f"Ukuran X Training: {X_train.shape}")
print(f"Ukuran X Testing: {X_test.shape}")
print(f"Ukuran y Training: {y_train.shape}")
print(f"Ukuran y Testing: {y_test.shape}")
# Verifikasi Stratifikasi (Penting untuk Klasifikasi)
print("\nDistribusi Kelas (Target) di Training Set:")
print(y_train.value_counts(normalize=True).round(2))
print("Distribusi Kelas (Target) di Testing Set:")
print(y_test.value_counts(normalize=True).round(2))
# Stratify memastikan rasio kelas (0 dan 1) hampir sama di Train dan Test.