相關性可以歇菜了,介紹預測能力得分(PPS)

我們定義並開放了預測能力得分(PPS)。 PPS是可以在數據中找到更多模式的關聯的替代方法。

相關性有太多問題

現在是星期五下午,您的老闆告訴您,數據傳遞令人驚訝地提前到來了-來回僅4周。 這是您的預測模型缺少的部分。 您很興奮,但也有點著急,因為您知道接下來的事情:瀏覽數據。 所有。 45.列。 這將花費許多小時,但您知道這是值得的,因為如果沒有數據瞭解,您就會失明。 一個顯而易見的步驟是查看所有單變量列分佈。 但這還不夠。

您問自己:列之間存在什麼關係?

要回答這個問題,您只需重複典型的練習即可:計算相關矩陣並檢查一些令人驚訝的關係。 每當您感到驚訝時,您都花一點時間繪製手頭兩列的散點圖,看看您是否可以理解。 希望您可以,但通常卻不能,因為您根本不知道這些列的含義。 但這是另一天的故事。

在檢查了相關矩陣之後,您繼續前進,甚至不知道自己不知道的(可怕的)。

我們花一點時間來回顧一下相關性。 分數在-1到1之間,表示是否存在強線性關係(正向還是負向)。 到現在為止還挺好。 但是,分數根本無法檢測到許多非線性關係。 例如,竇波,二次曲線或神秘階躍函數。 分數將是0,表示:"這裡沒什麼有趣的"。 同樣,僅為數字列定義相關性。 因此,讓我們刪除所有類別列。 在我的上一個項目中,超過60%的列是分類的,但是,嘿。 沒關係。 不,我不會轉換這些列,因為它們不是序數,並且OneHotEncoding將創建一個矩陣,該矩陣具有比宇宙中原子更多的值。

相關性可以歇菜了,介紹預測能力得分(PPS)

> Too many scenarios where the correlation is 0. This makes me wonder if I missed something… (Excer

如果您受過良好的教育,您會知道相關矩陣是對稱的。 因此,您基本上可以扔掉一半。 太好了,我們在那裡節省了一些工作! 還是我們? 對稱性意味著無論您計算A與B的相關性還是B與A的相關性,相關性都是相同的。但是,現實世界中的關係很少是對稱的。 關係經常是不對稱的。 這是一個例子:上次檢查時,我的郵政編碼60327告訴陌生人我住在德國法蘭克福。 但是,當我只告訴他們我的城市時,他們卻永遠無法推斷出正確的郵政編碼。 PFF…業餘愛好者。 另一個例子是:具有3個唯一值的列將永遠無法完美預測具有100個唯一值的另一列。 但是事實可能恰恰相反。 顯然,不對稱很重要,因為它在現實世界中非常普遍。

考慮到相關性的那些缺點,我開始懷疑:我們可以做得更好嗎?

要求:去年的一天,我夢見一個分數,該分數將告訴我兩列之間是否存在任何關係-無論該關係是線性,非線性,高斯還是僅被外星人知道。 當然,分數應該是不對稱的,因為我想檢測城市和郵政編碼之間的所有奇怪關係。 如果沒有關係,則分數應為0;如果存在完美的關係,則分數應為1。 錦上添花的是,該分數應該能夠立即解決分類和數字列的問題。 為我所有的學術朋友總結一下:兩個列之間的預測關係的不對稱,數據類型不可知分數,範圍從0到1。

計算預測能力得分(PPS)

首先,沒有一種唯一的方法來計算預測能力得分。 實際上,有許多種方法可以計算出滿足前面提到的要求的分數。 因此,我們寧可將預測能力得分視為一系列得分的框架。

假設我們有兩列,並且想要計算A預測B的預測能力得分。在這種情況下,我們將B作為目標變量,將A作為我們的(唯一)特徵。 現在,我們可以計算交叉驗證的決策樹,並計算合適的評估指標。 當目標是數字時,我們可以使用決策樹迴歸器並計算平均絕對誤差(MAE)。 當目標是分類時,我們可以使用決策樹分類器並計算加權F1。 您也可以使用ROC等其他分數,但由於我們還有另一個問題,讓我們將這些疑問擱置一秒鐘。

如果不將其與基準進行比較,大多數評估指標將毫無意義。

我想大家都知道這種情況:您告訴奶奶您的新車型F1得分為0.9,所以她不像您那樣興奮。 實際上,這對她來說是非常聰明的,因為她不知道有人能得分0.9還是您是成千上萬了不起的KAGGLErs嘗試過後第一個得分超過0.5的人。 因此,我們需要"標準化"我們的評估分數。 您如何標準化分數? 您定義一個上限和下限,然後將分數記入透視圖。 那麼下限和上限應該是多少? 讓我們從上限開始,因為通常這比較容易:理想的F1是1。理想的MAE是0。 做完了 但是下限呢? 實際上,我們不能絕對地回答這個問題。

下限取決於評估指標和您的數據集。 這是天真的預測器實現的價值。

如果您的F1分數達到0.9,則可能會非常糟糕或非常好。 如果您的超級癌症檢測模型始終預測為"良性",並且在該高度偏斜的數據集上仍得分為0.9,則顯然不是那麼好。 因此,我們需要為一個非常幼稚的模型計算分數。 但是什麼是天真的模型? 對於分類問題,總是預測最普通的類是非常幼稚的。 對於迴歸問題,始終預測中位數非常幼稚。

讓我們看一個詳細的虛構示例:

回到郵政編碼和城市名稱的示例。 想象兩列都是分類的。 首先,我們要計算到城市的郵政編碼的PPS。 因為城市是分類的,所以我們使用加權F1分數。 我們的經過交叉驗證的決策樹分類器得分為0.95 F1。 我們通過始終預測最常見的城市並獲得0.1 F1的分數來計算基線分數。 如果對分數進行歸一化,則應用以下歸一化公式後,最終的PPS將為0.94:(0.95-0.1)/(1-0.1)。 正如我們所看到的,PPS得分為0.94相當高,因此郵政編碼似乎對城市具有良好的預測能力。 但是,如果我們在相反方向上計算PPS,則可能會獲得接近0的PPS,因為決策樹分類器並不比總是預測最常用的郵政編碼好得多。

請注意:MAE的歸一化公式與F1不同。 對於MAE,越低越好,最佳值為0。

將PPS與相關性進行比較

為了更好地瞭解PPS及其與相關性之間的差異,我們來看以下兩個示例:

示例1:非線性效應和不對稱

相關性可以歇菜了,介紹預測能力得分(PPS)

> Example 1: Comparison of Correlation to PPS for y=x²

讓我們使用一種典型的二次關係:特徵x是一個統一變量,範圍是-2到2,目標y是x的平方加上一些誤差。 在這種情況下,x可以很好地預測y,因為存在明顯的非線性二次關係-畢竟這就是我們生成數據的方式。 但是,這在從y到x的另一個方向上是不正確的。 例如,如果y為4,則無法預測x大約為2還是-2。 因此,預測關係是不對稱的,得分應反映這一點。

在此示例中,分數的值是多少? 如果您尚不知道要尋找的內容,則相關性將使您垂涎三尺,因為相關性為0。因為相關性是對稱的,所以從x到y以及從y到x都是如此。 但是,從x到y的PPS為0.88,可以檢測非線性關係並節省時間。 但是,PPS不是1,因為在關係中存在一些錯誤。 在另一個方向上,從y到x的PPS為0,因為y僅知道自己的值沒有關係可以預測。 這與我們之前所做的觀察一致。

示例2:分類列和隱藏模式

讓我們將相關矩陣與Titanic數據集上的PPS矩陣進行比較。 "泰坦尼克號數據集? 再次??" 我知道,您可能認為您已經瞭解了有關Titanic數據集的所有內容,但是PPS可能會為您提供一些新見解。

相關性可以歇菜了,介紹預測能力得分(PPS)

相關性可以歇菜了,介紹預測能力得分(PPS)

> Example 2: Comparing the Pearson correlation matrix (left) with the PPS matrix (right) for the Tit

有關相關矩陣的兩個發現:

· 相關矩陣較小,並且省略了許多有趣的關係。 當然,這是有道理的,因為諸如Sex,TicketID或Port之類的列是分類的,並且無法為它們計算相關性。

· 相關矩陣顯示TicketPrice與中等強度等級(-0.55)之間呈負相關。 如果我們查看PPS,我們可以仔細檢查這種關係。 我們將看到TicketPrice是該類(0.9 PPS)的有力預測指標,但反之亦然。 該類僅以0.33的PPS預測TicketPrice。 這是有道理的,因為您的機票價格是5.000美元還是10.000美元,您很可能是最高級的。 相反,如果您知道某人是最高階層的人,則無法說出他們是為門票支付了5.000美元還是10.000美元。 在這種情況下,PPS的不對稱性再次發光。

有關PPS矩陣的四個發現:

· 矩陣的第一行告訴您Survived列的最佳單變量預測變量是Sex列。 這是有道理的,因為在救援過程中優先考慮了婦女。 (由於刪除了"性別"列,因此我們無法在相關矩陣中找到此信息。)

· 如果您查看TicketID的列,您會發現TicketID是一系列列的很好的預測指標。 如果進一步研究此模式,您將發現多個人具有相同的TicketID。 因此,TicketID實際上是指一組潛在的一起購買機票的乘客,例如,大意大利的Rossi一家人,他們將任何夜晚變成一個奇觀。 因此,PPS幫助我檢測到隱藏模式。

· 比TicketID的強大預測能力更令人驚訝的是,TicketPrice在各種列中的強大預測能力。 特別是,TicketPrice可以很好地預測TicketID(0.67),反之亦然(0.7)。 經過進一步研究,您會發現門票通常具有獨特的價格。 例如,只有意大利的羅西家族支付了72,50美元的價格。 這是至關重要的見解! 這意味著TicketPrice包含有關TicketID的信息,因此也包含我們的意大利家庭的信息。 考慮潛在的信息洩漏時需要的信息。

· 查看PPS矩陣,我們可以看到因果鏈可能解釋的影響。 (他只是說因果關係嗎?—當然,這些因果關係的假設必須謹慎對待,但這不在本文的討論範圍之內。)例如,您可能會感到驚訝,TicketPrice對生存率具有預測能力(PPS 0.39) )。 但是,如果您知道該艙位會影響您的生存率(PPS 0.36),而TicketPrice可以很好地預測您的艙位(PPS 0.9),那麼您可能已經找到了一個解釋。

PPS和PPS矩陣的應用

在瞭解了PPS的優勢之後,讓我們看看在現實生活中可以在哪裡使用PPS。

免責聲明:PPS和關聯都有用例。 對於在數據中查找預測模式,PPS顯然比相關性具有一些優勢。 但是,一旦找到模式,相關性仍然是傳達找到的線性關係的一種好方法。

· 查找數據中的模式:PPS查找相關性找到的每個關係-以及更多。 因此,您可以使用PPS矩陣來替代相關矩陣,以檢測和理解數據中的線性或非線性模式。 使用單個分數始終在0到1範圍內的數據類型,這是可能的。

· 特徵選擇:除了通常的特徵選擇機制外,您還可以使用預測能力得分來為目標列找到好的預測因子。 此外,您可以消除僅添加隨機噪聲的功能。 這些功能有時在功能重要性指標上仍然得分很高。 此外,您可以消除其他功能無法預測的功能,因為它們不會添加新信息。 此外,您可以在PPS矩陣中識別成對的相互預測特徵-這包括高度相關的特徵,但也將檢測非線性關係。

· 檢測信息洩漏:使用PPS矩陣檢測變量之間的信息洩漏-即使信息洩漏是通過其他變量來調節的。

· 數據規範化:通過將PPS矩陣解釋為有向圖來查找數據中的實體結構。 當數據包含以前未知的潛在結構時,這可能令人驚訝。 例如:泰坦尼克號數據集中的TicketID通常是一個家庭的指標。

與相關性相比,PPS有多快?

儘管PPS相對於相關性有很多優點,但存在一些缺點:計算時間更長。但這有多糟?是否需要數週的時間,或者我們需要在幾分鐘甚至幾秒鐘內完成?使用Python庫計算單個PPS時,時間應該沒有問題,因為通常需要10-500毫秒左右的時間。計算時間主要取決於數據類型,行數和使用的實現。但是,在計算40列的整個PPS矩陣時,這將導致40 * 40 = 1600的單獨計算可能需要1-10分鐘。因此,您可能想在後臺開始計算PPS矩陣,然後繼續您夢dream以求的暑假! ️對於我們的項目和數據集,計算性能始終足夠好,但是當然還有改進的空間。幸運的是,我們看到了許多方法可以改進PPS的計算,以使速度增益提高10-100倍。例如,使用智能採樣,試探法或PPS的不同實現。如果您喜歡PPS,並且需要更快的計算速度,請與我們聯繫。

如何在自己的(Python)項目中使用PPS

如果您仍在追隨,您將是仍然受到關注的稀有人類之一,您就是瘋狂的野獸! 如果您迫不及待想看到PPS將在您自己的數據上顯示什麼,那麼我們對您來說有個好消息:我們將PPS的實現開源為一個名為ppscore的Python庫。

在使用Python庫之前,請花一點時間通讀計算細節

安裝軟件包:

pip install ppscore

計算給定熊貓數據幀的PPS:

import ppscore as ppspps.score(df, "feature_column", "target_column")

您還可以計算整個PPS矩陣:

pps.matrix(df)

侷限性

我們做到了–您很興奮,並希望向您的同事展示PPS。 但是,您知道他們對新方法總是如此批評。 因此,您最好準備知道PPS的侷限性:

· 計算比相關性(矩陣)慢。

· 分數不能像相關性那樣容易地解釋,因為它不會告訴您有關所找到的關係類型的任何信息。 因此,PPS更適合查找模式,而相關性更適合傳達找到的線性關係。

· 您不能以嚴格的數學方式比較不同目標變量的分數,因為它們是使用不同的評估指標計算得出的。 分數在現實世界中仍然很有價值,但是您需要牢記這一點。

· 引擎蓋下方使用的組件存在侷限性。 請記住:您可能會交換組件,例如 使用GLM代替決策樹,或使用ROC代替F1進行二進制分類。

· 如果您使用PPS進行功能選擇,則您仍然需要執行向前和向後選擇。 而且,PPS無法檢測到目標之間的要素之間的交互作用。


結論

經過多年使用相關性,我們如此大膽(或瘋狂?)提出了一種可以檢測線性和非線性關係的替代方法。 PPS可以應用於數字列和分類列,並且是不對稱的。 我們提出了一個實現並開源了一個Python包。 此外,我們在一些示例中顯示了相關性的差異,並討論了我們可以從PPS矩陣中得出的一些新見解。

現在由您決定對PPS的看法以及是否要在自己的項目中使用它。 作為圖書館Bamboolib庫的一部分,我們已經使用PPS一年多了,在該庫中PPS對於添加一些高級功能至關重要,因此我們希望與更廣泛的社區共享PPS。 因此,我們希望收到您對該概念的反饋,如果您對自己的數據嘗試PPS,我們將感到非常高興。 如果收到積極的答覆,我們很高興聽到您提出的有關調整或改進實施的要求。 正如我們之前提到的,有許多方法可以提高速度以及如何針對更具體的用例調整PPS。

GitHub:https://github.com/8080labs/ppscore

電子郵件:florian AT 8080labs.com

時事通訊:如果您想了解有關PPS以及我們即將推出的其他數據科學項目和工具的更多信息,可以在這裡訂閱。 我們不會寫有關付費產品的信息,您可以隨時退訂,並且-甚至我們不得不提及這一點-我們永遠不會放棄您的電子郵件。


(本文翻譯自Florian Wetschoreck的文章《RIP correlation. Introducing the Predictive Power Score》,參考:https://towardsdatascience.com/rip-correlation-introducing-the-predictive-power-score-3d90808b9598)


分享到:


相關文章: