Peralatan telah lengkap kita kumpulkan sepanjang course ini: pra-pemrosesan dengan ColumnTransformer, perakitan Pipeline, penanganan ketidakseimbangan kelas, hingga evaluasi model yang jujur. Proyek ini merangkai semuanya menjadi satu analisis utuh — memprediksi pelanggan telecom yang akan berhenti berlangganan (churn). Churn adalah masalah klasifikasi biner dengan satu ciri yang mengubah hampir semua keputusan teknis: kelas yang ingin kita tangkap hanya muncul pada sebagian kecil pelanggan. Ketimpangan tersebut menentukan cara membagi data, metrik yang layak dipercaya, strategi pelatihan model, hingga ambang keputusan yang diambil tim bisnis. Keempat hal itulah alur proyek ini.
Masalah yang Ingin Diselesaikan #
Pelanggan yang berhenti berlangganan hampir tidak pernah memberi tahu lebih dulu. Yang tertinggal hanyalah pola kecil yang bisa dibaca dari data: masa berlangganan yang singkat, keluhan yang menumpuk selama setahun terakhir, atau jenis paket yang lebih sering ditinggalkan. Proyek ini membangun model klasifikasi yang membaca pola tersebut dan menandai pelanggan berisiko tinggi sebelum pelanggan tersebut pergi — sehingga tim retensi dapat mengirim penawaran tepat sasaran, bukan memberi diskon kepada seluruh basis pelanggan.
Sasaran proyek bukan akurasi setinggi mungkin. Pada dataset ini hanya sekitar 27% pelanggan tergolong churn, sehingga model yang selalu menebak “bertahan” langsung mencapai akurasi 73% tanpa membaca satu pun fitur. Karena itu penanganan imbalance menjadi pemeran utama: kita membandingkan class_weight="balanced" dengan SMOTE, mengukur keduanya dengan recall dan PR-AUC, lalu menutup proyek dengan keputusan yang paling berdampak — memilih ambang keputusan berbasis biaya retensi dan nilai pelanggan.
Dataset Pelanggan 500 Baris #
Dataset dibangkitkan sintetis oleh skrip 01_bangun_data.py dengan generator NumPy berseed 42, bukan diambil dari pelanggan nyata. Strukturnya meniru data pelanggan telecom dengan enam kolom:
usia— usia pelanggan dalam tahun;tenure_bulan— lama berlangganan, 0 sampai 72 bulan;layanan— jenis paket:Mobile,Internet, atauBundle;tagihan_bulanan_ribu— tagihan bulanan dalam ribu rupiah;komplain_12bulan— jumlah keluhan pelanggan dalam 12 bulan terakhir;churn— label biner;1berarti pelanggan berhenti berlangganan.
Label churn ditarik dari model logistik atas tenure, komplain, layanan, dan tagihan — mekanisme yang sama dengan LogisticRegression yang akan kita latih, sehingga sinyal di data benar-benar ada namun tetap tertutup derau pengambilan sampel. Seluruh proses memakai satu generator np.random.default_rng(42); dua eksekusi skrip menghasilkan berkas CSV identik bit demi bit.
Struktur dan Artefak Proyek #
proyek-klasifikasi-churn-pelanggan/
├── _index.md
├── bagian/
│ ├── part-1-eksplorasi-data/
│ ├── part-2-preprocessing-dan-split/
│ ├── part-3-model-dan-penanganan-imbalance/
│ └── part-4-evaluasi-bisnis/
├── data/
│ └── churn.csv
├── src/
│ ├── 01_bangun_data.py
│ ├── 02_eksplorasi.py
│ ├── 03_preprocessing_split.py
│ ├── 04_model_imbalance.py
│ └── 05_laporan.py
└── laporan/
└── laporan-churn.txtKelima skrip di src/ dirancang dijalankan dari root proyek sehingga path relatif data/churn.csv dan laporan/... selalu konsisten. Dua artefak tersimpan bersama kode: data/churn.csv sebagai dataset hasil Bagian 1, dan laporan/laporan-churn.txt sebagai ringkasan keputusan yang ditulis pada Bagian 4. Laporan sengaja berformat teks polos, bukan Markdown — berkas .md di dalam bundle akan dirender Hugo sebagai halaman kursus, sedangkan laporan ini adalah artefak analisis untuk dibaca apa adanya.
Tahapan Pengerjaan #
Proyek dikerjakan dalam empat bagian berurutan; setiap bagian menghasilkan skrip yang dapat dijalankan ulang kapan saja:
- Bagian 1: Eksplorasi Data — bangkitkan dataset, periksa kualitas, dan ukur laju churn per segmen pelanggan.
- Bagian 2: Preprocessing dan Split — rakit
ColumnTransformerdi dalamPipelinedan bagi data secara stratified sebelum resampling. - Bagian 3: Model dan Penanganan Imbalance — latih tiga konfigurasi
LogisticRegressiondan bandingkan recall serta PR-AUC. - Bagian 4: Evaluasi Bisnis — pilih ambang keputusan berbasis biaya dan tulis laporan proyek.
Kerjakan sesuai urutan karena setiap skrip membangun di atas asumsi dan hasil bagian sebelumnya.
Aturan Determinisme dan Cara Menjalankan #
Seluruh proyek patuh pada aturan determinisme: setiap estimator, pembagian data, dan sampler memakai random_state=42; dataset memakai np.random.default_rng(42); tidak ada skrip yang mencetak waktu, nama berkas acak, atau path absolut. Setiap skrip selesai dalam hitungan detik, sehingga seluruh proyek dapat diverifikasi ulang berkali-kali dengan hasil identik:
cd content/machine-learning/proyek/proyek-klasifikasi-churn-pelanggan
python3 src/01_bangun_data.py
python3 src/02_eksplorasi.py
python3 src/03_preprocessing_split.py
python3 src/04_model_imbalance.py
python3 src/05_laporan.pyMulailah dari Bagian 1: Eksplorasi Data — di sana dataset dibangkitkan dan karakter pelanggan yang rawan churn mulai terlihat sebelum satu pun model dilatih.
Referensi Resmi #
- Common pitfalls and recommended practices — imbalanced-learn — aturan resampling hanya pada data latih dan jebakan evaluasi data timpang.
- Classification metrics — scikit-learn User Guide — definisi recall, presisi, dan average precision.
- sklearn.linear_model.LogisticRegression — API
— parameter
class_weightdanmax_iter.
Kenali dataset pelanggan, distribusi churn, dan indikator awal perpindahan pelanggan.
Buka → # Bagian 2: Preprocessing dan SplitSiapkan fitur dan label dengan pembagian data yang menjaga proporsi kelas.
Buka → # Bagian 3: Model dan Penanganan ImbalanceLatih model klasifikasi dengan class weight dan SMOTE lalu bandingkan dampaknya.
Buka → # Bagian 4: Evaluasi BisnisPilih ambang keputusan berdasarkan biaya retensi dan nilai pelanggan.
Buka →