暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kaggle Home Credit 风控预测 baseline

Coggle数据科学 2024-02-22
458
  • 赛题名称:Home Credit - Credit Risk Model Stability
  • 赛题任务:预测客户是否可能拖欠贷款
  • 赛题类型:数据挖掘
  • 赛题链接👇:

https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability

unsetunset赛题背景unsetunset

1997年成立的Home Credit是一家国际性的消费金融服务提供商,专注于为几乎没有信用记录的人提供负责任的贷款服务。传统的信用评估方法对于那些几乎没有信用记录的人可能不够适用。缺乏信用记录可能意味着年龄较小或更倾向于使用现金支付,这使得他们在传统数据方面缺乏足够的信息。缺乏传统数据的情况下,很可能会导致这些人被拒绝贷款申请。因此,数据科学有望帮助更好地预测借款人的偿还能力,从而使那些最需要贷款支持的人群能够更容易地获得贷款。

现实世界中客户的行为不断变化,因此每个评分卡都必须定期更新,这需要时间。评分卡在未来的稳定性至关重要,因为性能突然下降意味着贷款平均会发放给更差的客户。然而,贷款提供商无法在贷款到期日可观察到之前就发现潜在的问题。鉴于重新开发、验证和实施评分卡所需的时间,稳定性是非常可取的。模型稳定性与性能之间存在一种权衡关系,在部署之前必须达到平衡。

Home Credit通过与Kaggle等合作伙伴的比赛,旨在吸引数据科学家和机器学习专家的参与,以开发更准确、更稳定的评分卡模型,从而提高贷款申请的接受率,并改善那些因缺乏信用记录而被拒绝贷款的人群的生活。

unsetunset赛题任务unsetunset

比赛的任务是预测哪些客户更有可能违约贷款。评估将偏向那些随着时间稳定的解决方案。

参与者的参与可能会为消费金融服务提供商提供一种更可靠、更持久的方式来评估潜在客户的违约风险。

unsetunset评价指标unsetunset

评价指标是基于 Gini 稳定性度量的。对于每个周数(WEEK_NUM),预测结果会计算一个 Gini 分数。

其中,A 表示实际值的累积分布函数,C 表示模型预测值的累积分布函数。

接下来,通过对每周的 Gini 分数进行线性回归拟合,得到一个形如 的线性回归模型。从回归模型中提取出 falling_rate,计算方式为 。这一指标用于惩罚预测能力下降的模型。

最终的评价指标是:

换句话说,评价指标由预测结果的 Gini 均值、falling_rate 的最小值乘以 88.0、以及残差的标准差组成。

unsetunset提交结果unsetunset

对于测试集中的每个案例(case_id),您需要预测目标分数的概率。文件应包含一个标题,并具有以下格式:

case_id,score
57543,0.1
57544,0.9
57545,0.5
etc.

unsetunset赛题数据集unsetunset

这个比赛的数据集包含许多表格,这些表格来自各种数据源,并且在准备数据集时使用了不同级别的数据聚合。以下是数据集中的各个表格:

基础表格(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(逾期天数)、掩码类别、转换金额、转换日期等。转换过程中的各种变换由预测变量名称末尾的大写字母表示。

unsetunset解题baselineunsetunset

这个数据集包含大量的表格,这是利用各种不同数据源和数据聚合级别准备数据集的结果。

深度数值

  • 深度=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.csv
  • train_static_0_1.csv
  • train_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

unsetunset想要一起参赛?unsetunset

可以在下面论坛中一起讨论:http://discussion.coggle.club/t/topic/18

或添加下面微信如竞赛群:


学习大模型、推荐系统、算法竞赛
添加👇微信拉你进群
加入了之前的社群不需要重复添加~


文章转载自Coggle数据科学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论