Capaian Pembelajaran
Setelah minggu ini kamu bisa:
- Memilih strategi imputasi nilai hilang yang tepat (mean, median, modus, konstanta).
- Mendeteksi dan menangani noise/outlier (aturan IQR, clipping, binning smoothing).
- Menyeragamkan data kategorikal yang tidak konsisten dan menghapus duplikat.
- Melakukan normalisasi (min-max, z-score), diskretisasi (equal-width, equal-frequency), dan binerisasi (one-hot).
- Mereduksi dimensi dengan Principal Component Analysis (PCA) dan menafsirkan explained variance.
1. Mengapa Preprocessing?
Garbage in, garbage out. Algoritma terbaik pun menghasilkan pola salah bila datanya kotor.
Dimensi kualitas data: akurasi, kelengkapan, konsistensi, ketepatan waktu, dapat dipercaya, dapat diinterpretasi.
Tugas utama preprocessing (Han & Kamber):
| Tugas | Isi | Bagian |
|---|---|---|
| Data cleaning | Isi nilai hilang, haluskan noise, buang outlier, perbaiki inkonsistensi | 2–4 |
| Data integration | Gabungkan banyak sumber, atasi redundansi (korelasi tinggi), konflik skema | 5 |
| Data reduction | Reduksi dimensi (PCA), reduksi jumlah data (sampling) | 8 |
| Data transformation | Normalisasi, diskretisasi, binerisasi, konstruksi atribut | 6–7 |
2. Nilai Hilang (Missing Values)
Mekanisme hilangnya data
| Jenis | Arti | Contoh |
|---|---|---|
| MCAR (Missing Completely At Random) | Hilang acak murni | Sensor error sesaat |
| MAR (Missing At Random) | Bergantung atribut lain yang teramati | Pelanggan muda lebih sering tidak mengisi pendapatan |
| MNAR (Missing Not At Random) | Bergantung nilai itu sendiri | Orang berpendapatan sangat tinggi enggan mengisi pendapatan |
Strategi penanganan
| Strategi | Kapan dipakai | Kelemahan |
|---|---|---|
| Hapus baris (listwise deletion) | Missing sedikit (< 5%) & MCAR | Kehilangan informasi |
| Hapus kolom | Missing sangat banyak (> 50–60%) | Fitur hilang |
| Isi mean | Numerik, distribusi simetris | Sensitif outlier, mengecilkan varians |
| Isi median | Numerik, distribusi miring / ada outlier | Mengecilkan varians |
| Isi modus | Kategorikal | Bisa membuat kelas mayoritas makin dominan |
| Isi per kelompok | Ada atribut pengelompok kuat | Perlu atribut pendukung |
| Model (KNN/regresi) | Ada pola antar atribut | Lebih mahal komputasi |
| Indikator missing | Fakta "hilang" itu sendiri informatif | Menambah kolom |
Contoh: umur = [25, 30, NaN, 35, 200]
- Mean (tanpa NaN) = (25+30+35+200)/4 = 72.5 → hasil imputasi tidak masuk akal karena outlier 200.
- Median = (30+35)/2 = 32.5 → lebih wajar.
Urutan kerja yang baik: tangani outlier/noise dulu, baru imputasi — supaya statistik pengisi tidak terdistorsi.
3. Noise & Outlier
Noise = galat acak/varians pada variabel terukur. Outlier = objek yang sangat berbeda dari mayoritas (bisa error, bisa juga kejadian penting — mis. fraud).
Deteksi dengan IQR (Tukey)
IQR = Q3 − Q1
batas bawah = Q1 − 1.5·IQR
batas atas = Q3 + 1.5·IQR
Deteksi dengan z-score
z = (x − μ) / σ; biasanya |z| > 3 dianggap outlier. Kelemahan: μ dan σ sendiri terdistorsi oleh outlier.
Penanganan
- Hapus (jika jelas error, mis. umur 999).
- Ganti NaN lalu imputasi (jika nilai mustahil secara domain, mis. umur < 0).
- Clipping / winsorizing: potong ke batas →
x' = min(max(x, bawah), atas). - Binning smoothing: urutkan data, bagi ke bin, ganti tiap nilai dengan mean/median/batas bin.
Contoh binning smoothing (equal-frequency, 3 bin): data harga 4, 8, 9, 15, 21, 21, 24, 25, 26, 28, 29, 34
| Bin | Isi | Smoothing by mean | Smoothing by boundaries |
|---|---|---|---|
| 1 | 4, 8, 9, 15 | 9, 9, 9, 9 | 4, 4, 4, 15 |
| 2 | 21, 21, 24, 25 | 22.75 ×4 | 21, 21, 25, 25 |
| 3 | 26, 28, 29, 34 | 29.25 ×4 | 26, 26, 26, 34 |
4. Inkonsistensi & Duplikat
- Format teks:
"JAKARTA"," Jakarta ","jakarta"→str.strip().str.title(). - Kode berbeda makna sama:
"L","l","Laki-laki"→ pemetaan (dict) ke satu kode. - Satuan berbeda: Rp vs ribuan Rp, cm vs m → konversi.
- Duplikat:
df.drop_duplicates(); hati-hati duplikat "hampir sama" (beda spasi/kapitalisasi) — seragamkan dulu, baru cek duplikat.
5. Integrasi Data
Saat menggabungkan sumber (CRM + kasir + web):
-
Entity identification:
cust_iddi satu sistem =id_pelanggandi sistem lain. -
Redundansi: atribut turunan (mis.
total = harga × jumlah) atau korelasi sangat tinggi. Deteksi dengan koefisien korelasi Pearson:r = Σ(x − x̄)(y − ȳ) / √(Σ(x − x̄)² · Σ(y − ȳ)²)Untuk kategorikal: uji χ² (chi-square).
-
Konflik nilai: harga dalam mata uang berbeda.
6. Normalisasi (Feature Scaling)
Wajib untuk algoritma berbasis jarak (KNN, K-Means, DBSCAN) dan PCA, karena atribut berskala besar (pendapatan ≈ 10⁷) akan mendominasi atribut kecil (umur ≈ 10¹).
| Metode | Rumus | Hasil | Catatan |
|---|---|---|---|
| Min-max | x' = (x − min)/(max − min) · (new_max − new_min) + new_min |
[0, 1] (default) | Sensitif outlier |
| Z-score | x' = (x − μ)/σ |
mean 0, std 1 | Lebih tahan outlier; σ populasi (ddof=0) seperti StandardScaler |
| Decimal scaling | x' = x / 10^j, j terkecil sehingga max|x'| < 1 |
(−1, 1) | Sederhana |
| Robust scaling | x' = (x − median)/IQR |
— | Paling tahan outlier |
Contoh min-max: pendapatan min 2 jt, max 12 jt. Nilai 7 jt → (7 − 2)/(12 − 2) = 0.5.
Contoh z-score: μ = 5 jt, σ = 2 jt. Nilai 9 jt → (9 − 5)/2 = 2.0.
⚠️ Fit parameter scaling (min, max, μ, σ) hanya pada data latih, lalu terapkan ke data uji — untuk menghindari data leakage.
7. Diskretisasi & Binerisasi
Diskretisasi (numerik → interval)
| Metode | Cara | Pandas |
|---|---|---|
| Equal-width | Rentang dibagi k interval sama lebar: lebar = (max − min)/k | pd.cut(x, k) |
| Equal-frequency | Tiap bin berisi ≈ n/k data (berbasis kuantil) | pd.qcut(x, k) |
| Berbasis domain | Batas ditentukan pakar | pd.cut(x, bins=[0,17,25,40,60,100]) |
Contoh equal-width: umur min 18, max 68, k = 5 → lebar 10 → bin [18,28), [28,38), [38,48), [48,58), [58,68].
Binerisasi / One-Hot Encoding
Atribut nominal kota ∈ {Jakarta, Bandung, Surabaya} → 3 kolom biner kota_Jakarta, kota_Bandung, kota_Surabaya. Untuk ordinal, lebih baik ordinal encoding (silver=0, gold=1, platinum=2) agar urutan terjaga.
8. Reduksi Dimensi: PCA
Kutukan dimensi (curse of dimensionality): semakin banyak atribut, data semakin jarang (sparse), jarak antar titik makin mirip, model mudah overfit.
PCA mencari sumbu baru (komponen utama) yang saling ortogonal dan memaksimalkan varians.
Algoritma PCA
- Standarisasi / center data:
Xc = X − mean(X). - Hitung matriks kovarians:
C = Xcᵀ Xc / (n − 1). - Hitung eigenvalue λ dan eigenvector v dari C; urutkan λ menurun.
- Ambil k eigenvector teratas → matriks
W(d × k). - Proyeksi:
Z = Xc · W. - Explained variance ratio komponen i =
λi / Σλ.
Contoh 2D: C = [[2, 1], [1, 2]] → eigenvalue 3 dan 1. Komponen 1 menjelaskan 3/(3+1) = 75% varians; eigenvector-nya [1, 1]/√2 (arah diagonal).
Memilih k: ambil komponen hingga kumulatif explained variance ≥ 90–95%, atau lihat "siku" pada scree plot.
Tanda (±) eigenvector bisa berbeda antar pustaka — hasil tetap setara.
Kelemahan PCA: komponen sulit diinterpretasi, hanya menangkap hubungan linear, perlu scaling.
9. Pipeline Preprocessing (urutan praktis)
1. Hapus duplikat persis
2. Seragamkan kategori (strip, title, mapping)
3. Nilai mustahil → NaN (umur < 0 atau > 100)
4. Outlier ekstrem → clip/hapus
5. Imputasi (median numerik, modus kategorikal)
6. Encoding (one-hot / ordinal)
7. Scaling (z-score / min-max)
8. (Opsional) PCA
Di scikit-learn: Pipeline + ColumnTransformer + SimpleImputer + StandardScaler + OneHotEncoder.
Ringkasan
- Tangani outlier sebelum imputasi; median lebih aman daripada mean untuk data miring.
- Seragamkan teks sebelum menghitung duplikat dan frekuensi kategori.
- Scaling wajib untuk algoritma berbasis jarak dan PCA; fit hanya di data latih.
pd.cut= equal-width,pd.qcut= equal-frequency.- PCA = eigen-dekomposisi matriks kovarians; pilih k berdasar explained variance.
Bacaan
- Han, Kamber & Pei — Data Mining: Concepts and Techniques, Bab 3 (Data Preprocessing).
- Dokumentasi scikit-learn: Preprocessing data dan Decomposition (PCA).
Tugas Minggu Ini
- Kerjakan
lab.ipynbsampai selesai. - Kerjakan kuis (di web, atau baca
quiz.json). - Isi
exercise.py, lalu cek:python check.py 2