Cara menghapus pencilan dengan python
Outlier adalah observasi yang jaraknya sangat jauh dari nilai lain dalam kumpulan data. Pencilan dapat menjadi masalah karena dapat mempengaruhi hasil analisis.
Tutorial ini menjelaskan cara mengidentifikasi dan menghapus outlier dengan Python.
Cara Mengidentifikasi Pencilan dengan Python
Sebelum Anda dapat menghapus outlier, Anda harus terlebih dahulu memutuskan apa yang Anda anggap sebagai outlier. Ada dua cara umum untuk melakukan ini:
1. Gunakan rentang interkuartil.
Rentang interkuartil (IQR) adalah selisih antara persentil ke-75 (Q3) dan persentil ke-25 (Q1) dalam suatu kumpulan data. Ini mengukur distribusi rata-rata 50% nilai.
Anda dapat mendefinisikan suatu observasi sebagai outlier jika observasi tersebut 1,5 kali rentang antarkuartil di atas kuartil ketiga (Q3) atau 1,5 kali rentang antarkuartil di bawah kuartil pertama (Q1).
Pencilan = Pengamatan > Q3 + 1,5*IQR atau Q1 – 1,5*IQR
2. Gunakan skor-z.
Skor-z memberi tahu Anda berapa banyak deviasi standar suatu nilai tertentu dari mean. Kami menggunakan rumus berikut untuk menghitung skor-z:
z = (X – μ) / σ
Emas:
- X adalah nilai data mentah tunggal
- μ adalah rata-rata populasi
- σ adalah simpangan baku populasi
Anda dapat mendefinisikan suatu observasi sebagai outlier jika skor z-nya kurang dari -3 atau lebih besar dari 3.
Pencilan = Pengamatan dengan skor z > 3 atau < -3
Cara Menghapus Pencilan dengan Python
Setelah Anda memutuskan apa yang Anda anggap sebagai outlier, Anda kemudian dapat mengidentifikasi dan menghapusnya dari kumpulan data. Untuk mengilustrasikan cara melakukan ini, kita akan menggunakan pandas DataFrame berikut:
import numpy as np import pandas as pd import scipy.stats as stats #create dataframe with three columns 'A', 'B', 'C' np.random.seed(10) data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C']) #view first 10 rows data[:10] ABC 0 13.315865 7.152790 -15.454003 1 -0.083838 6.213360 -7.200856 2 2.655116 1.085485 0.042914 3 -1.746002 4.330262 12.030374 4 -9.650657 10.282741 2.286301 5 4.451376 -11.366022 1.351369 6 14.845370 -10.798049 -19.777283 7 -17.433723 2.660702 23.849673 8 11.236913 16.726222 0.991492 9 13.979964 -2.712480 6.132042
Kita kemudian dapat mendefinisikan dan menghilangkan outlier menggunakan metode z-score atau metode rentang interkuartil:
Metode skor Z:
#find absolute value of z-score for each observation z = np.abs(stats.zscore(data)) #only keep rows in dataframe with all z-scores less than absolute value of 3 data_clean = data[(z<3).all(axis=1)] #find how many rows are left in the dataframe data_clean.shape (99.3)
Metode rentang antarkuartil:
#find Q1, Q3, and interquartile range for each column Q1 = data.quantile(q=.25) Q3 = data.quantile(q=.75) IQR = data.apply(stats.iqr) #only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3 data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)] #find how many rows are left in the dataframe data_clean.shape (89.3)
Kita dapat melihat bahwa metode skor za mengidentifikasi dan menghapus satu observasi sebagai outlier, sedangkan metode rentang interkuartil mengidentifikasi dan menghapus total 11 observasi sebagai outlier.
Kapan harus menghilangkan outlier
Jika ada satu atau lebih outlier pada data Anda, pertama-tama Anda harus memastikan bahwa outlier tersebut bukan akibat kesalahan entri data. Terkadang seseorang memasukkan nilai data yang salah saat menyimpan data.
Jika outlier ternyata disebabkan oleh kesalahan entri data, Anda dapat memutuskan untuk memberinya nilai baru seperti mean atau median kumpulan data.
Jika nilainya benar-benar outlier, Anda dapat memilih untuk menghapusnya jika nilai tersebut akan berdampak signifikan pada analisis Anda secara keseluruhan. Pastikan untuk menyebutkan dalam laporan akhir atau analisis Anda bahwa Anda telah menghapus outlier.
Sumber daya tambahan
Jika Anda bekerja dengan beberapa variabel sekaligus, Anda mungkin ingin menggunakan jarak Mahalanobis untuk mendeteksi outlier.