
AUTOKAGGLE: 一种用于自主数据科学竞赛的多智能体框架
涉及表格数据的数据科学任务面临复杂的挑战,需要复杂的问题解决方法。我们提出了 AutoKaggle,一个强大且以用户为中心的框架,帮助数据科学家通过协作多智能体系统完成日常数据管道。AutoKaggle 实施了一种迭代开发过程,结合代码执行、调试和全面的单元测试,以确保代码的正确性和逻辑一致性。该框架提供高度可定制的工作流程,允许用户在每个阶段进行干预,从而将自动化智能与人类专业知识相结合。
AUTOKAGGLE: 一种用于自主数据科学竞赛的多智能体框架
Github: https://github.com/multimodal-art-projection/AutoKaggle
论文:https://arxiv.org/abs/2410.20424
文章目录
摘要
涉及表格数据的数据科学任务面临复杂的挑战,需要复杂的问题解决方法。我们提出了 AutoKaggle,一个强大且以用户为中心的框架,帮助数据科学家通过协作多智能体系统完成日常数据管道。AutoKaggle 实施了一种迭代开发过程,结合代码执行、调试和全面的单元测试,以确保代码的正确性和逻辑一致性。该框架提供高度可定制的工作流程,允许用户在每个阶段进行干预,从而将自动化智能与人类专业知识相结合。我们的通用数据科学工具包包含经过验证的数据清理、特征工程和建模功能,构成了该解决方案的基础,通过简化常见任务来提高生产力。我们选择了 8 个 Kaggle 竞赛,以模拟现实应用场景中的数据处理工作流程。评估结果表明,AutoKaggle 在典型数据科学管道中实现了 0.85 的验证提交率和 0.82 的综合得分,充分证明了其在处理复杂数据科学任务中的有效性和实用性。
1 引言
近年来,随着大型语言模型(LLMs)的快速发展(OpenAI, 2022, 2023),自动化数据科学逐渐变得可行。基于LLM的代理在数据领域显示出巨大的潜力,因为它们能够自动理解、分析和处理数据(Hassan et al., 2023, Lucas, 2023, Zhang et al., 2024a),从而促进数据科学的民主化和广泛应用。
然而,现有研究在解决复杂数据科学问题方面仍存在显著不足。许多研究仅限于简单的单步数据分析任务(Zhang et al. 2024c Hu et al. 2024),这与数据科学的实际应用场景相去甚远。其他研究依赖于预构建的知识库(Guo et al. 2024),提高了使用门槛,限制了解决方案的灵活性和适应性。此外,目前的研究过于关注提高任务完成率和优化性能指标,而忽视了在逻辑复杂的数据科学任务中中间决策步骤的可解释性和透明性。这种忽视不仅影响用户对解决方案的理解,还降低了其在实际应用中的可信度和实用性。
为了解决这些问题,我们提出了AutoKaggle,一个通用的多代理框架,为数据科学家提供端到端的表格数据处理解决方案,帮助他们高效完成日常数据管道并提高生产力。AutoKaggle具有以下特点:
(i) 基于阶段的工作流程和多代理协作。AutoKaggle采用基于阶段的工作流程和多代理协作系统。它将数据科学竞赛过程分为多个阶段。
将整个过程分为六个关键阶段:背景理解、初步探索性数据分析、数据清理(DC)、深入探索性数据分析、特征工程(FE)以及模型构建、验证和预测(MBVP)。为了执行这些阶段,五个专业代理(阅读者、规划者、开发者、审阅者和总结者)协同工作,从问题分析到报告生成。
(ii)迭代调试和单元测试。AutoKaggle通过迭代调试和单元测试确保代码质量。开发者使用三种主要工具(代码执行、调试和单元测试)来验证语法正确性和逻辑一致性。
(iii)机器学习工具库。AutoKaggle集成了一个全面的机器学习工具库,涵盖数据清理、特征工程以及模型构建、验证和预测。该库包括专家编写的代码片段和自定义工具,提高了代码生成的效率和质量。通过将预定义工具与自生成代码相结合,AutoKaggle能够处理复杂任务,同时减少对大型语言模型在特定领域知识上的依赖。
(iv)综合报告。AutoKaggle在每个阶段结束后以及比赛结束时生成详细报告,展示其决策过程、关键发现、采取的行动和推理。这一特性使数据处理工作流程透明,增加了用户对AutoKaggle的信任。
AutoKaggle为各种数据科学任务提供了一个通用且全面的解决方案。只需提供任务概述,它就能自动完成从开发到测试的整个过程,使其异常易用。AutoKaggle具有高度适应性,允许用户根据特定需求进行定制。此外,它在自动化数据科学过程中提供了清晰的可解释性,增强了用户对系统的理解和信任。
我们选择了来自 Kaggle 平台的竞赛来评估我们的框架。Kaggle 数据科学竞赛模拟了数据科学家面临的真实挑战,涵盖了从数据清理到模型部署的完整过程。这些竞赛要求参与者执行一系列复杂且相互依赖的任务。这些任务包括:数据清理和预处理、探索性数据分析、特征工程和建模。每个步骤都需要专业知识和细致的规划,通常需要多次迭代。这种复杂性使得 Kaggle 成为评估数据科学自动化工具有效性的理想平台。在我们评估的 8 个 Kaggle 数据科学竞赛中,AutoKaggle 实现了 0.85 的有效提交率和 0.82 的综合得分。我们总结了我们的贡献如下:
-
我们提出了 AutoKaggle,这是一个新颖的多代理框架,旨在 Kaggle 数据科学竞赛中实现高任务完成率,并在我们的评估中表现出高于平均人类水平的竞争性能。
-
我们引入了一种基于阶段的工作流程,结合了多代理协作,融入了迭代调试和单元测试,系统性地解决了数据科学任务的复杂性,并确保生成稳健、正确的代码。
-
我们开发了一个机器学习工具库,并将其集成到我们的框架中,提高了复杂数据科学任务的代码生成效率和质量。
-
我们实施了一个全面的报告系统,提供每个阶段决策过程的详细见解,使 AutoKaggle 既是解决方案提供者,也是数据科学竞赛的教育工具,从而促进数据科学技能的民主化。
2 相关工作
2.1 大型语言模型代理
一种简明的代理框架由大脑、感知和行动模块组成(Xi et al. 2023)。感知模块处理外部信息,大脑基于这些信息进行规划,行动模块执行这些计划(Xi et al., 2023, Zhou et al., 2023)。大型语言模型(LLMs)作为大脑模块,展现出令人印象深刻的零-shot 能力,并应用于数据科学和音乐创作等领域(Brown et al., 2020, Hong et al., 2024, Deng et al., 2024)。虽然思维链方法改善了推理(Wei et al. 2023),但由于内部表征,它常常导致幻觉。
图 1:AutoKaggle 概述。AutoKaggle 集成了基于阶段的工作流程和专业代理(阅读器、规划者、开发者、审阅者和总结者)、迭代调试和单元测试、全面的机器学习工具库以及详细的报告。
ReAct 范式通过整合思维和行动来解决这个问题,通过与外部环境的互动来精炼输出(Yao et al. 2023, Madaan et al., 2023; Shinn et al., 2023; Zhou et al., 2024)。
2.2 多代理
虽然单个代理可以完成基本的自然语言处理(NLP)任务,但现实世界的任务复杂度更高。在人类社会中,人们将复杂任务分解为不同的人可以轻松处理的简单子任务。受到这种劳动分工原则的启发,多代理系统通过合作互动(Li et al., 2023)来提高性能(Talebirad & Nadiri, 2023),以实现共同目标。另一种互动方式是对抗性互动(Lewis et al. 2017),在这种情况下,多个代理相互竞争以获得更好的结果,或者一个代理对另一个代理的生成进行批评和审查(Gou et al. 2024)。
2.3 数据科学代理
为了满足数据科学任务的明确要求,一种可行的方法是设计层次化系统(Hong et al., 2024; Zhang et al., 2024b; Chi et al., 2024)来完成任务理解、特征工程和模型构建等任务。在每个层次中,分别设计两个代理用于代码规划和代码生成(Hong et al. 2024),并使用单元测试(Zhang et al. 2024b)来验证代码生成的质量。除了自主多代理的自我调试外,人机协作(Hong et al., 2024; Zhang et al., 2024b)机制还提供对大型语言模型输出的监督和修正,从而减少每个层次中的幻觉。Tang et al. (2024) 引入了 ML-Bench,这是一个用于机器学习任务的语言代理基准。
总之,多代理系统和基于大型语言模型(LLM)的代理在自然语言处理和数据科学等领域展示了显著的潜力。虽然单个代理在基本任务中表现出色,但整合多个代理对于应对复杂的现实世界挑战至关重要。通过将任务特定的代理与人机协作机制和单元测试相结合,这些系统提高了代码质量并解决了幻觉等问题。我们的框架 AutoKaggle 通过将基于 LLM 的推理与多代理协作相结合,推动了这些努力,确保在数据科学竞赛中适应性、正确性和用户控制。
3 AUTOKAGGLE
3.1 整体框架
在本节中,我们介绍 AutoKaggle,这是一个完全自动化、稳健且用户友好的框架,旨在仅使用原始 Kaggle 数据生成可直接提交的预测结果。鉴于数据科学问题的多样性、潜在解决方案的广泛性以及对精确推理和实时理解数据变化的需求,在 Kaggle 上有效处理复杂的数据科学任务是具有挑战性的。我们的技术设计解决了两个主要问题:(i)如何分解和系统地管理复杂的数据科学任务;(ii)如何有效地利用 LLM 和多代理协作来解决这些任务。
AutoKaggle 的核心概念是基于阶段的多代理推理。这种方法利用 LLM 在结构化工作流中进行推理和解决任务,通过多个代理的协作解决数据科学过程的不同方面。AutoKaggle 由两个主要组件组成:基于阶段的工作流和多代理系统,它们相辅相成,如图 1 所示。
基于阶段的工作流程。数据科学过程分为六个关键阶段:理解背景、初步探索性数据分析、数据清洗、深入探索性数据分析、特征工程以及模型构建、验证和预测。数据清洗、特征工程以及模型构建、验证和预测是任何数据科学竞赛所需的基本过程。我们设计了两个额外的数据分析阶段,以分别为数据清洗和特征工程提供必要的信息和见解。考虑到我们的初始输入仅是Kaggle数据科学竞赛的概述和原始数据集,我们增加了一个背景理解阶段,以分析竞赛背景、目标、文件组成和原始输入的数据概述的各个方面。这种结构化的方法确保了问题的所有方面都得到系统和全面的解决,各个阶段相互解耦。它允许在每个阶段进行彻底的单元测试,以确保正确性并防止错误传播到后续阶段。
多代理系统。该系统由五个专门的代理组成:阅读器、规划者、开发者、审阅者和总结者。每个代理旨在在工作流程中执行特定任务。它们协作分析问题、制定策略、实施解决方案、评估结果并生成综合报告。代理的详细设置和交互过程在附录C.1.6中描述。
我们在算法1中总结了AutoKaggle的伪代码。让 C \mathcal{C} C 表示竞赛, D \mathcal{D} D 表示数据集, Φ = { ϕ 1 , ϕ 2 , … , ϕ 6 } \Phi = \left\{ {{\phi }_{1},{\phi }_{2},\ldots ,{\phi }_{6}}\right\} Φ={ϕ1,ϕ2,…,ϕ6} 表示竞赛工作流程中的所有阶段的集合。对于每个阶段 ϕ i {\phi }_{i} ϕi ,分配一组特定的代理 A ϕ i {\mathcal{A}}_{{\phi }_{i}} Aϕi 来执行各种任务。关键代理包括规划者、开发者、审阅者和总结者。
3.2 基于迭代调试和测试的开发
在 AutoKaggle 中,开发者采用基于迭代错误修正和测试的开发方法。通过迭代执行、调试和测试,确保生成代码的稳健性和正确性。
图 2:迭代调试和测试。
图 2 显示了迭代调试和测试的整体过程。具体而言,开发者首先根据当前状态 s t {\mathbf{s}}_{t} st 、规划者创建的计划 P ϕ i {P}_{{\phi }_{i}} Pϕi 和历史上下文 H : C ϕ i = \mathcal{H} : {C}_{{\phi }_{i}} = H:Cϕi= 生成代码,GenerateCode ( s t , P ϕ i , H ) . C ϕ i \left( {{\mathbf{s}}_{t},{P}_{{\phi }_{i}},\mathcal{H}}\right) .{C}_{{\phi }_{i}} (st,Pϕi,H).Cϕi 是阶段 ϕ i {\phi }_{i} ϕi 的生成代码,而 GenerateCode ( ⋅ ) \left( \cdot \right) (⋅) 表示由开发者执行的代码生成函数。历史上下文 H \mathcal{H} H 包括之前阶段的代码、输出以及其他代理活动的相关信息。
在初始代码生成后,进入迭代调试和测试过程。该过程可以通过算法 2 描述。
开发者利用三种主要工具:代码执行、代码调试和单元测试。
(i) 代码执行。代码执行工具运行生成的代码并捕获任何运行时错误。当检测到错误时,系统会恢复一个文件以记录错误信息。
(ii) 代码调试。代码调试工具分析错误信息并尝试修复代码。它利用错误信息以及当前代码和历史上下文生成修复: C ϕ i ′ = DebugCode ( C ϕ i , E ϕ i , H ) . C ϕ i ′ {C}_{{\phi }_{i}}^{\prime } = \operatorname{DebugCode}\left( {{C}_{{\phi }_{i}},{E}_{{\phi }_{i}},\mathcal{H}}\right) .{C}_{{\phi }_{i}}^{\prime } Cϕi′=DebugCode(Cϕi,Eϕi,H).Cϕi′ 是调试后的代码版本。
根据之前的研究(Tyen et al. 2024),我们将调试过程设计为三个主要步骤:错误定位、错误修正和正确代码段与修正代码段的合并。我们为开发者设定了最多 5 次自我修正错误的尝试。此外,我们引入了一种辅助机制。我们记录调试过程中遇到的所有错误信息。当修正尝试次数达到 3 次时,开发者根据历史信息评估继续的可行性。如果过去的错误信息相似,这表明开发者可能缺乏解决该特定错误的能力,继续可能导致循环。在这种情况下,我们允许开发者退出修正过程,并从头重新生成代码。
(iii)单元测试。单元测试运行预定义的测试以确保代码满足要求。对于每个阶段 ϕ i {\phi }_{i} ϕi ,定义了一组单元测试 T ϕ i {T}_{{\phi }_{i}} Tϕi : T ϕ i = { t 1 , t 2 , … , t k } {T}_{{\phi }_{i}} = \left\{ {{t}_{1},{t}_{2},\ldots ,{t}_{k}}\right\} Tϕi={t1,t2,…,tk} 。单元测试过程可以表示为: R ϕ i = ExecuteUnitTests ( C ϕ i , T ϕ i ) . R ϕ i {R}_{{\phi }_{i}} = \operatorname{ExecuteUnitTests}\left( {{C}_{{\phi }_{i}},{T}_{{\phi }_{i}}}\right) .{R}_{{\phi }_{i}} Rϕi=ExecuteUnitTests(Cϕi,Tϕi).Rϕi 是测试结果的集合,每个结果 r j ∈ { 0 , 1 } {r}_{j} \in \{ 0,1\} rj∈{0,1} 表示相应的测试是否通过(1)或失败(0)。
在像 Kaggle 数据科学竞赛这样复杂且要求高准确性的任务中,仅仅确保代码无错误地运行是不够的。这些竞赛通常涉及复杂的数据处理和精密的算法,隐藏的逻辑错误可能会显著影响最终结果。因此,有必要设计细致的单元测试,不仅验证代码的正确性,还确保其满足预期的逻辑和性能标准。否则,隐藏的错误可能会在连续的阶段中累积,使得完成每个后续阶段变得越来越困难。例如,在数据清理阶段未被注意的逻辑缺陷可能导致特征提取不良,从而影响后续阶段的模型构建。
为了减轻这些风险,必须仔细设计每个阶段的单元测试,以覆盖广泛的场景,包括边缘情况和潜在的故障点。这不仅涉及检查输出的正确性,还需确保中间步骤符合预期逻辑。例如,在数据清理阶段,单元测试应验证缺失值是否得到正确处理,异常值是否得到适当管理,以及数据转换是否准确应用。
通过实施全面的单元测试,我们可以在开发过程中及早捕捉和纠正错误,防止它们传播到后续阶段。这种系统化的测试方法确保每个阶段的代码不仅无错误,而且功能正确,并与整体项目目标保持一致。
总之,开发者采用的迭代调试和测试方法确保了每个阶段生成稳健、无错误且有效的代码。通过采用先进的错误处理、迭代调试和全面的单元测试,该系统能够适应各种挑战,并持续产生高质量的代码输出。
3.3 机器学习工具库
使用大型语言模型从头生成机器学习代码可能具有挑战性,因为各种任务的复杂性。这些模型需要涵盖从数据处理和特征工程到模型构建、验证和预测的一系列过程中的专业知识。在许多情况下,利用专家设计的机器学习工具比单纯依赖大型语言模型生成的代码更有效。这是因为大型语言模型往往缺乏领域特定的专业知识,可能导致生成的代码不够优化或不准确。此外,当被要求执行复杂操作时,生成的代码可能会出现语法或逻辑错误,从而增加失败的可能性。
我们的机器学习库分为三个核心工具集:数据清理、特征工程以及模型构建、验证和预测,每个工具集在工作流程中扮演特定角色。数据清理工具包包含七个工具,包括 FillMissingValues、RemoveColumns With-MissingData、DetectAndHandleOutliersZscore、DetectAndHandleOutliersIqr、RemoveDuplicates、ConvertDataTypes 和 FormatDatetime,旨在确保数据准备的清洁、一致和可靠。特征工程模块包含十一种工具,旨在提升模型性能,如 OneHotEncode、FrequencyEncode、CorrelationFeatureSelection 和 Scale-Features,采用各种技术,如相关性分析和特征缩放,以优化数据表示。模型构建、验证和预测类别提供 TrainAndValidationAndSelectTheBestModel,以支持完整的模型开发生命周期,包括模型选择、训练、评估、预测、集成和超参数优化,促进稳健的模型部署和有效的性能。每个工具都附带全面的说明、输入/输出规范、异常检测和错误处理指导。
这个全面的库对于高效的多智能体协作以应对复杂的 Kaggle 竞赛至关重要。每个工具提供标准化、可靠的功能,使 AutoKaggle 能够无缝共享和处理数据,提升特征质量,优化模型性能,最终提高整体工作流程效率,并确保在竞争环境中协调、高质量的解决方案。此外,我们的机器学习库减轻了 AutoKaggle 在详细编程任务上的负担,使他们能够更多地专注于更高层次的任务规划和代码设计。这种关注的转变使 AutoKaggle 能够更有效地应对复杂任务,最终提升他们的整体表现。有关我们机器学习工具的更多细节可以在附录 C 中找到。
4 实验
4.1 实验设置
任务选择。我们选择了八个主要使用表格数据集的Kaggle竞赛,重点关注分类和回归任务。这些竞赛分为两类:经典Kaggle和近期Kaggle。经典Kaggle竞赛是指在2023年10月之前开始,且至少有500名参与者的竞赛,而近期Kaggle竞赛则是在2024年或之后开始的。由于我们的分析依赖于GPT-4o,该模型的训练数据截至2023年10月,因此它包括大多数经典Kaggle竞赛。为了评估AutoKaggle的泛化能力,我们因此重点关注2024年后启动的竞赛。此外,我们将这些竞赛分为三个难度级别:简单、中等和困难。对于每个数据集,我们访问Kaggle上相应竞赛的主页,从概述和数据描述部分提取内容,并将这些信息汇编到一个名为overview.txt的文件中。该文件与原始竞赛数据文件一起,构成了AutoKaggle的主要输入。有关我们数据集的更多详细信息,请参见附录B。
值得注意的是,由于MLE-Bench(Hong et al. 2024)中的九个表格数据集体积庞大,会显著增加计算运行时间,因此我们未将其纳入考虑。资源限制使我们无法遵循MLE-Bench的实验设置,该设置规定每个代理的参与窗口为24小时,代码执行超时时间为9小时。
评估指标。我们从四个方面评估AutoKaggle的能力:生成提交(Made Submission)、有效提交(Valid Submission)、平均标准化性能分数(Average Normalized Performance Score)和综合分数(Comprehensive Score)。前两个指标指的是MLE-Bench,主要用于评估生成submission.csv文件的能力。最后两个指标来自数据解释器(Data Interpreter)(Chan et al. 2024),我们对其进行了修改,以适应我们框架的评估。
(i)生成提交(Made Submission,MS)。生成提交是指生成submission.csv文件的次数百分比。
表 1:在 8 个 Kaggle 任务上的有效提交、有效提交和综合得分。每个实验重复进行 5 次。各个任务的最佳表现用下划线标出,所有任务的最佳表现用粗体标出。
(ii) 有效提交 (VS)。有效提交表示那些 submission.csv 文件的有效百分比——即它们可以成功提交到 Kaggle 网站,产生无错误的结果,并且没有与数据规模或类别不匹配相关的问题。
(iii) 综合得分 (CS)。在评估中,性能指标分为两类:有界指标,其范围从 0 到 1,较高的值表示更好的性能;以及无界指标,其中较低的值表示更优的性能。为了规范化这些不同类型的指标,我们使用规范化性能得分 (NPS),其定义如下: N P S = { 1 1 + s , if s is smaller the better s , otherwise. (1) \mathrm{{NPS}} = \left\{ \begin{array}{ll} \frac{1}{1 + s}, & \text{ if }s\text{ is smaller the better } \\ s, & \text{ otherwise. } \end{array}\right. \tag{1} NPS={1+s1,s, if s is smaller the better otherwise. (1) 对于任务的多次试验,我们计算平均规范化性能得分 (ANPS) 作为成功尝试的平均值: A N P S = 1 T s ∑ t = 1 T s N P S t (2) \mathrm{{ANPS}} = \frac{1}{{T}_{s}}\mathop{\sum }\limits_{{t = 1}}^{{T}_{s}}{\mathrm{{NPS}}}_{t} \tag{2} ANPS=Ts1t=1∑TsNPSt(2) 其中 T s {T}_{s} Ts 表示任务的成功尝试总数,而 N P S t {\mathrm{{NPS}}}_{t} NPSt 是第 t t t 次尝试的 NPS 值。
为了全面评估通过率和平均性能,我们将综合得分 (CS) 定义为 VS 和 ANPS 的平均值: C S = 0.5 × V S + 0.5 × A N P S (3) \mathrm{{CS}} = {0.5} \times \mathrm{{VS}} + {0.5} \times \mathrm{{ANPS}} \tag{3} CS=0.5×VS+0.5×ANPS(3) 实验细节。我们基于 GPT-4o 和 o1-mini 模型评估了 AutoKaggle 的性能。值得注意的是,根据功能需求,将不同的模型分配给特定的代理。执行需要最少逻辑推理和编码能力的任务的阅读器、审阅者和摘要生成器使用 GPT-4o-mini 模型实现。负责任务分解和规划的规划者需要复杂的逻辑推理,使用 GPT-4o 或 o1-mini 模型。尽管开发者的任务通常需要高级逻辑推理和编码技能,但规划者有效的任务分解方法减轻了这些要求,因此基于 GPT-4o 模型。
表 2:机器学习工具的消融研究。通过完成率和综合得分进行评估。最佳性能用下划线标出。
在我们的实验中,每个任务经历五次试验,工作流程中的每个阶段允许最多进行三次迭代。在一次迭代中,开发者可以调试代码最多五次。如果未成功,他们将继续进行相同的阶段,基于之前的尝试得出见解并调整策略。在三次迭代后仍未解决问题将被视为明确失败。
基线。我们采用 AIDE(Schmidt 等,2024)作为我们的基线,这是 MLE-bench 评估结果中表现最佳的框架。我们使用 AIDE 的默认设置,仅将 agent.base.model 修改为 GPT-4o 模型。
4.2 主要结果
表 1 显示了 AutoKaggle 在 8 个 Kaggle 数据科学竞赛中的综合表现。为了便于理解,我们统一将这八个任务命名为任务 1-8。真实任务名称和详细数据集信息可在附录 B 中找到。
图 3:不同设置/任务的平均标准化性能得分。
提交和有效提交。我们首先评估了在不同实验配置下有效提交.csv 文件生成的成功率。使用 GPT-4o 实现的 AutoKaggle 框架在所有 8 个 Kaggle 任务中显示出优越的性能,平均有效提交率为 83 % {83}\% 83% ,超越了 AIDE 框架 28 % {28}\% 28% 。这些结果强调了我们框架在执行全面数据科学工作流程中的稳健性。尽管 AIDE 框架成功处理了涉及单变量分类或回归的任务 1-7,但它未能为任务 8(一个多变量分类问题)生成有效提交。这种差异化的表现展示了我们框架在处理多样化表格数据任务中的多功能性。
另一个有趣的观察是,在 AutoKaggle 框架内,尽管 o1-mini 模型声称具有更优越的推理能力,但 GPT-4o 模型的结果更佳。这种性能差异完全源于 Planner 组件中所使用模型的不同。我们假设,这一反直觉的结果源于 o1-mini 对过度规划复杂性的倾向,这在我们精简的基于阶段的工作流程架构中被证明是不利的。这一考虑也影响了我们决定维持 GPT-4o 作为开发者的基础模型。
图 4:左侧。调试时间;右侧。比赛中的平均表现。
作为开发者的基础模型,我们的实验表明,基于 o1-mini 的开发者将显著增加代码冗长性,将 100 行的解决方案扩展到大约 500 行,原因是引入了多余的组件,如日志系统。
综合评分。随后,我们比较了在8个Kaggle任务中不同设置的整体表现。使用GPT-4o的AutoKaggle在5个任务中获得了最高的综合评分,并展示了最佳的整体表现。图3展示了基于平均归一化性能评分指标的不同设置的比较,其中使用o1-mini的AutoKaggle获得了最高的整体评分。这表明,尽管基于o1-mini的规划器生成了过于复杂的计划,增加了开发难度,但根据规范成功执行这些计划导致了更优的性能结果。
4.3 消融研究
除了参与消融研究的模块外,所有其他实验设置与正式实验相同。
关于机器学习工具的研究。为了评估机器学习工具模块的有效性以及工具在不同阶段对结果的影响,我们进行消融实验。我们从没有任何工具开始,逐步在每个阶段添加工具,直到所有机器学习工具都被实施。结果如表2所示。值得注意的是,使用数据清理阶段工具时,完成率提高了 30 % {30}\% 30% ,而在使用所有工具时,完成率提高了 27.5 % {27.5}\% 27.5% ,与没有工具的情况相比。然而,在特征工程阶段,完成率出现下降,特别是在房价和学业成功竞赛中。这一下降可归因于涉及的特征数量相对较大,以及在该阶段使用的工具的复杂性和高度封装性,这需要添加和移除特征,从而使其使用变得复杂。此外,这种复杂性给开发人员调试错误代码带来了挑战。如图4(a)所示,使用特征工程阶段的工具时,调试实例的频率更高。
图4 (b) 提供了更清晰的比较,表明尽管在四种场景下最佳的标准化性能得分相似,但使用该工具时的完成率显著提高。这表明,尽管我们开发的机器学习工具库并未显著提升解决方案的上限,但它作为一种更稳定的工具,增强了 Au-toKaggle 的完成率。这一结果符合预期,因为该机器学习工具库是基于广泛使用的库(如 pandas 和 scikit-learn)进行重新开发的。它并未引入新功能,而是结合和重新包装现有功能,包含错误处理和手动测试,以确保与我们的框架兼容。
表3:单元测试的消融研究。更好的性能用下划线标出。
单元测试研究。为了评估单元测试模块的有效性,我们进行了消融实验。结果如表3所示。在没有单元测试的情况下,完成率显著下降,几乎不可能完成任务。这强调了对于数据科学等需要高精度和逻辑的任务,仅仅保证代码的每个阶段无错误执行是不够的。需要全面的单元测试,以确保代码逻辑合理并实现每个阶段的目标。
关于调试次数的研究。我们进行消融实验,以调查允许的调试次数对结果的影响。实验设置允许每个阶段进行五次代码调试尝试,每个阶段最多可执行三次。因此,我们分析了允许的修正次数设置为0、5和10的场景。结果如图5所示。当AutoKaggle被要求在没有任何错误的情况下通过时,泰坦尼克任务只有一个成功记录。允许五次调试尝试显著提高了完成率,进一步增加允许的调试尝试次数会导致所有指标的上升。这证明了我们的代码调试模块的有效性。然而,当允许的调试尝试次数设置为10和15时,性能趋于平稳,这表明代理的自我修正能力有限。有些复杂错误是它无法独立解决的,进一步增加允许的调试尝试次数并不能解决这些错误。更多细节见第4.4小节。
关于竞赛日期的研究。为了进一步评估我们的AutoKaggle框架的泛化能力,我们进行了按竞赛日期分层的分析。任务1-4对应于可能包含在模型训练数据中的竞赛,例如GPT-4o和O1-mini,而任务5-8则源于今年启动的竞赛。这种时间分层使我们能够评估框架在分布外任务上的表现。对于经典的Kaggle任务,使用GPT-4o的AutoKaggle实现了0.90的有效提交率和0.842的综合得分。在最近的任务中,这些指标分别为0.75和0.800,显示出仅有轻微的性能下降。这些结果表明,我们的任务解耦方法和预定义执行路径能够有效处理新竞赛,即使在基础模型缺乏该领域先前接触的情况下。
表 4:AutoKaggle 在问题解决阶段的错误类型
图 5:不同调试时间下的综合得分。
4.4 错误分析
在 AutoKaggle 的每个子任务阶段,可能会发生错误,其中数据清理和特征工程的错误率分别为 25 % {25}\% 25% 和 22.5 % {22.5}\% 22.5% ,尤其是在特征工程阶段的失败会导致在 31.25 % {31.25}\% 31.25% 的案例中直接竞争失败。
在所提出的 AutoKaggle 框架背景下,该框架旨在通过协作多代理系统帮助数据科学家解决复杂的表格数据挑战,表 4 提供了在迭代开发过程中遇到的不同类型错误的概述。AutoKaggle 的工作流程包括代码执行、调试和全面的单元测试,列出的错误表明在自动化这些阶段时遇到的各种挑战。最常见的错误是值错误(49 次出现),与输入类型或范围不匹配有关,以及键错误(44 次出现),由尝试访问不存在的字典键引起。此外,类型错误(25 次出现)和模型错误(8 次出现)分别突显了由于数据类型不匹配或模型配置不正确而导致的操作问题。该表还详细列出了其他错误,如超时、文件未找到和索引错误,每种错误都对调试过程产生影响。理解这些错误类型对于提高 AutoKaggle 的稳健性和使自动化工作流程与人工干预相一致至关重要,最终提升典型数据科学管道中的生产力。
此外,我们为开发人员提供了详细的调试过程。下面,我们以 FileNotFoundError 为例说明调试工作流程:
-
错误定位:开发者最初在执行涉及文件保存操作的 Python 脚本时遇到问题,该脚本使用了 Matplotlib 和 Pandas 等库。具体错误 FileNotFoundError 被追溯到不存在的目录或不正确的文件路径。通过迭代分析,识别出代码中的问题部分,重点关注需要正确管理目录路径和处理文件名。
-
错误修正:为了解决这些问题,提出了几项修改建议。首先,通过引入 os.makedirs 创建任何缺失的目录,强调在执行文件操作之前确保目录存在的重要性。此外,建议采用文件名清理方法,以防止与文件路径中的无效字符相关的错误。引入了一个自定义的 sanitize_filename 函数,以确保文件名仅包含有效字符,从而避免因特殊符号或空格引起的问题。
-
合并正确和修正的代码段:最后一步涉及将修正后的代码段合并回原始代码,以创建一个无缝且强健的解决方案。修订后的脚本包括验证目录存在性、创建必要目录以及应用文件名清理,以确保在不同操作系统之间的兼容性。修正后的代码专注于提高可靠性,特别是在文件保存过程中,使其能够抵御常见的陷阱,如缺失目录或无效文件名。
5 结论
在本文中,我们介绍了 AutoKaggle,这是一个强大的框架,旨在利用基于阶段的工作流程和多代理协作来解决复杂的 Kaggle 数据科学竞赛。AutoKaggle 采用迭代开发过程,结合全面的代码调试、单元测试和专门的机器学习工具库,以应对数据科学任务的复杂要求。我们的框架在管理复杂数据工作流程方面增强了可靠性和自动化,同时通过可定制的流程保持用户控制。在多个 Kaggle 竞赛中的广泛评估证明了 AutoKaggle 的有效性,标志着 AI 辅助数据科学问题解决的重大进展,并扩展了基于 LLM 的系统在应对现实世界挑战中的能力。
更多推荐
所有评论(0)