科大讯飞2021车辆贷款借款人数据集和违约预测

摘要:

合集:AI案例-ML-泛金融业
赛题:车辆贷款违约预测挑战赛
主办方:科大讯飞 + Datawhale
主页:http://challenge.xfyun.cn/topic/info?type=car-loan
AI问题:分类问题
数据集:包含52个特征字段的车辆贷款借款人数据集
数据集价值:违约预测
解决方案:LightGBM

一、赛题描述

背景

随着监管政策步入关键落地期,受合规监管标的限额影响,曾备受追捧的大额标的逐渐消失,小额分散的车贷业务成为网贷平台转型的主要方向之一。车贷资产由于进入门槛低、借款额度低、流动性高、限期短等优点,但做好风险防控依然是行业的主要问题之一。国内某贷款机构就面临了这样的难题,该机构的借款人往往拖欠还款或拒不还款,导致该机构的不良贷款率居高不下。面对如此头疼的问题,该机构将部分贷款数据开放,诚邀大家帮助他们建立风险识别模型来预测可能违约的借款人(敏感信息已脱敏)。

任务

给定某机构实际业务中的相关借款人信息,包含53个与客户相关的字段,其中loan_default字段表明借款人是否会拖欠付款。任务目标是通过训练集训练模型,来预测测试集中loan_default字段的具体值,即借款人是否会拖欠付款,以此为依据,降低贷款风险。

二、数据集说明

数据集由训练集和测试集组成,包含52个特征字段,同时对部分字段信息进行脱敏。训练集包括15万条数据,测试集包括3万条数据。训练集和测试集的区别是测试集中没有 loan_default 字段。

train.csv 和 test.csv 文件:

特征字段字段描述
customer_id客户标识符
main_account_loan_no主账户申请贷款数量
main_account_active_loan_no主账户申请的有效贷款数量
main_account_overdue_no主账号逾期数量
main_account_outstanding_loan主账户未偿还的贷款余额
main_account_sanction_loan主账户所有贷款被批准的贷款金额
main_account_disbursed_loan主账户所有贷款已发放的贷款金额
sub_account_loan_no二级账户申请贷款数量
sub_account_active_loan_no二级账户申请的有效贷款数量
sub_account_overdue_no二级账户逾期数量
sub_account_outstanding_loan二级账户未偿还的贷款金额
sub_account_sanction_loan二级账户所有贷款被批准的贷款金额
sub_account_disbursed_loan二级账户所有贷款已发放的贷款金额
disbursed_amount已发放贷款金额
asset_cost资产成本
branch_id发放贷款的分行
supplier_id发放贷款的车辆经销商
manufacturer_id汽车制造商
year_of_birth客户出生日期
disbursed_date贷款日期
area_id付款区域
employee_code_id记录付款的对接员工
mobileno_flag是否填写手机号
idcard_flag是否填写身份证
Driving_flag是否出具驾驶证
passport_flag是否填写护照
credit_score信用评分
main_account_monthly_payment主账户月供金额
sub_account_monthly_payment二级账户的月供金额
last_six_month_new_loan_no过去六个月客户的新贷款申请数量
last_six_month_defaulted_no过去六个月客户的违约数量
average_age平均贷款期限
credit_history信用记录
enquirie_no客户查询贷款次数
loan_to_asset_ratio贷款与资产比例
total_account_loan_no所有账户申请贷款数量
main_account_inactive_loan_no主账户申请的无效贷款数量
sub_account_inactive_loan_no二级账户申请的无效贷款数量
total_inactive_loan_no所有账户申请的无效贷款数量
total_overdue_no所有账户的逾期次数
total_outstanding_loan所有账户的未结余额的总额
total_sanction_loan来自所有账户的所有贷款被批准的贷款金额
total_disbursed_loan为所有账户的所有贷款支付的贷款金额
total_monthly_payment所有账户的月供金额
outstanding_disburse_ratio已发放贷款总额/未偿还贷款总额(两者比例)
main_account_tenure主账户还款期数
sub_account_tenure二级账户还款期数
disburse_to_sactioned_ratio已发放贷款/批准贷款(两者比例)
active_to_inactive_act_ratio有效贷款次数/无效贷款次数(两者比例)
Credit_level信用评分
employment_type工作类型
age年龄
loan_default1表示客户逾期,0表示客户未逾期

数据集版权许可协议

GPL2 license

三、解决方案样例

解决方案

项目目标是预测借款人是否会违约(不偿还贷款)。由于车贷业务具有小额分散的特点,风险防控成为关键问题。该模型可以帮助贷款机构识别高风险借款人。本方案实现了一个基于LightGBM算法的车辆贷款违约预测模型。

安装开发库

【本样例运行环境的关键版本信息】
python                   3.12.3
lightgbm                 3.3.0

导入相关系统库

导入必要的库:pandas, numpy, lightgbm, sklearn等

import pandas as pd
import numpy as np
import lightgbm as lgb
from sklearn.model_selection import KFold
from sklearn.metrics import roc_auc_score
import warnings
warnings.filterwarnings('ignore')

代码结构解析和运行

1、数据准备

读取三个CSV文件:

  • train.csv: 训练数据
  • test.csv: 测试数据
  • sample_submit.csv: 提交样本格式
train = pd.read_csv('./data/train.csv')
test = pd.read_csv('./data/test.csv')
sample_submit = pd.read_csv('./data/sample_submit.csv')

2、特征工程

all_cols = [f for f in train.columns if f not in ['customer_id', 'loan_default']]

x_train = train[all_cols]
x_test = test[all_cols]
y_train = train['loan_default']
  • 提取所有特征列,排除客户ID和目标列(loan_default)
  • 将数据分为训练集(x_train, y_train)和测试集(x_test)

3、模型训练

核心是cv_model函数,实现了5折交叉验证的LightGBM模型训练:

  1. 参数设置:
    • boosting_type: ‘gbdt’ (梯度提升决策树)
    • objective: ‘binary’ (二分类问题)
    • metric: ‘auc’ (使用AUC作为评估指标)
    • 其他重要参数控制模型复杂度、学习率等
  2. 训练过程:
    • 使用KFold将数据分为5份
    • 对每一折:
      • 创建训练集和验证集
      • 使用LightGBM的Dataset格式准备数据
      • 训练模型,设置早停机制(200轮不提升则停止)
      • 在验证集上预测并计算AUC
      • 对测试集预测并平均各折结果
  3. 评估指标:
    • 输出每一折的AUC分数
    • 计算平均AUC和标准差
def cv_model(clf, train_x, train_y, test_x, clf_name='lgb'):
   folds = 5
   seed = 2021
   kf = KFold(n_splits=folds, shuffle=True, random_state=seed)

   train = np.zeros(train_x.shape[0])
   test = np.zeros(test_x.shape[0])
   cv_scores = []

   for i, (train_index, valid_index) in enumerate(kf.split(train_x, train_y)):
       print('\n************************************ Train Dataset Part {} ************************************'.format(str(i+1)))
       trn_x, trn_y, val_x, val_y = train_x.iloc[train_index], train_y[train_index], train_x.iloc[valid_index], train_y[valid_index]
       train_matrix = clf.Dataset(trn_x, label=trn_y)
       valid_matrix = clf.Dataset(val_x, label=val_y)

       params = {
           'boosting_type': 'gbdt',
           'objective': 'binary',
           'metric': 'auc',
           'min_child_weight': 5,
           'num_leaves': 2 ** 7,
           'lambda_l2': 10,
           'feature_fraction': 0.9,
           'bagging_fraction': 0.9,
           'bagging_freq': 4,
           'learning_rate': 0.01,
           'seed': 2021,
           'n_jobs':-1,
           'verbose': -1,
      }

       model = clf.train(params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix], verbose_eval=500,early_stopping_rounds=200)
       val_pred = model.predict(val_x, num_iteration=model.best_iteration)
       test_pred = model.predict(test_x, num_iteration=model.best_iteration)

       train[valid_index] = val_pred
       test += test_pred / kf.n_splits
       cv_scores.append(roc_auc_score(val_y, val_pred))
       print(cv_scores)

   print("\n%s_scotrainre_list:" % clf_name, cv_scores)
   print("%s_score_mean:" % clf_name, np.mean(cv_scores))
   print("%s_score_std:" % clf_name, np.std(cv_scores))
   return train, test

训练模型:

lgb_train, lgb_test = cv_model(lgb, x_train, y_train, x_test)

4、预测与输出

  • 对测试集预测结果应用阈值(0.25)转换为0/1分类
  • 保存预测结果到CSV文件
sample_submit['customer_id'] = test['customer_id']
sample_submit['loan_default'] = lgb_test
sample_submit['loan_default'] = sample_submit['loan_default'].apply(lambda x:1 if x>0.25 else 0).values

sample_submit.to_csv('prediction_result.csv', index=False)

预测结果数据样例展示:

customer_id loan_default
14342 0
94753 0
140283 0
134742 0
4749 0
184730 0
44743 1
27804 0
187134 0
...

模型特点

  1. 算法选择:
    • 使用LightGBM,适合处理表格数据,训练速度快
    • 采用梯度提升框架,具有较好的预测性能
  2. 训练策略:
    • 5折交叉验证提高模型稳定性
    • 早停机制防止过拟合
    • 多折结果平均减少方差
  3. 性能评估:
    • 使用AUC作为主要指标,适合不平衡分类问题
    • 平均AUC约0.662,标准差0.005,表现稳定但有一定提升空间

AUC(Area Under the Curve,曲线下面积)是机器学习特别是分类问题中广泛使用的性能评估指标,尤其在二分类问题中应用最为普遍。AUC衡量的是分类器将正类样本排在负类样本前面的概率,其值范围在0.5到1之间:

  • 0.5:随机猜测(无区分能力)
  • 1:完美分类器
  • <0.5:比随机猜测还差(可能标签定义反了)

源码开源协议

GPL-3.0 license
https://github.com/datawhalechina/competition-baseline/blob/master/LICENSE

四、获取案例套装

需要登录后才允许下载文件包。登录 需要登录后才允许下载文件包。登录

发表评论