今年早些時候,我的經理派我一個非常有趣的帖子來自 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 字體輸入。
結論
每當您獲取新數據集時,您可能會進行一些探索性分析和數據清理。 也許你尋找異常值,檢查數據是否有缺失值,或查看每個變量的分佈。 我希望這篇文章鼓勵您考慮使用探索模式來檢查數據中的異常模式。 並非您使用探索模式找到的所有模式都證明存在任何錯誤或相關問題,但該實用程序為您提供了一個工具來查找需要進一步調查的模式。
為了創建汽車里程數據的轉置,您如何識別(或收集)報告了至少三輛車的里程數的參與者? 我可以通過檢查每一行來手動完成,但是,有什麼公式可以使用嗎?