Scaling

StandardScaler, MinMaxScaler, dan RobustScaler untuk penyetaraan skala fitur.

Daftar isi

Data tabular jarang hadir dengan skala yang seragam. Satu fitur dapat bernilai dalam rentang 0 sampai 1, sedangkan fitur lain bergerak hingga ribuan. Topik ini membahas tiga scaler, yaitu transformer praproses yang menyetarakan skala fitur numerik: StandardScaler, MinMaxScaler, dan RobustScaler. Setelah membacanya, ketiga scaler dapat diterapkan pada data nyata, hasil transformasinya dapat dibaca, dan pemilihannya dapat dijustifikasi berdasarkan sifat data.

Tiga cara menyetarakan skala#

Scaling adalah penyetaraan skala fitur numerik, yaitu mengubah nilai setiap fitur agar berada pada skala yang sebanding tanpa menghilangkan informasi urutannya. Pekerjaan ini dilakukan oleh transformer, yakni objek yang mempelajari parameter transformasi dari data melalui metode fit, kemudian menerapkannya melalui metode transform. Ketiga scaler pada topik ini bekerja kolom demi kolom, sehingga setiap fitur numerik ditransformasi secara terpisah dari fitur lainnya.

StandardScaler menghasilkan data dengan rata-rata nol dan simpangan baku satu. Simpangan baku (standard deviation) adalah ukuran penyebaran nilai di sekitar rata-ratanya. Transformasi StandardScaler ditulis:

z=x−μσ z = \frac{x - \mu}{\sigma}

dengan μ \mu adalah rata-rata fitur dan σ \sigma adalah simpangan bakunya, keduanya dihitung saat fit. MinMaxScaler menekan seluruh nilai ke dalam rentang tetap, secara bawaan dari 0 sampai 1:

z=x−xmin⁡xmax⁡−xmin⁡ z = \frac{x - x_{\min}}{x_{\max} - x_{\min}}

RobustScaler memusatkan data pada median dan membaginya dengan rentang antarkuartil (interquartile range, IQR), yaitu selisih kuartil ketiga dan kuartil pertama:

z=x−medianIQR z = \frac{x - \text{median}}{\text{IQR}}

Karena parameter yang dipelajari ketiganya berbeda, hasil transformasi pada data yang sama juga berbeda. Perbedaan itu bukan sekadar perbedaan angka, melainkan menentukan bagaimana pencilan dan sebaran mayoritas data diperlakukan.

Penerapan ketiganya pada data wine#

Dataset wine bawaan scikit-learn berisi 178 sampel dengan 13 fitur kimia yang skalanya timpang. Fitur proline bergerak dari 278 hingga 1680, sedangkan banyak fitur lain bernilai di bawah 10, sehingga dataset ini cocok untuk memperlihatkan perbedaan antarscaler. Berkas berikut memuat program utuh yang membandingkan ketiga scaler pada fitur proline.

python tiga-scaler.py
import numpy as np
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

data = load_wine()
X = data.data
nama_fitur = data.feature_names
kolom = X[:, [nama_fitur.index("proline")]]

sc_std = StandardScaler().fit(kolom)
sc_min = MinMaxScaler().fit(kolom)
sc_rob = RobustScaler().fit(kolom)

print("Rentang fitur proline sebelum transformasi")
print("  nilai terkecil :", round(kolom.min(), 1))
print("  nilai terbesar :", round(kolom.max(), 1))
print("Tiga nilai proline setelah StandardScaler")
print(np.round(sc_std.transform(kolom)[:3].ravel(), 3))
print("Tiga nilai proline setelah MinMaxScaler")
print(np.round(sc_min.transform(kolom)[:3].ravel(), 3))
print("Tiga nilai proline setelah RobustScaler")
print(np.round(sc_rob.transform(kolom)[:3].ravel(), 3))
text Keluaran
Rentang fitur proline sebelum transformasi
  nilai terkecil : 278.0
  nilai terbesar : 1680.0
Tiga nilai proline setelah StandardScaler
[1.013 0.965 1.395]
Tiga nilai proline setelah MinMaxScaler
[0.561 0.551 0.647]
Tiga nilai proline setelah RobustScaler
[0.808 0.777 1.056]

Ketiga baris keluaran memuat nilai untuk tiga sampel pertama, tetapi pusat dan skala angkanya berbeda. StandardScaler menempatkan rata-rata proline di nol, sehingga ketiga nilai positif tersebut menandakan ketiga sampel berada di atas rata-rata. MinMaxScaler menghasilkan nilai antara 0 dan 1 karena seluruh rentang asli dipetakan ke rentang tetap itu. RobustScaler mengukur jarak dari median dalam satuan IQR, sehingga angkanya mirip StandardScaler tetapi tidak ikut tergeser apabila ada pencilan. Ketiganya valid, dan yang membedakan adalah statistik mana yang dijadikan acuan.

Matriks dengan pencilan#

Perbedaan ketiga scaler paling terlihat ketika data memuat pencilan (outlier), yaitu nilai yang jauh menyimpang dari mayoritas data. Contoh berikut menggunakan matriks dua kolom yang kolom keduanya memuat satu pencilan bernilai 12000, sedangkan nilai normalnya hanya berkisar 1200 sampai 1580. Transformasi yang sama dijalankan dengan StandardScaler dan RobustScaler.

python Contoh: matriks kecil dengan satu pencilan
import numpy as np
from sklearn.preprocessing import StandardScaler, RobustScaler

X = np.array([
    [1.0, 1200.0],
    [2.0, 1450.0],
    [1.5, 1310.0],
    [2.5, 1580.0],
    [1.8, 12000.0],
])
std = StandardScaler().fit_transform(X)
rob = RobustScaler().fit_transform(X)
print("StandardScaler:")
print(np.round(std, 3))
print("RobustScaler:")
print(np.round(rob, 3))
text Keluaran
StandardScaler:
[[-1.519 -0.543]
 [ 0.48  -0.484]
 [-0.52  -0.517]
 [ 1.479 -0.454]
 [ 0.08   1.999]]
RobustScaler:
[[-1.6   -0.926]
 [ 0.4    0.   ]
 [-0.6   -0.519]
 [ 1.4    0.481]
 [ 0.    39.074]]

Pada kolom kedua, StandardScaler menghitung rata-rata 3508 yang tergeser oleh pencilan, sehingga empat nilai normal terpadatkan pada rentang sempit -0,543 hingga -0,454 sementara pencilan hanya berjarak sekitar dua simpangan baku. Pencilan tampak kecil karena ikut menaikkan rata-rata sekaligus memperbesar simpangan baku yang dijadikan pembagi. RobustScaler yang menggunakan median 1450 dan IQR 270 membiarkan empat nilai normal menyebar dari -0,926 hingga 0,481, dan pencilan tampak sebesar 39,074. Perbedaan inilah alasan RobustScaler disebut tahan pencilan, karena statistik pusat dan pembaginya tidak digerakkan oleh nilai ekstrem.

Memilih scaler yang tepat#

Pemilihan scaler mengikuti sifat data dan kebutuhan model, bukan kebiasaan. Tabel berikut merangkum parameter yang dipelajari, hasil yang dihasilkan, serta situasi yang cocok untuk masing-masing scaler.

ScalerParameter yang dipelajariHasil transformasiSituasi yang cocok
StandardScalerrata-rata dan simpangan bakurata-rata 0, simpangan baku 1pilihan awal untuk model linear, model berbasis jarak, dan PCA
MinMaxScalernilai terkecil dan terbesarrentang tetap 0 sampai 1algoritma yang menuntut nilai terikat, misalnya intensitas piksel
RobustScalermedian dan IQRskala tahan pencilandata yang belum dibersihkan dari pencilan

StandardScaler menjadi pilihan awal karena kebanyakan algoritma mengasumsikan fitur berada pada skala sebanding tanpa menuntut rentang tertentu. PCA (principal component analysis) masuk dalam kelompok yang sama karena mengukur varians setiap fitur, sehingga fitur berskala besar mendominasi komponen utama apabila tidak disetarakan dahulu. MinMaxScaler dipilih apabila tahap berikutnya menuntut nilai dalam rentang tertentu, tetapi hasilnya bergantung sepenuhnya pada nilai terkecil dan terbesar yang teramati. Apabila data memuat pencilan dan pembersihannya bukan pilihan, RobustScaler memberikan penyetaraan yang tetap bermakna. Ketiga scaler dapat saling digantikan sebagai transformer, sehingga mencoba beberapa pilihan menjadi murah.

Kesalahan umum#

Kesalahan pertama adalah melatih scaler pada seluruh data sebelum data dipecah menjadi data latih (train) dan data uji (test). Statistik data uji ikut menentukan transformasi, sehingga skor evaluasi tidak lagi menggambarkan kemampuan model pada data baru. Aturan anti-kebocoran untuk semua transformer diulas pada topik Fitting Hanya pada Train.

Kesalahan kedua adalah menganggap scaling mengubah bentuk distribusi. Scaler hanya menggeser dan menskalakan nilai, sehingga distribusi yang miring tetap miring setelah transformasi. Mengubah bentuk distribusi menuntut transformer lain yang berada di luar cakupan topik ini.

Kesalahan ketiga adalah memilih MinMaxScaler pada data yang memuat pencilan. Satu nilai ekstrem memperlebar rentang yang dipelajari, sehingga mayoritas data terdorong ke tepi rentang 0 sampai 1 dan pembeda antarnilai hilang. RobustScaler atau pembersihan data lebih layak dipilih pada situasi demikian.

Ringkasan#

  • StandardScaler menyetarakan fitur dengan rata-rata 0 dan simpangan baku 1, MinMaxScaler dengan rentang tetap 0 sampai 1, sedangkan RobustScaler dengan median dan IQR.
  • Statistik transformasi dipelajari melalui fit dan diterapkan melalui transform, sehingga data baru diproses dengan parameter yang sama.
  • RobustScaler dipilih ketika data memuat pencilan, karena rata-rata dan simpangan baku mudah tergeser oleh nilai ekstrem.
  • Scaling tidak mengubah bentuk distribusi, hanya pusat dan skalanya.

Referensi#