Cara Normalisasi Data untuk Machine Learning
Model k-nearest neighbors yang kamu latih bisa tiba-tiba akurat setelah fitur penghasilan tahunan dan usia disamakan skalanya. Sebaliknya, regresi linear bisa memberi bobot berlebihan pada fitur dengan rentang angka paling besar. Cara normalisasi data untuk machine learning menentukan apakah model membaca pola atau justru terdistorsi oleh satuan fitur.
Normalisasi mengubah rentang nilai setiap fitur agar sebanding. Ada dua pendekatan yang paling sering dipakai, dan keduanya tidak bisa saling menggantikan begitu saja.
Kapan Normalisasi Dibutuhkan
Fitur dengan satuan berbeda menimbulkan masalah saat model menghitung jarak atau gradien. Bayangkan dataset properti berisi luas tanah dalam meter persegi (50 sampai 500) dan jumlah kamar (1 sampai 5). Tanpa penyesuaian, luas tanah mendominasi perhitungan jarak.
Algoritma yang sensitif terhadap skala meliputi k-nearest neighbors, support vector machine, k-means, dan jaringan saraf. Model berbasis pohon seperti decision tree dan random forest memilih ambang batas per fitur, jadi skala tidak banyak berpengaruh. Regresi linear dengan regularisasi juga terpengaruh karena penalti dikenakan pada koefisien yang besarnya bergantung pada skala input.
Normalisasi bukan langkah wajib untuk semua kasus. Jika semua fiturmu sudah dalam satuan yang sama, misalnya seluruhnya persentase, kamu bisa melewatinya tanpa kehilangan banyak.
MinMax Scaler dan Standard Scaler
MinMaxScaler memetakan setiap nilai ke rentang 0 sampai 1 dengan rumus (x – min) / (max – min). Cara ini berguna saat kamu butuh rentang yang pasti, misalnya untuk input gambar yang nilai pikselnya memang 0 sampai 255.
StandardScaler mengubah data sehingga rata-rata menjadi 0 dan simpangan baku menjadi 1. Hasilnya tidak terbatas pada rentang tertentu. Scaler ini lebih tahan terhadap nilai ekstrem dibandingkan MinMax, meski keduanya tetap terpengaruh outlier.
Pilih MinMax jika distribusi data tidak normal dan kamu tahu batas atas bawahnya. Pilih Standard jika data mendekati distribusi normal atau kamu memakai model yang mengasumsikan input terstandardisasi, seperti regresi dengan regularisasi.
Contoh dengan scikit-learn
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.model_selection import train_test_split
import numpy as np
X = np.array([[25, 3000000],
[32, 4500000],
[47, 8000000],
[51, 12000000]])
y = np.array([0, 1, 1, 0])
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
print(X_train_scaled)
print(X_test_scaled)
Perhatikan bahwa fit_transform hanya dipanggil pada data latih. Data uji memakai transform saja. Langkah ini mencegah kebocoran informasi dari data uji ke proses pelatihan, kesalahan yang sering muncul saat orang menormalisasi seluruh dataset sebelum memisahkannya.
Langkah Normalisasi yang Benar
- Pisahkan fitur dan target, lalu bagi data menjadi set latih dan uji.
- Pilih scaler sesuai distribusi data dan jenis model.
- Latih scaler pada data latih dengan
fitataufit_transform. - Terapkan parameter scaler yang sama ke data uji dengan
transform. - Simpan objek scaler jika model akan dipakai lagi di kemudian hari.
Pada praktiknya, normalisasi paling rapi dikerjakan di dalam pipeline. Kamu bisa menggabungkan scaler dan model dalam satu objek Pipeline, sehingga cross-validation otomatis melatih ulang scaler di setiap lipatan. Cara ini menghindari pengulangan kode dan menutup celah kebocoran data.
Jika data mengandung nilai kosong, tangani dulu sebelum normalisasi. Panduan cara menangani data hilang sebelum melatih model membahas pilihan imputasi yang cocok dipadukan dengan scaler.
Normalisasi di Dalam Pipeline
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
pipeline = Pipeline([
('scaler', StandardScaler()),
('model', LogisticRegression())
])
scores = cross_val_score(pipeline, X, y, cv=2)
print(scores.mean())
Dengan pipeline, setiap lipatan cross-validation melatih scaler hanya dari data latih lipatan tersebut. Hasil evaluasi jadi lebih jujur dibandingkan menormalisasi seluruh data di awal.
Kesalahan yang Sering Terjadi
- Menormalisasi seluruh dataset sebelum pembagian data latih dan uji.
- Memanggil
fit_transformpada data uji. Gunakantransform. - Menerapkan MinMaxScaler pada data dengan outlier berat tanpa memeriksanya lebih dulu.
- Lupa menyimpan scaler, sehingga data baru di produksi diproses dengan parameter berbeda.
- Menormalisasi fitur target tanpa alasan. Umumnya hanya fitur input yang perlu disesuaikan.
Outlier perlu penanganan tersendiri. MinMaxScaler memakai nilai minimum dan maksimum, jadi satu nilai ekstrem bisa memampatkan seluruh data lain ke rentang sempit. Deteksi outlier lebih dulu atau pakai scaler yang lebih tahan, seperti RobustScaler, yang memakai median dan rentang antarkuartil.
Memeriksa Hasil Normalisasi
Setelah transformasi, periksa rata-rata dan simpangan baku tiap fitur pada data latih. Untuk StandardScaler, nilainya harus mendekati 0 dan 1. Untuk MinMaxScaler, nilai minimum dan maksimum harus 0 dan 1. Pemeriksaan ini cepat dan sering menangkap kesalahan pemilihan kolom.
Jika modelmu berupa klasifikasi, lihat juga performanya lewat metrik yang sesuai. Ulasan cara membaca confusion matrix untuk evaluasi model membantu menafsirkan kesalahan prediksi setelah preprocessing diperbaiki.
Normalisasi biasanya tidak mengubah urutan peringkat fitur, tapi bisa mengubah koefisien model secara drastis. Bandingkan performa sebelum dan sesudah untuk memastikan langkah ini memang memberi perbaikan pada kasusmu, bukan sekadar mengikuti kebiasaan.
Ringkasan
Normalisasi menempatkan semua fitur pada skala yang sebanding agar model berbasis jarak dan gradien tidak berat sebelah. Latih scaler hanya pada data latih, terapkan ke data uji, dan bungkus semuanya dalam pipeline. Pilih MinMax untuk rentang tetap, Standard untuk data mendekati normal, dan periksa hasilnya sebelum melangkah ke evaluasi model.
Pertanyaan yang Sering Diajukan
Apakah semua model machine learning butuh normalisasi?
Tidak. Model berbasis pohon seperti decision tree, random forest, dan gradient boosting umumnya tidak terpengaruh skala fitur. Normalisasi lebih penting untuk k-nearest neighbors, SVM, k-means, regresi dengan regularisasi, dan jaringan saraf.
Apa bedanya normalisasi dan standardisasi?
Normalisasi biasanya merujuk pada pengubahan rentang nilai ke 0 sampai 1, seperti yang dilakukan MinMaxScaler. Standardisasi mengubah data agar rata-rata 0 dan simpangan baku 1, seperti StandardScaler. Keduanya sama-sama menyesuaikan skala, tetapi rumus dan hasilnya berbeda.
Bagaimana menangani data baru setelah model dilatih?
Simpan objek scaler yang sudah dilatih, misalnya dengan joblib atau pickle. Saat data baru masuk, panggil transform memakai scaler tersebut, jangan melatih ulang dari data baru. Pipeline yang disimpan utuh akan menangani langkah ini secara otomatis.

