Skip to content

kiramyby/loan-payback-no-kill-line

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

贷款还款预测 - 数据挖掘课程项目

Kaggle Playground Series (2025年11月) - 贷款还款概率预测

项目概览

项目类型: 数据挖掘课程大作业 竞赛平台: Kaggle Playground Series 任务类型: 二分类 - 预测贷款还款概率 评估指标: AUC-ROC 数据规模: 训练集 594K, 测试集 255K

项目目标

  1. 技术目标: 建立高性能预测模型(AUC > 0.920)
  2. 学习目标: 完整体验数据挖掘全流程
  3. 实践目标: 连接数据分析与业务价值

最终成果

指标 数值
最终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 列 (无目标变量)

特征说明

数值特征 (5个)

特征 说明 范围 与目标相关性
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

类别特征 (6个)

特征 说明 唯一值数 区分度
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%)

核心方法论

开发策略: 快速迭代法

选择理由:

  1. 数据质量优秀,无需大量清洗
  2. 快速验证特征有效性
  3. 避免过度工程化
  4. 符合现代数据科学最佳实践

工作流程:

EDA → 简单预处理 + 基线模型 → 分析 → 特征工程 → 模型优化

关键技术

  1. 类别不平衡处理

    • XGBoost: scale_pos_weight = 0.25
    • Logistic Regression: class_weight='balanced'
  2. 特征编码

    • Label Encoding (适合树模型)
    • RobustScaler (针对异常值)
  3. 超参数调优

    • Optuna (TPE采样器)
    • 30次试验/模型
  4. 模型集成

    • 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 最佳

关键发现

  1. 最强预测特征: employment_status(在XGBoost基线模型中贡献84.1%的特征重要性)

    • Retired(退休)群体:99.7%还款率,几乎无违约风险
    • Unemployed(失业)群体:7.8%还款率,违约风险极高
    • 该特征单独即可有效区分高低风险客户
  2. 特征工程效果验证: 创建的4个新特征未能提升模型性能

    • V2数据集(15特征,含新特征):CV AUC = 0.9182
    • V1数据集(11特征,仅基础特征):CV AUC = 0.9185
    • 原因分析:新特征与现有特征信息重叠,未带来额外预测价值
    • 最终决策:使用V1基础特征集进行后续优化
  3. 模型集成收益: 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结果更一致

文档导航

技术文档

  1. EDA分析报告 - 数据探索与特征分析
  2. 项目总结 - 整体反思与课程作业要点

项目管理


课程作业亮点

技术深度

  • 完整的数据挖掘流程: 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 项目状态: 核心技术工作完成,文档已更新 下一步: 准备课程作业报告

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors