Data Autopsy:用开源AI工具在训练前排查数据集风险

Data Autopsy 用确定性检查加本地 AI 解释,系统排查表格数据集风险。
Data Autopsy 是一个开源的、AI 辅助的表格数据集取证调查工具,聚焦 CSV,目标是在训练模型前系统排查数据隐患。它把检测与解释明确分离:Python 统计与规则检查负责产生带测量值、阈值和证据的结构化发现,本地语言模型(Ollama 上的 Qwen2.5 1.5B)只作为可选解释层,不决定检测结果。取证引擎覆盖十类检查,包括缺失值、重复记录、常量列、标识符列、离群值、高基数分类、分类表示不一致、类别不平衡、高相关特征和目标泄漏。工具强调证据比严重程度更重要,并诚实说明自身边界:统计模式只能突出可疑行为,不能证明数据错误,也不能替代领域知识与人工审查。
Data Autopsy:用开源AI工具在训练前排查数据集风险
大多数机器学习工作流都从一个熟悉的套路开始:加载数据集、查看几行数据、检查形状、处理缺失值,然后开始训练模型。这套流程本身没问题,但它会留下一些不那么明显的隐患——重复记录可能扭曲分布,极端值值得深究,分类特征可能用多种方式表示同一个值,目标变量可能严重不平衡。最危险的一种情况是目标泄漏:模型在评估中表现亮眼,却在真实数据上惨败,因为它学到的不是底层规律,而是本不该在预测时获得的信息。
这些问题的发现往往依赖手动检查、零散的 notebook 单元格,或者模型训练完之后的调试会话。Data Autopsy 正试图把这些调查工作集中到一个地方。它是一个开源、AI 辅助的表格数据集取证调查工具,目标不是把数据集当作行列的集合,而是调查其结构、识别可疑模式、检查证据,并理解可能出了什么问题。

它是什么,以及为什么先做确定性分析
Data Autopsy 当前聚焦 CSV 数据集。工作流很直接:上传 CSV,分析结构与内容,运行确定性取证检查,按严重程度审查结果,检查受影响列、测量值和示例行,理解发现的意义与局限,导出报告,可选地用本地语言模型以平实语言解释发现。
项目架构中最重要的决定之一,是把检测和解释分开。Python 编写的统计与规则检查负责识别潜在问题,返回包含测量值、阈值、受影响列和支持证据的结构化发现。语言模型只是一个可选的解释层,它可以把技术发现翻译成易懂的语言,但不决定检测器是否发现了问题。
这种分离带来几个好处。可复现性:相同数据集、配置和检测器版本应产生可复现的结果。透明性:每个发现都能追溯到某个测量值或明确规则,而不是模型生成的无法解释的陈述。可测试性:检测逻辑可以用具有已知属性的合成数据集验证。隐私:核心调查不需要外部 AI API。优雅降级:本地模型不可用时,应用仍应有用。
AI 可以让技术报告更容易理解,但不应该负责发明底层证据。
取证引擎的十类检查
取证引擎是项目的核心,当前实现覆盖十类调查。
缺失值与重复记录
缺失数据是任何数据集首先应该检查的东西,但缺失百分比只是故事的一部分。少量缺失的列可能容易处理,一半缺失的列需要更慎重的决策,完全为空的列可能无法用于预期目的。工具用可配置阈值对缺失值发现进行分类,完全或大量缺失的列严重程度更高。报告可以包含受影响列、缺失数量、缺失百分比和触发发现的阈值。缺失值不自动等于错误——在某些数据集中,值的缺失本身携带含义。
重复数据会影响计数、扭曲分布,当相关记录同时出现在训练集和测试集中时还会导致评估问题。引擎检查完全重复的行和基于选定非标识符特征的潜在重复候选。这是两种不同的情况:完全重复意味着相关行值匹配,潜在重复意味着记录在特定比较规则下相似。潜在重复需要更多谨慎——两个人可能年龄和城市相同,两笔交易可能金额相同,时间序列数据中重复测量可能是预期的。因此发现应被视为调查候选,而不是必须删除的证据。
中位数绝对偏差(MAD)与修正 Z 分数是离群值检测中比标准差更稳健的方法。传统 Z 分数用均值与标准差衡量一个值偏离中心的程度,但均值和标准差本身对极端值敏感——少数离群点会抬高均值、拉大标准差,从而把这些极端值"藏"起来。MAD 取每个观测与中位数之差的绝对值的中位数,它对离群点几乎不敏感。修正 Z 分数定义为 0.6745 × (x − 中位数) / MAD,其中 0.6745 是使该统计量在正态分布下与标准差尺度对齐的常数。通常以 3.5 作为阈值,对应正态分布下约万分之三的尾部概率。正因为不依赖均值,MAD 方法在重尾、含污染的数据上比 IQR 和普通 Z 分数更可靠。
常量列、标识符列与数值离群值
常量列只包含一个不同值,通常对预测模型没有有用变化。接近常量的列在几乎每行都包含一个主导值,其他地方变化很小。工具标记常量列以及单个值占据至少 99% 观测的列。这些特征可能是冗余的、错误填充的,或者只是数据集设计的一部分。一个几乎恒定的运营标志在特定应用中仍可能有意义,所以工具报告发现而不是静默删除特征。
记录 ID、唯一代码和生成的标识符等列可能被误认为有意义的预测特征。当前检测器在定义的最小样本条件下标记唯一性非常高的列。唯一标识符可能适合连接表或追踪记录,但如果它只是记住单个观测,就不适合作为预测输入。目标是帮助用户追问:这个特征代表有意义的信息,还是仅仅标识了行?
离群值检测并不只是找出远离均值的值。不同数据集有不同分布,一笔高额交易在一种情境下可疑,在另一种情境下完全普通。自然重尾变量可能包含极端值但没有错误。Data Autopsy 使用两种统计方法:四分位距(IQR)法,使用 1.5 的可配置乘数;以及基于中位数绝对偏差(MAD)的修正 Z 分数,阈值 3.5。使用多种方法可以从不同视角观察异常遥远的价。发现可以包含被标记观测的数量和百分比、相关边界或阈值、汇总测量值以及极端值示例。这些方法是筛查技术,不能确定某个值错误、欺诈或可以安全删除。
分类特征问题
高基数分类列可能给某些预处理和建模方法带来问题。包含数千个不同标签的列可能代表自由文本输入、产品代码、用户标识符或未规范化的类别。引擎使用可配置的唯一值计数和唯一性比率阈值标记分类特征。高基数不一定坏——产品目录可能合法地包含许多产品代码,地理字段可能有许多有效类别。这个发现的作用是提示检查该特征应如何表示或编码。
从多个表单、系统或手动输入收集的数据,经常包含代表同一表观类别的变体,例如 Mumbai 和 mumbai、Active 和 active、Completed 和 COMPLETED。当前检查在修剪周围空白并规范化大小写后寻找冲突的字符串表示。这种不一致会增加表观类别数量,使分组或编码复杂化。但规范化不应盲目应用——某些数据集按设计区分大小写,不同字符串并不总是可以互换。工具识别不一致性,让用户决定如何处理。
高基数指分类列中不同取值的数量很大,例如一个有数万个唯一用户 ID 或产品代码的列。对线性模型和多数树模型而言,高基数列若直接做独热编码,会产生极宽且极度稀疏的特征矩阵,既消耗内存,又让每个类别只有极少的样本去估计参数,容易过拟合。常见应对包括目标编码、频率编码、哈希编码,或把稀有类别合并为"其他"。高基数本身不是错误:邮政编码、SKU 等字段天然具有大量合法取值。真正需要警惕的是把它误当作普通类别特征处理,或在训练集与测试集上类别分布不一致时直接编码。
类别不平衡、相关性与目标泄漏
在分类任务中,目标分布会强烈影响训练和评估。多数类很大、少数类很小的数据集可能产生一个看起来准确但无法识别最重要案例的模型。工具检查选定目标的分布,并用可配置比率标记严重不平衡。当前规则包含 4:1 和 20:1 两个不同严重程度的阈值。这些值是筛查阈值,而不是不平衡数据集的普适定义。类别不平衡在欺诈检测、医学筛查、异常检测等合法应用中很常见,正确的评估策略取决于问题、不同错误的代价以及可用样本数量。
数值特征之间的强相关可能表示冗余或值得调查的关系。引擎使用 Pearson 相关系数阈值识别高度相关的特征对。为了让较大数据集上的分析保持可管理,当前实现将成对分析限制在高方差数值列的子集上,并限制考虑的行数。这是在有用性和计算成本之间的实用折中。相关不证明因果,高相关也不自动是数据质量问题——某些特征因为测量相关属性而预期会一起变化。报告帮助用户定位强关系,并决定它们是预期的、冗余的,还是可能有问题。
目标泄漏尤其值得关注,因为它会让模型评估产生误导。泄漏发生在特征包含关于目标的信息、而这些信息在预测时本不应合法可用时,或者目标或评估过程的信息以无效方式进入训练时。当前检查寻找几个可疑信号,包括与目标相同的特征、非常强的数值关系、异常强的分类类别纯度,以及适用情况下较高的 ROC-AUC 分数。这些信号可以识别值得仔细检查的特征,但它们本身不能证明泄漏。一个特征可能合法地是强预测因子,一个数值关系在科学数据集中可能是预期的,一个分类变量可能几乎决定目标,因为底层过程确实如此工作。
更完整的泄漏调查还应考虑数据如何收集、每个特征何时可用、预处理如何执行,以及评估设置是否反映真实预测场景。长期目标是让这种调查更系统,而不是把可疑相关性当作确凿证据。
ROC-AUC(受试者工作特征曲线下面积)衡量分类器在所有可能阈值下区分正负类的能力,取值 0.5 相当于随机猜测,1.0 为完美区分。它的一个重要性质是对类别分布不敏感——正负样本比例变化时,只要排序能力不变,ROC-AUC 基本稳定,因此常被用于不平衡场景的模型比较。但在目标泄漏检查中,异常高的 ROC-AUC(例如单特征就达到 0.95 以上)恰恰是危险信号:它可能意味着该特征在预测时并不可得,或在数据收集、预处理阶段已混入了目标信息。需要强调,高 AUC 只说明该特征与目标高度可分,不能直接断定泄漏,还需结合特征的产生时间与可得性判断。
证据比严重程度更重要
一个只显示红色警告却不解释原因的仪表盘没什么用。Data Autopsy 使用结构化发现来携带调查所需的上下文。根据检查类型,一个发现可以包含稳定标识符和检查名称、严重程度分类、受影响列、相关行索引、测量值和检测阈值、问题为何重要的解释、进一步调查的建议,以及检测方法的已知局限。
这种结构把结果与展示方式分开。仪表盘可以用它过滤和组织发现,报告导出器可以用它生成文档,测试可以验证测量值和阈值,解释层可以用证据生成更可读的摘要。严重程度和置信度应保持为不同概念——一个潜在关键问题不一定是已确认问题,检测器的强度取决于它实际能观察到的证据。
本地语言模型的角色
项目希望探索实用的 AI 集成,而不把付费云 API 作为必需项。Data Autopsy 设计使用 Ollama 配合 Qwen2.5 1.5B 作为默认本地解释模型,也可以使用更小的模型作为替代。模型的作用是用平实语言解释已有发现,例如描述高比例缺失值为何重要、极端值检测器测量了什么,或者开发者应考虑哪些后续问题。底层测量值仍来自确定性引擎。
这种设计有几个优点:数据分析不依赖远程语言模型服务;项目在没有模型时仍可使用;模型输出可以对照结构化证据检查;用户可以在支持的硬件上实验本地推理;外部 AI 提供商不是核心工作流的必需项。小模型也有局限,它可能产生模糊解释、误解上下文或无法遵循请求的输出结构。本地推理性能取决于机器、模型和数据集大小。因此模型响应应被验证、保持在合理时间限制内,并有确定性回退支持。本地推理是一种设计选择,不保证应用每个部分自动私密——应用仍须检查外部请求、遥测、日志和其他数据处理行为。
Ollama 是一个本地大模型运行与管理的开源工具,它把模型权重下载、量化格式加载、推理服务封装成简单命令,开发者用 ollama pull 获取模型、用本地 HTTP 接口调用,无需云服务账号。Qwen2.5 1.5B 指通义千问广告系列中参数量约 15 亿的指令微调模型,量化后可在普通笔记本内存中运行,适合做摘要、改写等轻量文本任务。这类小模型的推理速度与显存占用远低于数十亿参数的大模型,但语言流畅度和指令遵循能力也相应受限,容易在结构化输出或长上下文上出错。正因如此,Data Autopsy 只把它放在解释层,并保留确定性回退,避免模型质量波动影响核心分析结论。
技术栈、界面与测试
项目使用刻意熟悉的 Python 技术栈:Python 用于核心分析逻辑,Pandas 和 NumPy 处理表格数据与数值运算,SciPy 和 scikit-learn 提供统计工具和建模指标,Streamlit 构建交互界面,Plotly 做分布与关系的可视化探索,Ollama 和 Qwen2.5 1.5B 提供可选的本地语言模型解释,Pytest 测试检测器、数据处理、报告及相关行为。目标是让已经使用 Python 和数据科学工具的贡献者容易上手,而不需要复杂的分布式架构。
取证引擎可以产生很多发现,但一次性显示所有内容会造成信息过载。界面围绕调查工作流设计,主要区域包括:概览(数据集摘要和最重要发现)、数据集画像(列类型、缺失情况、分布和其他结构信息)、取证发现(检测问题的优先视图)、泄漏调查(目标相关风险的聚焦视图)、证据检查器(测量值、阈值、受影响行和局限)、AI 调查员(基于已有发现的可选解释)、报告导出(保存结果供后续审查)。视觉方向克制且以信息为中心,严重程度应该清晰,但不应让整个界面看起来像警报屏。图表应该回答具体问题,可视化不应只是为了应用看起来更复杂。
确定性检查只有在普通和异常输入下行为可预测时才有用。测试需要覆盖不止一个干净 CSV。合成数据集特别有用,因为它们让我们引入已知条件并验证引擎是否检测到。示例包括:完全为空的列、完全重复的行、常量特征、包含极端数值的特征、用不一致大小写表示的类别、严重类别不平衡的目标、复制目标的特征、包含合法强预测因子的数据集、布尔和日期时间列、小数据集和宽表、包含缺失值或意外类型的列。测试还应验证分析不会静默修改原始数据集,边缘情况不会使应用崩溃。目标泄漏检查需要特别仔细的测试——检测器不应仅仅因为与目标相关就把每个合法强预测因子标记为泄漏。报告生成也应独立测试,这样即使语言模型不可用,发现也能一致导出。目标不是声称测试套件证明应用完美无缺,而是让检测器行为明确,并随着项目演进而捕获回归。
它不能证明什么,以及如何本地运行
好的取证工具应该诚实面对边界。缺失值不一定是错误,重复不总是冗余,离群值不一定无效,高度相关的特征不一定是泄漏,高基数特征不一定设计糟糕。同样,一个数据集可以通过所有已实现的检查,却仍包含引擎无法检测的问题。有些问题需要领域知识、源系统上下文、时间推理,或理解数据在生产中如何使用。统计模式可以突出可疑行为,但不能总是解释其原因。因此 Data Autopsy 是调查助手,而不是自动数据清洗系统。它应帮助开发者找到值得关注的地方,同时让有后果的决策保持可见和可审查。
项目面向本地运行,使用 Python 和虚拟环境。典型设置包括克隆仓库、创建虚拟环境、安装依赖、运行测试,然后用 Streamlit 启动应用。可选解释层需要 Ollama 和支持的本地模型,当前默认模型的拉取命令是 ollama pull qwen2.5:1.5b。当模型未安装或未运行时,应用仍应支持其确定性分析和报告工作流。
下一步与开源意义
下一阶段的目标是让发现更有用、调查更可信。方向包括:更强的泄漏分析,结合数据可用性、目标编码和评估方法调查可疑特征;更好的证据检查,让从警告到确切行、测量值和阈值的路径更容易;可复现报告,包含足够的数据集和检查元数据以便后续审查,同时避免不必要地暴露敏感行级数据;有用的演示数据集,展示特定问题而不依赖硬编码发现或误导性截图;更稳健的测试,覆盖多类目标、小样本、异常类型以及合法但看起来可疑的关系;对贡献者友好的检测器,保持检测器接口一致,使新检查可以添加而不与 UI 紧密耦合。
Data Autopsy 把统计检查、面向证据的报告、本地 AI 解释层和用于调查表格数据集的界面结合在一起。它也是探索 AI 工程中一个重要问题的有用方式:如何使用语言模型让工具更易理解,同时不让它成为未经验证的真理来源? 项目希望确定性部分可检查、局限有文档、没有付费服务也能保持有用。它仍在演进,目标不是承诺每个数据集问题都能自动发现,而是让调查这些问题更系统、透明和可访问。有时候,在训练更好的模型之前,我们需要先理解手头的数据。
相关推荐

uGAP:统一100+非洲地理数据集的AI平台
uGAP是开普敦大学团队开发的非洲地理空间AI平台,统一120余个非洲数据集并提供Python SDK,支持数据发现、处理与模型训练一站式工作流,已用于气旋洪水制图等实战场景。

Cursor能控制你的电脑了:AI代理可驱动桌面应用测试
Cursor 新增桌面控制能力,AI 代理可驱动 iOS 模拟器等桌面应用测试自己构建的功能。本文分析这一更新对开发工作流的影响、技术实现可能路径及可靠性考量。

Vibecoding自研推理引擎:理想丰满,现实骨感
Reddit开发者分享Vibecoding自研推理引擎的真实经历:用WebGL2和GLSL在浏览器跑GGUF Q4模型,却陷入tokenizer调试地狱。本文分析浏览器端LLM推理的工程难点,以及为何直接clone llama.cpp是更理性的选择。