Kaggle Playground Series (2025年11月) - 贷款还款概率预测
项目类型: 数据挖掘课程大作业 竞赛平台: Kaggle Playground Series 任务类型: 二分类 - 预测贷款还款概率 评估指标: AUC-ROC 数据规模: 训练集 594K, 测试集 255K
- 技术目标: 建立高性能预测模型(AUC > 0.920)
- 学习目标: 完整体验数据挖掘全流程
- 实践目标: 连接数据分析与业务价值
| 指标 | 数值 |
|---|---|
| 最终AUC | 0.9233 |
| 基线AUC | 0.9185 |
| 性能提升 | +0.0048 (0.52%) |
| 最佳模型 | Stacking集成 (XGBoost + LightGBM) |
loan-payback-no-kill-line/
├── README.md # 本文件 - 项目总览
├── CLAUDE.md # Claude Code项目指南
├── PROGRESS.md # 详细进展追踪
│
├── notebooks/ # Jupyter Notebooks (核心代码)
│ ├── 01_eda.ipynb # 探索性数据分析
│ ├── 02_preprocessing.ipynb # 数据预处理与特征工程
│ ├── 03_baseline_models.ipynb # 基线模型 (AUC: 0.9185)
│ ├── 04_business_insights.ipynb # 业务洞察与可解释性
│ └── 05_model_optimization.ipynb # 模型优化 (AUC: 0.9233)
│
├── docs/ # 分析报告 (课程作业文档)
│ ├── 01_EDA分析报告.md # EDA详细报告
│ └── 项目总结.md # 整体总结与反思
│
├── data/ # 数据目录
│ ├── train.csv # 训练数据 (594K samples)
│ ├── test.csv # 测试数据 (255K samples)
│ └── processed/ # 预处理后数据 (V1/V2/V3)
│
├── outputs/ # 预测结果
│ ├── submission_baseline.csv # 基线预测
│ └── submission_final.csv # 最终提交
│
├── models/ # 模型保存目录
└── requirements.txt # Python依赖
本项目使用 mise 进行环境管理 (Python 3.11):
# 安装依赖
mise run python -m pip install -r requirements.txt
# 或使用 uv (推荐,更快)
mise run uv pip install -r requirements.txt
# 激活虚拟环境
source .venv/bin/activate- 数据处理: pandas, numpy
- 可视化: matplotlib, seaborn
- 机器学习: scikit-learn, xgboost, lightgbm
- 超参数优化: optuna
- Notebook: jupyter
按顺序运行以下notebooks:
# 1. 探索性数据分析
jupyter notebook notebooks/01_eda.ipynb
# 2. 数据预处理
jupyter notebook notebooks/02_preprocessing.ipynb
# 3. 基线模型
jupyter notebook notebooks/03_baseline_models.ipynb
# 4. 业务洞察
jupyter notebook notebooks/04_business_insights.ipynb
# 5. 模型优化
jupyter notebook notebooks/05_model_optimization.ipynb- 来源: Kaggle Playground Series (合成数据,基于真实贷款数据)
- 训练集: 593,994 样本 × 13 列
- 测试集: 254,569 样本 × 12 列 (无目标变量)
| 特征 | 说明 | 范围 | 与目标相关性 |
|---|---|---|---|
annual_income |
年收入 ($) | 6K - 393K | +0.006 |
debt_to_income_ratio |
负债收入比 | 0.01 - 0.63 | -0.336 |
credit_score |
信用分数 | 395 - 849 | +0.235 |
loan_amount |
贷款金额 ($) | 500 - 49K | -0.004 |
interest_rate |
贷款利率 (%) | 3.2 - 21.0 | -0.131 |
| 特征 | 说明 | 唯一值数 | 区分度 |
|---|---|---|---|
employment_status |
就业状态 | 5 | 极强 (0.179) |
grade_subgrade |
贷款等级 | 30 | 强 (0.018) |
education_level |
教育水平 | 5 | 中 |
marital_status |
婚姻状况 | 4 | 弱 |
loan_purpose |
贷款用途 | 8 | 弱 |
gender |
性别 | 3 | 极弱 |
loan_paid_back: 是否还款 (1=还款, 0=违约)- 分布: 79.9% 还款 vs 20.1% 违约 (不平衡)
优秀的数据质量:
- 无缺失值
- 无重复行
- 训练/测试集分布一致 (差异 < 0.1%)
选择理由:
- 数据质量优秀,无需大量清洗
- 快速验证特征有效性
- 避免过度工程化
- 符合现代数据科学最佳实践
工作流程:
EDA → 简单预处理 + 基线模型 → 分析 → 特征工程 → 模型优化
-
类别不平衡处理
- XGBoost:
scale_pos_weight = 0.25 - Logistic Regression:
class_weight='balanced'
- XGBoost:
-
特征编码
- Label Encoding (适合树模型)
- RobustScaler (针对异常值)
-
超参数调优
- Optuna (TPE采样器)
- 30次试验/模型
-
模型集成
- Stacking (XGBoost + LightGBM)
- Logistic Regression元学习器
| 阶段 | 模型 | CV AUC | 提升 | 说明 |
|---|---|---|---|---|
| 基线 | Logistic Regression | 0.8745 | - | 线性基线 |
| 基线 | XGBoost (默认) | 0.9185 | - | 树模型基线 |
| 优化 | XGBoost (Optuna) | 0.9222 | +0.0037 | 超参数调优 |
| 优化 | LightGBM (Optuna) | 0.9232 | +0.0047 | 另一树模型 |
| 最终 | Stacking集成 | 0.9233 | +0.0048 | 最佳 |
-
最强预测特征:
employment_status(在XGBoost基线模型中贡献84.1%的特征重要性)- Retired(退休)群体:99.7%还款率,几乎无违约风险
- Unemployed(失业)群体:7.8%还款率,违约风险极高
- 该特征单独即可有效区分高低风险客户
-
特征工程效果验证: 创建的4个新特征未能提升模型性能
- V2数据集(15特征,含新特征):CV AUC = 0.9182
- V1数据集(11特征,仅基础特征):CV AUC = 0.9185
- 原因分析:新特征与现有特征信息重叠,未带来额外预测价值
- 最终决策:使用V1基础特征集进行后续优化
-
模型集成收益: Stacking集成相比最佳单模型提升有限但稳定
- LightGBM(最佳单模型):CV AUC = 0.9232 ± 0.0006
- Stacking(XGBoost+LightGBM):CV AUC = 0.9233 ± 0.0006
- 绝对提升:+0.0001(0.01%)
- 稳定性提升:标准差保持0.0006,5折CV结果更一致
- PROGRESS.md - 详细进展追踪与决策记录
- 完整的数据挖掘流程: EDA → 预处理 → 建模 → 评估 → 优化
- 多种技术对比: 线性模型 vs 树模型, 单模型 vs 集成
- 严谨的评估方法: 5-Fold Stratified CV, 多指标对比
- 现实世界联系: 特征的金融业务意义, 高/低风险群体画像
- 伦理考量: 避免性别歧视 (gender重要性极低), 模型可解释性
- 快速迭代策略: 基于数据质量选择开发路径, 先验证后优化
- 决策记录: 每个关键决策都有理由, 对比不同方案的权衡
- 位置:
outputs/submission_final.csv - 格式:
id, loan_paid_back(概率值 0.0-1.0) - 样本数: 254,569
- 交叉验证AUC: 0.9233
- Kaggle公开榜: 待提交
- Kaggle私有榜: 待揭晓
| 类别 | 工具/库 |
|---|---|
| 语言 | Python 3.11 |
| 环境管理 | mise, uv |
| 数据处理 | pandas, numpy |
| 可视化 | matplotlib, seaborn |
| 机器学习 | scikit-learn 1.x |
| 梯度提升 | xgboost, lightgbm |
| 超参数优化 | optuna |
| 开发工具 | Jupyter Notebook |
详见 PROGRESS.md
关键里程碑:
- 2026-01-03: 项目启动,EDA完成
- 2026-01-03: 基线模型达到0.9185 (超预期)
- 2026-01-03: 业务洞察分析完成
- 2026-01-03: 数据预处理与特征工程
- 2026-01-03: 模型优化达到0.9233 (达成目标)
本项目为数据挖掘课程作业,使用Kaggle Playground Series公开数据。
数据来源: Kaggle Playground Series S4E11
课程: 数据挖掘 项目时间: 2026年1月
最后更新: 2026-01-04 项目状态: 核心技术工作完成,文档已更新 下一步: 准备课程作业报告