手把手带你打 Kaggle!F1 进站预测实战

📅 2026/7/5 15:42:23 👁️ 阅读次数 📝 编程学习
手把手带你打 Kaggle!F1 进站预测实战

📌 前言:为什么要打 Kaggle?

Kaggle 是全球最大的数据科学竞赛平台,也是数据科学领域最实际的"刷题场"。不同于 LeetCode 刷算法、Kaggle 让你从头到尾体验一个真实的 ML 工作流程:

  • 下载真实数据
  • 阅读高手 Notebook 学招式
  • 提交预测结果看排名
  • 拿到Medal(奖牌)放进履历或作品集

不管你是要推甄研究所、找数据科学实习,还是纯粹想提升实力,打 Kaggle 永远是 CP 值最高的方式之一

🚀 Step 0:注册 Kaggle 帐号

前往 kaggle.com,点右上角Sign InRegister,用 Google 帐号直接一键登入。

⚠️第一次参加比赛的必要步骤:进入比赛页面后,先点选Rules分页,点Join Competition / Accept Rules。 没做这步,就看不到下载按钮,也无法提交结果

🏁 Step 1:选定比赛——Predicting F1 Pit Stops(S6E5)

本次选定的比赛是 Kaggle Playground Series Season 6 Episode 5:

🔗 Predicting F1 Pit Stops | Kaggle

为什么选这场?

表格

理由说明
🎯适合入门Playground Series 是 Kaggle 官方每月举办的练习赛,难度适中
📊Tabular 数据表格型数据,不需要深度学习,统计背景可直接上手
🏆有 MedalPlayground 比赛有正式奖牌制度,Top 10% 得铜牌、Top 5% 得银牌
🧠有趣的领域F1 赛车策略,比预测房价有意思得多

📥 Step 2:下载数据

进入比赛页面 → 点Data分页 → 点Download All,下载压缩包。

解压缩后你会看到3 个档案

plaintext

playground-series-s6e5/ ├── train.csv ← 训练集(有标签) ├── test.csv ← 测试集(要预测这个) └── sample_submission.csv ← 提交格式范本

🗺️ Step 3:先搞懂规则,再开始建模

下载数据后,千万不要立刻开始写模型!

就像打英雄联盟要先知道蓝 Buff 和红 Buff 的位置,打 Kaggle 也要先搞清楚这三件事:

① 任务目标 → ② 评分方式 → ③ 数据型态

这三步做好了,之后的每一个决策都会更有方向。

① 任务目标:这是什么问题?

→ 二元分类(Binary Classification)

比赛要你预测每一圈赛车下一圈是否会进站,目标栏位是PitNextLap

表格

意义
1这辆车下一圈会进站
0这辆车下一圈不会进站

但注意:你提交的不是 0 或 1 的硬预测,而是进站的机率(0.0 到 1.0 之间的小数)。

plaintext

# sample_submission.csv 长这样: id,PitNextLap 439140,0 ← Kaggle 给的 dummy baseline(全部填 0) 439141,0 439142,0 ...

你的任务:把这些 0 换成真实的机率预测,例如:

plaintext

439140,0.0823 439141,0.4156 439142,0.0341

② 评分方式:Leaderboard 怎么算分?

→ ROC AUC(Area Under the ROC Curve)

AUC 是二元分类机率预测最常用的指标,分数从 0 到 1:

表格

AUC 分数代表意义
0.50跟乱猜一样
0.80还不错的水准
0.90很强
0.95+目前 Leaderboard 顶尖水准
1.00完美预测

AUC 的关键特性(直接影响你的策略):

  1. AUC 只看排名顺序,不看绝对值

    • 你预测 A=0.9、B=0.1,和 A=0.6、B=0.4,对 AUC 的贡献是一样的(只要 A 排在 B 前面)
    • 所以「让进站和不进站的机率差距更大」比「把机率校准到完美」更重要
  2. 类别不平衡不会直接惩罚 AUC

    • 赛车一场比赛 50 圈,进站只有 1-3 圈,正例比例约 5-15%
    • AUC 对这种不平衡有天然的抵抗力,但训练模型时仍要处理
  3. 为什么 Blending(模型融合)特别有效?

    • 不同模型看到的「排名顺序」不同,融合后互补,AUC 就能提升
    • 这也是为什么 Kaggle 高手最后几天都在疯狂融合模型

③ 数据型态:数据长什么样?

→ 表格型时间序列数据(Tabular + Sequential)

这份数据是以「一圈一列」为单位的 F1 赛事记录,共33 个栏位

下载数据后,立刻执行这段 EDA 诊断码

python

import pandas as pd train = pd.read_csv('train.csv') test = pd.read_csv('test.csv') # 基本形状 print(f"Train: {train.shape}") print(f"Test: {test.shape}") # 目标分布 print("\n目标栏位分布:") print(train['PitNextLap'].value_counts()) print(f"进站比例: {train['PitNextLap'].mean():.2%}") # 栏位型态 print("\n栏位与数据型态:") print(train.dtypes) # 缺失值 print("\n缺失值统计:") missing = train.isnull().sum() print(missing[missing > 0] if missing.any() else "无缺失值") # 数值统计 print("\n描述统计:") print(train.describe())

根据原始 F1 Strategy Dataset,预期看到的栏位大致分为:

表格

栏位类型包含栏位对预测的重要性
🔑 识别栏id,RaceID,DriverID不直接用,但分组用
🏎️ 赛况LapNumber,Position,Stint
🔴轮胎(最重要)Compound,TyreLife(已被移除!)极高
⏱️ 圈速LapTime,Sector1/2/3Time高(退化信号)
📍 位置差距GapToLeader,IntervalToNext
🚨 赛况旗帜TrackStatus(安全车)
🎯 目标PitNextLap只在 train 有

⚠️ 比赛的关键陷阱:被刻意拿掉的 Normalized_TyreLife

这场比赛最大的挑战在官方说明里就写了:

"We intentionally removeNormalized_TyreLifewhich makes the prediction trivial."(我们刻意移除了Normalized_TyreLife,因为有了这个栏位预测就太简单了。)

轮胎寿命是 F1 进站决策最核心的因素——轮胎跑越久越退化,圈速变慢就该进站换胎。Kaggle 刻意拿掉这个栏位,让你用其他特征自己重建「轮胎寿命」的代理变数

这是这场比赛的破关关键,我们会在下一篇详细讲特征工程的方法。

📋 本篇总结:三件事搞清楚了吗?

表格

问题答案
这是什么任务?二元分类,预测下一圈进站机率
怎么评分?ROC AUC,越接近 1 越好
数据是什么型态?表格型时间序列,33 栏,需要重建轮胎寿命特征

🔮 下一篇预告

第二篇:EDA 实作 + 特征工程——如何重建被偷走的「轮胎寿命」?

我们会用 Python 实际跑完整的探索性数据分析,并设计以下特征:

  • 用累积圈数重建轮胎寿命代理变数
  • 滚动圈速趋势(退化信号)
  • 安全车旗帜的进站时机特征
  • 与队友的策略差异特征

💬 互动区

你也在打 Kaggle 吗?欢迎在评论区告诉我:

  • 你目前的 Kaggle Rank 是什么?
  • 第一次提交时最大的困惑是什么?

觉得有帮助的话,点个 👍 或收藏吧!这个系列会持续更新到拿到奖牌为止。

🔗 相关链接

  • 比赛页面:Predicting F1 Pit Stops(S6E5)
  • 原始数据集:F1 Strategy Dataset
  • Kaggle Playground Series 总览

标签:Kaggle机器学习数据科学PythonF1赛车二元分类ROC AUC竞赛实战特征工程LightGBM