# riskscore
**Repository Path**: zeroonei1/riskscore
## Basic Information
- **Project Name**: riskscore
- **Description**: credit risk scoring
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-13
- **Last Updated**: 2026-07-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
---
## 核心结论
> 基于 Kaggle **Home Credit Default Risk** 真实数据(**307,511** 样本 / **141** 特征 / 默认率 **8.07%**),XGBoost 在 5 折分层交叉验证 + 防泄漏 out-of-fold(OOF)评估下取得:
>
> **OOF AUC 0.766 · KS 0.398 · Gini 0.533**,显著优于单表逻辑回归基线(AUC 0.626),逼近竞赛 Top 10% 区间(~0.795,需多表特征 + 集成)。
| 模型 | AUC | KS | Gini |
|------|-----|-----|------|
| 逻辑回归 | 0.626 | 0.192 | 0.251 |
| 随机森林 | 0.746 | 0.365 | 0.491 |
| **XGBoost** | **0.766** | **0.399** | **0.533** |
| **LightGBM** | **0.766** | **0.398** | **0.532** |
> 数值取自 [`reports/model_results.json`](./reports/model_results.json),为单表特征(`application_train`)5 折分层交叉验证均值;XGBoost OOF AUC = 0.766(每行由未见该行的模型打分,是可靠的泛化估计)。目标编码通过 sklearn `Pipeline` 在**每折训练子集**上单独 fit,验证行目标不参与自身编码。
## 防泄漏设计(核心卖点)
金融风控模型的可信度取决于"评估分数是否诚实"。本管线对三类常见数据泄漏做了修正:
- **目标编码泄漏**:早期版本在全训练集上算完目标编码再喂进 5 折 CV,导致验证行的目标值泄漏进自身编码特征、AUC 偏高。现改为在 sklearn `Pipeline` 内用 `TargetEncoder`,每折仅在训练子集上 fit。IV 特征选择也从训练流程中移除(仅在 `data/processed/iv_report.csv` 作分析参考),避免"用全量 target 选特征再用到 CV 折内"的同类泄漏。
- **伪造 test AUC**:Home Credit 的 `application_test.csv` 无 `TARGET`,没有可评估的标签集。早期版本把训练集 80/20 切分、在全量数据上重训后再评估,得到一个 0.80 的"test AUC"——这是重代入(resubstitution)数字,且高于诚实的 CV AUC,方向错误。现已删除该指标,改为报告 OOF AUC。
- **预处理泄漏**:异常值截断边界与中位数填充现仅在 train 上 fit,再 transform 到 test。
## 项目简介
端到端信用风险评分管线:专业级特征工程(WOE/IV)→ 多模型对比(LR → RF → XGBoost → LightGBM)→ SHAP 可解释性 → Streamlit 风险计算器看板。
## 快速开始
```bash
# 从 Gitee 克隆(国内推荐,速度更快)
git clone https://gitee.com/zeroonei1/riskscore.git
# 或从 GitHub
git clone https://github.com/MeaFew/riskscore.git
cd riskscore
# 下载真实数据集(GitHub Releases,约 40MB)
bash download_data.sh
# 运行完整管线
make all
# Windows (无 GNU Make): python run_all.py
# 或分步执行
make preprocess
make features
make train
make evaluate
make shap
# 启动看板
make dashboard
# 质量门
make verify
```
核心亮点
- **特征工程**:WOE 分箱(分析参考)、目标编码(per-fold,无泄漏)、交叉特征
- **模型栈**:逻辑回归(基线)→ 随机森林 → XGBoost → LightGBM
- **评估**:AUC、KS、Gini、校准曲线、最优阈值下的混淆矩阵
- **可解释性**:SHAP summary、dependence plot、个体 force plot
- **交付**:Streamlit 风险计算器看板
技术栈
| 层级 | 工具 | 说明 |
|------|------|------|
| ETL | pandas, scikit-learn | 缺失值填补、异常值截断 |
| 特征工程 | 自研 WOE/IV | 分位数分箱 + 平滑处理 |
| 建模 | XGBoost, LightGBM, sklearn | 5 折分层交叉验证 |
| 可解释性 | SHAP | 梯度提升模型使用 TreeExplainer |
| 评估 | scipy, sklearn | AUC、KS、Gini、PR 曲线、校准 |
| 交付 | Streamlit | 交互式风险计算器 + 模型对比 |
| 质量保障 | pytest, ruff, GitHub Actions | CI 每次 push 跑 lint + 测试 |
项目结构
```
.
├── scripts/
│ ├── generate_mock_data.py # 合成数据生成(CI 用)
│ ├── preprocess.py # 数据清洗与缺失值处理
│ ├── feature_engineering.py # 交叉特征 + WOE/IV 分析报告(目标编码移入 CV Pipeline)
│ ├── train_models.py # LR / RF / XGB / LGBM + 交叉验证
│ ├── evaluate.py # ROC、PR、校准、混淆矩阵
│ └── shap_analysis.py # SHAP summary、dependence、force plot
├── dashboard/
│ └── app.py # Streamlit 交互看板
├── tests/
│ └── test_pipeline.py # 单元 + 集成测试
├── config.py # 集中式路径与超参数配置
├── Makefile # 工作流编排
└── requirements.txt
```
基准参照
基于 [Kaggle Home Credit Default Risk](https://www.kaggle.com/competitions/home-credit-default-risk)(7,190+ 队伍,评估指标:AUC-ROC)。
| 参照 | AUC | 说明 |
|------|-----|------|
| Kaggle Starter 基线 | 0.688 | 官方 starter notebook,无特征工程 |
| 单表逻辑回归 | 0.748 | 仅 `application_train` + GridSearchCV |
| 单表 LightGBM | 0.749 | 同上,梯度提升 |
| 竞赛中位数 | ~0.72–0.75 | Leaderboard 中位 |
| 竞赛 Top 10% | ~0.795 | 多表特征 + 集成 |
| **本方案(单表)** | **0.766** | 目标编码(per-fold,无泄漏)+ XGBoost/LightGBM(5 折 CV / OOF) |
| 本方案(多表,规划中) | ~0.78(预估) | 需完整辅助表数据;当前仓库仅实现单表 |
> 竞赛 Private Leaderboard 已关闭。上述分数为真实 Kaggle 数据(307,511 训练样本,`application_train`)上的本地 5 折分层交叉验证 + 泄漏无关的 OOF 评估。多表结果需在 `make features` 前运行 `scripts/aggregate_auxiliary_features.py` 和 `scripts/merge_auxiliary_features.py`。
更多评估图
## 相关项目
| 项目 | Gitee(主仓) | GitHub(镜像) |
|------|---------------|-----------------|
| 电商用户行为分析 | [Gitee](https://gitee.com/zeroonei1/shoplytics) | [GitHub](https://github.com/MeaFew/shoplytics) |
| 营销归因与预算优化 | [Gitee](https://gitee.com/zeroonei1/attributor) | [GitHub](https://github.com/MeaFew/attributor) |
| 多元时序预测 | [Gitee](https://gitee.com/zeroonei1/foresight) | [GitHub](https://github.com/MeaFew/foresight) |
| 图神经网络反欺诈 | [Gitee](https://gitee.com/zeroonei1/graphguard) | [GitHub](https://github.com/MeaFew/graphguard) |
## 许可证
MIT