Pengesanan dan Pengendalian Pencilan
Kenal pasti pencilan dengan pagar IQR dan skor Z, tentukan sama ada hendak mengehadkan, membuang atau menandakannya, serta dokumentasikan keputusan.
Pengesanan dan Pengendalian Pencilan ialah pelajaran Pandas & NumPy Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pandas & NumPy Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Apakah Pencilan?
Pencilan ialah titik data yang berbeza dengan ketara daripada keseluruhan set data. Pencilan boleh jadi tulen (seorang pelanggan perusahaan dengan pesanan bernilai $500,000 dalam set data yang pesanan biasanya bernilai $100) atau berpunca daripada kesilapan (harga negatif atau kesilapan taip yang menukar 120 menjadi 12,000). Langkah pertama dalam pengendalian pencilan ialah menentukan sama ada nilai ekstrem itu benar dan bermakna atau merupakan masalah kualiti data — pengendaliannya sangat berbeza bagi kedua-dua keadaan.
import pandas as pd
import numpy as np
df = pd.read_parquet('sales_clean.parquet')
print(df['revenue'].describe())Pengesanan Pencilan Secara Visual: Plot Kotak
Plot kotak ialah alat visual terpantas untuk mengesan pencilan. Kotak merangkumi julat antara kuartil (IQR, Q1–Q3), sesungut memanjang sehingga 1.5× IQR, dan titik di luar sesungut diplot secara individu sebagai pencilan yang disyaki. Gunakan df['revenue'].plot(kind='box') atau sns.boxplot() Seaborn untuk melihat pencilan serta-merta tanpa mengira ambang secara manual.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(6, 4))
df['revenue'].plot(kind='box', ax=ax)
ax.set_title('Revenue Distribution — Box Plot')
plt.tight_layout()
plt.show()Kaedah Pagar IQR
Kaedah pagar IQR mengira julat antara kuartil dan mentakrifkan sempadan pada Q1 − 1.5×IQR dan Q3 + 1.5×IQR. Nilai di luar sempadan ini ditandai sebagai pencilan. Pengganda 1.5 ialah nilai standard untuk pencilan sederhana; gunakan 3.0 hanya untuk pencilan ekstrem. Kaedah ini teguh: tidak seperti skor-Z, kaedah ini tidak mengandaikan taburan normal.
Q1 = df['revenue'].quantile(0.25)
Q3 = df['revenue'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df['revenue'] < lower) | (df['revenue'] > upper)]
print(f'Q1={Q1:.0f}, Q3={Q3:.0f}, IQR={IQR:.0f}')
print(f'Bounds: [{lower:.0f}, {upper:.0f}]')
print(f'Outliers: {len(outliers)}')Kaedah Skor-Z untuk Pengesanan Pencilan
Skor-Z mengukur berapa banyak sisihan piawai jarak sesuatu nilai daripada min. Nilai dengan |Z| > 3 lazimnya dianggap sebagai pencilan, yang meliputi 99.7% data bertaburan normal. Walau bagaimanapun, skor-Z sensitif terhadap pencilan yang cuba dikesannya — nilai ekstrem menarik min dan meningkatkan sisihan piawai, lalu berpotensi menyembunyikan pencilan lain.
mean = df['revenue'].mean()
std = df['revenue'].std()
df['revenue_z'] = (df['revenue'] - mean) / std
z_outliers = df[df['revenue_z'].abs() > 3]
print(f'Z-score outliers (|z|>3): {len(z_outliers)}')
print(z_outliers[['revenue', 'revenue_z']].head())Menandai berbanding Membuang Pencilan
Jangan sekali-kali membuang pencilan tanpa mendokumentasikan dan memberikan justifikasi untuk keputusan tersebut. Sebaliknya, mula-mula tandai pencilan dengan lajur boolean (is_outlier), kemudian analisis sama ada pencilan itu berkongsi corak tertentu (wilayah yang sama, produk yang sama atau hari yang sama). Jika pencilan itu tulen, kekalkan dan modelkannya secara jelas. Jika pencilan itu berpunca daripada kesilapan, buangkannya dan catat bilangan yang dibuang dalam jejak audit saluran paip.
df['is_revenue_outlier'] = (df['revenue'] < lower) | (df['revenue'] > upper)
print('Flagged rows:', df['is_revenue_outlier'].sum())
print(df.groupby('is_revenue_outlier')['revenue'].describe())Mengehadkan (Winsorisasi) Pencilan
Pengehadan (atau winsorisasi) menggantikan nilai yang melebihi sempadan dengan nilai sempadan itu sendiri dan bukannya membuang baris tersebut. Ini mengekalkan semua baris dalam set data sambil mengurangkan herotan yang disebabkan oleh pencilan dalam model linear dan statistik ringkasan. Gunakan clip(lower=, upper=) untuk menggunakan had dalam satu operasi tervektor.
df['revenue_capped'] = df['revenue'].clip(lower=lower, upper=upper)
print('Original max:', df['revenue'].max())
print('Capped max:', df['revenue_capped'].max())
print('Rows changed:', (df['revenue'] != df['revenue_capped']).sum())Transformasi Log untuk Data Mencondong ke Kanan
Taburan hasil dan harga sering mencondong ke kanan dengan ekor panjang yang mengandungi nilai besar. Penggunaan transformasi log dengan np.log1p() (log nilai + 1 untuk mengendalikan sifar) memampatkan ekor dan menjadikan taburan lebih simetri. Banyak model statistik dan visualisasi mengandaikan kenormalan, jadi transformasi log pada lajur hasil sebelum pemodelan sering meningkatkan hasil.
df['log_revenue'] = np.log1p(df['revenue'])
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
df['revenue'].hist(bins=50, ax=axes[0])
axes[0].set_title('Original Revenue')
df['log_revenue'].hist(bins=50, ax=axes[1])
axes[1].set_title('Log Revenue')
plt.tight_layout()
plt.show()Pencilan dalam Berbilang Lajur
Apabila menganalisis banyak lajur serentak, kira sempadan pencilan IQR secara terprogram untuk semua lajur berangka. Lelahkan lajur berangka, kira sempadan, dan simpan hasilnya dalam kamus. Ini membolehkan anda menjana laporan pencilan lengkap dalam beberapa baris sahaja, bukannya mengulangi pengiraan IQR secara manual untuk setiap lajur.
numeric_cols = df.select_dtypes(include=['number']).columns
outlier_report = {}
for col in numeric_cols:
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1
n_out = ((df[col] < Q1 - 1.5*IQR) | (df[col] > Q3 + 1.5*IQR)).sum()
outlier_report[col] = n_out
print(pd.Series(outlier_report).sort_values(ascending=False))Pencilan Bivariat dengan Plot Serakan
Sesetengah titik hanya menjadi pencilan apabila dipertimbangkan bersama: unit_price sebanyak $10 adalah normal, kuantiti 500 adalah luar biasa tetapi masih mungkin, namun unit_price sebanyak $10 dengan kuantiti 500 untuk barang mewah adalah mencurigakan. Pencilan bivariat muncul sebagai titik terpencil dalam plot serakan. Gunakan df.plot.scatter('quantity', 'unit_price') untuk mengesan titik yang jauh daripada kelompok utama.
fig, ax = plt.subplots(figsize=(8, 5))
df.plot.scatter(x='quantity', y='unit_price', alpha=0.3, ax=ax)
ax.set_title('Quantity vs. Unit Price — Bivariate Outliers')
plt.tight_layout()
plt.show()Mendokumentasikan Keputusan tentang Pencilan
Setiap keputusan tentang pencilan hendaklah dicatat: lajur, kaedah pengesanan, ambang yang digunakan, bilangan baris yang ditandai, dan pengendalian yang digunakan (simpan, hadkan atau buang). Dokumentasi ini melindungi penganalisis dalam semakan kod dan audit. Simpan dokumentasi tersebut dalam kamus log pembersihan yang disimpan bersama set data output.
outlier_log = {
'column': 'revenue',
'method': 'IQR 1.5x',
'lower_bound': round(lower, 2),
'upper_bound': round(upper, 2),
'rows_flagged': int(df['is_revenue_outlier'].sum()),
'treatment': 'cap (winsorise)'
}
for k, v in outlier_log.items():
print(f'{k}: {v}')Menyimpan Set Data yang Dikendalikan
Selepas menandai dan mengendalikan pencilan, simpan DataFrame yang dikemas kini. Kekalkan lajur penanda is_outlier dalam output supaya pengguna seterusnya boleh memilih untuk mengecualikan baris yang ditandai bagi analisis tertentu. Simpan versi yang dihadkan dalam lajur dengan akhiran yang jelas (_capped) di samping lajur asal supaya pembersihan boleh diterbalikkan.
cols_to_save = [c for c in df.columns if c not in ['revenue_z']]
df[cols_to_save].to_parquet('sales_treated.parquet', index=False)
print('Outlier-treated dataset saved:', df.shape)Semakan Pantas
Uji pemahaman anda tentang konsep Analisis Data daripada pelajaran ini.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda mempelajari: mengesan pencilan dengan pagar IQR dan skor-Z, menentukan sama ada pencilan perlu ditandai, dihadkan atau dibuang, serta menggunakan transformasi log pada taburan yang mencondong ke kanan. Seterusnya, kita akan meneroka penyeragaman label kategori yang tidak konsisten dalam lajur teks.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Pengesanan dan Pengendalian Pencilan” percuma?
Ya — teks penuh “Pengesanan dan Pengendalian Pencilan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pandas & NumPy Academy, tingkat taraf kepada CoddyKit PRO. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengesanan dan Pengendalian Pencilan”?
Kenal pasti pencilan dengan pagar IQR dan skor Z, tentukan sama ada hendak mengehadkan, membuang atau menandakannya, serta dokumentasikan keputusan. Anda berlatih Pandas & NumPy Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pandas & NumPy Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pandas & NumPy Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Pengesanan dan Pengendalian Pencilan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengesan dan Membuang Pendua
- Pengesanan dan Pengendalian Pencilan
- Menyeragamkan Kategori Tidak Konsisten
- Pengesahan Skema dan Pernyataan