7 Cara Menangani Outlier Sebelum Melatih Model ML
Suatu sore kamu menjalankan model regresi dan hasilnya terlihat bagus di data latih. Begitu diuji ke data baru, error-nya melonjak. Setelah dicek, ternyata ada beberapa baris dengan nilai kolom pendapatan yang besarnya puluhan kali lipat isi kolom lain. Nilai ekstrem seperti itu bisa menggeser rata-rata, membelokkan garis regresi, dan membuat model belajar pola yang tidak pernah ada. Menangani outlier sebelum melatih model adalah langkah yang menentukan kualitas hasil akhir.
Outlier tidak selalu berarti data salah. Kadang nilai ekstrem mewakili kejadian nyata yang ingin kamu tangkap, misalnya transaksi penipuan atau lonjakan permintaan saat musim tertentu. Karena itu, cara menangani outlier sebelum melatih model bergantung pada asal data dan tujuan modelnya. Berikut tujuh pendekatan yang bisa kamu pakai, diurutkan dari yang paling murah dilakukan.
1. Kenali dulu sebaran data dengan statistik ringkas
Sebelum memutuskan apa pun, lihat nilai minimum, maksimum, kuartil, dan rata-rata setiap kolom numerik. Perbedaan besar antara rata-rata dan median sering menjadi tanda awal adanya nilai ekstrem. Fungsi describe() di pandas sudah cukup untuk memberi gambaran ini.
import pandas as pd
df = pd.read_csv("data_pelanggan.csv")
print(df["pendapatan"].describe())
print(df["pendapatan"].quantile([0.01, 0.25, 0.5, 0.75, 0.99]))
Kalau median jauh di bawah rata-rata, distribusi datanya miring ke kanan. Kolom seperti itu perlu perlakuan khusus sebelum masuk ke model yang sensitif terhadap skala, misalnya regresi linear atau metode berbasis jarak.
2. Deteksi dengan metode IQR untuk data yang tidak normal
Metode interquartile range (IQR) menandai nilai yang berada di luar batas bawah dan batas atas. Batas bawah dihitung dari kuartil pertama dikurangi 1,5 kali IQR, sedangkan batas atas dari kuartil ketiga ditambah 1,5 kali IQR. Cara ini tidak mengasumsikan data berdistribusi normal, jadi aman dipakai pada banyak jenis kolom.
q1 = df["pendapatan"].quantile(0.25)
q3 = df["pendapatan"].quantile(0.75)
iqr = q3 - q1
bawah = q1 - 1.5 * iqr
atas = q3 + 1.5 * iqr
outlier = df[(df["pendapatan"] < bawah) | (df["pendapatan"] > atas)]
print(len(outlier))
Angka 1,5 adalah konvensi yang lazim, bukan aturan mutlak. Untuk data yang sangat ekstrem, sebagian praktisi memakai 3 kali IQR agar hanya nilai benar-benar menyimpang yang ditandai.
3. Pakai z-score bila data mendekati distribusi normal
Z-score mengukur seberapa jauh sebuah nilai dari rata-rata dalam satuan simpangan baku. Nilai dengan z-score di atas 3 atau di bawah -3 biasanya dianggap ekstrem. Metode ini cepat, tetapi rata-rata dan simpangan bakunya sendiri ikut terpengaruh outlier, sehingga hasilnya bisa menyesatkan pada data yang sangat miring.
Kalau kolommu mengandung banyak nilai ekstrem, IQR lebih aman dipakai lebih dulu. Z-score cocok untuk data pengukuran fisik yang relatif stabil, seperti suhu atau tekanan.
4. Buang baris hanya jika nilainya jelas keliru
Menghapus data adalah pilihan paling sederhana, tetapi juga paling berisiko. Buang baris ketika kamu punya alasan kuat bahwa nilainya salah catat, misalnya usia bernilai negatif atau tinggi badan 300 cm. Kalau outlier-nya wajar secara domain, penghapusan justru membuang informasi penting.
- Periksa apakah nilai ekstrem muncul berulang pada entitas yang sama.
- Pastikan jumlah baris yang dibuang tidak terlalu besar terhadap total data.
- Simpan salinan data asli sebelum pembersihan agar bisa dibandingkan.
Kalau proporsi outlier sudah mengganggu kestabilan model, pertimbangkan teknik penanganan data tidak seimbang yang lebih sistematis daripada sekadar menghapus baris.
5. Ganti nilai ekstrem dengan batas atas atau bawah
Teknik ini disebut capping atau winsorizing. Nilai yang melewati batas diganti dengan nilai batas itu sendiri, sehingga bentuk distribusi tetap terjaga tanpa kehilangan baris. Capping sering dipakai pada kolom keuangan karena nilai ekstrem yang dibuang seluruhnya bisa menghilangkan sinyal transaksi besar.
df["pendapatan"] = df["pendapatan"].clip(lower=bawah, upper=atas)
Hitung batasnya dari data latih saja, lalu terapkan batas yang sama ke data uji. Kalau kamu menghitung ulang batas pada data uji, informasi dari data uji bocor ke proses pelatihan dan evaluasi jadi tidak lagi jujur.
6. Transformasi logaritma untuk data yang miring
Distribusi yang miring ke kanan sering menjadi lebih simetris setelah diubah ke skala logaritma. Transformasi ini menekan pengaruh nilai besar tanpa membuangnya. Setelah di-log, model regresi dan metode berbasis jarak biasanya bekerja lebih stabil.
import numpy as np
df["log_pendapatan"] = np.log1p(df["pendapatan"])
Fungsi log1p dipakai agar nilai nol tidak menghasilkan error. Ingat bahwa hasil prediksi model berada dalam skala log, jadi kamu perlu mengubahnya kembali dengan np.expm1 saat menyajikan angka ke pengguna.
7. Pilih model yang tahan terhadap nilai ekstrem
Sebagian algoritma tidak terlalu terganggu oleh outlier. Model berbasis pohon keputusan, seperti random forest dan gradient boosting, memilih titik pemisah berdasarkan urutan nilai, bukan jarak, sehingga nilai ekstrem hanya memengaruhi sedikit. Sebaliknya, regresi linear, KNN, dan SVM dengan kernel RBF sangat peka terhadap skala nilai.
Kalau kamu masih membandingkan beberapa pustaka, lihat dulu perbandingan framework machine learning di Python untuk memahami karakter tiap algoritma. Menyesuaikan pilihan model kadang lebih efisien daripada memaksakan transformasi pada data yang sulit dibersihkan.
Pada proyek yang lebih besar, penanganan outlier sebaiknya menjadi bagian dari pipeline agar urutan langkahnya konsisten antara data latih dan data uji. Kalau kamu baru mulai, langkah membangun pipeline machine learning dari data mentah menjelaskan cara menyusun tahapan ini secara rapi. Untuk pembersihan kolom kategorikal dan pengisian nilai hilang, teknik chaining pada pemrosesan data juga membantu menjaga kode tetap terbaca, seperti pola yang dibahas dalam panduan memahami chaining jQuery untuk kode yang lebih rapi.
Ringkasan
Menangani outlier bukan soal membuang semua nilai yang terlihat besar. Mulai dari statistik ringkas, pilih metode deteksi yang cocok dengan bentuk distribusi, lalu tentukan apakah nilai ekstrem itu kesalahan atau kejadian nyata. Buang hanya ketika alasannya jelas, gunakan capping atau transformasi ketika informasinya masih berharga, dan pertimbangkan model yang lebih tahan terhadap nilai ekstrem. Hitung semua parameter pembersihan dari data latih agar evaluasi tetap valid.
Pertanyaan yang Sering Diajukan
Apakah semua outlier harus dihapus sebelum melatih model?
Tidak. Outlier yang berasal dari kejadian nyata, misalnya transaksi bernilai besar atau lonjakan permintaan musiman, justru bisa menjadi sinyal penting. Hapus hanya nilai yang terbukti salah catat atau merusak kestabilan model secara berlebihan.
Berapa batas z-score yang biasa dipakai?
Banyak praktisi memakai ambang 3 atau -3, tetapi angka ini bukan patokan mutlak. Pada data yang sangat miring, z-score sendiri mudah terdistorsi oleh nilai ekstrem, sehingga metode IQR lebih aman dipakai lebih dulu.
Apakah penanganan outlier harus dilakukan sebelum normalisasi?
Umumnya ya. Normalisasi memakai rata-rata dan simpangan baku yang ikut terpengaruh outlier, jadi hasilnya bisa melenceng. Bersihkan atau batasi nilai ekstrem terlebih dahulu, baru lakukan normalisasi pada data yang sudah lebih stabil.


