为进一步培养学生创新精神和实践能力,鼓励学生运用统计学模型、机器学习模型等数据科学专业知识,协助解决经济社会领域中的实际问题,由四川省教育厅主办,西南财经大学与四川新网银行承办,四川省普通本科高等学校统计学类专业教学指导委员会、四川省统计学会协办的2024年四川省大学生数据科学与统计建模竞赛正式启动。目前模型竞赛报名截止时间到11月7日,还没有报名的同学赶紧报名!
举办方:
四川省教育厅 承办:西南财经大学、新网银行 协办:四川省普通本科高等学校统计学类专业教学指导委员会、四川省统计学会
大赛背景
机器学习模型在信用风险评估领域已被广泛应用,在疫情、经济增速变化等事件冲击下,经济环境和数据规律会发生变化,可能导致机器学习模型面临概念漂移(Concept Drift)问题,如何在跨周期样本上构建区分能力稳定的风险模型是金融机构风险管理关注的重要问题,新网银行以建设“新一代数字科技普惠银行”为愿景, 始终坚持技术立行,通过敏捷的信息科技体系和精准的智能风控体系,推动数字普惠金融业务发展。本次比赛将提供真实业务场景下的跨越长周期客户脱敏信贷数据,包含多产品(客群)的高维特征数据,以及风险表现标签;邀请参赛者对数据进行探索分析,综合利用机器学习算法、深度学习算法、大模型等技术设计区分能力高、稳定性强的信用风险预测模型。
QQ学习交流群:1026993837
更多介绍请看之前发布文章《报名了,奖金6万!2024年四川省大学生数据科学与统计建模竞赛(算法赛)-基于新网银行数据集》。
Toby老师对数据解压后,数据量有1GB多,推荐参赛大学生电脑配置硬盘要准备200GB+空间来准备这个项目。内存推荐16GB+,有条件的32GB,高纬度数据在绘图可视化和IV计算,变量相关性计算,卡方分箱,融合模型,调参等环节非常耗时。CPU推荐至少i7处理器,基本频率建议高于:3.10GHz,保证较快运算速度。
Toby老师强调一下,台式机运行速度远高于笔记本电脑,推荐台式机做实验。笔记本很多硬件虽然型号类似,但是阉割版,性能比台式机低。
评分标准
用户提交的结果使用AUC稳定性指标进行评估。对于每个date对应的预测,都会计算一个AUC。通过每个date的AUC,拟合一条线性回归线a * x+ b,并计算下降率min(0, a),用于惩罚预测能力下降的模型。通过计算上述线性回归残差的标准差,对模型的波动性施加惩罚。
指标计算:AUC稳定性指标 = mean(AUC) + 4* min(0, a) - std(残差)
点评:之前模型竞赛,参赛方不停上传测试数据,有一种暴力尝试的运气心理成分。这次评分标准比较新颖,意味着用户不能随意上传测试数据,如果上传数据效果不好,会面临惩罚扣分。
今年四川省大学生数据科学与统计建模竞赛和前几年完全不在一个层次。这次模型竞赛有三千+变量,难度四星级,对大学生来说太难了。
高纬度模型竞赛不仅要有很好建模算法知识,还要有数据清洗,特征工程功底。可以说高纬度数据大部分时间花在数据清洗上。
1.读取数据
读取数据,观察推荐用df.head()函数,观察前5条数据。我们初步观察到很多变量含有NaN,这就是空缺值。
import pandas as pd
import numpy as np
#读取excel
data_train_x=pd.read_csv("train_data.csv")
#特征:数据包括客户基本信息类(x0-x20),征信数据-历史金融借贷类(x20-x256)、征信数据-其他行为类(x256-x3805)
#此次模型竞赛难度较大,属于解决真实场景银行风控建模,X变量总数高达3805个。但大家不用担心,实际企业模型中20个变量足以。
data_train_x.head()
2.描述性统计
知己知彼百战百胜,Toby老师建议参数初学者不要一来就建模,而是先观察数据,而且要仔细观察,包括变量缺失率,数值类型,异常数据,相关性,唯一值等指标。通过观察后,我们才因地制宜的谋划相应算法策略来实验。df.info()是最常见观察函数,发现该数据集占用1.8GB内存,数据维度,数据类型都有汇总。
通过观察,发现本项目数据量太大,建议用csv格式存储数据。csv比Excel跑数据更节省时间。
data_train_x.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 61866 entries, 0 to 61865
Columns: 3807 entries, idx to X3805
dtypes: float64(3806), int64(1)
memory usage: 1.8 GB
jupyter notebook不能完全展示所有数据,我们可以调用df.to_csv函数来存储样本数据到本地观察。
data_train_x.head().to_csv("data_train_x_样本.csv")
读取目标变量数据。通过观察,y有61866条数据和X数据一致,这点核实很重要,否则之后建模会报错 。
#读取excel
#y有61866条数据和X数据一致,这点核实很重要,否则之后建模会报错
data_train_y=pd.read_csv("train_target.csv")
data_train_y.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 61866 entries, 0 to 61865
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 idx 61866 non-null int64
1 date 61866 non-null int64
2 y 61866 non-null float64
dtypes: float64(1), int64(2)
memory usage: 1.4 MB
data_train_y.head()
Toby老师调用describe()函数统计变量的计数,中位数,方差,最小值,四分位数,最大值,这有利于观察数据分布和异常值。
#描述性统计
data_train_x.describe()
3.违约率统计
Toby老师通过value_counts()函数统计违约率,违约率0.18329938900203666,和官网公布的约占比18%基本一致。希望银行业务上真实违约率不是18%,那可不是好事!
#时间变量:变量date记录了客户的授信所属的阶段
#风险标签:客户在授信后是否发生逾期,其中y=1代表逾期,y=0代表未逾期。
#训练集正样本(y=1)有11340条,11340/61866=0.18329938900203666,和官网公布的约占比18%基本一致。
#测试集正样本占比11%。
data_train_y["y"].value_counts()
4.变量直方图
Toby老师对部分重要变量观察,数据分布在0-1直接。人的大脑对可视化图像理解优于数字,因此我们可绘图观察数据分布,更容易发现数据分布和问题。官网的说明:相关数据经过脱敏,分层抽样、模拟转换等处理。看来真实数据的确经过了模拟转换。如果新网银行用真实数据来实验,我们的模型是有更好提升空间。转换后数据会降低模型性能。
所有变量直方图太小,个别变量观察不仔细,我们可以对单个变量绘制直方图,这是x228变量观察。
这是x280变量观察。
5.变量相关性分析和热力图
Toby老师发现有超过8000对变量组合存在高度相关性。这暗示模型降维空间很大。
但Toby老师取前几十个变量绘图观察,发现相关性问题并不严重。
Toby老师改良了热力图,加入了数字,可以更清楚发现重要变量相关性并不高。
Toby老师通过对重要四个变量绘制配对图,发现没啥相关性。
3D图观察结论也是一样
6.变量缺失率
Toby老师观察变量缺失率高于50%的有2295个变量。
7.变量筛选
并非所有变量都可以入模,比如idx变量对建模无意义,应删除。其它需要删除变量很多,包括缺失率高,相关性高,空缺值率高的变量,大家需要多次实验。
#idx变量对建模无意义,应删除。
data_train_x1= data_train_x.loc[:,"X0":"X3805"]
8.变量重要性
Toby老师通过IV值或feature importance观察,这次数据集没有强变量,都是数千个弱变量组成。巧妇难煮无米之炊,模型性能要好离不开强变量。不同算法对模型性能提升空间是有限的。新网银行业务方还需要探索更多强变量入模。
官网公布特征:数据包括客户基本信息类(x0-x20),征信数据-历史金融借贷类(x20-x256)、征信数据-其他行为类(x256-x3805)。我们记住两个关键节点:20和256。通过观察Toby老师发现重要变量分布在征信数据-历史金融借贷类和征信数据-其他行为类。客户基本信息类变量基本属于价值含量低变量。
Toby老师实验不同算法,得到的变量重要性排序有区别,X280,X237,X118这三个变量是该数据集的重要变量。如果要提升模型性能,可以围绕这3个变量做特征工程。
Toby老师通过SHAP绘图,整体分析变量数值趋势对违约率影响,如下图,整体区分能力还是显著。
Toby老师通过SHAP绘图对单个贷款用户分析。
Toby老师通过瀑布图分析X237变量,当值接近1时,违约概率显著上升。
9.模型建立和验证
目前比赛第一名最优成绩为0.70628,最差成绩0.44,差异挺大。
Toby老师初步快速测试了一下,线下AUC可达到0.68397,和目前第一名相差0.022。下面是具体模型验证指标:
model accuracy is: 0.8199892241379311
model precision is: 0.5840336134453782
model sensitivity is: 0.04111209701271813
f1_score: 0.07681680022105554
AUC: 0.6839764397640001
gini 0.36795287952800027
0.2625 :
该数据集质量不太好,建模AUC很一般。即使通过衍生大量变量或做融合模型来提升模型性能,上千变量的模型实际上很难部署上线,出现问题,也很难找bug。
10.彩蛋
Toby老师无意中发现该项目有个变量是彩蛋,放入模型后有显著性能提升。这是提升后模型验证结果。模型AUC从0.6839提升到了0.6841。
model accuracy is: 0.8196120689655172
model precision is: 0.5647058823529412
model sensitivity is: 0.04259094942324756
f1_score: 0.0792079207920792
AUC: 0.684113150067871
not very good classifier
gini 0.368226300135742
ks value:0.2578
总结
这此模型实验只是快速测试,后期加上变量特征工程处理,融合模型,调参,模型还有提升空间。这次模型竞赛项目还是模拟转换后的僵尸数据,参赛者对业务理解并无帮助。Toby老师认为大家通过模型竞赛来挖掘业务重要因子,然后反馈业务,而不是为了竞赛而竞赛,本末倒置。如果存在合规问题,举办方可以处理或删除相关变量。经验丰富建模人员通过构造衍生变量可以提升模型性能,但这些变量都是脱敏的,只能消耗大量时间暴力尝试。Toby老师希望举办方以更开放心态为大家带来真实数据来比赛。总之这次模型竞赛可以很好锻炼大家应对高纬度模型数据清洗和建模能力,大家应该积极参与,锻炼自己数据科学能力。
现在大学生团队还是挺厉害,比2年前强多了。这次模型竞赛AUC要上0.7,需要在诸多环节下功夫,没有大量建模经验学生要做到这点很难。诸多参数选手可谓人才!新网银行可以特招入职。
2024年四川省大学生数据科学与统计建模竞赛(算法赛)就为大家介绍到这里。如果大家对这次模型竞赛感兴趣,欢迎大家报名课程《python金融风控评分卡模型和数据分析系列》。微信二维码扫一扫收藏课程。该课程包含这次模型竞赛用到的评分卡,集成树,神经网络算法,数据清洗,IV值计算,变量重要性计算,描述性统计等知识,对这次模型竞赛提升有帮助。
商务联系
#
如果你需要三农绿色信贷感兴趣,例如研究生,博士生论文,企业建模需求,我们公司提供一对一机器学习模型定制服务,提供公司正规发票和合同。
商务联系QQ:231469242,微信:drug666123,或扫描下面二维码加微信咨询。
QQ学习群:1026993837,免费领取200G学习资料。