如何在Kaggle比赛上击败98%的对手?你需要一份七步秘笈

简介:

怎样才能在Kaggle举办的各式各样的比赛里,拿到骄人的成绩?

f9cdef51475ff8ede8bc1810015d1c56f3d1fe13

一位叫做Abhay Pawar的少年,在2600多支队伍参加的Instacart Market Basket Analysis比赛上,击败了98%的对手。

这是一个预测用户未来将购买何种商品的比赛,依据的是过往交易数据。

9977cde794fa695ae25498405bf93f6fa93df1d6

少年对参加比赛充满了心得,说最重要的就是要充分理解特征,特别是搞定嘈杂特征。

于是,他写了一套七步秘笈出来,和小伙伴们分享自己探索特征的经验。

这份秘笈,封装在一个名叫featexp的Python包里,传送门在文底。

举栗用的数据集,是来自Kaggle Home Credit Default Risk (违约者预测) 比赛。

现在,了解一下具体步骤吧。

支配特征,七步大法

少年说,仔细观察一个模型的部分依赖图 (Partial Dependency Plot,PDP) , 可以帮助大家理解output是如何随着特征而变化的。

bd8fc4343e18d09019ac72dfa97b530ff6b4d5da

问题是,这种图像是用训练好的模型做的。而如果直接用训练数据来做图,就可以让大家更好地了解underlying data。

1. 理解特征

如果因变量 (目标) 是二进制,散点图就不好用,因为所有点不是0就是1。

3e988331b7d0a24b91057b6c27b89367652c51e2

针对连续目标,数据点太多的话,会让人很难理解目标特征之间的关系。

用featexp可以做出更加友善的图像。

拿这行代码试一下吧:


1from featexp import get_univariate_plots
2
3# Plots drawn for all features if nothing is passed in feature_list parameter.
4get_univariate_plots(data=data_train, target_col='target',
5 features_list=['DAYS_BIRTH'], bins=10)

Featexp可以把一个数字特征,分成很多个样本数相等的区间 (Equal Population Bins) 。

然后,计算出目标的平均值 (Mean) ,做出一个这样的图像:

608e12a60e6f652cad0cfbdc04ac798cfeef7a5b

在这里,平均值代表违约率。图像告诉我们,年纪 (DAYS_BIRTH) 越大的人,违约率越低。

嗯,如果年轻人不太在意违约,也比较符合常理。

还有另外一个图像,表示每个区间的人数 (分的时候就是相等的) :

a28dcf6abbe26e16a51f3afd7b42f118a69f2714

不过,这个栗子是比较友好的特征。少年说了,下一个章节才是最有趣的。

2. 识别嘈杂特征

嘈杂特征容易造成过拟合,识别这样的特征一点也不容易。

在featexp里面,可以跑一下测试集,然后对比验证集和测试集的特征趋势,来找出嘈杂的特征。

这是对比用的代码:

1get_univariate_plots(data=data_train, target_col='target', data_test=data_test, features_list=['DAYS_EMPLOYED'])

做出的图像长这样:

de3614cf7385281117e005ac559c1ab53e902b91

为了衡量嘈杂程度,featexp会计算两个指标

一是趋势相关性 (Trend Correlation) :如果一个特征在训练集和测试集里面,表现出来的趋势不一样,就可能导致过拟合。这是因为,模型从测试集里学到的一些东西,在验证集里不适用。

趋势相关性可以告诉我们,训练集和测试集趋势的相似度,以及每个区间的平均值,以及这些数值要怎么用。

上面这个特征,两个集子的相关性达到99%。

很好,一点也不嘈杂的样子。

二是趋势变化 (Trend Changes) :有时候,趋势会发生突变 (Sudden Changes) 和反复变化 (Repeated Changes) 。

这可能就是很嘈杂的表现了,也有可能是那个区间,因为其他特征的表现非常与众不同,而受到影响了。

如果出现这种情况,这个区间的违约率就没办法和其他区间直接相比了。

下面这个特征,就是嘈杂特征,相关性只有85%有时候,可以选择丢掉这个特征。

0157dbea4f5c2221271bd0b98d06e36adaf2ddd5

抛弃相关性低的特征,这种做法在特征非常多、特征之间又很相关的情况下,比较适用。

它可以减少过拟合,避免信息丢失。不过:

注意,别把太多重要的特征都丢掉了。否则,模型的预测效果可能就有损失了。

注意x2,也不能用重要性来评价特征是否嘈杂,因为有些特征就是可以既重要,又嘈杂得不得了。

用 (与训练集) 不同时间段的数据来做测试集,可能会比较好。这样,就能看出来数据是不是随时间变化的了。

请看下面的示范。

Featexp里有一个 get_trend_stats() 函数,可以返回一个数据框 (Dataframe) ,显示趋势相关性趋势变化。代码如下:


1from featexp import get_trend_stats
2stats = get_trend_stats(data=data_train, target_col='target', data_test=data_test)

52ef413b86c234a7a25bfda089e2fc3a758fc85b

现在,可以试着丢弃一些特征了。不妨参考这些标准来执行:

6ec3d996d79229d48ef2b7629661f1e90ed4c6cd

AUC=Area Under Curve,曲线下的面积,是评价模型的指标

丢弃特征的相关性阈值越高,排行榜上的AUC越高。

加上不要丢弃重要特征这一条规则,AUC提升到了0.74。

有趣的是,测试集的AUC并没有像排行榜的AUC变化那么大。

完整代码可以在featexp_demo记事本里面找到:
https://github.com/abhayspawar/featexp/blob/master/featexp_demo.ipynb

3. 特征工程

通过查看这些图表获得的见解有助于创建更好的特征。

只需更好地了解数据就可以实现更好的特征工程。 除此之外,它还可以帮助你改进现有特征。下面来看另一个功能EXT_SOURCE_1:

af67a53cf96f5bdea5fb2991b47981d7e8b9d650

EXT_SOURCE_1的特征与目标图

具有较高EXT_SOURCE_1值的客户违约率较低。 但是,第一个区间(违约率约8%)不遵循这个特征趋势(上升然后下降)。 它只有-99.985左右的负值且人群数量较多。这可能意味着这些是特殊值,因此不遵循特征趋势。

幸运的是,非线性模型在学习这种关系时不会有问题。 但是,对于像逻辑回归这样的线性模型,这些特殊值和空值应该用来自具有相似违约率的区间的值来估算,而不是简单地用特征均值。

4. 特征重要性

Featexp还可以帮助衡量特征的重要性。 DAYS_BIRTH和EXT_SOURCE_1都有很好的趋势。 但是,EXT_SOURCE_1的人群集中在特殊值区间中,这表明它可能不如DAYS_BIRTH那么重要。 基于XGBoost模型的特征重要性,DAYS_BIRTH实际上比EXT_SOURCE_1更重要。

5. 特征调试

查看Featexp的图表,可以帮助你通过以下两项操作来发现复杂特征工程代码中的错误:

586e13f36254c22b6d3ccdaaeb76ef0ab85fa420

1)检查特征的人群分布是否正确。 由于一些小错误,作者遇到过多次极端情况。

2)在查看这些图之前,总是假设特征趋势会是什么样子。 特征趋势看起来不符合预期,可能暗示着某些问题。 坦率地说,这个假设趋势的过程使ML模型更有趣!

6. 泄漏检测

从目标到特征的数据泄漏导致过度拟合。 泄露的特征具有很高的功能重要性。 但是,要理解为什么在特征中会发生泄漏,这很是困难的。 查看featexp图可以帮助理解这一问题。

以下特征在“Nulls”区间中的违约率为0%,在其他所有区间中的违约率为100%。 显然,这是泄漏的极端情况。 只有当客户违约时,此特征才有价值。 了解泄漏特征的问题所在能让你更快地debug。

3dc0a94efcfc015f7df6a74254ca20e9a24a5adc

7. 模型监控

由于featexp可计算两个数据集之间的趋势相关性,因此它可以很容易地用于模型监控。 每次重新训练模型时,都可以将新的训练数据与测试好的训练数据(通常是第一次构建模型时的训练数据)进行比较。 趋势相关性可以帮助您监控特征信息是否与目标的关系发生了变化。

featexp项目

作者Abhay Pawar在文中大篇幅使用了featexp,这是一个用于监督学习的特征探索项目,本文也是主要针对此工具得使用展开讨论。它对前面提到的特征理解、识别带噪声的特征、特征除错、泄露探测和模型监控都有帮助。

它的安装也很简单,可以通过pip直接安装:

pip install featexp


原文发布时间为:2018-11-7

本文作者:关注前沿科技

本文来自云栖社区合作伙伴“量子位”,了解相关信息可以关注“量子位”。

相关文章
|
11天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
12天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
845 11
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
12天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
860 8
|
12天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
12天前
|
JSON 缓存 安全
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
CC Switch 通过本地路由(`127.0.0.1:15721`)实现协议转换:将 Codex 的 Responses API 请求自动映射为 DeepSeek 等厂商的 Chat Completions 接口,兼容流式响应与工具调用,无需修改 Codex 源码,安全隔离 API Key。(239字)
2318 6
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
|
12天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
1885 6
|
12天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
785 150
|
12天前
|
人工智能 运维 自然语言处理
阿里云百炼Qwen3.7-Max模型详解:综合能力、核心优势与订阅计划参考指南
2026年,大模型技术持续向通用化、高性能、场景化方向迭代,阿里云百炼作为一站式大模型服务平台,持续推出迭代升级的模型产品,Qwen3.7-Max便是当前主力旗舰级大模型之一。该模型依托深度优化的底层架构与大规模训练数据,在文本理解、逻辑推理、多模态交互、代码生成、长文本处理等多个维度实现能力升级,同时搭配灵活的订阅计划体系,能够适配个人开发者、中小企业、大型企业、政企机构等不同类型用户的使用需求。
633 2