Membersihkan Data: Mendeteksi Outlier
Pelajari metode IQR dan z-score untuk menemukan nilai ekstrem, cara cek visual dengan boxplot, dan keputusan penting: kapan outlier dibuang dan kapan dipertahankan.
Outlier: Satu Angka yang Merusak Semua
Bayangkan satu kelas berisi 30 siswa dengan nilai rata-rata 70, lalu ada satu nilai 1000 yang nyasar karena salah input. Rata-rata kelas langsung melonjak dan tidak lagi menggambarkan siapa pun di kelas itu. Itulah outlier: nilai yang jauh menyimpang dari pola umum data, dan satu saja cukup untuk merusak mean, merusak grafik, bahkan merusak model machine learning.
Untuk data analyst, outlier adalah teka-teki, bukan sekadar sampah. Ada outlier yang merupakan kesalahan input (umur pelanggan 250 tahun) dan wajib dibuang, tapi ada juga yang merupakan fakta bisnis paling penting (satu pelanggan sultan yang belanja 100 juta sebulan). Salah buang berarti kamu menghapus insight paling berharga di datasetmu.
Metode IQR: Pagar Statistik yang Sederhana
IQR (Interquartile Range) adalah metode paling populer karena sederhana dan tidak butuh asumsi distribusi normal. Idenya: hitung rentang antara kuartil 1 dan kuartil 3, lalu pasang "pagar" 1,5 kali IQR di luar kedua kuartil. Nilai di luar pagar dianggap outlier.
import pandas as pd
harga = pd.Series([12000, 15000, 13000, 14000, 16000,
15000, 13500, 14500, 200000])
q1 = harga.quantile(0.25)
q3 = harga.quantile(0.75)
iqr = q3 - q1
batas_bawah = q1 - 1.5 * iqr
batas_atas = q3 + 1.5 * iqr
outlier = harga[(harga < batas_bawah) | (harga > batas_atas)]
bersih = harga[(harga >= batas_bawah) & (harga <= batas_atas)]
print("Outlier:", outlier.tolist())
print("Rata-rata kotor:", harga.mean(), "| bersih:", bersih.mean())Lihat bedanya: satu nilai 200000 mengangkat rata-rata dari sekitar 14000 menjadi lebih dari 30000. Setelah dibersihkan, rata-rata kembali jujur.
Metode Z-Score dan Cek Visual Boxplot
Z-score mengukur seberapa jauh sebuah nilai dari rata-rata dalam satuan standar deviasi. Aturan umum: nilai dengan |z| lebih dari 3 adalah outlier. Metode ini cocok kalau datamu mendekati distribusi normal.
import pandas as pd
import matplotlib.pyplot as plt
gaji = pd.Series([5, 5.5, 6, 4.8, 5.2, 6.1, 5.8, 50])
z = (gaji - gaji.mean()) / gaji.std()
print(gaji[z.abs() > 3].tolist()) # kandidat outlier
gaji.plot.box()
plt.title("Boxplot Gaji (juta rupiah)")
plt.show()Boxplot adalah cara tercepat untuk "melihat" outlier. Kotak menunjukkan rentang tengah data (Q1 sampai Q3), garis tengahnya adalah median, dan titik-titik yang terpisah jauh di luar adalah outlier. Selalu lihat boxplot sebelum memutuskan apa pun, karena angka saja tidak bercerita selengkap gambar.
Catatan teknis: IQR lebih aman untuk data miring (skewed) seperti gaji atau harga, sedangkan z-score mengasumsikan data mendekati normal. Kalau datamu miring berat, z-score bisa menandai terlalu banyak outlier palsu.
Dibuang atau Dipertahankan?
Ini keputusan bisnis, bukan sekadar rumus. Buang outlier kalau dia jelas kesalahan: umur negatif, suhu ruangan 500 derajat, atau transaksi Rp 0 dari bug sistem. Pertahankan (atau analisis terpisah) kalau dia fakta nyata: pelanggan korporat dengan order raksasa, atau lonjakan penjualan saat promo 12.12. Praktik terbaik analis senior: jangan diam-diam menghapus, tapi laporkan berapa outlier yang ditemukan, apa penyebab yang diduga, dan bagaimana angka berubah sebelum dan sesudah dibersihkan.
Jebakan Umum
SALAH: menghapus semua outlier secara otomatis tanpa investigasi.
bersih = df[(df["total"] >= batas_bawah) & (df["total"] <= batas_atas)]BENAR: selidiki dulu, lalu dokumentasikan keputusanmu.
kandidat = df[(df["total"] < batas_bawah) | (df["total"] > batas_atas)]
print(kandidat) # cek: salah input atau pelanggan sultan?SALAH: memakai mean untuk meringkas data yang masih mengandung outlier.
rata2 = df["gaji"].mean() # satu gaji 50 juta merusak rata-rataBENAR: kalau outlier dipertahankan karena dia fakta bisnis, ringkas dengan median yang kebal terhadapnya, atau pisahkan analisis outlier ke laporan tersendiri.
Tantangan
Buru Outlier Harga
Diberikan Series harga produk yang berisi satu nilai salah input (jauh lebih besar dari yang lain). Gunakan metode IQR untuk menemukan outlier, tampilkan nilainya, lalu hitung rata-rata sebelum dan sesudah outlier dibuang.