為什麼我的模型準確率都 90% 了,卻不起作用?

作者 | Meagvo

譯者 | 馬可薇

策劃 | 劉燕

二元分類中有一類情況,原始資料集中的兩個類出於問題性質的原因,導致其中資料點分佈不平衡。舉例來說,在處理使用者流失(指使用者在一段時間之後不再繼續使用公司產品的情況)這類市場問題預測時,流失使用者所佔的百分比一般都會遠低於留存使用者的。如果說這個例子裡分類是八比二的話,那麼只會有 20% 的使用者終止了與公司繼續接觸,剩下 80% 的使用者則會繼續使用公司產品。

但問題是,這 20% 的使用者流失可能對公司非常的重要。

舉一個更形象的例子,一家禮品公司有 100,000 名顧客,每位顧客平均創造 50 美元的價值,那麼這些顧客全部加起來就是 5,000,000 美元。如果說其中有 20% 的使用者放棄繼續購買產品,那麼公司將損失 1,000,000 美元!日積月累這些金額甚至可以讓最大的電子商務公司或實體店汗顏。因此,公司營銷部門的一個主要任務就是預測客戶的流失,並提前做出干預措施以防止其發生。

用於預測客戶流失的機器學習

如果你所在公司有優秀的資料科學或資料分析團隊,那麼恭喜你,一個優秀的客戶流失預測模型可以讓你搶先一步預測使用者的忠誠度,在他們放棄公司產品之前採取措施,甚至還可能為公司保住客戶資源。

但在處理這類二元分類模型時,樣本數量不平衡的兩個類別通常會讓事情變得棘手,而大多數的資料分析師所依賴的精度指標也並不是萬能的。為此,本文將回顧 Koo Ping Shuang 發在 Towards Data Science 上 另一篇文章【另一篇文章】中所提到的各類機器學習效能評估中可用的各類指標,並從中選擇合適不平衡二元分類問題的指標進行分析。

什麼是精度?

精度

= 所有正確預測 / 全部預測

精度計算了所有預測中正確所佔的比例,直覺告訴我們這麼算確實沒問題,可是到了不平衡資料集上,情況就變得複雜了……

舉例來說,你從市場部那邊拿到了過去一年的客戶流失情況資料。去年總共有十萬的客戶,其中有兩萬的客戶流失了。現在,如果說我們預測全部的十萬客戶都留存到了年底,這就意味著你的精度是 80,000/100,000,足足有 80%!但實際上你一個客戶流失都沒有預測到。假如分類再極端一點,90 比 10 的客戶留存,我們還是預測沒有任何客戶流失,那麼我們將擁有一個 90% 精度的模型,但卻一個流失案例都沒有預測到。

最終,我們拿著 90% 的模型卻只能“四顧心茫然”。

那麼,要怎麼解決這個問題呢?

除了精度之外,我們還有其他用於衡量模型效能的指標,本文中我們將重點關注以下三種:

精準度

召回率

F 值

精準度

精準度 = 真正 / (真正 + 假正)

精準度(Precision)的演算法相比精度來看並不是很清晰,精準度可以告訴我們的模型與預期目標間的距離有多遠。成功的預測將為模型加分,而失敗的預測也會有一定的扣分。因此,如果我們成功預測到了所有的二萬用戶流失,也就是兩萬的真正,但同時也有兩萬並沒有流失的客戶被模型混淆在了其中,那麼這一點在精準度裡也會有所體現:

沒有假正:20,000/(20,000+0)= 100%

有假正:20,000/(20,000+20,000)= 50%

假正在統計學中經常被稱作是第一類錯誤,是指被預測為正確的錯誤樣本。如果你需要處理不平衡的資料集,並防止假正的出現,那麼精準度將幫上大忙。舉例來說,我們要為確診癌症的患者實施風險治療,但我們必須要確保接受治療的人是真正患病的,因為如果對正常人實施這種治療手段的話,那麼我們將揹負惡名。這種情況下,我們會希望能將假正的樣本數目將到最小,提升模型精準度。

召回率

召回率 = 真正 /(真正 + 假負)

如果說提高精準度是為防止假正樣本,那麼提升召回率(recall)則是為了降低假負的數量。在統計學中,假負被稱為第二類錯誤,是指預測為陰性,實際為陽性的案例。還是用之前的例子,如果我們成功預測出所有的流失客戶,沒有錯過任何一個,那麼我們將擁有:

沒有假負:20,000/(20,000+0)= 100%

如果我們錯估了五千的客戶,那麼召回率將下降,但計算式的分母不變,如下:

有假負:15,000/(15,000+5,000)= 75%

如果你需要處理的資料集分類不平衡,且對找回所有問題案例的需求迫切,那麼召回率將會是個很好的評估標準。在我們的客戶流失預測例子中,我們就可以藉此找出客戶中最有可能放棄購買的客戶,並提前給他們發出郵件或訊息通知。

這種情況中的假正可能也就是多發幾封郵件,你大機率也不會在意有五百個對產品非常忠誠的客戶會受到多餘郵件而造成的浪費,我們希望的是能透過訊息提醒,保留住那些潛在的客戶流失。

F1 值

雖說我們可能不會直觀地看出 F1 指標的含義,但它應該是最適合你的那個。

F1= 2 X (精準度 * 召回率) / (精準度 + 召回率)

可以說,F1 是精確度是召回率的組合,它可以幫你確定模型效能,並對假正和假負進行賦權。如果你想了解更多,可參考 維基百科中的演算法分解。

如果說我們在 2 萬個目標樣本中成功識別了 1。5 萬,但其中有五千是錯判為正的負,並且漏掉了五千個正樣本,那麼你的 F1 應該如下:

F1: 15,000 / (15,000+。5 (5,000+5,000) ) =

75%

F1 演算法最妙的點在於它可以在精確度和召回率找到巧妙的平衡點。

下一步

現在,透過一個不平衡資料集的例子分析,我們可以清楚發現,準確率並不一定是最好的評判標準。極端例子就是那個 90% 準確率的模型,但卻在召回率或精確度上得分為零。以 Python 的邏輯迴歸演算法為例,以下幾種選項或許值得一看:

SMOTE。該軟體包允許使用者過量或過少取樣,以平衡分類間數量差異。

賦權邏輯迴歸。透過選擇每個類別的權重,或直接根據類別分佈平衡權重,我們可以設定真正、假正及假負的重要程度,從而對結果有更多的掌控。

總 結

即使是用 R 或 Python 進行機器學習演算法訓練,在面對不平衡分類問題時也難免會感到棘手。希望本文能夠幫助各位意識到資料分析中潛在的漏洞,以防出現邏輯上的謬誤。文章中主要的觀點有三:

精度並不是萬能的

確定你的業務目標

找平衡資料軟體包

https://towardsdatascience。com/why-my-model-with-90-accuracy-doesnt-work-685817a2b0e

TAG: 000精準度流失客戶預測