[模型解釋策略]Lift Chart, Permutation Importance, LIME

使用Lift Chart, Permutation Importance, LIME 解釋XGBoost模型結果

YL-Tsai
11 min readMar 6, 2019
source

Why

模型解釋性(Model Interpretability)是近年來快速發展的一個領域,原本難以解釋的機器學習算法像是隨機森林(Random Forest)、梯度提升樹(Gradient Boosting)、甚至是深度學習模型(Deep Learning Model)、都逐漸發展出可被人類理解的結果,目前此領域大部分使用模型無關方法(Model-Agnostic Methods),來進行操作。

而筆者寫這篇文章的目的主要在於,當資料科學家竭盡所能的優化模型,腦袋中運行各式各樣其他人聽不懂看不懂的數學式及程式碼,也逐漸的忘卻如何與非專業背景的合作對象,例如業務單位、客戶、或是每天看你窩在電腦前的女友(?)說明你的模型成果、或是發現的insights,然而這些,都會大大的影響資料科學家的觀感、信任、甚至客戶/主管是否買單你的專案成果。

於是在本文中作者將透過三樣工具:

  • Lift Chart
  • Permutation Importance
  • LIME

來解釋XGBoost預測的模型結果,並且試圖向非專業背景的對象介紹資料科學家的產出,我們將回答以下問題:

  • 你的模型有什麼用?
  • 你的模型怎麼預測的?

並且,作者這裡使用的資料集由於搭建在GCP上,取得較為不易,這裡讀者不妨使用自己的資料集一起打造一個模型解釋方案吧!

Code here

範例資料集

本文中使用的資料集為WSDM — KKBox’s Churn Prediction Challenge的顧客流失預測資料,訓練資料及驗證資料均經過了資料清洗,特徵工程,模型的部分使用XGBoost並且達到了Kaggle上的Top5%,這裡介紹資料以及特徵名稱:

整理過後的資料表,包含8項特徵。
six_month_day_listen                   過去六個月內的使用者聽歌次數
six_month_satis 過去六個月內的使用者聽歌滿意度 registered_via 經由?裝置註冊(推測)
age_under_26 使用者年齡是否低於26歲last_last_churn 連續/非連續使用者/新使用者 client_level_code 註冊次數等級
last_auto_renew 上一次交易是否自動更新one_month_day_listen 過去一個月內的聽歌次數
聽歌滿意度定義為
(100%的歌曲數) / (所有聽歌的歌曲數(25%,50%,75%,95%,98.5%,100%))
last_last_churn特徵中
0表示為連續訂閱的使用者,-1表示為新使用者,1表示為非連續訂閱的使用者
註冊次數等級定義為
0 : 新使用者
1 : 1~6次
2 : 6~12次
3 : 12~24次
4 : 24次以上
其餘-1表示為缺失值。

若想要瞭解如何從原始資料萃取出這些特徵,可以參考我的上一篇文章

你的模型有什麼用?

Lift Chart

要回答這樣的問題,其中一個有效的方法,針對分類問題:

我們的模型過濾出來的名單準度是沒有使用模型準度的 x 倍

然而怎麼樣做到這件事呢,以下針對驗證資料集進行預測並且作圖:

X軸為模型輸出的機率按照百分位數分組,這裡採每5個百分位數分成一組,總共展示10組
Y軸有兩個顏色,其中橘色為該組名單內的流失率,虛線為驗證集基準流失率,白色為該組內流失率/基準流失率。

從此圖中我們可以看到,模型預測流失機率最高的前5%,這份名單中流失率為45%,為基準流失率的9.22倍,這個時候就可以給對方帶來強烈的感受了,接著就可以說,用這個模型,我們可以過濾掉後95%的名單,只給你原本名單的5%,不僅如此,這份名單內的流失率是45%!

  • 一來縮減了行銷預算,原本要投放全部人,現在只要投放前5%模型預測最可能流失的人。
  • 二來增加了命中率,在這份名單中,投放到真正會流失的使用者的機率是沒有使用模型過濾的9.22倍。
  • 最後,這樣的名單也可以請貴公司的專業人士判斷,但是人要睡覺,機器不用。

有了這樣的解說,資料科學家們是不是覺得好多了呢 = )

你的模型怎麼預測的?

這樣的問題從資料科學家這個職位開始竄紅起來就是一個巨大的困擾,畢竟我們不太可能和非資料科學背景的人解釋entropy, information gain, 甚至是你的XGBoost針對了你自定義的目標函數取二階微分,偏偏,這些人通常都是出錢的人……

也因此,可解釋的機器學習方法(Interpretable Machine Learning Methodology)的重要性也被彰顯出來,這裡作者針對全局性解釋(Global Interpretation),以及局部性解釋(Local Interpretation)在此資料集上演示。

Permutation Importance

回到「你的模型怎麼預測的」,針對這樣的問題,我們可以提供一個全局性解釋(Global Interpretation),也就是對於所有的樣本,模型大致上表現的行為如何,來作為切入點:

這樣吧,我們現在知道,模型會吃特徵,然後給我們一份準很多倍的名單,我們把單一個特徵,全部換成沒有用的噪音(noise),然後看看模型的表現變得多差,變得越差,就表示這項特徵對於模型來說越重要,也就是所謂的Permutation Importance。

具體來說怎麼操作呢?

  • 選一項容易展示模型結果的指標,這裡我們使用上個例子中「模型預測前5%名單中的流失率/基準流失率」。
  • 計算模型的指標得分,作為基準值。
  • 對第一項特徵加入噪聲,重新計算分數,比較和基準得分的差距,差越多的表示該特徵越重要。
  • 對所有特徵做上一個操作。
X軸為模型預測前5%名單中的流失率/基準流失率(Top5% Lift) 的減少量,即為特徵重要度Y軸為各項特徵
X軸的error bar為估計得95%CI

從上圖中我們可以看到,如果把last_auto_renew這個特徵抽掉,模型分數下降的最多,對於流失率倍數的約是6.2~8.5,近乎是主導最多的特徵,依序則是一個月內的聽歌天數,六個月內的聽歌天數,看來相當的能夠和Domain Knowledge配合相互檢驗。

利用Permutation Importance,資料科學家們可以跳過模型如何優化,各種Error surface,各種優化方式,用對方能夠理解的方式,建立信任。

LIME

對於「你的模型怎麼預測的」,另一個切入點就是直接給對方看幾個例子,模型是怎麼預測的,這種方式也稱為局部性解釋(Local Interpretation)

LIME則是在2016年發表的paper - “Why Should I Trust You?”:Explaining the Prediction of Any Classifier中所提出的分析框架,對於表格化資料,他的運作方式是這樣的,我們直接看圖 :

Source : https://christophm.github.io/interpretable-ml-book/lime.html

以上是擷取 Christoph Molnar, 5–7 LIME 章節中的圖,也推薦各位讀者去看,整理相當完整,優缺比較,近期內都還在更新,這4張圖很簡潔的介紹了LIME這個框架如何做到這件事:

A : 假設一組特徵空間x1, x2, 而你的分類器邊界為淺藍色範圍。

B : 選取一個你想解釋的資料點,LIME會根據這個資料點,將特徵縮放,並且取sample,如同黑點所示。

C : 選定一組計算距離的方式(預設為歐幾里德距離),計算權重,距離你想解釋的資料點越近的,給予越大的權重,可以透過kernel_width來調整想要取到多近。

D : 拿C圖所示的這組樣本,訓練一個可解釋的模型,例如線性模型,並且得到一個近似的邊界。

透過這樣的想法,我們從需要解釋GBDT如何運作變成解釋線性模型,這是不是好多了!線性模型在數統及商管領域內都能夠被理解。

以下針對流失的使用者/未流失的使用者,個別舉個例子:

流失的例子

在上圖是一個流失的使用者的局部線性解釋,其中我對特徵名稱做了一些縮減,讓塗上能夠顯示得更好,我們可以看到,在這個case當中:

  • LA_renew (last_auto_renew)為0,表示此線性模型認為使用者上次交易並非自動更新,這佔了最大的比重在影響流失的層面。
  • 1m_day_lis(one_month_day_listen)為17,比10大,表示此線性模型認為該使用者當月內聽歌的天數比10天多,是一個不流失的因素。
  • LL_churn(last_last_churn = 0),表示此線性模型認為該使用者是連續使用者,也是一個不流失的因素。

而我們可以透過Prediction_local以及Right的值是否相近來確認該局部線性分類器的可信度,這裡顯示0.32以及0.30,是相當可信的,接著我們看一個未流失的例子:

未流失的例子

在這個case我們可以看到:

  • LA_renew (last_auto_renew)為1,表示此線性模型認為使用者上次交易為自動更新,這佔了最大的比重在不流失的方面。
  • 1m_day_lis(one_month_day_listen)為24,比19大,佔了第2大的比較再不流失的方面。
  • LL_churn(last_last_churn = 0),表示此線性模型認為該使用者是連續使用者,也是一個不流失的因素。

透過以上兩個例子,我們可以直接透過局部線性模型的係數來來了解原本複雜的分類器如何決策,也讓非相關背景的人更能了解你的模型如何預測。

結語

可解釋機器學習方法(Interpretable Machine Learning Methodology)從古早的一些方法例如Permutation Importance一直到近期的LIME,將會隨著Data Driven的風氣一起被帶起來,今天我們透過三樣工具回答了:

  • 你的模型有什麼用?
  • 你的模型怎麼預測的?

兩個關鍵問題,這使得資料科學家完成模型以外也能夠優雅的展示結果,進而建立信任、更容易地和其他部門溝通、甚至幫助案件成交,希望讀者們也有所獲得!

接下來你可以

  • 拿著自己的資料集實作一份結果展示。
  • 探索更多的可解釋機器學習方法,可以參考Reference。
  • 實際應用到自己學校的報告或是公司專案裡頭,提高展示成效。
  • 分享給對可解釋機器學習方法有興趣的朋友,讓他們也看到這篇文章。

同時我的Medium上也會繼續記錄各種我嘗試過Machine Learning的side project,如果讀者們有興趣,就按下Follow吧!

若你有任何問題,歡迎直接在下面留言,或是寄信到我的信箱yltsai0609@gmail.com ,我收到信之後會盡快回復給你,也可以在我的LinkedIn上找到我

Reference

--

--

YL-Tsai

Machine Learning Engineer with 4y+ experience | Exploring the data world | Recommendation, Search, Ad System.