608. Home Credit - Credit Risk Model Stability | home-credit-credit-risk-model-stability
大家好,我是 yuuniee。
感谢本次比赛的举办方 Home Credit 及工作人员、Kaggle 工作人员以及所有参与者。

在不使用度量化作弊(Metric Hacking)的情况下,我的模型池的私有排行榜最高得分约为 0.53。
众所周知,本次比赛分为两个阶段。
第一阶段是机器学习(ML),第二阶段是度量化作弊(MH)。
下面我将简要介绍每个阶段。
(如果您只关心机器学习部分,请只阅读第一阶段。)
感谢在比赛初期编写了精彩的探索性数据分析(EDA)与解决方案笔记的 @sergiosaharovskiy 和 @greysky,同时感谢许多参与者提供的各种见解。
期间,我的公开排行榜成绩接近前五,比赛似乎进行得非常顺利。然而……
未奏效的方法
- Transformer 类模型,如 Tabnet、TabTransformer、FT‑Transformer 等。
- 按时间段(月、周等)统计的收入、支出和税费。
- 个体收入、支出与税费之间的差异。
- K‑means 聚类。
在比赛初期,@at7459 对 MH 的问题提出了质疑,随后在比赛后半段,@johnpateha 宣布 MH 再次出现。
此外,感谢众多参与者提供的各种评论和方案。你们的建议拓宽了我的知识面。特别是上述两位,他们是真正的科学家和新闻工作者,本可以隐藏这一发现并从中获利,却选择向所有人公开(何不考虑 Kaggle 为此类分享颁发特别奖?)。虽然问题未得到解决,但我们从中至少学到了一些(?),并得以采取最低程度的防范措施。
在 @johnpateha 发表《Metric hack again, sorry》后,我尝试进行数据逆向分析,发现 date_decision 与 min_refreshdate_3813885D 之间的差值与 WEEK_NUM 有很高的相关性(约 0.9 以上)。(详细信息请参见 @eivolkova 在比赛结束后立即发布的代码。)
以及 @at7459 提出的方法:
DEVIDE = 1/2
REDUCE = 0.02
condition = df['WEEK_NUM'] < (df['WEEK_NUM'].max()-df['WEEK_NUM'].min())*DEVIDE+df['WEEK_NUM'].min()
df.loc[condition, 'score'] = (df.loc[condition, 'score'] - REDUCE).clip(0)
基于此,我在改变 REDUCE 与 DEVIDE 参数后提交并检查得分细节,得到如下结果:
REDUCE 参数为 0.03,私有部分的最佳值大概分布在 0.02 到 0.04 之间。顶级选手之间的纯模型性能差距只有 0.00X,而上述调节值引起的差距达到 0.0X,在这个阶段对我来说变成了赌博。
有人会压低,有人会压高。在这里,我信任自己的模型,选择了中性方案,即 DEVIDE=1/2,REDUCE=0.03,这是预期分布的中位数。我预计高位或低位下注者会夺冠,而我约有 50% 的概率进入前十。
谢谢!