数据科学家的角色常被戏称为“21世纪最性感的职业”。它需要一种独特的技能组合: 统计学知识、编程能力 (通常是 Python 或 SQL) 、商业敏锐度,以及将混乱的非结构化数据整理成可操作洞察的能力。

随着 GPT-4 和 Claude 等大型语言模型 (LLM) 的迅速崛起,科技界出现了一个紧迫的问题: 我们能自动化数据科学吗?

我们已经看到 LLM 生成代码片段、编写 SQL 查询,甚至调试简单的脚本。但现实世界的数据科学不仅仅是写一个 for 循环。它涉及探索文件系统、理解模糊的架构、清洗脏数据、选择合适的机器学习模型,并迭代调试错误,直到图表看起来正确为止。

今天,我们将深入探讨一篇旨在解决这一确切问题的研究论文。该论文介绍了 DA-Code , 这是一个严格的基准测试,旨在测试 LLM 是否真正能够作为自主数据科学代理 (Agent) 行事。我们将探讨这个基准测试是如何工作的,为解决它而构建的“DA-Agent”框架,以及显示我们要走的路还很长的令人清醒的实验结果。

问题所在: 为何当前的基准测试还不够

在解构 DA-Code 之前,我们需要理解它所填补的空白。以前的代码生成基准测试,如 HumanEval 或 DS-1000,虽然对我们很有帮助,但它们代表了对编程的一种“狭隘”视角。

在传统的基准测试中,任务通常是这样的:

  • 输入: “编写一个计算斐波那契数列的 Python 函数。”
  • 输出: 模型生成一个干净、独立的函数。

然而,真正的数据科学任务是这样的:

  • 输入: “这是一个包含五个不同 CSV 文件和一个混乱的 SQLite 数据库的文件夹。找出为什么我们在第三季度的销售额下降了,并将趋势可视化。”
  • 输出: 代理必须探索文件,编写 SQL 连接表,使用 Python 处理缺失值,调试库版本冲突,最后保存一张 PNG 图表。

DA-Code背后的研究人员认为,我们需要从代码生成转向代理数据科学 (Agent Data Science)

几个数据科学代码生成基准测试的比较。

如上表 1 所示,DA-Code 与 DS-1000 或 Arcade 等前作有着显著区别。它需要规划 , 在可控的可执行环境 (Docker) 中运行,处理每个任务的多个文件 (平均 5.7 个文件) ,并需要更长的解决方案 (平均 85 行代码) 。

DA-Code: 面向现实的基准测试

DA-Code 不仅仅是一个数据集;它是一个综合评估套件。它包含 500 个源自真实场景的手工精选、具有挑战性的任务示例。

研究人员将数据科学工作主要分为三大支柱:

  1. 数据整理 (Data Wrangling, DW) : 加载、清洗和转换原始数据的繁杂工作。
  2. 机器学习 (Machine Learning, ML) : 构建分类、回归或聚类模型。
  3. 探索性数据分析 (Exploratory Data Analysis, EDA) : 可视化数据、计算统计数据并得出洞察。

DA-Code 任务类型比例 (左) 和文件类型比例 (右) 。

这些任务的分布 (如上图饼图所示) 确保了对代理能力的平衡测试。请注意文件类型的多样性——CSV、Markdown 文档、YAML 配置和 SQL 数据库。这反映了真实的工作空间,数据很少是现成地放在银盘子里的。

DA-Code 是如何构建的?

创建一个如此复杂的基准测试是一项巨大的工程。研究人员不能只是从网络上抓取;他们必须确保任务既可解又具有难度。

DA-Code 的标注流程。详见第 3.5 节开头的描述。

如图 2 所示,标注流程涉及五个严格的步骤:

  1. 数据选择: 识别真实的、复杂的且具有时效性的数据集 (例如 NYC 出租车数据) 。
  2. 任务定义: 将简单的指令重写为抽象的、代理级别的问题。
  3. 实现: 设置“沙盒”环境。这一点至关重要。代理不仅仅是生成文本;它正在与包含数据库和架构的模拟文件系统进行交互。
  4. 评估设置: 编写脚本以自动检查代理的输出 (表格、图表或文本) 是否与真实标签 (Ground Truth) 匹配。
  5. 红队测试 (Red Teaming) : 让医学专家尝试破解任务以确保其稳健性。

代理任务的数学原理

为了理解 AI 代理如何解决这些问题,我们需要重新定义什么是“编程任务”。

在传统的代码基准测试中,过程是一个将上下文 (\(C\)) 和指令 (\(I\)) 映射到代码的静态函数:

方程 code = f(C, I)

然而,在 DA-Code 中,过程是交互式和迭代式的 。 代理具有“状态” (\(S\)) 、“动作空间” (\(A\)) 和“记忆”或历史 (\(H\)) 。

代理查看其当前记忆 (\(m_t\)) 和环境状态 (\(s_t\)) 来决定动作 (\(a_{t+1}\)) 并生成代码:

动作生成方程

一旦代理采取行动 (例如,“运行这个 Python 脚本”) ,环境就会执行它。环境返回一个新的观察结果 (\(o_{t+1}\)) 并更新状态 (\(s_{t+1}\)):

环境执行方程

这个循环一直持续到任务完成或代理超时。这种形式化至关重要,因为它将焦点从编写代码转移到了探索问题空间。

DA-Agent 框架

为了测试该基准,研究人员开发了一个名为 DA-Agent 的基线代理。

DA-Agent 解决 DA-Code 中的一个示例。

图 1 展示了 DA-Agent 的运行过程。注意其工作流程:

  1. 探索: 代理列出文件 (README.md, E-commerce.db) 以了解它在处理什么。
  2. 推理: 它决定需要查询数据库。
  3. 动作: 它编写 SQL 查询。
  4. 反馈循环: 它遇到错误 (例如,列不存在) ,检查表结构,然后重试。
  5. 结果: 它最终编写一个 Python 脚本来生成图表。

动作空间

为了使代理发挥作用,它需要一套工具。DA-Agent 配备了一组特定的动作,允许它操作 Docker 环境。

带有描述的 DA-Agent 动作摘要。

如表 5 所列,代理可以使用 Bash 进行系统操作,使用 Python 进行复杂的逻辑和绘图,使用 SQL 进行数据库交互。至关重要的是,“Terminate” (终止) 动作标志着代理认为它已经完成了任务。

为代理打分: 评估套件

你如何给 AI 的“数据科学”能力打分?这比批改多项选择题要难得多。研究人员针对不同的输出类型开发了量身定制的评估指标。

1. 表格匹配 如果任务需要生成 CSV 或数据库表,评估会检查预测表 (\(M'\)) 是否与真实表 (\(M\)) 完全匹配,通常是在对特定列进行排序或过滤之后。

基于表格匹配的分数计算方程

2. 图表匹配 给可视化打分很棘手。逐像素比较太脆弱了。相反,研究人员使用了“基于绘图的评估”。他们从生成的绘图脚本中提取底层数据 (\(d\)) 和元数据 (\(J\)) (如标题、X轴标签、颜色) ,并将它们与真实值进行比较。

基于图表数据和元数据的分数计算方程

3. 机器学习评估 对于 ML 任务 (例如,“训练一个预测流失的模型”) ,代理的模型会在保留的测试集上进行评分。然而,原始分数 (如准确率或 MSE) 在不同数据集之间差异很大。为了使分数具有可比性,它们被归一化到 0 到 1 之间,其中 0 是基线性能 (如随机猜测) ,1 是最先进的水平 (SOTA) 。

ML 归一化分数方程

根据任务的不同,他们使用特定的指标,如分类任务的 F1 分数或回归任务的 RMSE:

*F1 分数 (精确率和召回率的调和平均数) : * F1 分数方程

*RMSE (均方根误差) : * RMSE 方程

实验与结果: 现实检验

那么,当今最好的 LLM 在扮演数据科学家时有多聪明呢?研究人员测试了 GPT-4、Claude-3-Opus 等模型,以及 Mixtral 和 DeepSeek-Coder 等开源模型。

结果汇总在表 3 中,非常具有启示性。

使用 DA-Agent 基线的几个 LLM 的实验结果。

关键要点:

  1. 很难: 最好的模型 GPT-4 仅达到了 30.5% 的完成率。这证实了 DA-Code 比以前的模型经常得分 80% 以上的基准测试要难得多。
  2. 开源差距: 专有模型 (GPT-4, Claude-3) 与开源模型之间存在急剧下降。例如,Mixtral-8x22B 仅达到 15.4%。
  3. 难度等级很重要: 模型在“简单”任务上表现尚可 (GPT-4 为 45.4%) ,但在“困难”任务上表现崩溃 (23.4%) 。

各类别的表现

我们还可以根据数据科学任务的类型来细分表现。

DA-Agent 在 DA-Code 各类别上的详细性能分析。

图 3 中的雷达图显示,模型通常在 机器学习 (Machine Learning) 任务上表现更好 (可能是因为标准的 ML 样板代码在训练数据中很常见) ,但在 数据整理 (Data Wrangling)数据洞察 (Data Insight) 上很吃力。这很直观: 清洗数据需要直观地检查文件并对奇怪的格式做出判断,这比导入 scikit-learn 对 LLM 来说更难。

分析代理行为

研究人员不仅关注最终得分;他们还分析了*轨迹 (trajectory) *——即代理采取的逐步路径。

“EEEA”模式 成功的代理倾向于遵循特定的行为模式: Exploration (探索) 、Execution (执行) 、Evaluation (评估) 、Adjustment (调整) 。

  1. 探索: 查看文件 (使用 ls, head) 。
  2. 执行: 编写代码。
  3. 评估: 检查输出。
  4. 调整: 调试错误。

我们可以从随时间变化的动作类型计数中看到这一点:

不同 LLM 的 DA-Agent 在各步骤中的动作类型计数。

注意: 在上图 (底部图表) 中,请查看“File Viewing” (深蓝色) 条形。

在任务开始时 (第 1-5 步) ,代理花费大量时间进行 文件查看 。 随着步骤的进行,它们转向 Python 编码 (橙色) 和 系统操作 (浅蓝色) 。表现较差的模型 (如 DeepSeek-Coder-33B) 无法有效地进行转换,经常陷入循环或无法正确解析动作 (黄色条形) 。

成功 vs. 步骤 另一个有趣的发现是步骤数与成功率之间的关系。

不同模型随步骤变化的成功率和未完成率。

图 5 显示,大多数成功的任务都是在前 10 步内完成的。如果代理在第 15 步之前没有解决问题,成功的可能性就会停滞不前,而“未完成率” (未完成的任务) 则随着代理要么完成任务要么放弃而下降。这表明 规划能力 是瓶颈;如果代理在早期没有一个好的计划,更多的步骤也救不了它。

与其他框架的比较

最后,研究人员将他们的 DA-Agent 基线与其他流行的代理框架 (如 AutoGen 和 OpenDevin) 进行了比较。

使用 GPT-4 的不同框架在 DA-Code-100 上的性能比较。

DA-Agent 的表现优于它们 (31.5% 对比 OpenDevin 的 26.2%) 。有趣的是,当研究人员提供 参考计划 (Reference Plan) (即人工编写的解决问题的指南) 时,分数跃升至 39.7% 。 这加强了一种观点,即 LLM 目前的核心困境是高层推理和规划,而不仅仅是编写语法。

结论与未来展望

DA-Code 论文是对 AI 行业的一次现实检验。虽然我们经常看到 AI 分析数据的精心挑选的演示,但该基准测试提供的严格测试表明,我们距离完全自主的数据科学家还很远。

在真实世界任务中 30% 的成功率说明了两件事:

  1. 潜力: AI 能够 自主解决三分之一的复杂、多文件数据问题,这一事实令人难以置信。
  2. 增长空间: 剩下的 70% 需要改进代理如何探索环境、调试自己的错误以及规划长期策略。

DA-Code 为这种增长提供了路线图。通过将测试从简单的代码补全转移到交互式、可执行的环境中,我们正在推动 LLM 不仅仅成为程序员,而是成为真正的问题解决者。

随着模型的发展,像 DA-Code 这样的基准测试将成为我们用来衡量从“AI 助手”向“AI 数据科学家”转变的标尺。