Episode ini saya tulis agak pelan-pelan, karena topiknya ternyata yang paling menentukan berhasil-tidaknya proyek machine learning: data dan fitur. Semua tutorial bikin seolah bagian serunya itu memilih algoritma. Pengalaman membaca-baca praktisi (dan sedikit eksperimen sendiri) bilang lain: 80 persen pekerjaan aslinya ada di sini.
Garbage in, garbage out
Prinsip paling tua di dunia data tetap berlaku: model hanya sebagus data yang diberikan. Analogi programmer yang nempel buat saya: model itu seperti fungsi. Kalau inputnya kacau, output pasti kacau — tidak peduli seberapa elegan implementasinya. Tidak ada algoritma secanggih apa pun yang bisa menyelamatkan dataset yang salah atau bias.
Struktur data tabular yang biasa dipakai itu seperti tabel database: satu baris = satu contoh (satu email, satu transaksi), satu kolom = satu atribut. Kolom-kolom inilah yang disebut fitur (feature), dan kolom target yang mau diprediksi disebut label.
Fitur: informasi yang kita kasih ke model
Fitur adalah representasi numerik dari realitas yang relevan dengan masalah. Contoh untuk prediksi harga rumah: luas tanah, jumlah kamar, jarak ke stasiun, tahun dibangun. Model tidak pernah “melihat” rumah — dia cuma melihat angka-angka ini. Jadi kualitas fitur menentukan langit-langit performa; algoritma cuma menentukan seberapa dekat kita bisa mendekati langit-langit itu.
Proses membuat fitur dari data mentah disebut feature engineering, dan ini lebih seni daripada sains. Contoh klasik dari dataset Titanic: dari kolom nama yang terlihat tidak berguna, bisa diekstrak gelar (Mr, Mrs, Master) yang ternyata sangat prediktif. Data mentah jarang langsung siap pakai.
Pembersihan: bagian tidak glamor tapi wajib
- Missing values — sel kosong. Pilihannya: buang barisnya, isi dengan rata-rata/median, atau jadikan “kosong” sebagai sinyal tersendiri.
- Duplikat — baris ganda bikin model overconfident pada contoh itu.
- Outlier — nilai ekstrem yang bisa menggeser model secara tidak wajar. Kadang error input, kadang justru kasus paling menarik.
- Inkonsistensi format — “Jakarta” vs “JKT” vs “jakarta ” (dengan spasi). Klasik.
Satu hal yang saya pelajari cara susah: data leakage. Ini terjadi kalau informasi dari “masa depan” (atau dari label itu sendiri) bocor ke fitur. Contoh lucu tapi nyata yang sering dikutip: model “memprediksi pasien sakit” yang ternyata cuma belajar bahwa baris dengan bobot berat badan tinggi adalah pasien — karena kolom berat badan bayi baru lahir terisi nol. Akurasi latih bagus, produksi hancur.
Scaling: kenapa angka harus “sejajar”
Fitur penghasilan dalam rupiah (jutaan) dan umur (puluhan) punya skala yang timpang. Beberapa algoritma — terutama yang berbasis jarak seperti KNN, atau yang berbasis gradient descent — akan terdistorsi oleh fitur berskala besar. Solusinya standarisasi: ubah tiap fitur supaya punya rata-rata 0 dan deviasi standar 1.
Karena episode ini soal bahan bakar, sekalian saya catat pipeline kecil yang saya pakai untuk merapikan data dengan scikit-learn:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
df = pd.read_csv("rumah.csv")
df = df.drop_duplicates().dropna(subset=["harga"])
X = df[["luas_m2", "kamar", "umur_bangunan"]]
y = df["harga"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # belajar dari train saja
X_test_scaled = scaler.transform(X_test) # terapkan ke test
Perhatikan detail penting: fit_transform hanya di data latih, lalu transform saja di data uji. Kalau scaler ikut “belajar” dari data uji, itu juga bentuk kebocoran data. Kesalahan pemula yang katanya sangat umum — dan sekarang saya tahu kenapa.
Catatan untuk diri sendiri
Mental model yang saya pegang mulai episode ini: kerjakan datanya sampai benar dulu, baru sentuh algoritma. Checklist pribadi sebelum training: cek missing values, cek duplikat, cek distribusi target, pisahkan train/test lebih awal, dan tanya sendiri “apakah ada informasi masa depan yang bocor ke fitur?” Lima pertanyaan ini sudah menyelamatkan saya dari minimal satu eksperimen yang bodoh.
Sumber
- https://en.wikipedia.org/wiki/Feature_engineering
- https://en.wikipedia.org/wiki/Data_cleansing
- https://en.wikipedia.org/wiki/Feature_scaling
- https://scikit-learn.org/stable/modules/preprocessing.html
- https://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/
Komentar Terbaru