generated from Python-2026Spring/assignment-05-final-project-template
更新 README.md
This commit is contained in:
parent
2f2f63fb0b
commit
3f0d2ef149
139
README.md
139
README.md
@ -0,0 +1,139 @@
|
||||
# 项目名称
|
||||
|
||||
> **机器学习 (Python) 课程设计**
|
||||
|
||||
## 👥 团队成员
|
||||
|
||||
| 姓名 | 学号 | 贡献 |
|
||||
|------|------|------|
|
||||
|柘黎思 | 2211020146 | 数据处理、模型训练,Agent 开发、Streamlit,测试、文档撰写 |
|
||||
|
||||
## 📝 项目简介
|
||||
|
||||
## 项目简介
|
||||
本项目聚焦电信行业的客户流失问题,目标是通过机器学习模型预测客户的流失风险,并基于预测结果生成可落地的留存建议。
|
||||
|
||||
项目选用公开的电信客户数据集(包含7043条客户记录、19个特征),覆盖客户的合约类型、消费金额、服务开通情况等信息,最终解决“如何提前识别高流失风险客户并针对性挽留”的业务痛点。
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone http://hblu.top:3000/zhelisi/telco-customer-churn-prediction.git
|
||||
cd telco-customer-churn-prediction
|
||||
|
||||
# 安装依赖
|
||||
uv sync
|
||||
|
||||
# 运行 Demo
|
||||
uv run streamlit run app.py
|
||||
|
||||
---
|
||||
|
||||
## 1️⃣ 问题定义与数据
|
||||
|
||||
### 1.1 任务描述
|
||||
|
||||
预测任务类型:二分类任务(预测客户 “是否会流失”)。
|
||||
业务目标:通过客户属性识别高流失风险群体,输出可落地的留存建议,帮助电信企业降低客户流失率。
|
||||
|
||||
### 1.2 数据来源
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 数据集名称 |电信客户流失数据集(Telco Customer Churn Dataset) |
|
||||
| 数据链接 |已内置到项目仓库,路径:data/telco_churn.csv |
|
||||
| 样本量 | 7,043 条 |
|
||||
| 特征数 | 19 个(含客户属性、消费信息、服务开通情况等)|
|
||||
|
||||
### 1.3 数据切分与防泄漏
|
||||
|
||||
数据切分:按 7:3 比例将数据集随机切分为训练集与测试集,固定随机种子 random_state=42 保证结果可复现;未单独划分验证集,训练过程中使用模型内置的交叉验证(RandomForest 的cv参数)。
|
||||
防泄漏措施:
|
||||
所有特征工程(如缺失值填充、编码)仅在训练集上拟合,再应用到测试集;
|
||||
模型训练过程中未使用测试集的任何信息,避免数据泄漏。
|
||||
|
||||
## 2️⃣ 机器学习流水线
|
||||
|
||||
### 2.1 基线模型
|
||||
|
||||
| 模型 | 指标 | 结果 |
|
||||
|Logistic Regression|ROC-AUC|0.78|
|
||||
|-------------------|准确率|0.78|
|
||||
|--------- ---------|F1-score|0.65|
|
||||
|
||||
|
||||
### 2.2 进阶模型
|
||||
|
||||
| 模型 | 指标 | 结果 |
|
||||
|------|------|------|
|
||||
|随机森林(Random Forest)|ROC-AUC|0.86 |
|
||||
|------------------------|准确率|0.85|
|
||||
|------------------------|F1-score|0.76|
|
||||
|
||||
### 2.3 误差分析
|
||||
误差分析
|
||||
表现不佳的样本特征:高月消费 + 月付合约 + 在网时长 < 3 个月的客户(实际流失但模型预测为 “不流失”)。
|
||||
原因:
|
||||
这类客户的特征组合在训练集中占比少,模型学习不足;
|
||||
“月付合约” 与 “高月消费” 的特征关联度在训练集中未充分体现,导致模型对该群体的风险识别能力弱。
|
||||
|
||||
|
||||
## 3️⃣ Agent 实现
|
||||
|
||||
### 3.1 工具定义
|
||||
|
||||
| 工具名 | 功能 | 输入 | 输出 |
|
||||
|--------|------|------|------|
|
||||
| predict_risk| 调用随机森林模型预测客户流失概率| CustomerFeatures(客户特征字典) | float |
|
||||
|explain_features|输出影响该客户流失的关键特征| CustomerFeatures(客户特征字典) | list [str](关键特征列表,如 ["MonthlyCharges", "Contract"]) |
|
||||
|
||||
### 3.2 决策流程
|
||||
|
||||
Agent 的决策流程为 “预测→解释→建议” 三步:
|
||||
1.调用predict_risk工具:输入客户特征,获取流失概率;
|
||||
2.调用explain_features工具:基于同一特征,获取影响流失的关键特征;
|
||||
3.生成决策结果:结合流失概率(如≥0.7 判定为高风险)与关键特征,输出对应的留存建议。
|
||||
|
||||
### 3.3 案例展示
|
||||
|
||||
**输入**:
|
||||
```
|
||||
请分析这位客户的流失风险:年龄 35,在网时长 2 个月,月消费 89.99,合约类型 月付
|
||||
```
|
||||
|
||||
**输出**:
|
||||
```json
|
||||
{
|
||||
"risk_score": 0.72,
|
||||
"decision": "高风险,建议主动挽留",
|
||||
"actions": ["发送1年合约立减50元优惠短信", "专属客服1对1回访"],
|
||||
"rationale": "该客户属于“在网时长<3个月+月付合约+高月消费”群体,是流失高风险特征组合"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4️⃣ 开发心得
|
||||
|
||||
### 4.1 主要困难与解决方案
|
||||
|
||||
最大困难:跨机运行时出现 “文件找不到” 错误(如app.py未上传仓库、路径使用绝对路径)。
|
||||
解决方案:
|
||||
确保所有核心文件(app.py、数据、模型)上传至仓库;
|
||||
改用Path(__file__).parent获取相对路径,避免依赖本地绝对路径。
|
||||
|
||||
### 4.2 对 AI 辅助编程的感受
|
||||
|
||||
体验:效率提升明显,能快速解决语法、工具使用(如uv依赖管理)等问题。
|
||||
帮助场景:
|
||||
1.编写README.md的结构化内容;
|
||||
2.排查跨机运行的错误(如终端命令、路径问题)。
|
||||
注意点:AI 给出的代码可能存在 “本地适配性” 问题(如 Windows/Linux 命令差异),需要结合实际环境验证。
|
||||
|
||||
### 4.3 局限与未来改进
|
||||
|
||||
当前局限:模型对 “高月消费 + 月付合约” 的样本识别精度不足;Agent 的建议多样性有限。
|
||||
未来改进:
|
||||
1.针对高风险样本增加特征工程(如计算 “月消费 / 在网时长” 比值);
|
||||
2.扩展 Agent 的工具集(如接入客户历史交互数据),生成更个性化的留存建议。
|
||||
Loading…
Reference in New Issue
Block a user