Algoritme atau metode apa yang dapat digunakan untuk mendeteksi pencilan dari kumpulan data ini?

8

Misalkan saya memiliki kumpulan data: Amount of money (100, 50, 150, 200, 35, 60 ,50, 20, 500). Saya telah Googled web mencari teknik yang dapat digunakan untuk menemukan outlier mungkin dalam set data ini tapi akhirnya aku bingung.

Pertanyaan saya adalah : Algoritme, teknik atau metode apa yang dapat digunakan untuk mendeteksi kemungkinan pencilan dalam kumpulan data ini?

PS : Pertimbangkan bahwa data tidak mengikuti distribusi normal. Terima kasih.

Nation Chirara
sumber
Bagaimana Anda mengenali pencilan pada set kecil ini? Bagaimana Anda melakukan "dengan tangan" pada data yang sedikit lebih besar?
Laurent Duval

Jawaban:

5

Anda dapat menggunakan BoxPlot untuk analisis outlier. Saya akan menunjukkan kepada Anda bagaimana melakukannya dengan Python:

Pertimbangkan data Anda sebagai sebuah array:

a = [100, 50, 150, 200, 35, 60 ,50, 20, 500]

Sekarang, gunakan seaborn untuk memplot boxplot:

import seaborn as sn
sn.boxplot(a)

Jadi, Anda akan mendapatkan plot yang terlihat seperti ini:

masukkan deskripsi gambar di sini

Sepertinya 500 adalah satu-satunya outlier bagi saya. Tapi, itu semua tergantung pada analisis dan tingkat toleransi analis atau ahli statistik dan juga pernyataan masalah.

Anda dapat melihat salah satu jawaban saya di CrossValidated SE untuk tes lebih lanjut.

Dan ada beberapa pertanyaan bagus tentang outlier dan algoritma dan teknik untuk mendeteksi mereka.

Favorit pribadi saya adalah teknik jarak Mahalanobis .

Dawny33
sumber
Terima kasih, penjelasan yang bagus. Dapatkah saya menerapkan teknik jarak Mahalanobis dalam kasus ini atau ini berfungsi untuk data multivarian?
Nation Chirara
Kamu bisa. Tapi, ini terlalu memenuhi syarat untuk data univariat. Hanya analisis Boxplot dengan beberapa nilai ambang batas yang ditetapkan yang dapat melakukan pekerjaan untuk data ini.
Dawny33
5

Salah satu cara berpikir deteksi outlier adalah bahwa Anda membuat model prediktif, kemudian Anda memeriksa untuk melihat apakah suatu titik berada dalam kisaran prediksi. Dari sudut pandang teori-informasi, Anda dapat melihat seberapa banyak setiap pengamatan meningkatkan entropi model Anda.

Jika Anda memperlakukan data ini hanya sebagai kumpulan angka, dan Anda tidak memiliki beberapa model yang diusulkan untuk bagaimana mereka dihasilkan, Anda mungkin juga hanya melihat rata-rata. Jika Anda yakin angka-angka tersebut tidak terdistribusi secara normal, Anda tidak dapat membuat pernyataan tentang seberapa jauh 'off' angka yang diberikan dari rata-rata, tetapi Anda bisa melihatnya secara absolut.

Dengan menerapkan ini, Anda dapat mengambil rata-rata semua angka, lalu mengecualikan setiap angka dan mengambil rata-rata lainnya. Rata-rata mana pun yang paling berbeda dari rata-rata global adalah pencilan terbesar. Inilah beberapa python:

def avg(a):
    return sum(a)/len(a)

l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
m = avg(l)
for idx in range(len(l)):
    print("outlier score of {0}: {1}".format(l[idx], abs(m - avg([elem for i, elem in enumerate(l) if i!=idx]))))
>>
outlier score of 100: 4
outlier score of 50: 10
outlier score of 150: 3
outlier score of 200: 9
outlier score of 35: 12
outlier score of 60: 9
outlier score of 50: 10
outlier score of 20: 14
outlier score of 500: 46 
Tristan Reid
sumber
Terima kasih atas tanggapannya. Saya yakin bahwa jumlahnya tidak terdistribusi normal, apakah metode Anda masih berlaku dalam konteks itu?
Nation Chirara
Ya, selalu ada model mendasar yang menyiratkan prediksi tentang data. Jika kami mendapatkan titik data baru, kami dapat membuat perkiraan tentang nilai itu. Jika kita tidak memiliki informasi lain tentang model (itu hanya kumpulan angka), maka tebakan terbaik adalah bahwa itu akan terlihat mirip dengan angka yang sudah kita miliki. Jika Anda berakhir dengan model spesifik untuk data, penting untuk memasukkannya ke dalam prediksi Anda. Menggunakan mean tidak berarti kita mengasumsikan distribusi normal, tetapi model lain bisa menggunakan sesuatu selain mean.
Tristan Reid
Halo. Saya biasanya tidak menemukan itu ide yang baik untuk menggunakan rata-rata untuk data terdistribusi tidak normal. Bahkan, misalnya, banyak tes statistik non parametrik menggunakan median, bukan rata-rata. Tapi itu hanya pendapat ...
Michael Hooreman
Cukup adil, tapi saya pikir aman untuk mengatakan jika Anda yakin data Anda didistribusikan secara simetris, artinya adalah ide yang cukup bagus, jika tidak median adalah ukuran yang lebih baik dari nilai 'tipikal'.
Tristan Reid
3

Pendekatan sederhana akan menggunakan hal yang sama dengan plot kotak: jauh dari 1,5 (median-q1) atau 1,5 (q3-median) = outlier.

Saya menemukan itu berguna dalam banyak kasus walaupun tidak sempurna dan mungkin terlalu sederhana.

Ini memiliki keuntungan untuk tidak menganggap normal.

Michael Hooreman
sumber