RD-Agent 数据科学场景实战:Playground Series S4E9 二手车价格预测竞赛规格与自动化研发管线
【免费下载链接】RD-AgentResearch and development (R&D) is crucial for the enhancement of industrial productivity, especially in the AI era, where the core aspects of R&D are mainly focused on data and models. We are committed to automating these high-value generic R&D processes through R&D-Agent, which lets AI drive>项目地址: https://gitcode.com/GitHub_Trending/rd/RD-Agent
本文以 RD-Agent 仓库中为 Kaggle Playground Series 第四赛季第九场(playground-series-s4e9)预置的竞赛描述文件为核心,完整解析这场"二手车价格回归预测"任务的评测指标、提交格式与数据集规格,并结合仓库中配套的数据切分脚本(prepare.py)、评分与校验脚本(grade.py / valid.py)以及 Data Science 场景类的源码实现,说明该任务描述如何被 RD-Agent 的数据科学管线消费,最终形成一条可复现的端到端自动化建模流程。
一、任务概述:一场轻量级的二手车价格回归竞赛
playground-series-s4e9 属于 Kaggle 官方的 Tabular Playground Series 系列活动。根据 description.md 的原文:
- 欢迎语:这是 2024 年 Kaggle Playground Series,延续了以往 playground 的精神——为社区提供有趣且易于上手的轻量级数据集,用于练习机器学习技能,并计划每月举办一场竞赛。
- 比赛目标(Your Goal):根据车辆的各种属性,预测二手车(used cars)的价格,即一个典型的连续值回归任务。
关于 Tabular Playground Series
原文档对这一系列赛做了专门说明:
- 该系列的目标是为 Kaggle 社区提供大量轻量级挑战,供学习者练习和打磨机器学习与数据科学在不同方面的技能;
- 每场竞赛一般只持续几周,时长可能因挑战不同而伸缩;
- 挑战通常使用**从真实数据合成生成(synthetically generated)**的轻量级数据集,让参赛者能快速迭代各种模型与特征工程想法、制作可视化等。
合成数据集的动机
原文档还解释了为何 Playground 竞赛普遍采用合成数据:
在 Playground 竞赛中使用合成数据,可以在"拥有真实世界数据(带特征名)"与"确保测试标签不公开"之间取得平衡,从而举办使用更有趣数据集的竞赛。虽然合成数据生成仍有挑战,但如今的最先进方法比该系列启动两年时要好得多,目标是产出瑕疵更少的数据集。
原文档同时邀请社区对数据集质量提出反馈以持续改进。
赛制时间线
原文档给出的赛程时间线如下(所有截止时间均为对应日期 23:59 UTC):
| 节点 | 时间 |
|---|---|
| 开始日期(Start Date) | 2024 年 9 月 1 日 |
| 报名截止(Entry Deadline) | 与最终提交截止相同 |
| 组队合并截止(Team Merger Deadline) | 与最终提交截止相同 |
| 最终提交截止(Final Submission Deadline) | 2024 年 9 月 30 日 |
主办方保留必要时更新赛程时间线的权利。
奖项与引用
- 奖项设置为第 1 / 2 / 3 名各获得 Kaggle 周边商品任选;
- 为鼓励新手参与,同一人在本系列中只能获得一次周边奖励,若此前已获奖则顺延至下一支队伍。
原文档给出的引用格式为:Walter Reade 和 Ashley Chow. Regression of Used Car Prices. Kaggle Playground Series S4E9 竞赛页面, 2024. Kaggle.(引用中的原始链接为竞赛官网地址,本文遵循仓库引用规范不再输出外链。)
二、评测指标:RMSE 与提交文件格式
根均方误差(Root Mean Squared Error)
提交结果按 RMSE 打分,其定义为:
$$ \mathrm{RMSE} = \left( \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 \right)^{\frac{1}{2}} $$
其中 $\hat{y}_i$ 为预测值,$y_i$ 为第 $i$ 个样本的真实值。作为回归指标,分数越低越好。
仓库中与该竞赛配套的评分脚本 grade.py 在实现上正是这一公式:对按id对齐排序后的真实价格与预测价格调用sklearn.metrics.mean_squared_error再开平方,即grade()返回np.sqrt(mean_squared_error(y_true, y_score))。此外,脚本内置了一组来自该场竞赛排行榜的金/银/铜牌与中位数奖牌线(grade.py#L56-L61):
| 奖牌档位 | RMSE 阈值 |
|---|---|
| Gold | 62917.05988 |
| Silver | 62945.91714 |
| Bronze | 62958.13747 |
| Median | 63028.69429 |
这些阈值用于在评分输出 JSON 中计算gold_medal、silver_medal、bronze_medal、above_median等字段,配合rdagent grade_summary类命令可在程序结束时汇总各次实验的得分,方便量化评估自动管线的实际水平。
在grade()正式计算之前,prepare_for_metric 会先做严格的前置校验:提交与答案必须都包含id列、提交必须包含price列、两者行数一致且id序列完全匹配,任何一条不满足都会抛出InvalidSubmissionError。
Submission File 格式
对测试集中每个id,必须预测该车的price。文件需包含表头,格式如下(原文档原样保留):
id,price 188533,43878.016 188534,43878.016 188535,43878.016 etc.注意43878.016这一数值并非随机示例:它在仓库的数据准备脚本 prepare.py 中被用作sample_submission.csv的占位常数——将测试集副本的price列统一填充为43878.016,只保留id与price两列后导出,供参赛者(以及 RD-Agent 管线)作为提交文件的格式参照。
三、数据集描述与文件说明
原文档的数据集部分说明:
- 本竞赛的 train 与 test 均由一个在真实数据上训练过的深度学习模型合成生成,其原始来源是 Kaggle 上的 Used Car Price Prediction Dataset(taeefnajib 发布的二手车价格预测数据集);
- 合成数据的特征分布接近但不完全等于原始分布;
- 官方允许把原始数据集作为本竞赛的一部分使用,既可以探索合成数据与原始数据的差异,也可以检验在训练中引入原始数据是否能提升模型效果——这是一个有价值的特征/数据融合切入点。
文件清单(原文档原样继承):
- train.csv—— 训练数据集,
price为连续型目标列; - test.csv—— 测试数据集,目标是对每一行预测
price; - sample_submission.csv—— 正确格式的示例提交文件。
四、仓库侧落地:该任务在 RD-Agent 数据科学管线中的完整链路
上面的任务规格并非孤立的文档,它在仓库中以一个约定目录结构落地,并被数据科学管线逐级消费。本节按"目录约定 → 数据切分 → 场景解析 → 调试采样 → 评分校验 → 启动命令"的顺序展开。
4.1 目录约定:example 下的标准布局
example 目录 README 规定了自定义竞赛数据的目录结构,playground-series-s4e9 是其中的完整范例:
source_data/<task_name>/prepare.py(必需):数据预处理脚本,把原始数据切分为训练数据、测试数据、格式化提交文件与标准答案文件;<task_name>/description.md(必需):任务详细描述,需包含 Task Description、Goal、Evaluation、Data Description、Submission Format 等章节——本文开头的 description.md 即属于此类;<task_name>/sample.py(可选):用于调试目的的数据采样脚本;不提供时,RD-Agent 会走默认采样逻辑(见 4.4 节);eval/<task_name>/grade.py与valid.py(可选):分别用于在测试集上计算任务得分、校验生成的submission.csv的有效性;如果不在意测试集得分,可以不创建eval目录。
4.2 prepare.py:从原始数据到公开/私有切分
prepare.py 的prepare(raw, public, private)函数完成了四件事:
- 读取
raw/train.csv,用train_test_split(test_size=0.1, random_state=0)切出new_train与new_test; - 生成
public/sample_submission.csv(price恒为 43878.016 的占位提交文件); - 把带标签的
new_test写入private/submission_test.csv(即本地"标准答案",供 grade.py 评分); - 向
public/输出train.csv与去掉price列后的test.csv(Agent 可见的数据)。
脚本末尾有三条断言保证切分正确性:公开测试集必须为 12 列、公开训练集必须为 13 列(12 个特征列 +price)、两个新切分行数之和等于原始训练集行数。__main__入口按 README 约定的相对位置把产物分别写回<task_name>/(public)与eval/<task_name>/(private)目录。
4.3 description.md 如何被场景类消费
DataScienceScen 是数据科学任务的场景入口,description.md在其中承担三重角色:
- 加载:
_get_description()优先读取{local_data_path}/{competition}/description.md的原文文本(scen/init.py#L76-L79),因此本文引用的这份描述文件会被 LLM 原样看到; - 结构化解析:
_analysis_competition_description()用提示词模板把"原始描述 + 数据目录描述"喂给 LLM,以 JSON 模式抽取任务类型、数据类型、简要描述、数据集描述、提交规范、每个样本的输出通道数、指标描述、指标名称与**指标方向(越大越好/越小越好)**等字段(scen/init.py#L92-L139)。对于本任务,这一步会把"RMSE、数值越低越好"等信息显式化,供后续假设生成与实验反馈使用; - 场景描述拼装:
get_scenario_all_desc()将解析结果与调试/全量数据超时、推荐超时、运行时环境信息一起拼进.prompts.yaml中的scenario_description模板,作为整个研发循环(假设生成 → 编码 → 调试运行 → 反馈)的上下文底座(scen/init.py#L220-L244)。
也就是说,description.md 中"RMSE 公式、提交格式、数据说明"这些看似静态的竞赛文本,实际上是驱动 Agent 理解任务并持续迭代的动态输入。
4.4 调试数据采样:sample.py 与默认采样器
由于 Agent 需要多轮"编码 → 运行 → 反馈"的调试循环,直接在全量数据上运行代价过高。管线采用"调试数据 + 全量数据"双轨制:
- 若任务目录下提供了
sample.py,DataScienceScen 初始化 会直接runpy执行它,通过dataset_path/output_path全局变量约定输入输出; - 否则调用 create_debug_data,默认参数为
min_frac=0.01, min_num=5:即采样比例不低于 1% 且行数不低于 5 行。
对于 playground-series-s4e9 这类表格回归任务,map_competition()没有为其注册专属采样器(见 debug/data.py#L592-L602),因此回退到默认组合UniqueIDDataReducer + DefaultSampler。从源码结构看,RandDataReducer.reduce()以max(min_frac, min_num/len(df))作为实际采样比例,并用固定random_state=1做行采样(debug/data.py#L105-L116),保证调试样本可复现。默认采样器还会识别id列并连带拷贝被引用文件(如图像类任务中的样本文件),对纯 CSV 任务则主要完成"缩小到可用规模"的工作。
配套的超时参数在 conf.py 中定义:debug_timeout=600秒、full_timeout=3600秒,且场景类支持按失败次数阶梯式上调超时(coder_timeout_increase_stage、runner_timeout_increase_stage_patience等)。
4.5 eval 链路:grade.py 与 valid.py 的协作
配置项eval_sub_dir默认为"eval",管线会用{local_data_path}/eval/{competition}下的脚本在测试集上评估提交(conf.py#L90-L93)。对应到本任务:
- valid.py:先断言
submission.csv存在,再逐行读取它与submission_test.csv,校验两者行数一致;不一致时打印两侧行数并抛出AssertionError。这是对"提交格式可用性"的第一道闸门; - grade.py:在
__main__中读取submission.csv与submission_test.csv,调用grade()计算 RMSE,再与排行榜奖牌阈值比较,输出包含competition_id、score、gold/silver/bronze_threshold、any_medal、gold/silver/bronze_medal、above_median、submission_exists、valid_submission、submission_path、created_at等字段的 JSON(grade.py#L47-L87)。源码注释说明:若不需要完整输出,最小只需提供competition_id与score两个字段;完整汇总可通过rdagent grade_summary --log-folder在程序结束时生成。
4.6 启动方式:一条命令跑通整个研发循环
数据科学循环的入口是 rdagent/app/data_science/loop.py 的main(),其 docstring 给出了推荐用法:
# 推荐命令形式(以另一场 playground 竞赛为例) rdagent kaggle --competition playground-series-s4e8 # 等价地,也可直接调用 loop 入口脚本并恢复某个历史会话 dotenv run -- python rdagent/app/data_science/loop.py [--competition ...] $LOG_PATH/__session__/1/0_propose --step_n 1对本任务,即把 competition 参数指定为playground-series-s4e9。main()的关键参数:
path:形如$LOG_PATH/__session__/1/0_propose的会话路径,用于从指定步骤恢复运行;checkout/checkout_path:控制日志会话目录的复用与落盘位置;step_n/loop_n:限制运行的步数/轮数,任一满足即停止,默认无限运行直到报错或中断;timeout:整个循环的最大时长。
进入main()后,competition 被写入DS_RD_SETTING.competition(loop.py#L64-L79),随后实例化DataScienceRDLoop并异步执行。所有行为参数(场景类、假设生成器、调试/全量超时、多 trace 调度、评测子目录等)均由 DataScienceBasePropSetting 管理,且全部支持以DS_为前缀的环境变量覆盖,例如DS_local_data_path指向存放playground-series-s4e9/、eval/等目录的数据根路径。
五、要点回顾
- playground-series-s4e9 是一场以 RMSE 为指标、要求按
id,price格式提交预测的二手车价格回归竞赛,其 description.md 完整覆盖了目标、评测、时间线、合成数据背景、奖项与文件说明; - 仓库通过 prepare.py 把原始数据切分为 Agent 可见的
train.csv/test.csv/sample_submission.csv与本地答案submission_test.csv,并用列数断言守住数据契约; - grade.py 与 valid.py 共同构成"格式校验 + RMSE 评分 + 奖牌线对照"的评测闭环,评分结果以 JSON 输出供
grade_summary汇总; - DataScienceScen 会把 description.md 原文连同数据目录描述一起交给 LLM 解析为结构化任务画像,再由
create_debug_data/sample.py生成小规模调试数据,最终通过rdagent kaggle --competition playground-series-s4e9之类的命令驱动假设生成、编码、调试运行与反馈的自动研发循环。
掌握以上内容后,你可以照葫芦画瓢为任意新的竞赛任务准备description.md、prepare.py与eval/脚本,并复用 RD-Agent 数据科学管线的全套自动优化能力。
【免费下载链接】RD-AgentResearch and development (R&D) is crucial for the enhancement of industrial productivity, especially in the AI era, where the core aspects of R&D are mainly focused on data and models. We are committed to automating these high-value generic R&D processes through R&D-Agent, which lets AI drive>项目地址: https://gitcode.com/GitHub_Trending/rd/RD-Agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考