今年早些时候,我的经理派我一个非常有趣的帖子来自 Data Colada,一篇由三位行为科学家撰写的博客文章,用于检查已发表的研究。 Data Colada 的作者与一组匿名研究人员合作,在 2012 年的一篇论文中使用的汽车里程数据集中发现了一些奇怪的异常现象。 我负责测试探索模式平台在JMP ,可用于识别数据中的异常或意外模式。 在这篇博文中,我使用探索模式以及 JMP 中的其他有用工具来搜索汽车里程数据中的意外或异常模式。
背景
汽车里程数据集的前几行和几列如下所示。 这些数据是从一项研究中收集的,该研究要求特定汽车保险机构的 13,488 名客户报告他们当前的里程表读数。 客户报告的读数作为 update_car1 到 update_car4 列包含在数据中,因为每个客户报告了最多四辆车的信息。 数据还包含首次签发保险单时每辆车的里程表读数。 这些列被命名为baseline_car1 到baseline_car4。 由于并非同时发布所有政策,因此本研究中的观察结果从基线到更新所用的时间各不相同。
在 Data Colada 的帖子中,研究人员展示了在该数据集中发现的四个异常。 让我们使用 JMP 深入研究这些发现中的每一个。
异常#1:行驶里程的分布是均匀的
Data Colada 的作者发现,行驶里程的分布与 0 到 50,000 英里的均匀分布一致。
由于数据包括每辆车的里程表读数的基线和更新列,我们创建公式列,通过从更新值中减去基线值来存储行驶的英里数。 在 JMP 中,我们然后使用分布平台查看基线和更新值的分布,以及每辆车的总行驶里程。 考虑每个客户的第一辆车的分布报告。
基线里程分布的形状与更新里程的分布相似,更新时里程表读数中位数高出约 26,000 英里。 这一发现本身并不令人惊讶。 我发现基线和更新读数最有趣的是,两名参与者拥有已行驶近 100 万英里的车辆! 他们必须有很好的机制。
报告中最令人震惊的部分是上面的第三个分布,显示了前两个之间的差异。 基线和更新时间之间行驶的里程分布似乎均匀分布在 0 到 50,000 英里之间。 没有超过 50,000 英里的值,并且直方图的每个条柱包含大约相同数量的参与者。 在这种情况下,目视检查提供了数据均匀分布的可靠证据。 但是,对于不那么明显的数据,您可以使用 Distribution 平台中的 Fit Beta 选项执行拟合优度测试.
下面的屏幕截图显示了每个参与者的汽车行驶里程(更新 - 基线)的分布。 我们发现,对于第二、第三和第四辆车,每个分布似乎均匀分布在 0 到 50,000 之间。 基于这种分布模式,我们可以得出结论,更新的里程值可以通过将均匀分布的随机值添加到基线里程值来生成。
异常 #2:基线里程使用四舍五入,更新的里程没有
Data Colada 的作者发现,基准里程有许多四舍五入到最接近的千位的值,而更新的里程不包含这种四舍五入。
Data Colada 的研究人员通过查看里程的最后三位数字来研究四舍五入。 我们可以使用 JSL 来采取类似的方法,但让我们使用探索模式! 如果您以前从未使用过探索模式,则可以通过选择分析 > 筛选来找到它。
在我们启动探索模式来探索每个基线和更新列后,我们会看到以下屏幕截图中的输出。 在单变量模式报告中,选择第一辆车的基线和更新值以比较模式。
默认情况下,探索模式包括每列中重复最多的值、每列中最长的运行以及每列中最长的重复序列的报告。 对于参与者拥有的第一辆汽车,从最长的运行或最长的重复序列报告中获得的信息并不多。 然而,最重复的值报告显示了一个有趣的对比。 在第一辆拥有的汽车的基准里程中,有许多值似乎四舍五入到最接近的 10,000。 这不一定是意外发现的模式;当我被问到我车辆的里程数时,我总是在回答时绕过去。
更新里程的最重复值报告完全不同。 在此报告中,重复项要少得多,而且出现的重复项不像基线值那样四舍五入。 如果更新列是通过将均匀分布的随机值添加到基线值来生成的,则会发生这种情况。 因此,这一发现与异常#1 一致。
异常 #3 – 数据以两种字体输入,每个观察值都有一个“双胞胎”用另一种字体
研究人员注意到,在原始数据文件中,观察结果是使用两种不同的字体记录的。 通过一些巧妙的排序,研究人员发现一种字体中的每个基线观察对应于另一种字体中非常相似的行。
我赞扬研究人员注意到不同的字体并采取这种方法。 但是,让我们假设数据都使用相同的字体,并且没有出现这个危险信号。 我们可以使用 JMP 来识别行和列之间的任何奇怪的关系吗? 我们当然可以——毕竟这是 JMP 博客。
我们可以使用探索模式来调查连续行的列之间是否存在线性关系。 考虑以下简单示例。 在前四行中,列具有精确的线性关系,其中 Y=2*X。 在接下来的三行中,两列再次具有精确的线性关系,其中 Y=0.5*X。
我们可以使用探索模式来搜索基线列之间的线性关系。 如果我们还没有注意到异常 #1,那么在更新的列中寻找线性关系也是有意义的。
如果存在许多精确的线性关系,或者可能是大量线性关系,则可能表明一列中的值是使用另一列的倍数生成的。 在这里,只有几行的基线列具有精确的线性关系。 我们可以使用着色选项来查看这些单元格并检查是否有任何不规则之处,但是对于具有许多舍入值的这种大小的数据集,发现一些线性关系并不奇怪。
使用探索模式,我们调查了基线值的两列的行之间是否存在任何可疑的线性关系。 然而,结果并不是很有用。 现在,让我们同样为基线值寻找两行之间的列之间的线性关系。 为此,我们需要对数据的转置使用探索模式。
对于报告至少三辆车的里程的参与者,我使用 JMP 中的转置选项按基线列转置数据。 我排除了参与者拥有两辆或更少汽车的行,因为这些无助于识别线性关系。
在此转置数据的“探索模式”报告中,存在许多斜率近似为 1 的精确线性关系。 因此,原始数据表中有许多行在汽车中具有接近双行的基线值。 (提示:您可以右键单击“坡度”列并使用“选择位置”功能突出显示坡度接近 1 的所有行。 有 69 对斜率在 0.99 和 1.01 之间)。
您可以选择线性关系表上方的“着色”以对完全线性关系中的所有值进行着色,或者您可以右键单击 Y 列以对特定值进行着色。 下表包含线性关系报告前三行的彩色值。
探索模式已经确定了几对“驾驶双胞胎”,其中所有汽车的基线里程值都非常相似,具有精确的线性关系。 我们可以通过寻找更多没有精确线性关系但仍然非常密切相关的对来跟进。 如 Data Colada 帖子中所示,一旦您按照第四辆车的基线值进行排序,就很容易识别出许多驾驶双胞胎。
异常 #4 – 一种字体有许多圆角基线值,而另一种没有
研究人员发现,Calibri 字体中的基线值是四舍五入的,而 Cambria 字体中的值没有四舍五入。
现在,假设我们知道一些行是用一种字体写的,而其他行是用另一种字体写的,并且我们的数据中有一个列,每行都有字体。 我们可以使用带有字体名称的探索模式作为 By 列。
正如在探索模式报告中看到的,Calibri 字体行的基线里程值有很多四舍五入的值,而 Cambria 行的基线值没有四舍五入。 由于我们希望客户报告的里程数被四舍五入,这表明原始报告值是带有 Calibri 字体的行,并且创建了“驾驶双胞胎”数据,然后以 Cambria 字体输入。
结论
每当您获取新数据集时,您可能会进行一些探索性分析和数据清理。 也许你寻找异常值,检查数据是否有缺失值,或查看每个变量的分布。 我希望这篇文章鼓励您考虑使用探索模式来检查数据中的异常模式。 并非您使用探索模式找到的所有模式都证明存在任何错误或相关问题,但该实用程序为您提供了一个工具来查找需要进一步调查的模式。
为了创建汽车里程数据的转置,您如何识别(或收集)报告了至少三辆车的里程数的参与者? 我可以通过检查每一行来手动完成,但是,有什么公式可以使用吗?