Laporan Proyek ML

Prediksi Churn
Pelanggan Telco

Memprediksi pelanggan telekomunikasi yang kemungkinan akan berhenti berlangganan menggunakan model machine learning berbasis Tree keputusan dengan hyperparameter tuning dan threshold optimization.

XGBoost Random Forest ROC-AUC 0.8486 Kaggle Dataset 7.043 Pelanggan

Telco Customer Churn

Dataset diambil dari Kaggle. Berisi data demografis dan perilaku penggunaan dari 7.043 pelanggan telekomunikasi. Variabel target menunjukkan apakah pelanggan berhenti berlangganan dalam satu bulan terakhir.

Tantangan utama: ketidakseimbangan kelas sedang (73/27). Model yang selalu memprediksi "tidak churn" bisa mendapat akurasi 73% tanpa belajar apapun — sehingga F1 dan ROC-AUC digunakan sebagai metrik utama.

7.043
pelanggan
20
fitur awal
27%
tingkat churn
6
fitur baru
Distribusi Kelas Target
73/27 No/Yes
Tidak Churn 5.174 (73%)
Churn 1.869 (27%)

Ketidakseimbangan sedang (2.7:1) — akurasi bukan metrik yang tepat. Gunakan F1 & ROC-AUC.

Mengapa Model Berbasis Tree?

Setelah analisis data eksploratif, dua model dipilih: Random Forest dan XGBoost. Keduanya merupakan metode ensemble berbasis Tree keputusan yang cocok untuk masalah ini.

PCA menunjukkan overlap kelas yang signifikan — data tidak bisa dipisahkan secara linear
Terdapat interaction effect antar fitur yang kuat (contract × internet service)
Pola distribusi non-linear pada tenure dan biaya berlangganan
Menangani ketidakseimbangan kelas secara native via class_weight dan scale_pos_weight
Tidak memerlukan feature scaling — bekerja langsung pada data yang sudah di-encode
Uji Chi-square dan T-test mengkonfirmasi sebagian besar fitur signifikan secara statistik

Alur Kerja End-to-End

Load Data
Cleaning
EDA
Feature Eng.
Modeling
Tuning
Inference
Feature Engineering
6 fitur baru ditambahkan berdasarkan domain knowledge — TotalServices, ChargePerService, AvgCharges, IsNewCustomer, IsLongTerm, TenureGroup
Strategi Encoding
Binary encoding untuk kolom Ya/Tidak. "No internet service" disamakan dengan "No". Ordinal untuk Contract. One-hot untuk InternetService dan PaymentMethod.
Penanganan Imbalance
class_weight='balanced' untuk Random Forest. scale_pos_weight untuk XGBoost. SMOTE dicoba tapi ditolak karena hasilnya lebih buruk.
Hyperparameter Tuning
Optuna TPE sampler dengan 20 percobaan per model. StratifiedKFold (5-fold) cross-validation digunakan sebagai objektif optimasi (F1 score).

Peningkatan Langkah demi Langkah

Step 1 — Penanganan class weight (RF) / scale_pos_weight (XGB) imbalance teratasi
Step 2 — Threshold tuning pada model baseline (0.50 → 0.27) recall +15%
Step 3 — Pencarian hyperparameter Optuna (20 percobaan) F1 0.60 → 0.64
Step 4 — Threshold di-tuning ulang pada model tuned ROC-AUC 0.8486
Step 5 — Eksperimen SMOTE ditolak — hasil lebih buruk

Performa Model

Semua model dievaluasi pada test set yang sama (20% dari data training). Metrik utama: Churn F1 dan ROC-AUC.

Model Churn F1 Recall ROC-AUC Threshold
RF Baseline0.6276%0.82310.27
XGB Baseline0.6081%0.82150.27
RF Tuned0.6374%0.84540.51
XGB Tuned terbaik0.6473%0.84860.57
RF + SMOTE0.6381%0.83770.40
XGB + SMOTE0.6285%0.83680.29
Perbandingan ROC-AUC — Semua Model
RF Baseline
0.8231
XGB Baseline
0.8215
RF + SMOTE
0.8377
XGB + SMOTE
0.8368
RF Tuned
0.8454
XGB Tuned ★
0.8486

10 Sampel yang Belum Pernah Dilihat Model

Sebagian kecil data dipisahkan sebelum proses training maupun feature engineering. Model tidak pernah melihat sampel ini selama keseluruhan pipeline. Threshold: 0.57.

No Confidence Score Prediksi Aktual Hasil
19.97%No ChurnNo Churn✓ Benar
275.89%ChurnChurn✓ Benar
322.31%No ChurnNo Churn✓ Benar
482.47%ChurnChurn✓ Benar
586.31%ChurnChurn✓ Benar
64.79%No ChurnNo Churn✓ Benar
722.89%No ChurnNo Churn✓ Benar
879.22%ChurnNo Churn✗ Salah
927.49%No ChurnNo Churn✓ Benar
1027.15%No ChurnNo Churn✓ Benar

9/10 benar pada data yang benar-benar unseen (90%)

Confidence Score per Sampel (threshold = 0.57)
1
9.97% — Benar
2
75.89% — Benar
3
22.31% — Benar
4
82.47% — Benar
5
86.31% — Benar
6
4.79% — Benar
7
22.89% — Benar
8
79.22% — Salah
9
27.49% — Benar
10
27.15% — Benar

Hijau = prediksi benar  ·  Merah = prediksi salah  ·  Panjang bar = confidence score

Temuan Utama

~43%
Tingkat churn pelanggan dengan kontrak month-to-month — kelompok paling berisiko
12 bln
Periode kritis — pelanggan baru paling rentan churn di tahun pertama
Fiber
Pengguna fiber optic tanpa add-on menunjukkan churn tinggi meski biaya lebih mahal
e-check
Pengguna electronic check lebih banyak churn dibanding metode pembayaran lainnya