收益:
- 能够识别缺失的数据类型 (MCAR/MAR/MNAR)、异常值和编码错误,并使用 AI 和正确的数据来生成清理代码和诊断
- 能够了解人工智能建议的每个清理步骤(删除、分配、转换)将如何影响分析结果,并建立可逆且记录的工作流程
- 坚持清理决策基于对生成数据的过程的了解,并且人工智能是受监督的助手,而不是盲目的自动机
每一位经验丰富的分析师都知道一个事实:实证项目的大部分时间不是建模,而是数据清理(纠正数据中的错误、遗漏和不一致的工作,并为分析做好准备)。根据粗略的经验法则,大约 70-80% 的时间用于理解、清理和转换数据;只剩下20-30%用于实际分析。在本单元中,我们将逐步了解人工智能 (AI) 如何减轻这一沉重负担,但哪些决定仍应由您决定以及原因。
让我们首先介绍两个基本事实。首先,清理决策基于您对生成数据的过程的了解:只有您知道为什么缺少值、为什么数字太大。 AI看不到数据,不知道上下文;写代码,不做决定。其次,每个清洁步骤都可能改变分析结果。删除异常值可以使系数反转;用均值填充缺失可以人为地减少方差。因此清理应该是可逆的并记录在案:永远不要接触原始数据,在代码中执行每个步骤,记录每个步骤的影响。
分步清洁工作流程
1.了解数据。首先查看结构:行数(观测值)和列数(变量)、每个变量的类型(数字、分类、日期)、汇总统计、缺失数量。你可以向AI询问这个“数据档案”代码;但是您阅读输出并提出诸如“为什么这个变量以文本形式出现?”之类的问题。
2. 理解缺失数据并对其进行分类。缺失数据分为三种类型。 MCAR(随机完全丢失):丢失不是由于任何原因造成的,例如传感器随机失效。 MAR(随机缺失):缺失取决于其他观察到的变量,例如老年人更经常将问题留空,但您知道年龄。 MNAR(非随机缺失):缺失取决于未观察到的值本身,例如高收入者不报告其收入。这种区别很关键,因为它决定了解决方法,而人工智能无法为你决定这一点。
3、弥补不足。选项:列表删除、均值/中值插补、基于模型的多重插补。 MCAR 中的删除相对安全,但会减少样本量。多重分配在 MAR 中更合适。没有简单的方法可以保证 MNAR 的公正性;应对缺陷机制进行建模,或者至少进行敏感性分析。均值填充很容易,但也很危险:它会减少方差、削弱关系并隐藏不确定性。
4. 检查异常值。离群值是指与其他观察值相距甚远的观察值。将两个问题分开:这是一个错误(数据输入中写的是 999 岁)还是一个真实但异常的值(亿万富翁的收入)?修复错误;不要删除真正的异常值,因为它们代表数据。 “因为它困扰”你而删除异常值会使数据向结果倾斜。
5. 编码和一致性。标准化类别(“男性”、“男性”、“E”全部纳入一个代码),将日期纳入一种格式,将单位纳入一种规模,检测重复行。这是风险最小的阶段,人工智能的帮助最大。
6. 记录并冻结。用代码和注释行记录每个步骤,将原始数据和清理后的数据分开。因此,当裁判询问“为什么这些观察结果被删除?”你已经准备好了答案。
注意:不要根据结果做出清洁决定。删除一行“当你删除这一行时,系数变得显着”是最阴险的 p-hacking 形式,我们将在下一个单元中看到。
比较表:缺失数据方法
方法
什么时候合适?
风险
人工智能的作用
删除一行
MCAR,漏检率低
样本变小,MAR/MNAR 出现偏差
编写代码;你决定
平均值/中位数分配
快速初步分析
减少方差,隐藏关系
很简单,但不推荐这样做;应该警告
多重作业(MI)
三月,重要变量
如果安装不正确,将会产生误导
推荐代码和包(小鼠)
机制建模
甲基丙烯酸甲酯
复杂、假设密集
仅草稿;需要专家
四个可复制的提示
1. 数据分析:
您的角色:数据清理助手。我不共享数据,我想要 R 代码。我有一个名为“digit”的数据框;变量:id、年龄(数字)、收入(数字)、教育程度(分类)、地区(分类)、日期(日期)。任务:编写代码,生成每个变量的类型、缺失数量和比率、数字变量的汇总统计数据以及分类变量的频率表。添加注释行。
2、缺失数据诊断:
编写代码来检查上面“数字”数据的缺失模式: - 每个变量的缺失率, - 显示缺失与其他变量之间关系的简单表格/图表。我将查看代码的输出并区分 MCAR/MAR/MNAR;您只需制作诊断工具,无需决定分配方法。
3.异常值检查(不是删除):
为变量“收入”编写代码,检查异常值而不删除:箱线图、基于 IQR 的边界以及列出异常值观察值 + 值的表格。我会看看这些是错误还是真实的。添加自动删除。
4、编码标准化:
在'education'变量中,值混合写入:“小学”,“小学”,“小学”,“高中”,“高中”,“大学”,“大学”。编写 R 代码,将这些重新编码为一致的类别;清楚地显示映射表,以便我可以确认每次转换。将您不认识的值设置为“未知”。
弱提示/强提示
弱提示:
清理数据,填补空白,丢弃异常值。
这种需求是危险的:它赋予人工智能盲目的权力。什么样的缺失,什么样的填充,什么样的矛盾真相——都不清楚。结果可能是一个隐含偏见的数据集。
强力提示:
你的角色:清洁助理,你不是决策者。逐步编写代码来报告每个步骤的影响:1) 显示缺失的模式(请勿删除/填充),2) 列出异常值候选者(请勿删除),3) 修复与映射表不一致的类别。每个步骤后打印行数和摘要统计信息,以便我可以查看并确认更改。自动分配/删除插入。
区别很明显:强烈的意志将人工智能定位为受监督的助手,产生可逆且记录在案的步骤。
三个迷你箱子
情况 1 — 平均分配陷阱。一位分析师针对 5,000 人的收入数据缺失了 18%。他告诉人工智能“填补空白”;人工智能对它们进行了平均。结果:收入方差下降了22%,教育-收入关系系数比原来弱。正确的方法:缺陷是MAR(由于教育),必须通过多重作业(小鼠)来填补。教训:填充方法取决于机制。
案例 2 — 异常值清理推翻了这一发现。一份公司数据中有 3 家非常大的公司(占观察总数的 0.6%)。这些被AI的“清理”建议删除了;规模经济系数由正转负。然而,这3家公司是真实存在的,并且是该行业的重要组成部分。正确的方法是报告完整且稳健的估计,而不是删除。教训:真正的异常值是数据,而不是噪音。
情况 3 — 无提示编码错误。在一个面板中,日期变量有两种不同的格式(“2020-03-01”和“01/03/2020”)。当人工智能生成的组合代码将它们误认为是不同的值时,1,400 个观察结果不匹配,增长率变得荒谬。如果分析师不检查行数也没关系。教训:每一步之后的观察计数和健全性检查是必须的。
常见错误
- 一味地用平均数来填补差距。它减少了方差,隐藏了不确定性,并在 MAR/MNAR 中产生了偏差。首先对机理进行分类。
- 删除异常值“因为它打扰”。真正的异常值代表数据;删除会改变结果。改正错误,保留真实。
- 利用原始数据。切勿修改原始数据;使用单独副本中的代码进行所有清理,以便可以将其恢复。
- 不衡量步骤的影响。如果在每个步骤后不检查行计数和摘要统计信息,则静默错误将会累积。
- 结果就清理干净了。 “当你添加这行代码时,结果会变得更好”的逻辑是p-hacking;清洁工作应在分析结果之前并独立于分析结果进行计划。
提示:保留一个“之前/之后”表,将清理之前和之后相同的基本统计数据(平均值、中位数、观测值数量、一些相关性)并排放置。意外的跳跃是隐藏错误的最好预兆。
综上所述
数据清理是实证工作中最耗时、最需要决策的阶段。人工智能在这方面是一个强大的代码生成器,但它不能发号施令:您对缺失的数据类型(MCAR/MAR/MNAR)进行分类,确定异常值是错误还是真实的,保持每个步骤可逆并记录下来。不要给予人工智能盲目的“明确”权力,而是建立一个逐步的工作流程,其影响得到衡量和验证。在每个步骤之后检查观察次数和汇总统计数据是解决无声错误的最佳方法。
应用任务
在数据集中(您自己的数据或样本集)至少选择两个包含缺失值和异常值的变量。通过上面的“一步一步,不要删除/填写”提示向AI请求诊断代码并运行。将缺陷分类为 MCAR/MAR/MNAR,并用一句话写出您的理由。将相互矛盾的候选者一一检查,判断哪一个是错误的,哪一个是真实的。最后,在清洁之前/之后生成一个“前后”表,并报告是否有任何意外的变化。
清单
- [ ] 我在单独的副本中清理了原始数据,但没有对其进行更改。
- [ ] 我将缺陷分类为 MCAR/MAR/MNAR 并相应地选择了方法。
- [ ] 我一一检查了异常值,它们是错误的还是真实的;我没有盲目删除。
- [ ] 我检查了每个清洁步骤后的观察次数和汇总统计数据。
- [ ] 我用代码和注释行记录了所有步骤;可逆。
- [ ] 我的清理基于对产生数据的过程的了解,而不是基于分析结果。