0Pricing
Pandas & NumPy Academy · Pelajaran

Deteksi dan Penanganan Pencilan

Identifikasi pencilan dengan pagar IQR dan skor-Z, tentukan apakah pencilan perlu dibatasi, dihapus, atau ditandai, lalu dokumentasikan keputusannya.

Deteksi dan Penanganan Pencilan adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa Itu Pencilan?

Pencilan adalah titik data yang sangat berbeda dari bagian dataset lainnya. Pencilan dapat merupakan data yang benar (satu klien perusahaan dengan pesanan $500.000 dalam dataset yang rata-rata pesanannya $100) atau kesalahan (harga negatif atau salah ketik yang mengubah 120 menjadi 12.000). Langkah pertama dalam penanganan pencilan adalah menentukan apakah nilai ekstrem tersebut nyata dan bermakna atau merupakan masalah kualitas data — penanganannya sangat berbeda untuk kedua kondisi tersebut.

import pandas as pd
import numpy as np

df = pd.read_parquet('sales_clean.parquet')
print(df['revenue'].describe())

Deteksi Pencilan Secara Visual: Diagram Kotak

Diagram kotak adalah alat visual tercepat untuk menemukan pencilan. Kotak mencakup rentang antarkuartil (IQR, Q1–Q3), garis whisker memanjang hingga 1,5× IQR, dan titik di luar whisker digambarkan secara terpisah sebagai pencilan yang dicurigai. Gunakan df['revenue'].plot(kind='box') atau sns.boxplot() dari Seaborn untuk segera melihat pencilan tanpa menghitung 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()

Metode Batas IQR

Metode batas IQR menghitung rentang antarkuartil dan menetapkan batas pada Q1 − 1,5×IQR dan Q3 + 1,5×IQR. Nilai di luar batas tersebut ditandai sebagai pencilan. Pengali 1,5 merupakan standar untuk pencilan ringan; gunakan 3,0 hanya untuk pencilan ekstrem. Metode ini tahan terhadap pencilan: berbeda dari skor-Z, metode ini tidak mengasumsikan distribusi 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)}')

Metode Skor-Z untuk Deteksi Pencilan

Skor-Z mengukur berapa banyak simpangan baku suatu nilai dari rata-rata. Nilai dengan |Z| > 3 secara umum dianggap sebagai pencilan, yang mencakup 99,7% data yang berdistribusi normal. Namun, skor-Z peka terhadap pencilan yang hendak dideteksinya — nilai ekstrem menarik rata-rata dan memperbesar simpangan baku, sehingga berpotensi menyamarkan 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 vs. Menghapus Pencilan

Jangan pernah menghapus pencilan tanpa mendokumentasikan dan memberikan alasan atas keputusan tersebut. Sebagai gantinya, pertama-tama tandai pencilan dengan kolom boolean (is_outlier), lalu analisis apakah pencilan tersebut memiliki pola yang sama (wilayah yang sama, produk yang sama, atau hari yang sama). Jika pencilan tersebut memang benar, pertahankan dan modelkan secara eksplisit. Jika merupakan kesalahan, hapus dan catat jumlah penghapusannya dalam jejak audit pipeline.

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())

Membatasi (Winsorisasi) Pencilan

Pembatasan (atau winsorisasi) mengganti nilai di luar batas dengan nilai batas itu sendiri, bukan menghapus barisnya. Cara ini mempertahankan semua baris dalam dataset sekaligus mengurangi distorsi yang ditimbulkan pencilan pada model linear dan statistik ringkasan. Gunakan clip(lower=, upper=) untuk menerapkan batas dalam satu operasi tervectorisasi.

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 yang Miring ke Kanan

Distribusi pendapatan dan harga sering kali miring ke kanan dengan ekor panjang berisi nilai-nilai besar. Menerapkan transformasi log menggunakan np.log1p() (log dari nilai + 1 untuk menangani nol) memampatkan ekor dan membuat distribusi lebih simetris. Banyak model statistik dan visualisasi mengasumsikan kenormalan, sehingga transformasi log pada kolom pendapatan 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 pada Banyak Kolom

Saat menganalisis banyak kolom sekaligus, hitung batas pencilan IQR secara terprogram untuk semua kolom numerik. Iterasikan kolom numerik, hitung batasnya, lalu simpan hasilnya dalam kamus. Dengan demikian, Anda dapat membuat laporan pencilan lengkap hanya dalam beberapa baris, tanpa mengulangi perhitungan IQR secara manual untuk setiap kolom.

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 Diagram Sebar

Beberapa titik hanya menjadi pencilan jika dilihat sebagai kombinasi: unit_price sebesar $10 adalah normal, kuantitas 500 tidak biasa tetapi masih mungkin, namun unit_price sebesar $10 dengan kuantitas 500 untuk barang mewah patut dicurigai. Pencilan bivariat muncul sebagai titik yang terisolasi dalam diagram sebar. Gunakan df.plot.scatter('quantity', 'unit_price') untuk menemukan titik yang jauh dari 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 terkait pencilan harus dicatat: kolomnya, metode deteksi, ambang yang digunakan, jumlah baris yang ditandai, dan penanganan yang diterapkan (pertahankan, batasi, atau hapus). Dokumentasi ini melindungi analis dalam peninjauan kode dan audit. Simpan dokumentasi tersebut dalam kamus log pembersihan yang disimpan bersama dataset keluaran.

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 Dataset yang Telah Ditangani

Setelah menandai dan menangani pencilan, simpan DataFrame yang telah diperbarui. Pertahankan kolom penanda is_outlier dalam keluaran agar pengguna berikutnya dapat memilih untuk mengecualikan baris yang ditandai dalam analisis tertentu. Simpan versi yang telah dibatasi dalam kolom dengan akhiran yang jelas (_capped) di samping kolom asli agar pembersihan dapat dibatalkan.

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)

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari: mendeteksi pencilan dengan batas IQR dan skor-Z, menentukan apakah pencilan perlu ditandai, dibatasi, atau dihapus, serta menerapkan transformasi log pada distribusi yang miring ke kanan. Selanjutnya, kita akan membahas standardisasi label kategori yang tidak konsisten pada kolom teks.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Deteksi dan Penanganan Pencilan” gratis?

Ya — teks lengkap “Deteksi dan Penanganan Pencilan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Deteksi dan Penanganan Pencilan”?

Identifikasi pencilan dengan pagar IQR dan skor-Z, tentukan apakah pencilan perlu dibatasi, dihapus, atau ditandai, lalu dokumentasikan keputusannya. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Deteksi dan Penanganan Pencilan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendeteksi dan Menghapus Duplikat
  2. Deteksi dan Penanganan Pencilan
  3. Menyeragamkan Kategori yang Tidak Konsisten
  4. Validasi Skema dan Pernyataan
← Kembali ke Pandas & NumPy Academy