機器學習中結果評估與模型解釋

機器學習中結果評估與模型解釋

來自專欄清雨的 Data Science 筆記8 人贊了文章

簡介

Logistic Regression 是第二爛大街的機器學習演算法(第一名是線性回歸,縮寫也叫LR,哈哈),但是一個企業把LR真正的運用起來需要很久。

我將Logistic Regression運用起來前經歷了數據探索(質量分析),數據倉庫搭建,最重要的是收集標定數據。

在這一次分析中,其實訓練模型占的比例其實很少(大約幾句話),真正有點麻煩的是有了模型以後對模型的評價,對結果的分析。

P.S. 由於這個是工作內容,代碼就暫時不提供了,希望繼續交流的小夥伴可以單獨和我聯繫,我們可以交流拋開這個問題本身的、機器學習相關的內容。

數據簡介

數據其實來源於行業經驗,我們在「自卸車駕駛行為很差,危化品車駕駛行為很好,物流車一般」的基礎假設上,我們得到了評價駕駛員行為好壞的分類模型,並且列出了最影響駕駛安全的一些特徵。但是這樣的一刀切的劃分方法真的科學嗎?其實是欠妥的,但是條件和資源有限,我們只有這樣的標定數據。

分析中的一些細節

下面簡述在給出分析報告的時候關注的一些細節

數據預處理

首先,我們採集的特徵都是我們特殊處理過的,例如,我們會將維持在10~20km的時間作為一個特徵,但是這樣分類的話,開車開得多和開得少的司機就會有明顯的差異,這樣不合適,我們統計落在這個速度的時間百分比(或者里程百分比)作為學習的指標。

我們儘可能做到所有的特徵都和司機駕駛時間的長短沒有關係(疲勞駕駛和單次駕駛時間有關係,由設備單獨統計),來確保這是一個對所有司機都「公平」的模型。

其次,為了最後看出哪個指標對結果影響大,我使用MinMaxScale將所有的特徵都歸一化到0~1之間。

在劃分測試集和訓練集的時候,同一輛車產生的樣本不能同時出現在Train和Test中,確保測試集的樣本是模型「沒見過的」。

模型的參數選擇

我們使用的是帶交叉驗證的LogisticRegression:

model = LogisticRegressionCV( # Cs=[2 ** x for x in range(-14, 14)], Cs=[10 ** x for x in range(-2, 3)], cv=5, solver="liblinear", class_weight="balanced", n_jobs=3)

除了並發和解算器的設置,最主要的是將class_weight設置為balanced來防止數據集不均衡造成的問題。

交叉驗證設置為5折,並發使用3核心CPU,同時權重在Loss中佔用的Weight從0.01~100設置5檔做GridSearch。

結果評價

光看精度是不夠的,非常不夠,這個時候我們一般要看看Confusion Matrix,要了解一下我們的樣本是如何被錯誤的分配了,也需要列印一下ROC/AUC

吐槽一下,之前某一家公司面試我的時候,除了讓我背API,還問了這個AUC指標,我說是ROC的面積積分,寫了一下公式,結果這傢伙讓我寫代碼,問題是數據格式都沒有寫什麼代碼啊……

Confusion Matrix

測試集結果

訓練集結果

從混淆矩陣看出,兩類被較好的分開了。

ROC & AUC

圖中可以看出……這簡直是夢寐以求的ROC/AUC了~

可解釋性分析

工業上應用的時候,大多數的人(尤其是沒有接觸過ML的人)會要求可解釋性,其實我想說的是,只要Train/Test測試和最後驗證都達標了,模型就可以用了。那什麼時候要求可解釋性呢?我們要針對產生數據的系統本身進行更改的時候要求可解釋,這個時候能用的模型就沒幾個,更何況高維數據是畫不出來的。一般線性分類、回歸模型,或者是決策樹一類的演算法有較好的可解釋性。

探究哪些因子影響大

我們可以取出模型的參數:model.coef_,通過對因子的絕對值進行排序我們可以得到影響大小,通過讀取其正、負我們可以得到其對結果是正影響還是負影響

可以看出,超速猛如虎,維持穩定的速度很重要。

「第三類」可視化

除了正類樣本和負類樣本,我們還有一類亦正亦邪的樣本:「自卸車駕駛行為很差,危化品車駕駛行為很好,物流車一般」,對,就是這個物流車輛,根據我們的行業經驗,物流車輛應該行為較好,但是不如危化品車輛:

我們把評分函數的結果畫出分布得到了符合我們三觀的結果:

總結

其實機器學習真的不難,入門簡單,調包也簡單,難在應用上。

應用難在兩個方面,第一個是對演算法的深入理解,明白設定的參數的意義,明白訓練結果的含義,知道如何評價模型。對於有可解釋性要求的,需要能Hack進模型本身,就好像不止要會用Linux,還需要會修改內核源代碼。

第二個,其實是目前大多數企業的問題:你需要說服你的老闆接受機器學習,本質上就是承認,機器有比人更好的處理能力,機器比人能理解更加複雜的模型。現在的問題是,說起機器學習,就覺得要搞人工智慧,如果你在企業里說要做AI,老闆會覺得你是要拖垮他的企業,其實機器學習(不說AI本身)可以在很多小的點上放光放熱,也不需要特別多的成本。


推薦閱讀:

給妹子講python-S02E19GroupBy實現分割、應用和組合
numpy的高緯數組轉置方法transpose()
自學成才的Kaggle冠軍:從工程學,數據科學到人工智慧,聊聊這一路
【官方中文版】谷歌發布機器學習術語表(完整版)
Python學習筆記--1

TAG:機器學習 | 駕駛 | 數據挖掘 |