赛题名称:Home Credit - Credit Risk Model Stability 赛题任务:预测客户是否可能拖欠贷款 赛题类型:数据挖掘 赛题链接👇:
https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability
赛题背景
1997年成立的Home Credit是一家国际性的消费金融服务提供商,专注于为几乎没有信用记录的人提供负责任的贷款服务。传统的信用评估方法对于那些几乎没有信用记录的人可能不够适用。缺乏信用记录可能意味着年龄较小或更倾向于使用现金支付,这使得他们在传统数据方面缺乏足够的信息。缺乏传统数据的情况下,很可能会导致这些人被拒绝贷款申请。因此,数据科学有望帮助更好地预测借款人的偿还能力,从而使那些最需要贷款支持的人群能够更容易地获得贷款。
现实世界中客户的行为不断变化,因此每个评分卡都必须定期更新,这需要时间。评分卡在未来的稳定性至关重要,因为性能突然下降意味着贷款平均会发放给更差的客户。然而,贷款提供商无法在贷款到期日可观察到之前就发现潜在的问题。鉴于重新开发、验证和实施评分卡所需的时间,稳定性是非常可取的。模型稳定性与性能之间存在一种权衡关系,在部署之前必须达到平衡。
Home Credit通过与Kaggle等合作伙伴的比赛,旨在吸引数据科学家和机器学习专家的参与,以开发更准确、更稳定的评分卡模型,从而提高贷款申请的接受率,并改善那些因缺乏信用记录而被拒绝贷款的人群的生活。
赛题任务
比赛的任务是预测哪些客户更有可能违约贷款。评估将偏向那些随着时间稳定的解决方案。
参与者的参与可能会为消费金融服务提供商提供一种更可靠、更持久的方式来评估潜在客户的违约风险。
评价指标
评价指标是基于 Gini 稳定性度量的。对于每个周数(WEEK_NUM),预测结果会计算一个 Gini 分数。
其中,A 表示实际值的累积分布函数,C 表示模型预测值的累积分布函数。
接下来,通过对每周的 Gini 分数进行线性回归拟合,得到一个形如 的线性回归模型。从回归模型中提取出 falling_rate,计算方式为 。这一指标用于惩罚预测能力下降的模型。
最终的评价指标是:
换句话说,评价指标由预测结果的 Gini 均值、falling_rate 的最小值乘以 88.0、以及残差的标准差组成。
提交结果
对于测试集中的每个案例(case_id),您需要预测目标分数的概率。文件应包含一个标题,并具有以下格式:
case_id,score
57543,0.1
57544,0.9
57545,0.5
etc.
赛题数据集
这个比赛的数据集包含许多表格,这些表格来自各种数据源,并且在准备数据集时使用了不同级别的数据聚合。以下是数据集中的各个表格:
基础表格(Base tables)
基础表格存储了关于观察结果和case_id
的基本信息。case_id
是每个观察结果的唯一标识,您需要使用它将其他表格与基础表格连接起来。
静态表格(Static tables)
这些表格存储了与特定case_id
直接相关的静态特征。
外部数据源表格(External data source tables)
这些表格来自外部数据源,如信用局和税务登记机构。
深度1表格(Depth 1 tables)
这些表格具有深度为1的特征,每个case_id
都有一个与之关联的历史记录。
深度2表格(Depth 2 tables)
这些表格具有深度为2的特征,每个case_id
都有一个与之关联的历史记录,同时使用了两个索引列。
每个表格都有不同的列,其中一些列具有特殊含义,如case_id
、date_decision
、WEEK_NUM
、MONTH
和target
等。除此之外,还有一些原始列用作预测变量,其定义可以在feature_definitions.csv
文件中找到。
这些表格中的数据经过了各种转换,例如转换DPD(逾期天数)、掩码类别、转换金额、转换日期等。转换过程中的各种变换由预测变量名称末尾的大写字母表示。
解题baseline
这个数据集包含大量的表格,这是利用各种不同数据源和数据聚合级别准备数据集的结果。
深度数值
深度=0 - 这些是直接与特定 case_id 相关的静态特征。 深度=1 - 每个 case_id 都有一个与之关联的历史记录,由 num_group1 索引。 深度=2 - 每个 case_id 都有一个与之关联的历史记录,由 num_group1 和 num_group2 双重索引。
特征类型
各种预测变量都经过了转换,因此我们对相似的转换组使用了以下符号:
P - 转换 DPD(逾期天数) M - 掩码类别 A - 转换金额 D - 转换日期 T - 未指定转换 L - 未指定转换
表介绍
深度 0 表示静态特征,直接与特定 case_id 相关联。
train_static_0_0.csvtrain_static_0_1.csvtrain_static_cb_0.csv
其中,train_static_0_0.csv
和 train_static_0_1.csv
属于内部数据源,而 train_static_cb_0.csv
属于外部数据源。
深度为 1 表示每个 case_id 都有一个与之关联的历史记录,这些记录由特定的索引(如 num_group1)进行索引。
train_applprev_1_0.csv
和train_applprev_1_1.csv
:applprev_1,内部数据源。train_other_1.csv
:other_1,内部数据源。train_tax_registry_a_1.csv
:tax_registry_a_1,外部数据源,税务注册提供商 A。train_tax_registry_b_1.csv
:tax_registry_b_1,外部数据源,税务注册提供商 B。train_tax_registry_c_1.csv
:tax_registry_c_1,外部数据源,税务注册提供商 C。train_credit_bureau_a_1_0.csv
,train_credit_bureau_a_1_1.csv
,train_credit_bureau_a_1_2.csv
,train_credit_bureau_a_1_3.csv
:credit_bureau_a_1,外部数据源,信用局提供商 A。train_credit_bureau_b_1.csv
:credit_bureau_b_1,外部数据源,信用局提供商 B。train_deposit_1.csv
:deposit_1,内部数据源。train_person_1.csv
:person_1,内部数据源。train_debitcard_1.csv
:debitcard_1,内部数据源。
深度为 2 表示每个 case_id 都有一个与之关联的历史记录,这些记录由两个索引(如 num_group1 和 num_group2)进行索引。
train_applprev_2.csv
:applprev_2,内部数据源。train_person_2.csv
:person_2,内部数据源。train_credit_bureau_a_2_0.csv
到train_credit_bureau_a_2_10.csv
:credit_bureau_a_2,外部数据源,信用局提供商 A。train_credit_bureau_b_2.csv
:credit_bureau_b_2,外部数据源,信用局提供商 B。
特征工程
由于现在存在较多表,因此建议可以直接合并已有的数据集,然后直接训练:
def feature_eng(df_base, depth_0, depth_1, depth_2):
df_base = (
df_base
.with_columns(
month_decision = pl.col("date_decision").dt.month(),
weekday_decision = pl.col("date_decision").dt.weekday(),
)
)
for i, df in enumerate(depth_0 + depth_1 + depth_2):
df_base = df_base.join(df, how="left", on="case_id", suffix=f"_{i}")
df_base = df_base.pipe(Pipeline.handle_dates)
return df_base
当然这里面可以完成的特征还有很多,更多的可以从论坛中找到分享。
https://www.kaggle.com/code/kononenko/metric-trick-home-credit-baseline-inference https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability/discussion/473950
想要一起参赛?
可以在下面论坛中一起讨论:http://discussion.coggle.club/t/topic/18
或添加下面微信如竞赛群:






