
Pengarang: Gowtham SR
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Apa itu outlier? Bagaimana kita perlu mendeteksi outlier? Bagaimana kita perlu memperlakukan outlier?
Foto oleh penulis Daftar Isi: · Apa itu Outliers?
· Teknik Deteksi dan Penghapusan Outlier:
· Metode berbasis Z Score
· Teknik IQR
· Metode Persentil
Apa itu Outlier?
Pencilan adalah titik data atau pengamatan yang berperilaku sangat berbeda dari data lainnya.
Jika kita menemukan rata-rata kekayaan bersih sekelompok orang, dan jika kita menemukan Elon Musk dalam kelompok itu, maka analisis lengkapnya akan salah karena hanya satu outlier. Inilah alasan mengapa outlier harus diperlakukan dengan baik sebelum membangun model pembelajaran mesin.
Cara sederhana untuk menulis Pola Kompleks dengan Python hanya dalam 4 menit.
Jika kita sedang membangun model regresi linier, yang memiliki fitur independen, ‘Jumlah jam dipelajari’, dan fitur dependen, ‘nilai skor’, dan jika data didistribusikan seperti yang ditunjukkan di bawah ini, maka model akan berkinerja baik.
Jika kita memiliki 3 siswa yang mendapat nilai bagus bahkan setelah belajar lebih sedikit, maka garis regresi bergeser agar sesuai dengan poin outlier seperti yang ditunjukkan di bawah ini, sehingga memberikan hasil yang buruk pada data aktual.
Algoritme pembelajaran mesin yang melibatkan penghitungan bobot, seperti regresi linier, regresi logistik, Ada boost, dan model pembelajaran mendalam, akan terpengaruh oleh outlier. Algoritme berbasis pohon seperti Pohon keputusan, Hutan Acak akan lebih sedikit terpengaruh oleh outlier.
Bagaimana cara Memverifikasi Asumsi Regresi Linier?
Dalam algoritma deteksi anomali seperti deteksi penipuan asuransi atau deteksi penipuan kartu kredit, kita perlu menangkap outlier, dalam situasi seperti ini, tujuannya adalah untuk menangkap outlier.
Jadi kita perlu memperlakukan outlier dengan hati-hati,
Pemangkasan: Hapus outlier dari set data sebelum melatih model machine learning. Misalnya, Hapus siswa dari kumpulan data dalam contoh di atas.
Pembatasan: Pertahankan ambang batas maksimum atau minimum dan berikan nilai pada titik data yang sesuai. Misalnya, jika kita sedang mengerjakan fitur usia, kita dapat mempertahankan ambang batas 85 dan menetapkan nilai 85 untuk semua orang dengan usia lebih dari 85 tahun.
Diskritisasi: Ini adalah metode di mana fitur numerik diubah menjadi diskrit menggunakan bin. Misalnya, jika usia 80-90 dianggap sebagai tempat sampah tunggal, maka semua usia antara 80 dan 90 akan diperlakukan sama.
Teknik Deteksi dan Penghapusan Outlier:
1. Metode berbasis Z Score
Asumsi utama dalam teknik ini adalah bahwa data harus berdistribusi normal atau mendekati distribusi normal.
Jika data terdistribusi normal, Aturan Empiris mengatakan bahwa 68,2% titik data terletak di antara deviasi standar 1, 95,4% titik data terletak di antara deviasi standar ke-2, dan 99,7% titik data berada di antara simpangan baku ke-3.
Titik data yang berada di luar standar deviasi ke-3 dapat diperlakukan sebagai outlier.
Karena 99,7% data akan berada dalam 3 standar deviasi, kami dapat memperlakukan sisa data yang berada di luar 3 standar deviasi sebagai outlier.
Standardisasi atau Normalisasi Z-Score merupakan salah satu teknik penskalaan fitur, disini transformasi fitur dilakukan dengan cara mengurangkan mean dan membaginya dengan standar deviasi. Ini sering disebut normalisasi Z-score. Data yang dihasilkan akan memiliki mean sebagai 0 dan standar deviasi sebagai 1.
Standardisasi vs Normalisasi
Mari kita lihat implementasi praktis dari teknik ini.
impor panda sebagai pd
impor numpy sebagai np
impor seaborn sebagai sns
impor matplotlib.pyplot sebagai plt
peringatan impor
warnings.filterwarnings(‘ignore’) df = pd.read_csv(‘placement_dataset.csv’)
Dataset memiliki 2 fitur independen cgpa dan placement_exam_marks.
plt.figure(figsize=(10,5)) plt.subplot(1,2,1)
sns.distplot(df[‘cgpa’]) plt.subplot(1,2,2)
sns.distplot(df[‘placement_exam_marks’])
Distribusi data menunjukkan bahwa fitur cgpa berdistribusi normal, dan fitur lainnya, placemet_exam_marks miring.
Jadi, fitur cgpa memenuhi syarat untuk metode deteksi outlier berbasis metode Z Score.
print(‘Nilai rata-rata CGPA {}’.format(df[‘cgpa’].berarti()))
print(‘Nilai min CGPA {}’.format(df[‘cgpa’].min()))
print(‘Nilai maksimum CGPA {}’.format(df[‘cgpa’].maks()))
print(‘Nilai simpangan baku CGPA {}’.format(round(df[‘cgpa’].std(),2)))
# nilai batasnya adalah: print(‘Nilai tertinggi dari cgpa’, round(df[‘cgpa’].mean()+3*df[‘cgpa’].std(),3))
print(‘Nilai terendah dari cgpa’, bulat(df[‘cgpa’].mean()-3*df[‘cgpa’].std(),3))
Di bawah ini adalah 5 titik data yang terdeteksi sebagai outlier.
Ini juga dapat dicapai dengan menggunakan rumus skor Z, yang ditunjukkan di bawah ini.
Perawatan Outlier:
Trimming: Dalam metode ini, kita dapat menghapus semua titik data yang berada di luar 3 standar deviasi.
Terkadang, jika kumpulan data memiliki banyak outlier, maka kita kehilangan sejumlah besar data.
Pembatasan: Dalam metode ini, titik data outlier dibatasi dengan nilai tertinggi atau terendah, seperti yang ditunjukkan di bawah ini.
Mengapa Multikolinearitas Menjadi Masalah?
2. Teknik IQR
Metode ini digunakan ketika distribusi data miring.
IQR menggambarkan 50% nilai tengah ketika diurutkan dari terendah ke tertinggi. Untuk menemukan rentang interkuartil (IQR), pertama, temukan median (nilai tengah) dari bagian bawah dan atas data. Nilai-nilai tersebut adalah kuartil 1 (Q1) dan kuartil 3 (Q3). IQR adalah perbedaan antara Q3 dan Q1.
IQR = Q3-Q1
Nilai minimum = Q1–1.5 *IQR
Nilai maksimum = Q3+1.5*IQR
Titik data yang lebih kecil dari nilai minimum dan titik data yang lebih besar dari nilai maksimum diperlakukan sebagai outlier.
Mari kita lihat implementasi praktis dari teknik ini.
plt.figure(figsize=(10,5)) plt.subplot(1,2,1)
sns.distplot(df[‘cgpa’]) plt.subplot(1,2,2)
sns.distplot(df[‘placement_exam_marks’])
Fitur placement_exam_marks miring dan memenuhi syarat untuk metode deteksi outlier IQR.
df[‘placement_exam_marks’].condong()
0.835641949466834
#Menemukan IQR Q1 = df[‘placement_exam_marks’].kuantil(0.25)
Q3 = df[‘placement_exam_marks’].quantile(0.75) IQR = Q3-Q1 upper_limit = Q3+1.5*IQR
lower_limit = Q1-1.5*IQR print(‘batas bawah: ‘, lower_limit)
print(‘batas atas: ‘, batas_atas)
print(‘IQR:’ , IQR) batas bawah: -23.5
batas atas: 84.5
IQR: 27.0
15 titik data di atas terdeteksi sebagai outlier.
Pemangkasan:
Dalam metode ini, kita dapat menghapus semua titik data yang berada di luar batas minimum dan maksimum.
df_baru = df[~(df[‘placement_exam_marks’]>batas_atas) | (df[‘placement_exam_marks’]
plt.figure(figsize=(15,5)) plt.subplot(2,2,1)
sns.distplot(df[‘placement_exam_marks’]) plt.subplot(2,2,2)
sns.boxplot(df[‘placement_exam_marks’]) plt.subplot(2,2,3)
sns.distplot(df_new[‘placement_exam_marks’]) plt.subplot(2,2,4)
sns.boxplot(df_new[‘placement_exam_marks’])
Lihat sebaran data dan boxplot setelah dilakukan trimming fitur.
Pembatasan:
Dalam metode ini, titik data outlier dibatasi dengan nilai tertinggi atau terendah, seperti yang ditunjukkan di bawah ini.
batas_atas = 84,5
lower_limit = -23.5 df_cap = df.copy() df_cap[‘placement_exam_marks’] = np.where(df_cap[‘placement_exam_marks’]>batas_atas, batas_atas , df_cap[‘placement_exam_marks’])
df_cap[‘placement_exam_marks’] = np.where(df_cap[‘placement_exam_marks’]
0,0
Kita dapat membandingkan distribusi data sebelum dan sesudah pembatasan fitur.
plt.figure(figsize=(15,5)) plt.subplot(2,2,1)
sns.distplot(df[‘placement_exam_marks’]) plt.subplot(2,2,2)
sns.boxplot(df[‘placement_exam_marks’]) plt.subplot(2,2,3)
sns.distplot(df_cap[‘placement_exam_marks’]) plt.subplot(2,2,4)
sns.boxplot(df_cap[‘placement_exam_marks’])
Lihatlah distribusi data dan boxplot setelah pembatasan fitur.
Bagaimana cara Menganalisis data sebelum membuat model pembelajaran mesin?
3. Metode Persentil
Dengan kata sederhana, Persentil dapat dilihat sebagai nilai di bawah persentase data. Jika nilai saya 90 persen, maka itu berarti nilai saya lebih baik dari 90 persen siswa yang mengikuti ujian.
Jika Anda mencetak skor maksimum, yang kebetulan adalah 95, maka itu adalah 100 persentil, yang berarti Anda mendapat nilai lebih dari 100% siswa yang mengikuti ujian.
Ini adalah salah satu teknik paling sederhana yang digunakan untuk mendeteksi outlier dalam dataset. Kita hanya perlu menentukan threshold, Misal, jika kita memutuskan 1 persentil, maka itu berarti kita memperlakukan semua nilai di atas 99 persentil dan di bawah 1 persentil sebagai outlier.
Mari kita lihat bagaimana kita dapat menerapkan metode ini secara praktis.
df = pd.read_csv(‘berat-tinggi.csv’)
df.head()
Mari kita terapkan metode persentil ke fitur ‘Tinggi’.
plt.figure(figsize=(15,5)) plt.subplot(1,2,1)
sns.distplot(df[‘Height’]) plt.subplot(1,2,2)
sns.boxplot(df[‘Height’])
Perhatikan sebaran data dan boxplot fitur tersebut.
#Menemukan batas atas dan batas bawah upper_limit = df[‘Height’].kuantil(0.99)
batas_bawah = df[‘Height’].quantile(0.01) print(‘batas bawah: ‘, lower_limit)
print(‘batas atas: ‘, batas_atas) batas bawah: 58.13441158671655
batas atas: 74.7857900583366
201 titik data di atas terdeteksi sebagai outlier.
Pemangkasan
Dalam metode ini, kita dapat menghapus semua titik data yang berada di luar batas minimum dan maksimum.
df_baru = df[(df[‘Height’]>=58.13) & (df[‘Height’]<=74,78)]
df_baru
plt.figure(figsize=(15,5)) plt.subplot(1,2,1)
sns.distplot(df_new[‘Height’]) plt.subplot(1,2,2)
sns.boxplot(df_new[‘Height’])
Lihat sebaran data dan boxplot setelah dilakukan trimming fitur.
Pembatasan (Juga disebut Winsorization)
Dalam metode ini, titik data outlier dibatasi dengan nilai tertinggi atau terendah seperti yang ditunjukkan di bawah ini.
batas_atas = df[‘Height’].kuantil(0.99)
batas_bawah = df[‘Height’].quantile(0.01) df_cap = df.copy() df_cap[‘Height’] = np.where(df_cap[‘Height’]>batas_atas , batas_atas , df_cap[‘Height’])
df_cap[‘Height’] = np.where(df_cap[‘Height’]
plt.figure(figsize=(15,5)) plt.subplot(1,2,1)
sns.distplot(df_cap[‘Height’]) plt.subplot(1,2,2)
sns.boxplot(df_cap[‘Height’])
Lihatlah distribusi data dan boxplot setelah pembatasan fitur.
Silakan kunjungi tautan GitHub untuk mendapatkan kode lengkapnya.
Anda dapat terhubung dengan saya melalui LinkedIn
Bagaimana Seharusnya Kita Mendeteksi dan Mengobati Pencilan? awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI