Capaian Pembelajaran
Setelah minggu ini kamu bisa:
- Mengintegrasikan seluruh siklus KDD menjadi satu pipeline end-to-end yang dapat diulang.
- Mencegah data leakage dengan
Pipeline+ColumnTransformer. - Membandingkan beberapa model secara adil memakai validasi silang berstrata.
- Menginterpretasikan model (permutation importance) dan menerjemahkannya ke rekomendasi bisnis.
- Menyusun repositori kode dan laporan proyek sesuai rubrik.
1. Peta Proyek Akhir
Masalah bisnis ─► Data ─► EDA ─► Preprocessing ─► Model ─► Evaluasi ─► Interpretasi ─► Rekomendasi
(Minggu 1) (1–3) (2) (4–16) (8) (17) (17–18)
Proyek akhir boleh memakai salah satu tugas berikut (atau kombinasi):
| Tugas | Contoh topik | Metrik utama |
|---|---|---|
| Asosiasi | Rekomendasi bundling produk minimarket | support, confidence, lift |
| Klasifikasi | Prediksi churn, risiko kredit, sentimen ulasan | F1, recall, ROC-AUC |
| Clustering | Segmentasi pelanggan RFM | silhouette, profil klaster |
| Anomali | Deteksi kerusakan mesin, fraud | precision/recall pada label terbatas |
| Big data | Analitik log jutaan baris dengan Spark | waktu proses, skalabilitas |
2. Pipeline yang Benar: Hindari Data Leakage
Data leakage = informasi dari data uji "bocor" ke proses pelatihan, sehingga skor terlihat bagus padahal model gagal di dunia nyata.
Contoh leakage yang sering terjadi:
| Kesalahan | Mengapa bocor | Perbaikan |
|---|---|---|
StandardScaler().fit(X) sebelum split |
mean/std memakai data uji | fit scaler hanya di data latih (di dalam Pipeline) |
| Imputasi median seluruh data | median dipengaruhi data uji | imputer di dalam Pipeline |
| Fitur dibuat dari target ("total_refund" untuk prediksi churn) | fitur hanya ada setelah kejadian | audit fitur: apakah tersedia saat prediksi? |
| Oversampling (SMOTE) sebelum CV | sampel sintetis mirip data validasi | resampling di dalam fold |
Solusi scikit-learn:
prep = ColumnTransformer([
("num", Pipeline([("imputer", SimpleImputer(strategy="median")),
("scaler", StandardScaler())]), kolom_numerik),
("cat", Pipeline([("imputer", SimpleImputer(strategy="most_frequent")),
("onehot", OneHotEncoder(handle_unknown="ignore"))]), kolom_kategorikal),
])
pipe = Pipeline([("prep", prep), ("model", LogisticRegression(class_weight="balanced"))])
cross_val_score(pipe, X, y, cv=StratifiedKFold(5, shuffle=True, random_state=42), scoring="f1")
Pada setiap fold, prep di-fit hanya dengan data latih fold tersebut. ✔
3. Membandingkan Model Secara Adil
- Baseline dulu: model paling sederhana (mis. tebak kelas mayoritas, atau pohon kedalaman 2). Model kompleks harus mengalahkannya.
- Gunakan fold yang sama (seed sama) untuk semua model.
- Laporkan mean ± std skor CV, bukan satu angka.
- Pilih metrik sesuai biaya bisnis: churn → recall/F1; fraud → precision@k; ranking → ROC-AUC.
- Data uji (hold-out) disentuh sekali di akhir.
Contoh tabel perbandingan (churn, F1 CV 5-fold):
| Model | F1 mean | F1 std |
|---|---|---|
| Logistic Regression (balanced) | 0.726 | 0.02 |
| Random Forest (balanced) | 0.694 | 0.02 |
| Decision Tree (depth 5) | 0.636 | 0.03 |
Model sederhana bisa menang! Pilih yang paling baik dan mudah dijelaskan.
4. Interpretasi: Permutation Importance
Ide: acak satu kolom fitur di data uji; jika skor turun banyak, fitur itu penting.
importance(f) = skor_asli − skor_setelah_kolom_f_diacak (rata-rata beberapa ulangan)
Kelebihan: berlaku untuk model apa pun, dihitung pada nama kolom asli (sebelum one-hot).
Terjemahkan ke bisnis:
| Temuan | Rekomendasi |
|---|---|
| Kontrak bulanan → churn tinggi | Promo upgrade ke kontrak tahunan |
| Lama langganan pendek → churn tinggi | Program onboarding 3 bulan pertama |
| Banyak keluhan → churn tinggi | Prioritas CS untuk pelanggan dengan ≥ 3 keluhan |
5. Reproducibility & Struktur Repositori
proyek-akhir-kelompok-X/
├── README.md ← masalah, cara menjalankan, ringkasan hasil
├── requirements.txt ← versi library
├── data/
│ ├── raw/ ← data asli (jangan diubah)
│ └── processed/ ← hasil preprocessing
├── notebooks/
│ ├── 01_eda.ipynb
│ ├── 02_preprocessing.ipynb
│ └── 03_modeling.ipynb
├── src/
│ ├── data.py ← fungsi load & clean
│ ├── features.py ← rekayasa fitur
│ └── model.py ← pipeline, training, evaluasi
├── tests/ ← test fungsi penting (pytest)
└── reports/
├── laporan.pdf
└── figures/
Checklist reproducibility:
- Semua
random_state/seed ditetapkan. -
requirements.txtberisi versi library. - Notebook bisa dijalankan ulang dari atas ke bawah (Restart & Run All) tanpa error.
- Data mentah tidak pernah ditimpa.
- Logika penting dipindah ke
src/dan diuji.
6. Template Laporan Proyek
- Ringkasan eksekutif (½ halaman, untuk manajer — tanpa jargon).
- Latar belakang & rumusan masalah bisnis.
- Data: sumber, ukuran, deskripsi atribut, masalah kualitas.
- Metodologi: tahapan KDD, preprocessing, algoritma & alasan pemilihan.
- Hasil: tabel perbandingan model (mean ± std), metrik data uji, visualisasi.
- Interpretasi & rekomendasi bisnis (minimal 3, dapat ditindaklanjuti).
- Keterbatasan & pekerjaan lanjutan (bias data, skalabilitas, drift).
- Lampiran: link repositori, pembagian tugas anggota.
7. Rubrik Penilaian Proyek
| Komponen | Bobot | Sangat baik (A) |
|---|---|---|
| Pemahaman masalah bisnis | 10% | Masalah jelas, metrik dikaitkan dengan biaya bisnis |
| Kualitas data & preprocessing | 20% | Masalah data teridentifikasi & ditangani tanpa leakage |
| Pemodelan & eksperimen | 25% | ≥ 3 model dibandingkan dengan CV, ada baseline, tuning wajar |
| Evaluasi & interpretasi | 20% | Metrik tepat, analisis error, importance dijelaskan |
| Rekomendasi bisnis | 10% | Konkret, realistis, berbasis temuan |
| Kode & reproducibility | 10% | Repo rapi, Run All lancar, ada test |
| Presentasi | 5% | Jelas, tepat waktu, menjawab pertanyaan dengan baik |
Ringkasan
- Satukan preprocessing + model dalam
Pipelineuntuk mencegah leakage. - Bandingkan model dengan CV berstrata, seed sama, laporkan mean ± std, mulai dari baseline.
- Interpretasi dengan permutation importance → rekomendasi bisnis.
- Repositori terstruktur + seed tetap + requirements = hasil dapat diulang.
Bacaan
- Dokumentasi scikit-learn: Pipelines and composite estimators, Common pitfalls and recommended practices.
- Kaufman dkk. (2012) — Leakage in Data Mining: Formulation, Detection, and Avoidance, ACM TKDD.
- Chapman dkk. — CRISP-DM 1.0 Step-by-step Data Mining Guide.
Tugas Minggu Ini
- Kerjakan
lab.ipynb(template pipeline end-to-end) lalu adaptasikan ke data proyekmu. - Kerjakan kuis (di web, atau baca
quiz.json). - Isi
exercise.py, lalu cek:python check.py 17 - Kumpulkan laporan + link repositori proyek.