📑 本页目录(点开跳转)
竞赛元策略
⏱ 25 分钟 | ⭐ 关于「怎么打」而不是「怎么建模」
🎯 一句话
这一章不讲任何模型,讲的是比赛本身的博弈:选什么比赛、时间怎么分配、最后两个提交怎么选、以及怎么不被 shake-up 打死。很多人技术不差但名次上不去,问题出在这一层。
一、比赛选择策略
1.1 比赛分类与金牌难度
| 比赛类型 |
参赛人数 |
金牌门槛 |
特点 |
| Featured(Featured) |
2000~5000+ |
前50名 |
主流比赛,竞争激烈,含金量最高 |
| Research |
500~2000 |
前20名 |
学术导向,数据量大,周期长 |
| Playground |
500~1500 |
前30名 |
入门级,适合练手 |
| Code Competition |
1000~3000 |
前40名 |
提交代码而非预测值,工程要求高 |
| Annual(年度赛) |
3000~6000+ |
前100名 |
参赛人数最多,shake-up最大 |
| 数据这一关 13 · 评测集也是数据 | 这四处讲的是各自场景怎么评测;评测集本身怎么造、多大够、有没有被污染、评分器准不准、结果该怎么报 在那一章 ⭐ |
1.2 比赛选择决策
| 维度 |
容易拿牌的比赛 |
难拿牌的比赛 |
| 领域 |
冷门领域(推荐系统、时序) |
热门领域(NLP、CV) |
| 数据量 |
大数据量(筛选空间大) |
小数据量(随机性大) |
| 评价指标 |
AUC/F1(稳定) |
Accuracy/RMSE(敏感) |
| 参赛人数 |
<1000人 |
>3000人 |
| 赛程 |
3个月(迭代充分) |
1个月(时间不够) |
| 数据类型 |
结构化(确定性高) |
非结构化(随机性大) |
1.3 投入产出比评估
| 维度 |
高ROI |
低ROI |
| 领域匹配 |
自己擅长的领域 |
从零学习的领域 |
| 计算资源 |
CPU/单GPU即可 |
需要多GPU集群 |
| baseline差距 |
baseline分数低(提升空间大) |
baseline已接近天花板 |
| 公开信息 |
Discussion活跃(可借鉴) |
信息封闭(独自摸索) |
| 时间窗口 |
比赛刚开始1~2周 |
比赛快结束才加入 |
二、比赛时间管理
2.1 标准赛程节奏(3个月)
| 阶段 |
时间 |
核心任务 |
产出 |
| 第1周 |
Day 1~7 |
赛题理解+EDA+Baseline提交 |
可提交的baseline |
| 第2~3周 |
Day 8~21 |
数据分析+特征工程+模型选择 |
超越baseline的方案 |
| 第4~6周 |
Day 22~42 |
模型优化+训练策略+数据增强 |
稳定CV的单模型 |
| 第7~9周 |
Day 43~63 |
模型融合+伪标签+后处理 |
多模型融合方案 |
| 第10~11周 |
Day 64~77 |
冲刺提分+规则修正+TTA |
最终提交方案 |
| 第12周 |
Day 78~84 |
提交策略+shake-up防范 |
选择最终提交 |
2.2 各阶段时间分配原则
| 原则 |
说明 |
| 前期重速度 |
第1周必须提交,即使分数很低,确认提交流程无误 |
| 中期重迭代 |
每次改动都要在验证集上评估,确认有效再深入 |
| 后期重稳定 |
最后2周不做大改动,只做微调和融合 |
| 每天有产出 |
每天至少跑一个实验,保持节奏感 |
| 记录一切 |
每次实验记录参数、CV分数、LB分数 |
2.3 时间陷阱
| 陷阱 |
表现 |
解决方案 |
| 过度EDA |
花2周做EDA还没提交 |
EDA 3天内完成,先提交baseline |
| 单模型死磕 |
一个模型调1周不换 |
单模型提升<0.1%就换方向 |
| 盲目堆模型 |
融合20个模型没提升 |
5~8个多样性模型即可 |
| 最后才融合 |
最后3天才开始融合 |
提前2周开始融合实验 |
| 忽视规则 |
最后发现违反规则被取消 |
开赛第一周仔细读规则 |
三、LB Probing与Shake-up防范
3.1 Public/Private分裂机制
| 维度 |
说明 |
| Public LB |
用测试集的一部分(通常30%~40%)评估,比赛期间可见 |
| Private LB |
用测试集的剩余部分评估,比赛结束后才公布 |
| 分裂方式 |
随机分裂 / 按时间分裂 / 按ID分裂 |
| shake-up |
Public和Private排名不一致的现象,可能上下浮动几十名 |
3.2 LB Probing技巧
| 技巧 |
说明 |
| 全1提交 |
提交全1预测,探测Public测试集的正样本比例 |
| 全0提交 |
提交全0预测,探测负样本比例 |
| 单样本探测 |
只改一个样本的预测,观察LB变化,推断该样本是否在Public中 |
| 随机提交 |
多次随机提交,估计Public测试集的分布 |
| 分裂推断 |
通过多次提交推断Public/Private的分裂方式(随机/时间/ID) |
3.3 Shake-up防范策略
| 策略 |
说明 |
| 信任CV |
CV分数比Public LB更可靠,选择提交时以CV为主 |
| 对抗验证 |
确保验证集与测试集分布一致 |
| 多折一致性 |
5折CV各折分数方差小,说明模型稳定 |
| 避免过拟合Public |
不要针对Public LB反复调参 |
| 选择稳定的提交 |
选择CV和Public LB都高的提交,而非Public最高但CV一般的 |
| 简单模型兜底 |
准备一个简单但稳定的模型作为保底提交 |
3.4 Shake-up常见原因
| 原因 |
说明 |
防范 |
| Public/Private分布不同 |
时间分裂导致分布漂移 |
对抗验证 |
| 过拟合Public |
针对Public反复调参 |
以CV为主 |
| 随机性 |
小测试集的随机波动 |
多折验证降低方差 |
| 数据泄露 |
利用了Public特有信息 |
不依赖泄露信息 |
| 伪标签过拟合 |
伪标签偏向Public分布 |
伪标签置信度阈值提高 |
四、团队协作策略
4.1 单人vs组队
| 维度 |
单人 |
组队(2~3人) |
| 灵活性 |
高,随时换方向 |
低,需协调 |
| 实验吞吐 |
低,串行 |
高,并行 |
| 融合多样性 |
低,思路单一 |
高,不同视角 |
| 沟通成本 |
无 |
有,需定期同步 |
| 金牌概率 |
中(需全能) |
高(互补优势) |
4.2 团队分工模式
| 模式 |
分工方式 |
适用场景 |
| 按阶段分工 |
A做特征工程,B做模型训练,C做融合 |
各有所长 |
| 按模型分工 |
A训BERT,B训RoBERTa,C训DeBERTa |
模型融合赛 |
| 按实验分工 |
A做主实验,B做消融实验,C做EDA |
快速迭代 |
| 按领域分工 |
A做NLP部分,B做特征部分 |
跨领域赛题 |
4.3 团队协作要点
| 要点 |
说明 |
| 统一验证集 |
所有人用相同的验证集划分,确保结果可比 |
| 统一代码规范 |
输入输出格式统一,方便模型融合 |
| 每日同步 |
每天15分钟同步进展,避免重复工作 |
| 实验记录共享 |
用共享表格记录每次实验的参数和结果 |
| 提前融合 |
不要最后一天才合并,提前2周开始融合实验 |
五、提交策略
5.1 提交选择原则
| 原则 |
说明 |
| CV优先 |
选择CV分数最高的提交,而非Public LB最高的 |
| CV+LB一致 |
选择CV和LB都高的提交,最稳定 |
| 不同策略分散 |
2次提交选不同策略(如一个融合、一个单模型) |
| 简单模型兜底 |
一次提交用复杂融合,另一次用简单稳定模型 |
5.2 提交时机
| 时机 |
策略 |
| 比赛初期 |
尽早提交,确认流程,建立baseline |
| 比赛中期 |
每次重大改动后提交验证LB |
| 比赛末期 |
减少提交频率,避免过拟合LB |
| 最后1天 |
选择最终2次提交,不再改动 |
5.3 Code Competition提交策略
| 策略 |
说明 |
| 提前测试 |
提交代码前在本地模拟运行,确保无报错 |
| 内存控制 |
推理时用进程隔离释放内存,不同时加载所有模型 |
| 时间控制 |
确保推理时间在限制内,预留20%余量 |
| 模型蒸馏 |
大模型蒸馏到小模型,减少推理时间和内存 |
| 降级方案 |
准备一个轻量模型,主模型超时时自动切换 |
六、竞赛心态管理
| 阶段 |
常见心态问题 |
应对策略 |
| 初期 |
看到别人高分焦虑 |
专注自己的baseline,不攀比 |
| 中期 |
提升停滞想放弃 |
换个方向尝试,或休息1天 |
| 后期 |
融合没提升焦虑 |
回归CV分数,减少无效实验 |
| 末期 |
shake-up恐惧 |
信任CV,选稳定提交 |
| 赛后 |
没拿牌失落 |
复盘总结,下次改进 |
七、竞赛学习路径
7.1 新手到金牌的进阶路线
| 阶段 |
目标 |
时间 |
行动 |
| 入门 |
完成一次完整提交 |
1~2周 |
Playground赛+baseline |
| 青铜 |
Top 50% |
1~2月 |
跟着Top方案复现 |
| 白银 |
Top 25% |
2~3月 |
独立完成特征工程+模型选择 |
| 黄金 |
Top 10%(金牌) |
3~6月 |
融合策略+竞赛元策略+领域深耕 |
| 大师 |
Top 1% |
6~12月 |
多领域精通+创新方法 |
7.2 学习资源
| 资源 |
用途 |
| Kaggle Discussion |
比赛中的方案分享和技巧讨论 |
| Kaggle Notebooks |
可运行的代码和方案 |
| Kaggle Master Grandmaster访谈 |
顶级选手的经验分享 |
| Kaggle Ensembling Guide |
融合策略经典文章 |
| 各领域SOTA论文 |
前沿方法学习 |
🔗 这一章连到哪里
✅ 检查点
- 选比赛时该看哪几个维度?
- 什么是 Shake-up?它是怎么发生的?
- 防 Shake-up 最有效的做法是什么?
- 最终两个提交名额该怎么用?
- LB Probing 是什么?为什么要谨慎?
- 竞赛心态上最常见的陷阱是什么?
👀 答案
- ①数据规模和你的算力是否匹配(跑不动的比赛没法迭代)②赛题类型是否是你想练的方向③剩余时间是否够走完一轮完整迭代④公开 LB 和数据量的关系(测试集很小的比赛 shake-up 风险高)⑤讨论区活跃度(能学到多少)。
- Shake-up 指最终私榜(Private LB)排名相对公开榜(Public LB)大幅变动。发生原因:公开榜只用了测试集的一小部分,很多人在这一小部分上过拟合了(反复提交、按 LB 选模型),私榜换成另一部分数据,那些过拟合就现原形。
- 信任你自己的交叉验证,而不是公开 LB。具体:①建一个可靠的本地 CV(切分方式和测试集一致) ②用 CV 选模型,只把 LB 当作一个「有没有系统性错误」的 sanity check ③避免按 LB 反复微调 ④最终提交里至少留一个「CV 最优」的方案。
- 一个稳(CV 最优 / 融合最充分)+ 一个搏(LB 最优 或 高方差高上限的方案)。⭐ 如果 CV 和 LB 分歧很大,两个都留 CV 最优的不同变体比赌 LB 更明智——因为 LB 的样本量本身就小。
- 通过构造特殊的提交来「探测」测试集的统计信息(如正负样本比例、某个子集的标签分布)。谨慎的原因:①它消耗提交次数 ②部分比赛规则明确禁止 ③探测到的信息可能只对公开榜那部分有效,私榜上反而误导你。
- 沉没成本 + 排行榜焦虑。表现为:在一个明显走不通的方向上继续投入(因为已经花了三天)、每天刷几十次排行榜、以及因为掉了几名就推翻整个已经验证过的方案。⭐ 对策:提前定好「什么条件下换方向」,并且相信你的 CV。
🛑 可以停在这里
先记住这几件事
- 选择比赛时把学习目标、算力、时间与可完成的迭代一起考虑。
- 公榜只是部分测试数据,反复围着它选择模型可能造成过拟合。
- 提前制定提交和换方向条件,用可信本地验证支持决定。
打卡记录保存在你的浏览器里,首页能看到总进度