paint-brush
Pengesanan Outlier: Perkara yang Anda Perlu Tahuoleh@nataliaogneva
54,575 bacaan
54,575 bacaan

Pengesanan Outlier: Perkara yang Anda Perlu Tahu

oleh Natalia Ogneva4m2024/04/23
Read on Terminal Reader
Read this story w/o Javascript

Terlalu panjang; Untuk membaca

Penganalisis sering menghadapi outlier dalam data semasa kerja mereka. Keputusan biasanya berdasarkan purata sampel, yang sangat sensitif kepada outlier. Adalah penting untuk menguruskan outlier untuk membuat keputusan yang betul. Mari kita pertimbangkan beberapa pendekatan mudah dan pantas untuk bekerja dengan nilai luar biasa.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Pengesanan Outlier: Perkara yang Anda Perlu Tahu
Natalia Ogneva HackerNoon profile picture

Penganalisis sering menghadapi outlier dalam data semasa kerja mereka, seperti semasa analisis ujian AB, mencipta model ramalan atau menjejaki arah aliran. Keputusan biasanya berdasarkan purata sampel, yang sangat sensitif kepada outlier dan boleh mengubah nilai secara mendadak. Jadi, adalah penting untuk menguruskan outlier untuk membuat keputusan yang betul.


Mari kita pertimbangkan beberapa pendekatan mudah dan pantas untuk bekerja dengan nilai luar biasa.

Rumusan Masalah

Bayangkan anda perlu menjalankan analisis percubaan menggunakan nilai pesanan purata sebagai metrik utama. Katakan metrik kami biasanya mempunyai taburan normal. Juga, kita tahu bahawa taburan metrik dalam kumpulan ujian adalah berbeza daripada taburan dalam kawalan. Dalam erti kata lain, min bagi taburan dalam kawalan ialah 10, dan dalam ujian ialah 12. Sisihan piawai dalam kedua-dua kumpulan ialah 3.


Walau bagaimanapun, kedua-dua sampel mempunyai outlier yang memesongkan min sampel dan sisihan piawai sampel.

 import numpy as np N = 1000 mean_1 = 10 std_1 = 3 mean_2 = 12 std_2 = 3 x1 = np.concatenate((np.random.normal(mean_1, std_1, N), 10 * np.random.random_sample(50) + 20)) x2 = np.concatenate((np.random.normal(mean_2, std_2, N), 4 * np.random.random_sample(50) + 1))

NB bahawa mempertimbangkan metrik mungkin mempunyai kelebihan dari kedua-dua belah pihak. Jika metrik anda boleh mempunyai outlier hanya dari satu pihak, kaedah boleh diubah dengan mudah untuk tujuan itu.

Potong Ekor

Kaedah yang paling mudah ialah memotong semua pemerhatian sebelum persentil 5% dan selepas persentil 95% . Dalam kes ini, kami kehilangan 10% maklumat sebagai penipu. Walau bagaimanapun, pengedaran kelihatan lebih terbentuk, dan momen sampel lebih dekat dengan momen pengedaran.

 import numpy as np x1_5pct = np.percentile(x1, 5) x1_95pct = np.percentile(x1, 95) x1_cutted = [i for i in x1 if i > x1_5pct and i < x1_95pct] x2_5pct = np.percentile(x2, 5) x2_95pct = np.percentile(x2, 95) x2_cutted = [i for i in x2 if i > x2_5pct and i < x2_95pct]


Cara lain ialah mengecualikan pemerhatian di luar julat tertentu . Jalur rendah bersamaan dengan persentil 25% tolak separuh daripada julat antara kuartil, dan jalur tinggi bersamaan dengan persentil 75% tambah satu setengah. Di sini, kami akan kehilangan hanya 0.7% maklumat. Pengagihan kelihatan lebih terbentuk daripada yang awal. Momen sampel adalah lebih sama dengan momen pengedaran.

 import numpy as np low_band_1 = np.percentile(x1, 25) - 1.5 * np.std(x1) high_band_1 = np.percentile(x1, 75) + 1.5 * np.std(x1) x1_cutted = [i for i in x1 if i > low_band_1 and i < high_band_1] low_band_2 = np.percentile(x2, 25) - 1.5 * np.std(x2) high_band_2 = np.percentile(x2, 75) + 1.5 * np.std(x2) x2_cutted = [i for i in x2 if i > low_band_2 and i < high_band_2]

Bootstrap

Kaedah kedua yang kami pertimbangkan di sini ialah bootstrap. Dalam pendekatan ini, min dibina seperti min subsampel. Dalam contoh kami, min dalam kumpulan kawalan sama dengan 10.35, dan kumpulan ujian ialah 11.78. Ia masih merupakan hasil yang lebih baik berbanding pemprosesan data tambahan.

 import pandas as pd def create_bootstrap_samples( sample_list: np.array, sample_size: int, n_samples: int ): # create a list for sample means sample_means = [] # loop n_samples times for i in range(n_samples): # create a bootstrap sample of sample_size with replacement bootstrap_sample = pd.Series(sample_list).sample(n = sample_size, replace = True) # calculate the bootstrap sample mean sample_mean = bootstrap_sample.mean() # add this sample mean to the sample means list sample_means.append(sample_mean) return pd.Series(sample_means) (create_bootstrap_samples(x1, len(x1), 1000).mean(), create_bootstrap_samples(x2, len(x2), 1000).mean())

Kesimpulan

Pengesanan dan pemprosesan outlier adalah penting untuk membuat keputusan yang betul. Kini, sekurang-kurangnya tiga pendekatan pantas dan mudah boleh membantu anda menyemak data sebelum analisis.


Walau bagaimanapun, adalah penting untuk diingat bahawa outlier yang dikesan boleh menjadi nilai luar biasa dan ciri untuk kesan kebaharuan. Tapi lain cerita :)