Phân tích hành vi & Xây dựng các mô hình Machine Learning dự đoán tỷ lệ rời bỏ dịch vụ của khách hàng viễn thông (Customer Churn), từ đó đề xuất các giải pháp giữ chân khách hàng hiệu quả!
Trong ngành công nghiệp viễn thông (Telecommunications), chi phí để tìm kiếm một khách hàng mới (Customer Acquisition Cost - CAC) thường cao gấp nhiều lần so với việc duy trì một khách hàng hiện tại. Do đó, Customer Churn (Tỷ lệ khách hàng rời mạng) là một trong những chỉ số sống còn của doanh nghiệp.
Dự án này thực hiện:
- Khai phá dữ liệu (EDA): Tìm hiểu chân dung những khách hàng có xu hướng rời bỏ mạng.
- Kỹ thuật đặc trưng (Feature Engineering): Xử lý và trích xuất các đặc trưng quan trọng liên quan đến hợp đồng, chi phí và dịch vụ đi kèm.
- Xây dựng mô hình Machine Learning: Áp dụng các thuật toán phân loại (Classification) hiện đại để dự đoán sớm nguy cơ rời đi của từng khách hàng.
- Đề xuất chiến lược: Giúp bộ phận kinh doanh và CSKH đưa ra các chương trình ưu đãi, chăm sóc cá nhân hóa kịp thời.
Dự án sử dụng bộ dữ liệu chuẩn IBM Telco Customer Churn (WA_Fn-UseC_-Telco-Customer-Churn.csv) với 7,043 dòng và 21 cột thuộc tính, được chia thành 4 nhóm chính:
| Nhóm thuộc tính | Các trường dữ liệu tiêu biểu | Ý nghĩa |
|---|---|---|
| 👤 Nhân khẩu học | gender, SeniorCitizen, Partner, Dependents |
Giới tính, độ tuổi, tình trạng gia đình của khách hàng. |
| 📶 Dịch vụ sử dụng | PhoneService, MultipleLines, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, StreamingMovies |
Các gói dịch vụ viễn thông & giá trị gia tăng mà khách hàng đang đăng ký. |
| 💳 Thông tin tài khoản | tenure, Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges |
Thời gian gắn bó (tháng), loại hợp đồng (tháng/1 năm/2 năm), hình thức thanh toán & chi phí. |
| 🎯 Biến mục tiêu | Churn (Yes / No) |
Khách hàng đã rời mạng hay vẫn còn sử dụng dịch vụ. |
flowchart LR
A[📂 Dữ liệu thô Telco] --> B[🧹 Tiền xử lý & Làm sạch]
B --> C[📈 Khám phá dữ liệu EDA]
C --> D[⚙️ Feature Engineering & Encoding]
D --> E[🤖 Huấn luyện Mô hình ML]
E --> F[🎯 Đánh giá & Tối ưu Recall/F1]
F --> G[💡 Đề xuất Insights & Chiến lược]
- Kiểm tra và xử lý các giá trị rỗng/khoảng trắng trong cột
TotalCharges. - Ép kiểu dữ liệu phù hợp cho các thuộc tính số và định danh.
- Trực quan hóa tương quan giữa loại hợp đồng (
Contract) và tỷ lệ Churn. - Đánh giá tác động của thời gian sử dụng (
tenure) và cước phí (MonthlyCharges). - Tìm hiểu mức độ gắn kết của các dịch vụ hỗ trợ kỹ thuật (
TechSupport,OnlineSecurity).
- Chuyển đổi nhị phân và One-Hot Encoding cho các biến phân loại.
- Chuẩn hóa thang đo (Feature Scaling) với
StandardScaler/MinMaxScaler. - Xử lý mất cân bằng dữ liệu (Imbalanced Data) nếu cần bằng SMOTE hoặc class weights.
Thử nghiệm và so sánh hiệu năng của nhiều thuật toán:
- Baseline Model: Logistic Regression
- Tree-based Models: Decision Tree, Random Forest
- Ensemble & Boosting: XGBoost, LightGBM, CatBoost
- Ưu tiên các chỉ số: Recall (phát hiện tối đa khách hàng có nguy cơ Churn), Precision, ROC-AUC và F1-Score.
- Sử dụng Confusion Matrix và đường cong PR-Curve để lựa chọn ngưỡng phân loại (Threshold tuning) tối ưu nhất cho bài toán kinh doanh.
TelcoCustomerChurn/
├── data/
│ └── WA_Fn-UseC_-Telco-Customer-Churn.csv # Tập dữ liệu gốc IBM Telco Churn
├── notebooks/ # Jupyter Notebooks nghiên cứu & thử nghiệm
│ ├── 01_data_cleaning_eda.ipynb # Phân tích khám phá dữ liệu & trực quan hóa
│ └── 02_model_training_evaluation.ipynb # Huấn luyện và đánh giá mô hình ML
├── src/ # (Tùy chọn) Mã nguồn module tái sử dụng
│ ├── __init__.py
│ ├── data_loader.py # Hàm nạp và kiểm tra dữ liệu
│ ├── preprocessor.py # Pipeline tiền xử lý và encoding
│ └── evaluate.py # Hàm vẽ biểu đồ và đánh giá metrics
├── models/ # Nơi lưu trữ các mô hình đã huấn luyện (.pkl / .joblib)
├── .gitignore # Cấu hình bỏ qua file rác và môi trường ảo
├── README.md # Tài liệu hướng dẫn dự án
└── requirements.txt # Danh sách các thư viện cần cài đặt
- Đã cài đặt Python 3.9+
- Đã cài đặt công cụ quản lý gói
piphoặcconda
git clone https://github.com/hcmue-hmduck/TelcoCustomerChun.git
cd TelcoCustomerChurn# Tạo môi trường ảo
python3 -m venv venv
# Kích hoạt môi trường trên macOS/Linux:
source venv/bin/activate
# Kích hoạt môi trường trên Windows:
# venv\Scripts\activatepip install --upgrade pip
pip install -r requirements.txtjupyter lab
# hoặc
jupyter notebookMở các notebook trong thư mục notebooks/ để theo dõi các bước phân tích và kết quả mô hình hóa.
Important
Tối ưu chỉ số Recall: Trong bài toán dự đoán rời mạng, chi phí bỏ sót một khách hàng sắp rời đi (False Negative) thường đắt hơn nhiều so với việc gửi nhầm một tin nhắn khuyến mãi cho khách hàng trung thành (False Positive). Do đó mô hình cần được cân chỉnh để đạt Recall cao trên tập khách hàng Churn.
Tip
Xử lý TotalCharges: Cột TotalCharges trong dữ liệu gốc có thể chứa các giá trị khoảng trắng (" ") đối với khách hàng mới (tenure = 0). Hãy chuyển đổi sang kiểu số (pd.to_numeric(..., errors='coerce')) và điền giá trị 0 trước khi huấn luyện.