RD-Agent 数据科学场景实战:Playground Series S4E9 二手车价格预测竞赛规格与自动化研发管线
2026/9/14 10:40:59 网站建设 项目流程

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 阈值
Gold62917.05988
Silver62945.91714
Bronze62958.13747
Median63028.69429

这些阈值用于在评分输出 JSON 中计算gold_medalsilver_medalbronze_medalabove_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,只保留idprice两列后导出,供参赛者(以及 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.pyvalid.py(可选):分别用于在测试集上计算任务得分、校验生成的submission.csv的有效性;如果不在意测试集得分,可以不创建eval目录。

4.2 prepare.py:从原始数据到公开/私有切分

prepare.py 的prepare(raw, public, private)函数完成了四件事:

  1. 读取raw/train.csv,用train_test_split(test_size=0.1, random_state=0)切出new_trainnew_test
  2. 生成public/sample_submission.csvprice恒为 43878.016 的占位提交文件);
  3. 把带标签的new_test写入private/submission_test.csv(即本地"标准答案",供 grade.py 评分);
  4. 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在其中承担三重角色:

  1. 加载_get_description()优先读取{local_data_path}/{competition}/description.md的原文文本(scen/init.py#L76-L79),因此本文引用的这份描述文件会被 LLM 原样看到;
  2. 结构化解析_analysis_competition_description()用提示词模板把"原始描述 + 数据目录描述"喂给 LLM,以 JSON 模式抽取任务类型、数据类型、简要描述、数据集描述、提交规范、每个样本的输出通道数、指标描述、指标名称与**指标方向(越大越好/越小越好)**等字段(scen/init.py#L92-L139)。对于本任务,这一步会把"RMSE、数值越低越好"等信息显式化,供后续假设生成与实验反馈使用;
  3. 场景描述拼装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_stagerunner_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.csvsubmission_test.csv,调用grade()计算 RMSE,再与排行榜奖牌阈值比较,输出包含competition_idscoregold/silver/bronze_thresholdany_medalgold/silver/bronze_medalabove_mediansubmission_existsvalid_submissionsubmission_pathcreated_at等字段的 JSON(grade.py#L47-L87)。源码注释说明:若不需要完整输出,最小只需提供competition_idscore两个字段;完整汇总可通过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-s4e9main()的关键参数:

  • 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.mdprepare.pyeval/脚本,并复用 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询