返回列表

2nd place solution - team JuneHomes (writeup)

505. American Express - Default Prediction | amex-default-prediction

开始: 2022-05-25 结束: 2022-08-24 信贷风控 数据算法赛
第二名解决方案 - 团队 JuneHomes (总结)

第二名解决方案 - 团队 JuneHomes (总结)

作者: Konstantin Yakovlev (Grandmaster) 及团队成员 Danila, Alexey, Igor
比赛: American Express - Default Prediction

注意:重新训练单模型的完整代码将在两周后在此分享。

我要感谢比赛主办方和 Kaggle —— 在经历了数月乃至数年没有表格数据竞赛之后,能参加这次比赛是一种极大的乐趣。

感谢所有参与者(当然还有获胜者 - @daishu,最后三天排名大幅跃升,取得了精彩的个人成绩)—— 我们的成功也是你们的成功 —— 你们迫使我们更加努力 —— 如果没有你们所有人,我们不可能学到这么多新东西并取得这样的成绩。

特别感谢我出色的队友们:

  • Danila
  • Alexey
  • Igor

任何言语都不足以表达你们每个人对最终结果的贡献之大。
“数据科学家有爱好吗?有 -> 数据科学竞赛”。


比赛公告

我们对新的表格数据竞赛发布感到非常兴奋(抱歉引用外部链接:链接),并立即决定参加。Slack 通知 -> 规则和前景描述(100% 会失去暑假和所有空闲时间)-> 于是我们四人组成了团队。团队中只有一名成员有参加数据科学竞赛的经验。

我们从一开始就制定了几条规则:

  • 只利用空闲时间参加比赛
  • 在 Kaggle 上没有“第二”账号(甚至包括妻子/朋友,以排除任何作弊嫌疑)
  • 不在团队之外讨论比赛
  • 我们是为了学习并尽最大努力

基础设施和流程

我们每个人都有自己的机器/资源(GCP/AWS/本地)。我们只使用过几次 Kaggle 平台。所以我们要解决的第一件事就是统一的机器,以保存所有的产物/实验。我们决定使用 AWS。我想说的是,仅凭 Kaggle 资源也能达到我们现在的结果,但这会让团队管理压力更大。我们不想在 AWS 上花太多钱,但有时(在非常紧张的时刻)内存峰值超过 500GB+ 以允许同时工作。

我们尝试使用 neptune.ai 进行机器学习跟踪,但从 7 月份开始,由于我们进入了暴力尝试阶段,效果并不理想。

建议:资源管理非常关键 —— 找到瓶颈并消除它,以使团队效率最大化。同时不要鲁莽地烧钱 —— 限制你的预算。如果有任何优化可能 —— 尽快进行,以节省时间和资源。


项目结构

每次运行都在内部进行了版本控制(例如 v1.1.1 - (主版本).(特征工程版本).(模型版本))
整体项目结构:

  • 初始预处理 -> 产物:清洗并合并的数据框
  • 特征工程 (FE) -> 许多按 uid 对齐的、包含分离特征的数据框
  • 特征选择 -> 包含选择元数据的字典
  • 留出模型 (特征检查和调优) -> 本地验证的 oof 预测 / 留出预测 / 模型 / 模型元数据
  • 完整模型运行 -> 模型 / 模型元数据
  • 预测 -> 每一折的 oof 预测 / cv 分割元数据 / 测试预测

所有这些允许我们来回检查哪些有效,哪些无效,并在每个特定步骤恢复实验。


初始预处理

我们希望通过这一步实现几件事:

  • 合并训练集和测试集 -> 由于涉及人员众多,我担心私有测试部分的一些遗漏转换会被忽视。所以我们牺牲了内存和速度优化,以确保整体的稳定性和安全性。
  • 移除检测到的噪声 ->(我们这里有几种选择,但最终统一为一种)
  • 将客户 ID 转换为统一的 uid
  • 创建内部子集特征 -> 训练集 / 公有集 / 私有集
  • 创建统一的 kfold 和留出分割 -> 以对齐所有实验
  • 按类型分列并分开存储,以最小化内存使用和加载时间

移除检测到的噪声

我们没有使用公开的 notebook 进行清洗。Radar 的数据集非常棒,与我们自己的转换有 99% 的相似度。
我们使用了“isle”识别方法,没有任何预先构建的系数。
虚拟代码大致如下: