![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Analis sering kali menemukan outlier dalam data selama bekerja, seperti saat melakukan analisis uji AB, membuat model prediktif, atau melacak tren. Keputusan biasanya didasarkan pada rata-rata sampel, yang sangat sensitif terhadap outlier dan dapat mengubah nilai secara drastis. Jadi, sangat penting untuk mengelola outlier guna membuat keputusan yang tepat.
Mari kita pertimbangkan beberapa pendekatan sederhana dan cepat untuk bekerja dengan nilai-nilai yang tidak biasa.
Bayangkan Anda perlu melakukan analisis eksperimen menggunakan nilai orde rata-rata sebagai metrik utama. Katakanlah metrik kita biasanya memiliki distribusi normal. Selain itu, kita tahu bahwa distribusi metrik dalam kelompok uji berbeda dari yang ada dalam kontrol. Dengan kata lain, rata-rata distribusi dalam kontrol adalah 10, dan dalam uji adalah 12. Simpangan baku dalam kedua kelompok adalah 3.
Akan tetapi, kedua sampel tersebut memiliki outlier yang mendistorsi nilai rata-rata sampel dan deviasi standar 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 : mempertimbangkan metrik dapat memiliki outlier dari kedua sisi. Jika metrik Anda hanya dapat memiliki outlier dari satu sisi, metode dapat dengan mudah diubah untuk tujuan tersebut.
Metode termudah adalah dengan memotong semua pengamatan sebelum persentil 5% dan setelah persentil 95% . Dalam kasus ini, kita kehilangan 10% informasi sebagai kerugian. Namun, distribusinya tampak lebih terbentuk, dan momen sampel lebih dekat ke momen distribusi.
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 adalah dengan mengecualikan pengamatan di luar rentang tertentu . Pita rendah sama dengan persentil 25% dikurangi setengah dari rentang interkuartil, dan pita tinggi sama dengan persentil 75% ditambah setengah. Di sini, kita hanya akan kehilangan 0,7% informasi. Distribusi tampak lebih terbentuk daripada yang awal. Momen sampel bahkan lebih sama dengan momen distribusi.
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]
Metode kedua yang kami pertimbangkan di sini adalah bootstrap. Dalam pendekatan ini, rata-rata dibangun seperti rata-rata subsampel. Dalam contoh kami, rata-rata dalam kelompok kontrol sama dengan 10,35, dan kelompok uji adalah 11,78. Ini masih merupakan hasil yang lebih baik dibandingkan dengan pemrosesan 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())
Deteksi dan pemrosesan outlier penting untuk membuat keputusan yang tepat. Kini, setidaknya ada tiga pendekatan cepat dan mudah yang dapat membantu Anda memeriksa data sebelum analisis.
Namun, penting untuk diingat bahwa outlier yang terdeteksi bisa jadi merupakan nilai yang tidak biasa dan merupakan fitur untuk efek kebaruan. Namun, itu cerita lain :)