车辆贷款违约预测挑战赛

本文介绍了参加2021科大讯飞的车辆贷款违约预测挑战赛的解决方案,包括特征工程、模型训练和结果融合。通过构造新特征、数据处理和使用LightGBM、XGBoost模型,结合概率阈值选择,实现违约预测。最终,通过模型融合提高预测精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021科大讯飞-车辆贷款违约预测挑战赛--方案

简介

车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。

数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征

站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。

直接进入主题,开始学习套路,芜湖~

特征工程

1、常用库、数据导入

import pandas as pd
import numpy as np
import lightgbm as lgb
import xgboost as xgb
from sklearn.metrics import roc_auc_score, auc, roc_curve, accuracy_score, f1_score
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler, QuantileTransformer, KBinsDiscretizer, LabelEncoder, MinMaxScaler, PowerTransformer

from tqdm import tqdm
import pickle
import logging
logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)
import os

后半部分用了一些工具:

  • tqdm:一个优雅的进度条显示,方便观测跑数进度以及速度;
  • pickle:将对象以文件的形式存放在磁盘上,几乎所有的数据类型都可以用pickle来序列化,一般先dump,后load,类似于写出、导入的意思;作用是,一次结果多次复用,避免重复做功,hhh,比如说A列数据处理得花2h,每次修改过后需重跑其他列数据,但无须修改A列数据,就可以用pickle解决这个问题,快速调取之前的结果;
  • logging:控制台输出日志,方便查看运行状态;
logging.info(‘data loading…’)
train = pd.read_csv(’…/xfdata/车辆贷款违约预测数据集/train.csv’)
test = pd.read_csv(’…/xfdata/车辆贷款违约预测数据集/test.csv’)

2、特征工程

2.1 构造特征

针对训练集、测试集:

  1. 根据业务理解,计算新的特征;
  2. 对某些比例特征进行等宽分箱(cut),对某些数值特征进行等频分箱(qcut),还有一些数值特征进行自定义分箱,划分bin的范围;
def gen_new_feats(train, test):
‘’‘生成新特征:如年利率/分箱等特征’’’
# Step 1: 合并训练集和测试集
data = pd.concat([train, test])
# Step 2: 具体特征工程
# 计算二级账户的年利率
data['sub_Rate'] = (data['sub_account_monthly_payment'] * data['sub_account_tenure'] - data[
    'sub_account_sanction_loan']) / data['sub_account_sanction_loan']

# 计算主账户的年利率
data['main_Rate'] = (data['main_account_monthly_payment'] * data['main_account_tenure'] - data[
    'main_account_sanction_loan']) / data['main_account_sanction_loan']

# 对部分特征进行分箱操作
# 等宽分箱
loan_to_asset_ratio_labels = [i for i in range(10)]
data['loan_to_asset_ratio_bin'] = pd.cut(data["loan_to_asset_ratio"], 10, labels=loan_to_asset_ratio_labels)
# 等频分箱
data['asset_cost_bin'] = pd.qcut(data['asset_cost'], 10, labels=loan_to_asset_ratio_labels)
# 自定义分箱
amount_cols = [
               'total_monthly_payment',
               'main_account_sanction_loan',
               'main_account_disbursed_loan',
               'sub_account_sanction_loan',
               'sub_account_disbursed_loan',
               'main_account_monthly_payment',
               'sub_account_monthly_payment',
               'total_sanction_loan'
            ]
amount_labels = [i for i in range(10)]
for col in amount_cols:
    total_monthly_payment_bin = [-1, 5000, 10000, 30000, 50000, 100000, 300000, 500000, 1000000, 3000000, data[col].max()]
    data[col + '_bin'] = pd.cut(data[col], total_monthly_payment_bin, labels=amount_labels).astype(int)

# Step 3: 返回包含新特征的训练集 & 测试集
return data[data['loan_default'].notnull()], data[data['loan_default'].isnull()]</code></pre><h4>2.2 编码-Target Encoding</h4><p>Target encoding是一种结合目标值进行特征编码的方式。</p><p>在二分类中,对于特征i,target encoding在该特征取值为k时的编码值为类别k对应的目标值期望E(y|xi=xik)。</p><p><span class="img-wrap"><img class="lazy" referrerpolicy="no-referrer" data-src="/img/remote/1460000041098206" alt="20211208003221" title="20211208003221"></span></p><p>在样本集中一共有10条记录,其中3条记录中特征Trend的取值为Up,我们关注这3条记录。在k=Up时,目标值的期望为2/3 ≈ 0.66,所以将Up编码为0.66。</p><p>大佬后面主要是针对id特征进行target encoding。</p><pre><code class="python"&g
车辆贷款违约预测是一项常见的机器学习任务,通常涉及到数据分析、特征工程以及构建预测模型。在这个挑战赛中,参赛者需要利用历史贷款数据,如借款人的信用评分、还款记录、贷款金额等信息,来预测借款人是否会违约偿还贷款。这涉及到回归分析,特别是二分类问题,因为违约和非违约是两个对立的结果。 代码实现的基本步骤可能会包括: 1. **数据加载**:使用pandas库读取和处理CSV文件,对缺失值进行预处理。 ```python import pandas as pd data = pd.read_csv('vehicle_loan_data.csv') ``` 2. **数据探索**:了解各变量之间的关系,识别潜在的特征工程机会。 3. **特征选择和工程**:提取重要特征,比如创建滞后特征、交互项等。 4. **数据划分**:将数据集划分为训练集、验证集和测试集。 ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 5. **模型建立**:尝试多种算法,如线性回归、逻辑回归、随机森林、梯度提升机等,并使用交叉验证评估性能。 ```python from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train) ``` 6. **模型评估**:计算准确率、精确率、召回率和F1分数,查看AUC-ROC曲线。 7. **优化与调参**:如果结果不满意,可以调整模型参数或尝试集成学习方法。 8. **预测及提交结果**:对测试集应用模型并生成最终的违约概率预测。 ```python y_pred_proba = model.predict_proba(X_test)[:, 1] ``` 完成以上流程后,你需要将预测结果按照比赛要求格式提交。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a useful man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值