---
marp: true
paginate: true
class: bagian-iv
header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen'
footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026'
---
# Bab 13 — Data Preprocessing
## Mengubah Data Mentah menjadi Siap Analisis
*Pertemuan 13 (M13) | Sub-CPMK 4.2 | CPMK04 | CPL07*
Fase: **Analyzing & Communicating** (M12–M16) · Bagian IV
**Universitas Putra Bangsa** | Fak. Sains & Teknologi · Prodi Teknik Informatika
---
## Agenda Pertemuan 13
1. Preprocessing vs Validasi — perbedaan yang kritis
2. Data Refinement Pipeline
3. Data Cleaning — missing values, duplikat, error
4. Data Transformation — encoding, agregasi, feature creation
5. Normalization & Scaling
6. Empat Prinsip Preprocessing
7. Cognitive Traps & Studi Kasus
8. Output Praktis: Dataset Bersih + Dokumentasi Preprocessing
---
## Capaian Pembelajaran
Setelah pertemuan ini, mahasiswa mampu:
- Membedakan **validasi data** (Bab 11) vs **preprocessing data** (Bab 13)
- Menerapkan teknik **data cleaning**: missing values, duplikat, outlier handling
- Melakukan **transformasi data** yang sesuai (encoding, normalisasi, agregasi)
- Mendokumentasikan setiap langkah preprocessing untuk **reproduksi**
- Menerapkan **4 prinsip preprocessing** agar tidak memperkenalkan bias
> Sub-CPMK 4.2 → Melakukan preprocessing data untuk analisis (CPL07)
---
## Data Refinement Pipeline
*Dari data tervalidasi hingga siap dianalisis*
**Raw Data Tervalidasi** (Bab 11) ↓ Cleaning (hapus noise, missing, duplikat) ↓ Transformation (ubah format/representasi) ↓ Normalization (sesuaikan skala/distribusi) ↓ **Processed Data** ↓ Analysis Ready (input Bab 14)
> **Prinsip fundamental:** Preprocessing harus **dapat direproduksi** dan **terdokumentasi**. Tidak boleh ada langkah yang dilakukan tanpa jejak.
---
## Validasi vs Preprocessing — Garis yang Jelas
*Perbedaan yang sering tertukar*
| Aspek | Validasi (Bab 11) | Preprocessing (Bab 13) |
|-------|-----------------|----------------------|
| **Tujuan** | Memastikan data benar | Mempersiapkan data untuk analisis |
| **Pertanyaan** | "Apakah data ini valid?" | "Bagaimana mengoptimalkan data untuk analisis?" |
| **Tindakan** | Identifikasi masalah + keputusan | Transformasi + normalisasi |
| **Output** | Dataset valid + catatan anomali | Dataset siap analisis |
| **Urutan** | **Pertama** | **Kedua** (setelah validasi) |
> Jika preprocessing dilakukan sebelum validasi → kita mungkin "memperbaiki" data yang seharusnya diinvestigasi lebih lanjut.
---
## Data Cleaning — Tiga Masalah Utama
### 1. Missing Values
```python
# Identifikasi
print(df.isnull().sum())
# Strategi penanganan (pilih berdasarkan konteks):
# a. Drop baris jika jumlah kecil dan tidak sistemik
df.dropna(subset=['f1_micro'], inplace=True)
# b. Impute dengan mean (hanya untuk data kontinu, non-kritis)
df['time_sec'].fillna(df['time_sec'].mean(), inplace=True)
# c. Flag sebagai missing category (untuk data kategoris)
df['hardware'].fillna('unknown', inplace=True)
```
### 2. Duplikat (run yang ter-log dua kali)
```python
df.drop_duplicates(subset=['run_id'], keep='first', inplace=True)
```
### 3. Format Error (nilai "N/A" teks di kolom numerik)
```python
df['time_sec'] = pd.to_numeric(df['time_sec'], errors='coerce')
```
---
## Data Transformation
*Mengubah representasi data untuk memudahkan analisis*
### Encoding Variabel Kategoris
```python
# Label encoding (untuk variabel ordinal)
scenario_map = {'baseline': 0, '+attention': 1, '+ensemble': 2}
df['scenario_code'] = df['scenario'].map(scenario_map)
# One-hot encoding (untuk variabel nominal, tanpa urutan)
df_encoded = pd.get_dummies(df, columns=['hardware'])
```
### Agregasi
```python
# Hitung statistik per skenario (dari 10 run ke 1 baris per skenario)
summary = df.groupby('scenario').agg({
'f1_micro': ['mean', 'std', 'min', 'max'],
'time_sec': ['mean', 'std']
}).round(4)
```
---
## Normalization & Scaling
*Mengapa diperlukan dan kapan digunakan*
| Teknik | Formula | Kapan Digunakan |
|--------|---------|----------------|
| Min-Max Normalization | $x' = \frac{x - x_{min}}{x_{max} - x_{min}}$ | Ketika distribusi tidak diketahui, butuh skala [0,1] |
| Z-Score Standardization | $z = \frac{x - \mu}{\sigma}$ | Ketika data asumsi distribusi normal, ML yang sensitif skala |
| Log Transformation | $x' = \log(x)$ | Data sangat skewed (mis. execution time) |
| Robust Scaling | $x' = \frac{x - Q2}{Q3 - Q1}$ | Ada outlier yang tidak bisa dibuang |
> **Penting:** Fit scaler HANYA pada training data, apply ke test data. Jangan fit pada seluruh dataset → data leakage!
---
## Empat Prinsip Preprocessing
*Standar yang membedakan preprocessing ilmiah dari ad-hoc*
**1. Consistency** — Terapkan langkah yang sama persis ke semua skenario
```python
# Satu fungsi preprocessing, dipanggil untuk setiap skenario
def preprocess(df): return pipeline.fit_transform(df)
```
**2. Transparency** — Setiap langkah terdokumentasi dengan alasan
```
[STEP-01] Normalisasi waktu eksekusi dengan log transform.
Alasan: distribusi sangat right-skewed (skewness=4.3).
```
**3. Reproducibility** — Simpan pipeline sebagai kode, bukan manual
```python
joblib.dump(pipeline, 'preprocessing_pipeline.pkl')
```
**4. Minimal Distortion** — Jangan hapus karakteristik penting dari data
> Normalisasi boleh mengubah skala, tidak boleh mengubah urutan atau hubungan relatif.
---
# Cognitive Traps
## Bab 13 — Data Preprocessing
---
## Cognitive Traps — Bab 13
**"Preprocessing dilakukan dulu sebelum memahami data"**
Preprocessing tanpa pemahaman konteks dapat memperkenalkan bias yang tidak disadari. Selalu lakukan exploratory analysis terlebih dahulu, baru tentukan preprocessing yang tepat.
**"Normalisasi selalu diperlukan"**
Beberapa algoritma (decision tree, random forest) tidak sensitif terhadap skala. Normalisasi tidak selalu meningkatkan performa. Pilih berdasarkan kebutuhan algoritma, bukan habit.
**"Data leakage tidak masalah karena kita tahu hasilnya"**
Data leakage (fit scaler pada entire dataset termasuk test) adalah invalidasi hasil yang fundamental. Hasil yang tinggi karena data leakage bukan prestasi — itu artifact.
**"Langkah preprocessing tidak perlu didokumentasikan satu per satu"**
Jika preprocessing tidak terdokumentasi, penelitian tidak dapat direproduksi. Penelitian yang tidak dapat direproduksi tidak dapat diverifikasi. Ini adalah standar minimum publikasi ilmiah.
---
## Studi Kasus 1 — Data Leakage (Basic)
**Konteks:** Mahasiswa melakukan normalisasi sebelum train/test split.
```python
# Data Leakage
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # Fit pada SEMUA data, termasuk test!
X_train, X_test = train_test_split(X_scaled, test_size=0.2)
# Masalah: scaler telah "melihat" test data → test data tidak independen lagi
```
```python
# Benar
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
X_train, X_test = train_test_split(X, test_size=0.2)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # Fit HANYA pada training
X_test_scaled = scaler.transform(X_test) # Transform saja test data
```
---
## Studi Kasus 2 — Inconsistent Preprocessing (Advanced)
**Konteks:** Researcher membandingkan Model A dan Model B.
**Masalah:**
- Model A: preprocessing dengan normalisasi Min-Max
- Model B: preprocessing dengan standardisasi Z-score
- Kedua model dibandingkan sebagai "perbandingan arsitektur"
**Tapi preprocessing yang berbeda = bukan hanya arsitektur yang berbeda!**
Model B mungkin lebih baik bukan karena arsitekturnya, tapi karena Z-score lebih cocok dengan distribusi data ini.
**Solusi:**
1. Tentukan satu pipeline preprocessing yang sama untuk semua model yang dibandingkan
2. Jika ingin membandingkan teknik preprocessing → buat itu sebagai variabel eksperimen eksplisit
---
## Dokumentasi Preprocessing
*Format standar yang harus ada dalam laporan*
```
PREPROCESSING DOCUMENTATION
Dataset: exp03_summary_validated.csv (setelah validasi Bab 11)
Tanggal preprocessing: 2026-05-05
Peneliti: [Nama]
LANGKAH PREPROCESSING:
[STEP-01] Log transform pada kolom 'time_sec'
Alasan: skewness = 4.3 (right-skewed). Log transform menurunkan ke 0.8.
Kode: df['time_sec'] = np.log1p(df['time_sec'])
[STEP-02] One-hot encoding pada kolom 'scenario'
Alasan: variabel nominal (tidak ada urutan).
Output: 3 kolom dummy (attendance_baseline, +attention, +ensemble)
[STEP-03] Min-Max normalization pada seluruh fitur numerik
Alasan: SVM dan neural network sensitif terhadap skala.
Penting: Scaler di-fit HANYA pada training fold (cross-validation).
OUTPUT: exp03_processed.csv + preprocessing_pipeline.pkl
```
---
## Ringkasan Pertemuan 13
| Konsep | Inti |
|--------|------|
| Preprocessing vs Validasi | Validasi dulu (cek kebenaran), preprocessing kemudian (siapkan analisis) |
| Cleaning | Missing (drop/impute/flag) + Duplikat + Format Error |
| Transformation | Encoding kategoris + Agregasi runs → per-skenario |
| Normalization | Min-Max/Z-score/Log/Robust sesuai konteks + hindari data leakage |
| 4 Prinsip | Consistency · Transparency · Reproducibility · Minimal Distortion |
---
## Final Statement & Output Praktis
"Preprocessing yang tidak terdokumentasi adalah black box — tidak ada yang bisa memverifikasi apakah transformasi yang dilakukan valid atau tidak, termasuk penelitinya sendiri setelah 6 bulan."
### Output Praktis M13
Kumpulkan:
1. **Dataset bersih** (`exp_processed.csv` — siap untuk analisis)
2. **Preprocessing pipeline** (kode Python / file `.pkl`)
3. **Dokumentasi preprocessing** (format [STEP-XX] lengkap dengan alasan)
---
## Referensi Utama — Bab 13
- Famili, A., Shen, W. M., Weber, R., & Simoudis, E. (1997). Data preprocessing and intelligent data analysis. *Intelligent Data Analysis, 1*(1), 3–23.
- Garcia, S., Luengo, J., & Herrera, F. (2015). *Data preprocessing in data mining*. Springer.
- Kaufman, S., Rosset, S., Perlich, C., & Stitelman, O. (2012). Leakage in data mining: Formulation, detection, and avoidance. *ACM Transactions on Knowledge Discovery from Data, 6*(4), 1–21.
- Géron, A. (2022). *Hands-on machine learning with Scikit-Learn, Keras, and TensorFlow* (3rd ed.). O'Reilly Media.