antoinewrd1/Buy-Now-Pay-Later-Credit-Risk-Modeling-and-Customer-Analytics
GitHub: antoinewrd1/Buy-Now-Pay-Later-Credit-Risk-Modeling-and-Customer-Analytics
基于 R 语言的端到端 BNPL 信用风险建模项目,通过机器学习与无监督学习方法实现违约预测、客户分层与异常行为检测。
Stars: 0 | Forks: 0
# 先买后付(BNPL)信用风险建模与客户分析
使用 R 开发的端到端 BNPL 信用风险建模项目。包含 EDA、特征工程、回归和分类模型、聚类以及异常检测。Random Forest 取得了最佳性能(AUC 0.768),突显了对违约风险预测的有效性和客户细分的洞察力。
🚀 **项目概述**
Buy Now, Pay Later (BNPL) 平台通过提供灵活、低门槛的短期信贷,迅速改变了消费融资方式。然而,这种便利性也带来了显著的信用风险,使得准确的违约预测变得至关重要。
本项目应用端到端的机器学习和分析技术来:
* 预测信用风险评分
* 对违约与非违约客户进行分类
* 识别客户群体
* 检测异常和高风险行为
该工作流整合了数据预处理、探索性数据分析 (EDA)、监督学习、无监督学习和模型评估,以模拟真实的金融科技风险建模 pipeline。
📂 **数据集**
* _**来源:**_ Kaggle BNPL 信用风险数据集
* _**规模:**_ 约 10,000 条记录
* _**包含特征:**_ 客户人口统计数据、收入和就业详情、交易历史、产品类别、风险评分和违约标志
⚙️ 技术栈
* **语言与工具:** R, Kaggle API
* **库:**
* **数据处理:** tidyverse, reshape2
* **建模:** caret, glmnet, randomForest, e1071, rpart, nnet, kernlab
* **聚类与异常检测:** dbscan, isotree
* **可视化:** ggplot2, factoextra
* **评估:** pROC
🔧 **项目 Pipeline**
__**1. 数据准备:**__
* 将类别变量转换为 factor
* 工程化特征:days_since_transaction
* 标准化目标变量 (default_flag)
* 移除冗余字段
**2. 探索性数据分析 (EDA):**
* 风险评分分布
* 各客户群段的违约率
* 收入与风险的关系
* 相关性热力图
📌 **关键洞察:**
* 某些客户群体显示出明显更高的违约率
* 财务属性与风险之间存在强烈的相关性
**3. 训练/测试集划分**
* 使用分层抽样进行 80/20 比例划分
* 保持了类别分布以进行可靠的评估
**4. 特征缩放**
* 对数值变量应用中心化和缩放
* 对于以下模型至关重要:
* SVM
* 神经网络
🤖 **机器学习模型**
* 🔹 回归(风险评分预测)
* 线性回归(基线模型 — 受数据泄漏影响)
* Random Forest(稳健的非线性建模)
📊 _**结果:**_
* 线性回归 RMSE ≈ 0 → ⚠️ 表明存在数据泄漏
* Random Forest RMSE = 4.27 → 现实且可靠
🔹 **分类(违约预测)**
* **基线模型:**
* 决策树
* 逻辑回归
* **调优模型(5 折 CV,ROC 优化):**
* 逻辑回归
* Random Forest
* SVM(径向核函数)
📊 _**AUC 比较:**_
模型 AUC:
* Random Forest 0.768
* SVM 0.753
* 逻辑回归 0.740
🏆 最佳模型:Random Forest
📈 **评估指标:**
混淆矩阵,
准确率,
灵敏度,
特异度,
ROC 曲线,
AUC (Area Under Curve)
🧠 **无监督学习**
🔹 **聚类**
* K-Means (k = 3)
* 层次聚类
* DBSCAN
📌 **洞察:**
* 存在一个主要的客户群体
* 较小的聚类代表了小众/高风险的细分群体
* DBSCAN 成功识别了噪声(离群点)
🔹 **异常检测**
* Isolation Forest
* One-Class SVM
📌 **目的:**
* 检测欺诈或异常的财务行为
* 识别超出正常模式的高风险客户
🧪 **神经网络**
* 单隐藏层(5 个神经元)
* 二分类(违约预测)
📊 _**结果:**_
* 准确率: 39.1%
* 灵敏度: 99.5%
* 特异度: 0.3%
⚠️ 问题:
* 模型将几乎所有观测值都预测为违约
* 由类别不平衡和收敛不佳引起
🔍 **关键发现:**
* Random Forest 是各项任务中最可靠的模型
* 线性回归受到数据泄漏的影响
* 逻辑回归在没有特征工程的情况下表现不佳
* SVM 表现良好,但存在不稳定性
* 神经网络在处理不平衡的表格数据时较为吃力
* 客户行为在很大程度上趋于同质化,同时存在小众的高风险细分群体
📌 **建议:**
_1. 使用集成模型:_ 部署 Random Forest 或 Gradient Boosting(例如 XGBoost)
_2. 处理类别不平衡:_
* 应用:
* SMOTE
* 类别权重
* 阈值调优
_3. 防止数据泄漏:_
* 移除从目标变量派生的特征
* 验证特征独立性
_4. 优化决策阈值:_
* 超越默认的 0.5 截断值
* 与业务风险承受能力对齐
_5. 增加可解释性:_
* 特征重要性
* SHAP 值(未来改进)
_6. 改进神经网络:_
* 正则化
* 更好的架构
* 平衡的数据集
_7. 利用无监督学习:_
* 将聚类和异常检测集成到生产 pipeline 中
▶️ **如何运行**
_**1. 克隆仓库:**_
* git clone https://github.com/yourusername/bnpl-credit-risk.git
* cd bnpl-credit-risk
_**2. 安装依赖项:**_
* 运行脚本 — 包将自动安装:
* source("bnpl_analysis.R")
_**3. Kaggle 设置:**_
* 确保已配置 Kaggle API:
* kaggle datasets download -d shree0910/buy-now-and-pay-later-fintech-ml-dataset
📊 **未来改进:**
* 实现 XGBoost / LightGBM
* 添加贝叶斯优化的超参数调优
* 通过 API 部署模型(Plumber 或 FastAPI)
* 构建交互式仪表板(Shiny / Tableau)
* 集成实时评分 pipeline(Spark / Kafka)
📎 **项目结构**
├── data/
├── bnpl_analysis.R
├── README.md
└── outputs/
```
├── plots/
├── models/
└── metrics/
```
💼 **作者**
Antoine Ward
数据科学家 | 医疗保健与金融科技分析
LinkedIn: https://linkedin.com/in/antoine-ward-mph-2401581a1
GitHub: https://github.com/antoinewrd1
标签:Apex, R语言, 代码示例, 信贷风控, 异常检测, 数据分析, 机器学习, 金融科技, 随机森林