Belajar AI #4: Data & Fitur — Bahan Bakar Machine Learning

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

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses