Python实现的拍拍贷金融风控模型

资源下载地址:https://download.csdn.net/download/sheziqiong/85705488
资源下载地址:https://download.csdn.net/download/sheziqiong/85705488

项目概述:

  1. 比赛数据:

"拍拍贷"提供的数据包括信用违约标签(因变量)、建模所需的基础与加工字段(自变量)、相关用户的网络行为原始数据,数据字段已经做脱敏处理。本次实战采用的是初赛数据,包括3万条训练集和2万条测试集。数据文档包括:

  • Master:每一行代表一个样本(一笔成功成交借款),每个样本包含200多个各类字段。

  • Log_Info:借款人的登陆信息,每个样本含多条数据。

  • Userupdate_Info:借款人修改信息,每个样本多条数据。

  1. 比赛规则:

基于训练集数据构建预测模型,使用模型计算测试集的评分(评分数值越高,表示越有可能出现贷款违约),评价标准为AUC。

建模思路:

  1. 数据清洗工作,主要做一下缺失值处理,常变量处理,空格符处理,字符大小写转换等

  2. 特征处理工作,分为特征转换和特征衍生。主要做了以下工作:

  • Master数据:地理位置信息的处理(省份,城市),运营商和微博特征的转换,以及对排序特征,periods特征的交叉组合等。

  • Log_Info数据:衍生出"累计登陆次数",“登录时间的平均间隔”,"最近一次的登录时间距离成交时间差"等特征。

  • Userupdate_Info数据:衍生出"最近的修改时间距离成交时间差",“修改信息的总次数”, "每种信息修改的次数"等特征。

  1. 特征筛选工作:利用lightgbm输出特征重要性进行筛选。

  2. 建模工作:

  • 单模型,选用的机器学习模型是lightgbm。

  • bagging模型:基于bagging的思想,通过对模型参数进行随机扰动,构建多个子模型,选用的基模型是lightgbm。

重要工作:

  1. 数据离群值判定,清洗

  2. 利用XGboost,按特征重要性系统衍生新特征,剥离没用的特征

  3. 特征的离散化,二值化,数值型特征衍生排序

  4. 交叉验证,网格搜索完成lightGBM超参数设置

  5. bagging lightGBM模型

项目流程

数据清洗(data_input, data_EDA_clean代码模块)

  1. 导入合并好的数据,看一下好坏用户比:

Mater数据包含约50000个样本,200多个字段。

# 样本的好坏比
data1.target.value_counts()

好坏比约11:1,属于不平衡数据集,因为最后模型用的是lightgbm,故本次实战先不采用过采样方法来进行数据抽样,直接用原始数据来建模。

  1. 缺失值处理:

缺失变量的数据可视化

在这里插入图片描述

有一些变量缺失率很高,如果将缺失填充为0,这类变量其实可看做一类稀疏特征,由于xgboost,lightgbm等GBDT类树模型对高维稀疏特征处理不太好,并考虑到这些变量的业务含义未知,携带的信息量太少,故对缺失率高的变量作删除处理。

除了要考虑变量的缺失情况,也要考虑样本缺失特征个数的情况,一个样本如果缺失的特征很多,说明用户的信息完善程度很低,通过对缺失样本的可视化,发现了这些离群点,可以考虑删除。

# 样本的趋势个数可视化
sc.plot_missing_user(df=data1,plt_size=(16,5))

在这里插入图片描述

# 删除变量缺失个数在100个以上的用户
data1 = sc.missing_delete_user(df=data1,threshold=100)

缺失变量个数在100以上的用户数有298个。

  1. 常变量处理

当一个变量中单个值所占比例过高(90%以上),说明该变量方差比较小,携带的信息较少,导致区分能力较差,对于这些变量也做删除处理。

  1. 字符格式转换

城市特征清洗:

# 计算4个城市特征的非重复项计数,观察是否有数据异常
for col in ['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20']:
print('{}:{}'.format(col,data1[col].nunique()))
print('\t')

UserInfo_8相对其他特征nunique较大,发现有些城市有"市",有些没有,需要做一下格式转换,去掉字符串后缀"市".
print(data1.UserInfo_8.unique()[:50])

# UserInfo_8清洗处理,处理后非重复项计数减小到400
data1['UserInfo_8']=[s[:-1] if s.find('市')>0 else s[:] for s in data1.UserInfo_8] 

UserupdateInfo1特征大小写转换:

'UserupdateInfo1’包含了大小写,如"qQ"和"QQ",属于同一种意思,所以需要对其英文字符统一转换大小写。

# 将UserupdateInfo1里的字符改为小写形式
df2['UserupdateInfo1'] = df2.UserupdateInfo1.map(lambda x:x.lower())

特征处理(feature_processing代码模块)

  1. Master数据:

对Master中的类别型特征(省份,城市,运营商,微博)做特征转换,对数值型变量做排序特征,periods特征的衍生。

类别型特征:

  • 省份:

原数据有两个省份字段,推测一个为用户的户籍地址,另一个为用户居住地址所在省份,由此可衍生的字段为:

  1. 省份二值化,通过违约率将单个省份衍生为二值化特征,分为户籍省份和居住地省份

  2. 户籍省份和居住地省份是否一致,推测不一致的用户大部分为外来打工群体,相对违约率会高一点。

  3. 计算违约率时要考虑该省份的借款人数,如果人数太少,参考价值不大

省份二值化

两种省份特征选择出违约率排名前五的省份,并做二值化衍生。

户籍省份和居住地省份不一致衍生

  • 城市变量:

原数据中有4个城市信息,推测为用户常登录的IP地址城市,衍生的逻辑为:

通过xgboost挑选比较重要的城市变量,进行二值化衍生

由4个城市特征的非重复项计数可衍生成 登录IP地址的变更次数

城市二值化衍生

# 根据xgboost变量重要性的输出对城市作二值化衍生

将特征重要性排名前三的城市做二值化衍生:

IP地址变更次数衍生

  • 运营商:

因运营商的种类少,直接做亚编码处理即可。

  • 微博:

先对微博特征做一下缺失值填充,再做亚编码处理。

数值型特征

  • 排序特征衍生:

对数值型特征按数值从小到大进行排序,衍生成排序特征,排序特征异常值有更强的鲁棒性,可以增强模型的稳定性,降低过拟合风险。

  • periods特征衍生:
# 生成只包含periods的临时表
periods_col = [i for i in num_col2 if i.find('Period')>0]
periods_col2 = periods_col+['target']
periods_data = data1.loc[:,periods_col2]

观察包含period1所有字段的数据,发现字段之间量级差异比较大,可能代表不同的含义,不适合做衍生。

periods1_col = [col for col in periods_col if col.find('Period1')>0]
periods_data.loc[:,periods1_col].head()

观察后缀都为1的字段,发现字段数据的量级基本一致,可以对其做min,max,avg等统计值的衍生。

period_1_col=[]
for i in range(0,102,17):
col = periods_col[i]
period_1_col.append(col)
periods_data.loc[:,period_1_col].head()

在这里插入图片描述

对后缀都为1的periods字段做相应的四则运算(最小,最大,平均),衍生成新的特征。

  1. Log_Info表:

衍生的变量

  • 累计登录次数

  • 登录时间的平均间隔

  • 最近一次的登录时间距离成交时间差

  1. Userupdate_Info表

衍生的变量

  • 最近的修改时间距离成交时间差
  • 修改信息的总次数
  • 每种信息修改的次数

将衍生特征汇总成一张表:

update_info = pd.merge(time_span,cate_change_df,on='Idx',how='left')
update_info = pd.merge(update_info,update_cnt,on='Idx',how='left')
update_info.head()

建模

1.单模型lightgbm(single_lightgbm_model代码模块)

  • 在不调参的情况下,两种版本的lightgbm的默认参数模型

sklearn接口版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PwC1RKaq-1655693041517)(https://www.writebug.com/myres/static/uploads/2022/6/18/b8b514598c8d1312831c6c39cc33ea46.writebug)]

原生版本的lightgbm

调参

  • 学习速率先设定为0.1,便于缩短模型的训练时间,最后一步再减小学习速率,先确定最大的迭代次数。
# 确定最大迭代次数,学习率设为0.1 
base_parmas={'boosting_type':'gbdt',
'learning_rate':0.1,
'num_leaves':40,
'max_depth':-1,
'bagging_fraction':0.8,
'feature_fraction':0.8,
'lambda_l1':0,
'lambda_l2':0,
'min_data_in_leaf':20,
'min_sum_hessian_inleaf':0.001,
'metric':'auc'}
cv_result = lgb.cv(train_set=lgb_train,
num_boost_round=200,
early_stopping_rounds=5,
nfold=5,
stratified=True,
shuffle=True,
params=base_parmas,
metrics='auc',
seed=0)
print('最大的迭代次数: {}'.format(len(cv_result['auc-mean'])))
print('交叉验证的AUC: {}'.format(max(cv_result['auc-mean'])))

确定subsample为0.5,colsample_bytree为0.6

  • 正则化参数调参

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6K6spI9z-1655693041520)(https://www.writebug.com/myres/static/uploads/2022/6/18/981a2f24600efae4e882a964a55f7894.writebug)]

确定reg_lambda为0.03,reg_alpha为0.3

  • 减小学习速率,再计算最佳参数下的迭代次数

确定最终的迭代次数为889次

  • 最佳参数建模(sklearn接口版本)
lgb_single_model = lgb.LGBMClassifier(n_estimators=900,learning_rate=0.005,min_child_weight=0.001,min_child_samples = 20,subsample=0.5,colsample_bytree=0.6,num_leaves=30,max_depth=-1,reg_lambda=0.03,reg_alpha=0.3,random_state=0)
lgb_single_model.fit(x_train,y_train)
pre = lgb_single_model.predict_proba(x_test)[:,1]
print('lightgbm单模型的AUC:{}'.format(metrics.roc_auc_score(y_test,pre)))
sc.plot_roc(y_test,pre)

调参之后测试集的AUC提升了0.015。

  1. lightgbm bagging

主要借鉴了随机森林对于选取样本的随机性和对于特征的随机性的思想。

  • 样本随机性的实现方法:random_seed,bagging_fraction,feature_fraction的参数扰动

  • 特征随机性的实现方法:在使用所有原生特征基础上,随机抽取一定的排序特征和periods特征至模型中。

资源下载地址:https://download.csdn.net/download/sheziqiong/85705488
资源下载地址:https://download.csdn.net/download/sheziqiong/85705488

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252977.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘强开微粒贷骗局 看完你就明白了

在我们的日常生活中,相信很多人都会遇到手头上资金紧张的情况,而我们又放不下面子跟亲戚朋友开口,这时很多人就会想到网络借贷。不仅能帮我们度过一时的难关,还能让我们安全放心的借到钱。 (网经社讯)而微粒贷就是这样一款产品&a…

玩游戏也能借钱?这家公司推出游戏贷,催用户还钱被要求“叫爸爸”

作者 | 黑玛丽 来源 | 消金界 在大厂们争先布局类信用支付类产品的时候,一些缺乏实力的小平台依旧将目光瞄准了场景分期。 比如,趁着疫情期间游戏行业正火,某互联网小贷公司依托母公司的游戏资源,推出了新产品“游戏贷”。用户申…

贷前贷中风控体系

消费金融服务方:金融系、场景系、互联网系 第三方支撑平台:获客平台、风控支持、系统服务、支付平台、贷后管理 消费金融风控全流程 贷前审查:信息采集、信息验证、反欺诈 贷中评估:信用评估、授信 贷后管理:贷后…

接力贷合力贷你知道吗?

http://mt.sohu.com/20160625/n456296606.shtml 接力贷(父母上产证子女做共同还款人) 名词解释:接力贷指以父母作为所购房屋的所有权人,父母方的子女作为共同借款人,贷款购买住房的住房信贷产品。 优点:可以将借款人年龄加贷款年…

手把手教你用python爬取人人贷网站借款人信息

P2P是近年来很热的一个行业,由于这个行业在国内兴起才不久,国内的很多学者对这个行业都兴趣盎然,在大学研究互联网金融的学者更是有一大群。小编是学金融出身,深知数据在做学术研究的重要性,之前有不少学互联网金融的同…

你我贷越冬 | 一点财经

赶在2018年完结之前,你我贷母公司嘉银金科赴美IPO,为今年国内互金企业海外上市潮写下完结篇。 美国当地时间12月19日,嘉银金科(Jiayin Group Inc)向美国证券交易委员会(SEC)提交了首次公开募股(IPO)申请文件。嘉银金科申请在纳斯达克(NASDAQ…

word文件打开就是只读模式,怎么取消?

没有设置过什么但是打开word文件就已经是只读模式了,这该如何取消只读模式呢?今天有几个方法分享给大家: 方法一: 点击工具栏中的【文件】-【信息】-取消【始终以只读方式打开】 方法二: 文件另存为,选择【…

Word文件退出只读模式,需要密码?

word文件打开的时候,文件弹出提示框,提示文件以只读方式打开,只读模式,就是因为word文件设置了限制编辑。但是想要编辑的情况下,我们点击【否】也没有任何改变,直接就打开了word文件。 有些朋友可能以为&am…

什么是word文件只读模式?

当我们打开word文件的时候,出现提示框,提示文件以只读模式打开 但是不管我们选择哪个选项,我们都可以正常打开文件,那么这个只读模式是什么呢?这其实就是word文件的限制编辑,也就是不能编辑这份word文件&am…

Word 只读模式修改

一、设置只读模式: 方法一: 打开目标文件,点击另存为,如下: 2.点击常规选项,勾选‘建议以只读方式打开文档,也可以在此页给文档加密: 方法二: 在工具栏-->审阅--->…

php更改文件为只读,word只读模式怎么修改

word只读模式的修改方法:1、检查一下任务栏中是否打开了两份相同的Word文档,关闭一份之后,就可正常编辑;2、更新系统对应文档的软件版本号,解决兼容性问题;3、硬盘保护模式或者另存到可编辑权限的硬盘空间中…

word只读模式怎么改成编辑模式

Word只读文档改成可编辑文档有在关闭只读属性、停止审阅保护、插入文档等多个不同的修改方法, 以下为在关闭只读属性改为可编辑文档的具体操作步骤: 方法一: 右键选择word文件,选择【属性】,在属性中,我们…

解除Word文件被设置为只读属性,无法编辑复制的问题

问题随手记 随手记录解决的错误 写在前面: 此方法只是解除Word文件的限制编辑,不是破解Word文件的打开密码。 解决办法 1.打开受保护的Word文件,弹出的窗口选择“是”或者“否”都没有关系。 2.点击“文件”,选择“”另存为…

Word只读方式有哪些?

Word文件打开就是只读模式?只读方式有两种,今天来讲一下两种只读模式分别是什么,可以帮助到遇到了只读的word文档的朋友知道如何解决,也可帮助想要设置只读模式的朋友提供操作方法。 只读方式一: 这种只读模式仅起到…

【word】编辑只读文件的两种方法

一、标记为最终状态 1、文件->信息->保护文档->标记为最终状态 2、选择“确定” 3、点击确定,标记为最终状态 二、使用常规选项 1、文件->另存为->计算机->浏览 2、在弹出页面选择工具->常规选项 3、勾选,建议以只读方式打开…

Word的只读模式和限制编辑有区别吗?如何设置和取消?

给Word文档设置保护,可以选择“只读模式”或者“限制编辑”,但两者还是有区别的,下面就来具体说说。 一、保护方式不同 设置了“只读模式”的word文档,打开时就会出现提示,需要输入密码才能修改文件,否则…

如何取消Word文档的只读模式或者限制编辑

Word文档的只读模式和限制编辑,都是为了保护文档不能随意改动,但两者的保护模式还是有区别的,取消方法也不同。 设置了“只读模式”的word文档,在打开后会出现提示框,只有输入密码才能获取写权限,否则只能…

Win10系统文件夹被设为只读,取消Word文件的只读模式

这个问题困扰了我一天一夜。昨天我发现有个word文件(后面称为“它”)写错了,然后去修改,结果发现我的文件变成了只读。真是百思不得其解,我前段时间刚编辑过它,而且直接保存了(没有另存为&#…

word文件只读模式是怎么设置的?

想要将word文件从编辑模式变为只读模式方式有很多,一起来看一下如何将word文件设置成只读模式。 方式一 第一种只读模式的设置很简单,不需要设置密码,点击工具栏中的【文件】-【信息】-【保护文档】-【始终以只读方式打开】就可以了。想要编辑…

PS使用钢笔工具抠图

一般抠一些轮廓比较清晰,没有许多弯弯角角的图片的时候可以采用快速选择工具来进行抠图,但是要扣一个比较复杂的图的时候(比如雕塑和汽车等),就要用到钢笔工具啦它可以很好的,很细致地把想要的图案完整的抠…