银行营销转化预测与触达策略分析
基于银行营销数据集构建触达前转化预测模型,结合多模型比较、机会分层和 Streamlit 页面,为营销名单筛选和触达策略优化提供可落地支持。

本项目基于 `marketing-bank-marketing` 数据集,面向银行电话营销场景构建触达前转化预测系统。项目核心目标是提前识别更有可能响应营销活动的客户,帮助团队优化人工外呼名单、控制触达成本,并将模型输出进一步转化为高中低机会分层和策略建议。
1. 课题介绍
银行营销活动通常具有名单量大、人工触达成本高、转化率偏低等特点。如果在触达前无法识别高潜客户,营销资源往往会被浪费在低价值样本上。本项目围绕“营销前置预测”展开,不使用通话结束后才能获得的 `duration` 字段,而是仅依赖客户属性、账户状态和历史触达信息,构建更符合实际业务流程的预测系统。
2. 研究目标
- 建立银行营销转化预测模型
- 比较多种传统机器学习模型的效果差异
- 输出可解释的关键影响因素
- 按转化概率对客户进行机会分层并生成触达建议
- 提供可演示的 Streamlit 页面用于答辩和展示
3. 数据集介绍
项目使用 `datasets/marketing-bank-marketing/data/analysis_input.csv` 数据文件。该数据集共包含 45,211 条样本,目标变量为 `target`,正类标签为 `yes`。特征覆盖客户年龄、职业、婚姻、教育、账户余额、贷款状态、联系月份、营销频次、历史联系记录和历史营销结果等信息,适合进行营销转化预测和触达策略分析。
4. 使用的技术介绍
- `Python`:项目主开发语言
- `Pandas`、`NumPy`:数据清洗、特征工程和结果导出
- `scikit-learn`:预处理管道、模型训练、评估与模型保存
- `Matplotlib`、`Seaborn`:生成静态分析图
- `Streamlit`、`Plotly`:搭建交互式分析页面
- `joblib`:保存最佳模型
5. 使用的模型介绍
项目使用 `LogisticRegression`、`DecisionTree` 和 `RandomForest` 三种模型进行对比。逻辑回归提供稳定的线性基线,决策树方便解释规则结构,随机森林则用于提升非线性特征组合下的分类效果。项目最终选择 `RandomForest` 作为部署模型,其 `ROC-AUC` 达到 `0.7854`,在三种候选模型中表现最佳。
真实测试集结果如下:
| 模型 | Accuracy | Precision | Recall | F1 | ROC-AUC | Avg Precision |
|---|---|---|---|---|---|---|
| RandomForest | 0.8408 | 0.3777 | 0.5577 | 0.4504 | 0.7854 | 0.4343 |
| LogisticRegression | 0.7736 | 0.2821 | 0.6049 | 0.3847 | 0.7615 | 0.4021 |
| DecisionTree | 0.8622 | 0.4227 | 0.4858 | 0.4521 | 0.7292 | 0.3838 |
6. 数据分析与特征工程
建模前,项目将 `job`、`education`、`contact`、`poutcome` 中的 `unknown` 视作缺失并纳入管道插补,随后显式删除 `duration` 字段,避免引入通话结束后才可观测到的泄漏信息。为了增强模型的业务表达能力,还构造了 `age_group`、`month_num`、`quarter`、`has_previous_contact`、`previous_success`、`campaign_pressure`、`balance_log` 和 `negative_balance_flag` 等特征。
下图展示了营销转化类别分布,可用于说明样本存在明显类别不平衡问题,因此模型训练阶段使用了类别权重策略。

下图展示了不同模型在 `F1`、`ROC-AUC` 和 `Average Precision` 指标上的对比结果。

下图用于分析最佳模型的识别能力与主要影响因素。



从最佳模型的重要性结果看,`poutcome_success`、`poutcome_failure`、`pdays`、`age`、`housing_no`、`month_num`、`previous` 和 `balance` 等变量最关键。这说明历史触达结果、上次联系间隔、客户资产状态和营销时点,都会显著影响本次营销转化概率。
7. 业务分析内容
项目进一步围绕月份、触达频次和客户机会分层展开业务分析。月份转化率趋势帮助营销团队识别更有效的活动窗口;触达频次与转化率关系图则可用于评估过度触达是否带来边际递减风险。基于模型输出的转化概率,项目将客户划分为 `High`、`Medium` 和 `Low` 三档机会分层,并分别匹配高优先级人工跟进、优化话术继续跟进和低成本自动化培育等建议。
真实分层结果如下:
| 机会分层 | 样本数 | 平均余额 | 平均触达次数 | 真实转化率 |
|---|---|---|---|---|
| High | 9,043 | 2157.56 | 1.88 | 0.3640 |
| Medium | 15,817 | 1858.15 | 2.38 | 0.0876 |
| Low | 20,351 | 623.48 | 3.46 | 0.0301 |
这说明模型已经能够有效拉开优先级,高机会客户的真实转化率约为低机会客户的 12 倍,更适合进入人工重点触达名单。


8. 系统实现内容
项目目录包含:
- `train_marketing_conversion.py`:训练、评估、图表生成和产物导出
- `dashboard.py`:Streamlit 交互式展示页面
- `outputs/`:模型评估结果、机会分层、优先线索和图表
- `artifacts/`:最佳模型与元数据
Streamlit 页面分为“转化洞察”“机会分层”“单客户评估”三个模块,既能展示整体模型表现,也能输入单个客户信息实时输出预测概率和建议。
9. 项目亮点
- 明确围绕“触达前预测”设计,主动规避 `duration` 泄漏问题
- 包含多模型对比、图表分析、优先名单和交互式页面
- 输出可直接用于业务执行的机会分层与触达建议
- 适合作为课程设计、机器学习作品集或营销分析展示项目
10. 不足与改进方向
- 当前仍以传统机器学习模型为主,后续可加入 LightGBM、CatBoost 等更强模型
- 现有数据不包含更细粒度客户生命周期信息,暂未纳入长期价值预测
- 机会分层阈值仍基于业务规则划分,后续可结合成本收益进一步优化
11. 总结
本项目完成了从数据清洗、特征工程、转化预测建模、业务图表分析到页面展示的完整链路,能够较好支撑银行营销名单筛选和触达策略优化。最终项目在不使用 `duration` 泄漏字段的前提下,仍取得了 `0.7854` 的 `ROC-AUC`,并形成清晰的三档机会分层,具备较好的课程展示价值和实际业务解释力。