Satu pengamatan yang jauh dari kumpulannya dapat menggeser rata-rata dan simpangan baku hingga ringkasan tidak lagi mewakili mayoritas data. Topik ini membahas pencilan (outlier) beserta dua aturan deteksi yang lazim digunakan, yaitu aturan 1.5 kali IQR dan skor-z (z-score). Statistika robust (robust statistics) dibahas sebagai pasangan ringkasan yang tidak goyah ketika nilai ekstrem hadir. Deteksi didemonstrasikan pada data waktu tunggu loket yang memuat satu gangguan nyata, dan keputusan setelah pencilan ditemukan dibahas secara eksplisit.
Pengamatan yang jauh dari kumpulannya#
Pencilan adalah pengamatan yang nilainya menyimpang jauh dari pola data lainnya. Asalnya dapat berupa kesalahan pencatatan atau pengukuran, tetapi dapat pula berupa kejadian nyata yang memang jarang, seperti gangguan sistem yang membuat satu pelanggan menunggu 58 menit. Kedua asal tersebut menuntut perlakuan yang berbeda, sehingga langkah pertama setelah pencilan terdeteksi adalah menyelidiki asal-usulnya, bukan langsung menghapusnya. Ringkasan klasik seperti rata-rata dan simpangan baku terpengaruh kuat oleh pencilan, sedangkan median dan IQR hampir tidak.
Deteksi dengan aturan 1.5 kali IQR#
Aturan 1.5 kali IQR menandai pencilan sebagai pengamatan yang berada di luar dua batas berikut. Kedua batasnya dinyatakan dalam kuartil beserta IQR data.
Kedua batas tersebut sama dengan ujung kumis pada diagram kotak (boxplot). Kumis adalah garis yang membentang keluar dari kotak, sehingga pencilan langsung terlihat sebagai titik di luar kumis. Karena kuartil tidak dipengaruhi oleh nilai ujung, kedua batas ini tetap stabil walaupun pencilan yang ditandai diganti menjadi jauh lebih ekstrem. Data contohnya adalah waktu tunggu 20 pelanggan di satu loket ditambah satu gangguan 58 menit, dan program berikut menjalankan aturan itu sekaligus menggambarkan diagram kotaknya.
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(42)
# Waktu tunggu 20 pelanggan di satu loket (menit) dan satu gangguan 58 menit
waktu = np.append(np.round(rng.uniform(2, 10, size=20), 2), 58.0)
q1 = np.percentile(waktu, 25)
q3 = np.percentile(waktu, 75)
iqr = q3 - q1
batas_bawah = q1 - 1.5 * iqr
batas_atas = q3 + 1.5 * iqr
pencilan = waktu[(waktu < batas_bawah) | (waktu > batas_atas)]
print(f"Q1 : {q1:.4f} menit")
print(f"Q3 : {q3:.4f} menit")
print(f"IQR : {iqr:.4f} menit")
print(f"Batas bawah : {batas_bawah:.4f} menit")
print(f"Batas atas : {batas_atas:.4f} menit")
for w in pencilan:
print(f"Pencilan : {w:.2f} menit")
fig, ax = plt.subplots(figsize=(7, 2.4), constrained_layout=True)
ax.boxplot(waktu, vert=False, tick_labels=["Waktu tunggu"])
ax.set_xlabel("Waktu tunggu (menit)")
ax.set_title("Deteksi pencilan dengan aturan 1.5 kali IQR")
fig.savefig("boxplot-waktu-tunggu.png", dpi=110)Q1 : 5.5100 menit
Q3 : 8.5800 menit
IQR : 3.0700 menit
Batas bawah : 0.9050 menit
Batas atas : 13.1850 menit
Pencilan : 58.00 menit
Kuartil data tersebut adalah 5.5100 dan 8.5800 menit sehingga IQR-nya 3.0700 menit, dan kedua batasnya jatuh pada 0.9050 serta 13.1850 menit. Satu-satunya pengamatan di luar batas adalah 58.00 menit, yaitu gangguan yang ditanamkan pada data. Diagram kotak memperlihatkan kotak yang rapat dengan satu titik terpisah jauh di kanan, sesuai hasil perhitungan.
Deteksi dengan skor z#
Skor-z menyatakan jarak sebuah pengamatan dari rata-rata dalam satuan simpangan baku sampel. Besaran ini disebut juga skor baku (standard score) pada sebagian buku teks.
Ambang yang lazim dipakai adalah lebih besar dari 3, dan sebagian pedoman memakai 2.5 pada himpunan data yang lebih besar. Kelemahan metodenya terletak pada rata-rata dan simpangan baku yang ikut bergeser akibat pencilan itu sendiri. Pencilan yang sangat besar membengkakkan simpangan baku sehingga skor-z pengamatan ekstrem lain dapat tertekan di bawah ambang, dan perilaku ini disebut masking. Program berikut menghitung skor-z pada data waktu tunggu yang sama.
import numpy as np
rng = np.random.default_rng(42)
# Data waktu tunggu yang sama dengan contoh aturan 1.5 kali IQR
waktu = np.append(np.round(rng.uniform(2, 10, size=20), 2), 58.0)
# Skor-z: jarak dari rata-rata dalam satuan simpangan baku sampel
z = (waktu - waktu.mean()) / waktu.std(ddof=1)
urutan = np.argsort(np.abs(z))[::-1]
for i in urutan[:3]:
print(f"waktu = {waktu[i]:6.2f} menit, z = {z[i]:8.4f}")
ambang = 3.0
print(f"Jumlah pengamatan dengan |z| > {ambang}: {int(np.sum(np.abs(z) > ambang))}")
print(f"Simpangan baku data ini: {waktu.std(ddof=1):.4f} menit")waktu = 58.00 menit, z = 4.2815
waktu = 2.51 menit, z = -0.5708
waktu = 2.75 menit, z = -0.5499
Jumlah pengamatan dengan |z| > 3.0: 1
Simpangan baku data ini: 11.4358 menitPengamatan 58.00 menit memperoleh skor-z 4.2815 sehingga tetap terdeteksi oleh ambang 3 pada data ini. Perhatikan pula simpangan baku yang tercetak sebesar 11.4358 menit, jauh lebih besar daripada 2.2760 menit ketika pencilannya dikeluarkan. Pembengkakan sebesar itulah yang dapat menekan skor-z di bawah ambang pada himpunan data yang lebih kecil atau yang memuat lebih dari satu pencilan, dan kelemahan semacam ini tidak dimiliki aturan IQR.
Statistika robust#
Statistika robust adalah ringkasan yang nilainya hanya berubah sedikit ketika sebagian kecil data berubah drastis. Median dan IQR adalah pasangan robust yang setara dengan rata-rata dan simpangan baku, dan keduanya dibangun dari posisi data, bukan dari nilai setiap pengamatan. Perbandingan berikut menghitung ketiga ukuran pada data waktu tunggu dengan dan tanpa pencilannya.
import numpy as np
rng = np.random.default_rng(42)
waktu = np.append(np.round(rng.uniform(2, 10, size=20), 2), 58.0)
waktu_tanpa = waktu[waktu < 50]
print(f"Dengan pencilan: rata-rata = {waktu.mean():.4f}, simpangan baku = {waktu.std(ddof=1):.4f}, "
f"IQR = {np.percentile(waktu, 75) - np.percentile(waktu, 25):.4f}")
print(f"Tanpa pencilan : rata-rata = {waktu_tanpa.mean():.4f}, simpangan baku = {waktu_tanpa.std(ddof=1):.4f}, "
f"IQR = {np.percentile(waktu_tanpa, 75) - np.percentile(waktu_tanpa, 25):.4f}")Dengan pencilan: rata-rata = 9.0381, simpangan baku = 11.4358, IQR = 3.0700
Tanpa pencilan : rata-rata = 6.5900, simpangan baku = 2.2760, IQR = 2.9875Rata-rata melompat dari 6.5900 ke 9.0381 menit dan simpangan baku naik hampir lima kali lipat ketika pencilan masuk, sedangkan median hanya bergeser 0.05 menit dan IQR berubah dari 2.9875 ke 3.0700 menit. Angka-angka itu memperlihatkan langsung sifat robust yang menjadi benteng analisis ketika pencilan tidak dapat dihilangkan. Untuk data yang berpotensi memuat pencilan, melaporkan median beserta IQR memberikan gambaran pengamatan tipikal yang lebih dapat dipertahankan.
Kesalahan umum#
Kesalahan pertama adalah menghapus pencilan segera setelah aturan deteksi menandainya, padahal tanda deteksi bukan bukti kesalahan data. Aturan deteksi hanya menyatakan bahwa sebuah nilai jauh dari kumpulan data, sedangkan keputusan penanganannya memerlukan penyelidikan asal-usul pencilan tersebut. Kesalahan kedua adalah memakai ambang lebih besar dari 3 pada sampel kecil, karena simpangan baku yang membengkak dapat menyembunyikan pencilan melalui efek masking yang dibahas sebelumnya. Kesalahan ketiga adalah menerapkan aturan 1.5 kali IQR pada data yang sangat menceng tanpa kehati-hatian, karena ekor panjangnya membuat banyak pengamatan sah ikut tertandai. Pada data seperti itu, anggap hasil deteksi sebagai kandidat yang perlu diperiksa, bukan sebagai kesalahan yang pasti.
Ringkasan#
- Pencilan adalah pengamatan yang jauh dari pola data dan dapat berasal dari kesalahan pencatatan maupun kejadian nyata.
- Aturan 1.5 kali IQR menandai nilai di luar dan tanpa terpengaruh nilai ujung.
- Skor-z bergantung pada rata-rata dan simpangan baku sehingga rentan terhadap masking pada data kecil.
- Median dan IQR sebagai statistika robust memberikan ringkasan yang stabil ketika pencilan hadir, sedangkan penghapusan pencilan memerlukan alasan yang tercatat.
Referensi#
- NIST/SEMATECH e-Handbook of Statistical Methods — NIST — Buku pegangan statistika NIST yang membahas deteksi pencilan dan diagram kotak.
- numpy.percentile — NumPy — Dokumentasi fungsi persentil NumPy yang dipakai untuk menghitung kuartil dan IQR.
- OpenIntro Statistics — OpenIntro — Buku pengantar statistika dengan pembahasan pencilan pada bagian ringkasan data.