阿里推出AI数据科学家,全流程自动化,科研小白也能用

  基于开源 Agent 框架,可自动解决复杂数据科学问题的 Agent 来了!

  具体来说,Data Science Assistant(以下称 DS Assistant)是基于 Modelscope-Agent 框架开发的数据科学助手。

  有了它,我们只需给需求,这个助手就能自己跑完探索性数据分析(EDA)、数据预处理、特征工程、模型训练,模型评估等步骤。

  当然,除了本文将重点提到的 DS Assistant,它背后的 Modelscope-Agent 框架也值得说道。

  这个框架由阿里开源,主要特点包括:

  • 可通过 vllm、ollama 等工具接入各主流开源模型,也可以直接调用模型 API;
  • 提供 RAG 组件支持开发者快速接入知识库;
  • 工具生态丰富,支持大量的 Modelscope 社区模型作为工具,也支持直接调用 langchain 的工具,还接入了各类常用的工具,如 web-browsing、文生图、code-interpreter 等;

  更妙的是,Modelscope-Agent 框架允许开发者无需编码即可交互式地创建 Agent 助理。

  这不,啪的一下,咱们的数据科学助手“诞生”了~

  复杂数据科学任务自动化

  实现复杂数据科学任务自动化一直存在挑战。

  传统的 ReAct(Reasoning and Action)框架对于简单的任务比较有效,但是有以下缺点:

  • 每次工具调用都需要一个 LLM 调用。
  • LLM 一次仅计划 1 个子问题。这可能会导致任务的轨迹更加不可控,因为它不会被迫“推理”整个任务。

  而 DS Assistant 使用了plan-and-excute 框架,这是一种新兴的 Agent 框架,通过明确计划和执行步骤高效完成复杂任务。

  langchain 官网对 Plan-and-execute Agent 的描述:https://blog.langchain.dev/planning-agents/

  具体而言,其工作流程包括以下几个步骤:

  1、任务计划:Agent 接收用户输入的任务描述,进行语义理解,将任务分解为多个可执行子任务。

  2、子任务调度:基于任务之间的依赖关系和优先级,智能调度子任务的执行顺序。

  3、任务执行:每个子任务分配给特定的模块执行。

  4、结果整合:汇总各子任务的结果,形成最终输出,并反馈给用户。

  基于上述框架,咱们接着看整个系统架构,DS Assistant 整套系统有4 个主要模块

  先说右侧的DS Assistant,它作为整个系统的大脑,负责调度整个系统的运转。

  而Plan 模块负责根据用户的需求生成一系列Task 列表,并对 Task 先后顺序进行拓扑排序。

  在这一阶段,DS Assistant 根据用户输入的复杂数据科学问题,自动将其分解为多个子任务。

  这些子任务根据依赖关系和优先级被组织和调度,确保执行顺序符合逻辑且高效。

  接下来到了Execution 模块,负责任务的具体执行,保存任务执行结果。

  在这里,每个子任务被具体化为可执行的操作,如数据预处理、模型训练等。

  最后是Memory management 模块,负责记录任务中间执行结果,代码,数据详情等信息。

  在所有 Task 执行完成后,DS Assistant 会将中间数据的执行情况 ( 包括每个 task 生成的代码和结果,消耗 token 数,任务时间 ) 保存为文件。

  案例实战

  下面,我们以一个具体的例子来了解 DS Assistant 的执行过程。

  我们选用 Kaggle 上的一个比赛任务ICR - Identifying Age-Related Conditions作为示例:

  该任务是一项机器学习任务,主要目的是通过分析各种数据(如医疗记录、基因数据、生活方式数据等),识别与年龄相关的健康状况。

  最终结果将用来帮助医疗专业人员及早发现老年人群中常见的健康问题,并提供个性化的预防和治疗方案。

  废话不多说,我们这就开始~

  首先,对于选用的 LLM,我们需要配置一下。

  我们引入 MetaGPT 的 Data Science 工具和 Tool Recommender,可以根据任务类型向 DS Assistant 推荐合适的数据科学工具。

  接着,我们需要将任务的具体要求传给 DS Assistant。需要注意的是,在要求中需向 DS Assistant 指明数据文件的路径:

  在 Plan 阶段,DS Assistant 会根据用户需求生成任务列表,将整个数据处理流程进行分解,接着对任务列表进行按顺序处理。

  可以看到,DS Assistant 生成了 5 个任务,分别是数据探索,数据预处理,特征工程,模型训练和预测。

  然后这 5 个任务进入了Execute 阶段,下面咱们挨个看一下。

  Task 1: 数据探索

  可以看到生成的代码在执行时报了如下错误,原因是没有引入 numpy 包

  DS Assistant 根据报错进行了反思,并重新生成代码并执行,成功输出数据探索的结果。

  最后,code judge 会对代码进行质检,确保本次生成代码逻辑正确。

  Task 2: 数据预处理

  在数据预处理阶段,DS Assistant 分别对数值型数据和类别型数据进行了合适的缺失值处理,并清除了 ID 列。

  Task 3:特征工程

  在修复了两次错误后,DS Assistant 对数据进行了特征工程的处理,对类别型变量进行编码。

  同时对之前定义的 categorical_columns 变量进行了更新,去除了 ID 列。

  Task 4:模型训练

  DS Assistant 主动安装了合适的依赖,并选择了多个模型(随机森林,梯度提升,逻辑回归)进行训练,并选择了结果最好的模型。

  Task 5:模型验证

  DS Assistant 选择了训练集中 F1 分数最高的模型对验证集进行测试,并计算了这个模型在验证集上的 F1 分数,成功地完成了任务。

  执行完以上任务后,DS Assistant 支持将运行结果保存为 Jupyter Notebook 类型的文件,并记录运行的中间过程。

  △Jupyter Notebok

  △中间过程记录 JSON 文件

  实验效果

  我们使用 ML-Benchmark 作为测试集(指路论文“Data Interpreter: An LLM Agent For Data Science”),分别从 Normalized Performance Score (NPS) ,total time,total token 三个维度对 DS Assistant 效果进行评测。

  其中 NPS 是一种将不同任务或模型的性能指标标准化的方法,使得不同指标之间可以进行比较。

  它的计算通常涉及以下步骤:

  步骤1:确定指标优化方向,判断性能指标是“越大越好”还是“越小越好”。

  步骤2:规范化计算。如果指标是“越大越好”(如准确率、F1 分数、AUC),NPS 等于原始值;如果指标是“越小越好”(如损失值),则需要将原始值映射到接近 1 的较高 NPS 值。

  规范化后的性能得分范围通常是 0 到1,其中 1 表示最优性能,0 表示最差性能。

  实验任务详情和结果如下(绿色代表当前任务下最优指标 ):

  可以看到,在部分复杂的数据科学任务上,DS Assistant 在规范化性能得分(NPS),任务时间,消耗 token 数的指标上取得超过开源 SOTA 的效果。(其中开源 SOTA 效果指 MetaGPT 实测值)

  完整实验日志:https://modelscope-agent.oss-cn-hangzhou.aliyuncs.com/resources/DS_Assistant_results.zip

  总结

  对不同的人来说,DS assistant 有不同作用:

  • 不熟悉数据分析流程但是又有需要的同学,可以快速根据生成的任务以及处理过程,了解处理数据的思路,以及技术点。
  • 对于了解数据分析流程的同学,可以通过详细的描述,来影响数据处理的方法,方便做不同的实验参照比较。
  • 对于所有人,可以自动化的快速实现对于当前手上文件的更深层次的理解,仅需提问即可。

  下一步,DS assistant 将从三个方向展开优化:

  1、进一步提高任务执行成功率:

  a)对于 Code Agent 来说,传入信息量过大(报错信息,中间数据信息,已生成代码信息)会导致模型生成代码正确率下降,可以在未来考虑使用 LLM 进行总结,对信息进行筛选。

  b)同一个 Task 可进行进一步的分解,以降低对 LLM 推理能力的要求。

  2、对话交互式,可以将任务和任务的执行展示分开,通过对话的方式推进任务,并影响执行结果。

  3、支持批处理相同任务多批文件的场景。

  更多细节可进一步查看 Modelscope-Agent 官方仓库中 Data Sciecne Assistant 示例。