Bisakah kita menggunakan rata-rata satu standar dan standar deviasi untuk mengungkap outlier?

17

Misalkan saya memiliki data yang terdistribusi normal. Untuk setiap elemen data saya ingin memeriksa berapa banyak SD yang jauh dari rata-rata. Mungkin ada pencilan dalam data (kemungkinan hanya satu, tetapi mungkin juga dua atau tiga) atau tidak, tetapi pencilan ini pada dasarnya adalah apa yang saya cari. Apakah masuk akal untuk mengecualikan sementara elemen saya saat ini melihat dari perhitungan rata-rata dan SD? Pemikiran saya adalah jika dekat dengan rata-rata, itu tidak memiliki dampak apa pun. Jika itu adalah pencilan, itu mungkin bias perhitungan rata-rata dan SD dan lebih rendah kemungkinan bahwa itu terdeteksi. Saya bukan ahli statistik, jadi bantuan apa pun dihargai!

Oliver
sumber
7
Masuk akal dan merupakan dasar bagi banyak teknik deteksi outlier. Tetapi daripada menemukan metode Anda sendiri, yang mungkin atau mungkin tidak berhasil (dan yang terakhir jauh lebih mungkin bahkan dengan metode yang baru ditemukan oleh ahli statistik, itulah sebabnya mereka perlu studi yang cermat), mengapa Anda tidak menggunakan metode yang secara teoritis diperiksa dan diuji secara empiris?
whuber
Terima kasih telah menunjukkannya. Saya akan mencari teknik-teknik itu dan melihat apakah mereka berkinerja baik pada data saya!
Oliver
1
Lihat halaman ini pada Diagnostik Penghapusan Regresi di R: stat.ethz.ch/R-manual/R-patched/library/stats/html/…
Ben Ogorek
.... Dan jawaban ini untuk ilustrasi mengapa mereka tidak dapat diandalkan untuk menemukan lebih dari satu pencilan tunggal.
user603
Pemikiran-pemikiran hebat di atas tentang gagasan menandai outlier. Beberapa waktu yang lalu, saya telah menulis sebuah artikel tentang gagasan filter kehilangan-kehilangan pada anomali yang ditandai. Semoga ini bisa membantu dalam memperluas ide yang disajikan di atas. Tautan ke artikel: datacience.com/blog/python-anomaly-detection
Pramit

Jawaban:

25

Ini mungkin tampak kontra-intuitif, tetapi menggunakan pendekatan yang Anda gambarkan tidak masuk akal (untuk mengambil kata-kata Anda, saya lebih suka menulis "dapat menyebabkan hasil yang sangat berbeda dari yang dimaksudkan") dan orang tidak boleh melakukannya: risiko dari itu tidak berfungsi adalah konsekuensi dan selain itu, ada alternatif yang lebih sederhana, lebih aman dan lebih mapan tersedia tanpa biaya tambahan.

Pertama, memang benar bahwa jika ada outlier tunggal , maka Anda akhirnya akan menemukannya menggunakan prosedur yang Anda sarankan. Namun, secara umum (ketika mungkin ada lebih dari satu pencilan tunggal dalam data), algoritma yang Anda sarankan benar-benar rusak, dalam arti berpotensi menuntun Anda untuk menolak titik data yang baik sebagai pencilan atau mempertahankan pencilan sebagai titik data yang baik dengan konsekuensi yang berpotensi bencana.

Di bawah ini, saya memberikan contoh numerik sederhana di mana aturan yang Anda usulkan rusak dan kemudian saya mengusulkan alternatif yang jauh lebih aman dan lebih mapan, tetapi sebelum ini saya akan menjelaskan a) apa yang salah dengan metode yang Anda usulkan dan b) apa yang biasanya disukai alternatif untuk itu.

Intinya, Anda tidak dapat menggunakan jarak pengamatan dari mean one out mean dan standar deviasi data Anda untuk mendeteksi outlier dengan andal karena estimasi yang Anda gunakan (tinggalkan one mean out dan standar deviasi) masih cenderung ditarik ke arah yang tersisa. outlier: ini disebut efek masking.

Singkatnya, satu cara sederhana untuk mendeteksi outlier secara andal adalah dengan menggunakan ide umum yang Anda sarankan (jarak dari estimasi lokasi dan skala) tetapi mengganti estimator yang Anda gunakan (biarkan satu out mean, sd) dengan yang kuat - yaitu, estimasi dirancang agar tidak terlalu rentan terombang-ambing oleh outlier.

Perhatikan contoh ini, di mana saya menambahkan 3 pencilan ke 47 pengamatan asli yang diambil dari Normal 0,1:

n    <- 50
set.seed(123)  # for reproducibility
x    <- round(rnorm(n,0,1), 1)
x[1] <- x[1]+1000
x[2] <- x[2]+10
x[3] <- x[3]+10

Kode di bawah ini menghitung indeks outlyingness berdasarkan rata-rata cuti satu dan standar deviasi (misalnya pendekatan yang Anda sarankan).

out_1 <- rep(NA,n)
for(i in 1:n){  out_1[i] <- abs( x[i]-mean(x[-i]) )/sd(x[-i])  }

dan kode ini menghasilkan plot yang Anda lihat di bawah.

plot(x, out_1, ylim=c(0,1), xlim=c(-3,20))
points(x[1:3], out_1[1:3], col="red", pch=16)

Gambar 1 menggambarkan nilai indeks outlyingness Anda sebagai fungsi dari nilai pengamatan (yang paling jauh dari outlier berada di luar kisaran plot ini tetapi dua lainnya ditampilkan sebagai titik merah). Seperti yang Anda lihat, kecuali yang paling ekstrem, indeks outlyingness yang dibangun seperti yang Anda sarankan akan gagal mengungkapkan outlier: memang outlier kedua dan ketiga (lebih ringan) sekarang bahkan memiliki nilai (pada indeks outlyingness Anda) lebih kecil dari semuapengamatan asli! ... Di bawah pendekatan yang Anda sarankan, seseorang akan menjaga dua pencilan ekstrim ini dalam rangkaian pengamatan asli, mengarahkan Anda untuk menggunakan 49 pengamatan yang tersisa seolah-olah mereka berasal dari proses homogen yang sama, memberi Anda hasil akhir Perkiraan mean dan sd berdasarkan 49 poin data ini dari 0,45 dan 2,32, deskripsi yang sangat buruk dari kedua bagian sampel Anda!

image2

xsayaX

HAI(xsaya,X)=|xsaya-med(X)|gila(X)

med(X)Xgila(X)

Dalam R, indeks keterpaduan kedua ini dapat dihitung sebagai:

out_2 <- abs( x-median(x) )/mad(x)

dan diplot (seperti sebelumnya) menggunakan:

plot(x, out_2, ylim=c(0,15), xlim=c(-3,20))
points(x[1:3], out_2[1:3], col="red", pch=16)

image2

Gambar 2 memplot nilai indeks keterpaduan alternatif ini untuk set data yang sama. Seperti yang Anda lihat, sekarang ketiga outlier jelas terungkap. Selain itu, aturan deteksi pencilan ini memiliki beberapa sifat statistik yang mapan. Ini mengarah, antara lain, ke aturan cut-off yang dapat digunakan. Misalnya, jika bagian asli dari data dapat diasumsikan diambil dari distribusi simetris dengan momen kedua terbatas, Anda dapat menolak semua titik data yang

|xsaya-med(X)|gila(X)>3.5

sebagai outlier. Dalam contoh di atas, penerapan aturan ini akan mengarahkan Anda untuk menandai dengan benar pengamatan 1,2 dan 3. Menolak ini, mean dan sd dari pengamatan yang tersisa adalah 0,021 dan 0,93 secara reseptif, deskripsi yang jauh lebih baik dari bagian asli sampel. !

pengguna603
sumber
2
+1 meskipun ada kalimat pertama, yang langsung Anda bantah (usulan OP memang masuk akal ketika paling banyak satu pencilan diasumsikan; keberatan Anda menyangkut masalah dengan prosedur ini ketika asumsi itu dilanggar).
whuber
1
Terima kasih. Sementara itu saya menghapus komentar saya sebelumnya, mengantisipasi itu akan menjadi usang setelah suntingan Anda.
whuber
3
Fenomena di mana beberapa outlier membuat deteksi single-outlier buta terhadap salah satu dari mereka sering disebut masking . Ini dapat membantu orang menemukan lebih banyak informasi yang berkaitan dengan masalah tersebut.
Glen_b -Reinstate Monica
1
@ user603 Pekerjaan bagus menciptakan skenario ilustratif tapi saya pikir Anda membuang bayi dengan air mandi. Diagnostik penghapusan regresi tidak sempurna tetapi mereka banyak diterapkan dan telah teruji oleh waktu. Mengambil median baik-baik saja tapi saya ingin tahu bagaimana Anda akan memperluas pendekatan Anda ke model berbasis kemungkinan yang lebih kompleks.
Ben Ogorek
2
+6, Ini adalah jawaban yang sangat hebat - dijelaskan dengan jelas & teliti, diilustrasikan dengan kode, angka & formula. Saya mengubah sedikit pemformatan kode untuk membuatnya sedikit lebih mudah dibaca. Jika Anda tidak suka, putar kembali dengan permintaan maaf saya.
gung - Reinstate Monica