無法落地的 GBDT
12 人贊了文章
FBI WARNING: 本文默認讀者已經熟悉 GBDT 演算法以及常用信用評分卡的原理,文中的estimator
和樹
是同義詞
本文首發於我的個人博客
一般來說,那種僅僅簡單介紹一下某種演算法的原理的泛濫文章,我認為沒有必要去寫(主要是插入公式和圖表很麻煩),只有在演算法原理上產生了一些 insight 的時候我才會想要寫介紹原理的文章。這篇文章主要想要講的也不是標題中的 GBDT,而是 落地。
自從 fico 那套基於 logistic 回歸的成熟評分卡模型體系被成功地推向整個行業,信貸/消費金融行業的建模門檻開始變低,即使一個人沒有任何的知識儲備和建模經驗,也可以在較短的時間內使用簡單的動態語言(R/python/julia)做出信用評分卡模型的 prototype,這就導致業內很多人對除了 logistic 回歸之外的其它演算法沒有任何了解。
當然不是所有人都願意固步自封,對於想要進一步了解機器學習的人來說,下一個可以輕易掌握的演算法是決策樹。這個時候問題來了:在所有非深度機器學習演算法中,再也找不到像 logistic 回歸和決策樹這麼簡單的演算法了。 有些純樸上進的年輕朋友會因為沒有時間精力進一步鑽研其它演算法(尤其是那個名字聽起來很 cool 的 GBDT)而陷入深深的知識焦慮,但看過本文之後應該可以平息這種焦慮。
因為 GBDT 這種玩具模型在信貸/消費金融行業真的沒有用。
Table of Contents
- 演算法落地背後的套路
- 技術實力與演算法深度
- 應用廣泛的簡單線性模型
- 人為政策與數據決策
- GBDT 會遇到哪些問題
- 技術實現難度
- 可解釋性
- 模型的精度
- 衍生數據體系
- 總結
- 延伸閱讀
- 關於模型的可解釋性
- logistic regression PLUS GBDT
演算法落地背後的套路
技術實力與演算法深度
在所有的機器學習演算法當中,或者把範圍說得更廣一點,在所有的數學模型當中,有這樣一些模型,既沒有頂尖的應用效果,也不具備簡明通透的解釋性,這種地位尷尬的模型唯一的作用就是啟發思路。
在國內除了純技術驅動的公司,大多數行業,都只能在 OLAP 的基礎上使用一些簡單的模型。要使用更複雜的模型,會面臨多方面的阻礙。一個會被最先想到的原因就是技術實力不足,例如,即使有了 TensorFlow 這種現成框架,大多數公司依然沒有將複雜神經網路推向實際應用環境的技術實力。基於這個原因,一些三方 B2B 公司應運而生,一些 B2B 公司提供的企業級服務就包括幫助技術實力不足的公司在實際場景中使用一些較為複雜的機器學習模型。
應用廣泛的簡單線性模型
由於技術驅動的三方公司的出現,技術實力不足的問題在一定程度上得到了解決,比如某家業務公司會把其 APP 上的人臉活體識別這種高技術含量的任務交給三方公司來完成。但另一方面,一旦涉及到與業務緊密聯繫的數據模型,事情的性質就有了微妙的變化。以信貸行業來說,相對成熟的信用評分卡模型會將客戶的多個指定屬性(變數)進行離散化(分箱),然後根據客戶在這個屬性上的類別給客戶加上一個分數。比如,對於年齡這一個屬性,評分卡模型賦予各個年齡段的分數為:
假如某一名客戶的年齡是 44 歲,那麼這名客戶屬於評分卡模型中 over 40
這個年齡組,於是這名客戶在 年齡
這個屬性上的得分為 15 分。對於其它屬性也採用的相同的操作,最後客戶在信用評分卡每一個屬性上的得分之和即為客戶的總分,這個總分的大小可以在某個向量空間中反映客戶的資質好壞。儘管信用評分卡中每一個屬性中各分組的具體分值都是通過 logistic 回歸以及一些轉換得到的,並且 sigmoid 函數的非線性特性也可以(但並不總是)體現在分割客戶總分的閾值上,但這個評分卡總的來說還是在試圖用線性分割的方式來解決客戶的二分類問題,這是由 sigmoid 函數的特性決定的。至此,我們會很自然地思考一個問題——非線性模型是否會有更好的表現?遺憾的是,儘管這個問題的答案為「是」,但線性模型在實際場景中的地位不會因此動搖。
人為政策與數據決策
在同一個數據集上,使用一些非線性分類模型往往能夠取得更好的效果,但即使擁有足以在實際場景中使用這類模型的技術實力,要在信貸行業推行這類模型依然有很大的阻力,這些阻力總結起來,都可以歸結為數據決策與業務人員 KPI 的衝突。舉例來說,假設有兩個業務人員 A 和 B,他們都在某段時間內找來了 10 名他們認為資質合格的借貸客戶,可是 A 的 10 名客戶有 5 名被數據模型判斷為高風險客戶並且直接拒絕掉,而 B 的 10 名客戶都順利通過了模型的篩選,這個時候數據模型就嚴重妨礙了 A 的提成。當上述語境中的 A 不再指單個人,而是指某個分公司,甚至是業務人員整體的時候,A 擁有的話語權就足以要求模型的制定者給出一個合理的解釋,如果不能給出令人信服的解釋有可能導致嚴重的後果。
上述場景是在現實中經常發生的,因此對於信貸行業的數據模型來說,不論想為了模型精度採取何種策略,都只能在不損失模型解釋性的前提下進行。這也是 fico 那套信用評分卡模型受到整個行業廣泛認可的原因,因為它在具有很強解釋性的同時提供了可以接受的精度,並且還可以衍生出一套數據報表、客戶畫像等等,這些亂七八糟的衍生品究竟產生了多大的價值這裡先不討論,總之這一整套體系確實能給人一種數據模型與實際業務血水交融的直觀感受。其它的演算法想要真正取代它,光憑在測試集上的漂亮效果根本不夠,還必須在保證解釋性的前提下拿出一整套嵌入業務脈絡的衍生數據體系才行。另外,如果公司在戰略上有一些別的要求,比如模型拒絕率要低於百分之十,那模型為了滿足公司戰略上的需求就不得不做出一些修改,導致損失函數的能量無法優化到最小。
GBDT 會遇到哪些問題
總結一下前面的內容,一種數據模型要能夠在信貸行業落地應用,需要滿足以下幾點:
- 技術上的實現難度不能太高
- 較強的可解釋性
- 可以接受的精確度
- 衍生數據體系
接下來就以經常被大家念叨的 GBDT 作為例子,分析一下它能否滿足上面幾點要求。
技術實現難度
首先,要把模型的訓練過程與調用過程這兩個概念區分清楚,因為訓練過程複雜的模型其調用過程可能很簡單。比如以下兩個模型:
- A 模型:使用標準梯度下降法訓練一個 logistic 回歸模型
- B 模型:使用 lbfgs 擬牛頓法利用損失函數的 hessian 矩陣迭代優化損失函數來訓練一個 logistic 回歸模型,損失函數中加入 L2 正則項,配合超參調整演算法尋找最優正則懲罰力度,並且在樣本數與特徵數之比較小的時候採用對偶方法
在上面的例子中,儘管 B 模型在訓練時使用了更為複雜的方法,但當 A、B 兩個模型訓練完成進行調用的時候,都只需要用權值向量跟樣本特徵簡單地做個點積。
因此,在不需要考慮做模型在線學習的情況下,模型的落地技術難度完全是由模型的調用過程決定的。一個模型的調用過程要簡單,基本就被定死在線性組合和簡單的條件語句上了,比如傳統的信用評分卡的調用形式即是如此。
GBDT 的訓練過程雖然是一個略顯繁瑣的串列過程,但它的調用過程是完全可以做成條件語句+線性組合的形式的。如果真的去做了這件事,就會遇到以下矛盾:
- 為了保證可解釋性,GBDT 中的每個 estimator 的深度只能為 1
- 為了保證模型能有良好的效果,深度只有 1 的 estimator 是根本不夠用的
???
可解釋性
首先,假設我們的原始數據集有 20 個特徵,然後我們使用一個有 20 個 estimator 的 GBDT 模型對這個數據集進行訓練,最後得到了 20 個深度為 1 的決策樹以及一組權值,每個決策樹僅對應一個特徵;當然,在這 20 個特徵中可能會有某個特徵對應了多個 estimator,導致有的特徵根本沒有被 GBDT 用到,假設有 3 個特徵沒有被 GBDT 用到。
要把這個訓練完成的 GBDT 模型轉化為類似評分卡的形式,就需要 17 個被 GBDT 用到了的特徵。假設這 17 個特徵中有一個是 年齡
,並且在全部 20 個 estimator 中,共有 2 個決策樹涉及到了 年齡
,並且分裂狀態和對應的權值如下:
如果某個樣本的 年齡
小於 25 歲,那麼這個樣本作為 GBDT 的輸入時,最終輸出裡面 年齡
的貢獻為:0.4 x 0.2 = 0.08
同理,當 年齡
介於 25 和 40 歲之間時,最終輸出裡面 年齡
的貢獻為:0.6x0.2 + 0.3x0.1 = 0.15;大於 40 歲時,這個值變為 0.7 x 0.1 = 0.07
基於這種計算,將上面這個 GBDT 轉化為類似評分卡的形式時,對於 年齡
的打分可以是下面這樣:
接下來只需要對分數進行一些量綱、區間、閾值的處理,一個簡單的信用評分卡模型就算完成了。從上面對於 年齡
的打分表格中可以看出,最終拿出的模型不僅技術實現難度低,而且可解釋性也比較強,看起來似乎已經大功告成了。
模型的精度
我們在上面把一個包含 20 個深度為 1 的 estimator 的 GBDT 模型轉化為了一種評分卡的形式,接下來就需要檢驗模型的效果了。
如果你真的去做了這件事,就會發現它的效果相當差。通過增加 estimator 的個數可以少許提升,但繼續增加便沒有效果了。通過分析 GBDT 的調用過程就會發現,由於每個 estimator 的深度為 1,只能涉及一個特徵,所以不管再怎麼增加 estimator 的數量,最後只能得到一個徹頭徹尾的線性模型。
在常見的二分類問題上,這種模型的精度甚至比不上一個普通的 logistic 回歸。因為這樣的模型所能做的僅僅是將單個特徵離散化,給離散化後的分組賦予不同的權重(分數),然後簡單地相加。所有這些事情,logistic 回歸同樣能做到,並且 logistic 回歸還多出了一個 sigmoid 非線性激活函數,所以當 GBDT 中的 estimator 最大深度只有 1 時,它的軟閾值表達能力是嚴格小於 logistic 回歸的。
那麼增加 estimator 的深度呢?如果嘗試過增加 estimator 的最大深度,哪怕只是增加到 2,GBDT 的模型效果立馬有了大幅提升,超過了 logistic 回歸。因為當深度為 2 時,一個 estimator 可以涉及最多兩個特徵,產生最多 4 個衍生特徵(葉子節點),可以這樣理解:每個 estimator 都將兩個變數離散分割後做了一次笛卡爾積,然後多個 estimator 組合後得到最終輸出,此時的 GBDT 已經不再是簡單的線性模型,它具有了較強的非線性表達能力,整個模型的效果也因此有了飛躍。可以說,樹的最大深度從 1 增加到 2,讓 GBDT 的模型效果有了質變。
但與此同時,隨著樹的最大深度增加,GBDT 的可解釋性也有了質變。
由於單個 estimator 的結構發生了變化,我們不再使用原始的特徵粒度,對於 GBDT 中的某一顆樹來說,我們從上面得到的可能是這樣的:
年齡小於 25 歲 && 月收入大於 10000 元
這樣的衍生特徵就完全喪失了可解釋性,不可解釋的模型在這一行業會導致的不良後果,前面已經列舉過了。並且,由於一顆樹就會產生大約 4 個衍生特徵,整個評分卡的總特徵數會很輕易地超過三位數,而我們的原始數據可能只有二十來個特徵,這就增加了模型落地的技術難度。
衍生數據體系
在樹的深度為 1 時,GBDT 具有可解釋的粒度以及連續的回歸輸出,理論上說,凡是能從基於 logistic 回歸的傳統信用評分卡上衍生出來的數據體系,也都可以從這樣的GBDT 上面得到。問題在於深度為 1 的 GBDT 效果差勁,而增加深度之後,可解釋性、衍生數據體系會全部化為烏有。
總結
如果身處信貸/消費金融行業的你目前正陷入一種深深的知識焦慮中,看過本文完全可以心安理得地放棄去啃 GBDT 的原理
上面是開玩笑的 。
一個數據模型,除了結合實際業務之外,在建模的過程中,要麼折騰特徵,要麼折騰模型;大多數人覺得自己沒有能力折騰模型,只能折騰特徵,就是因為把注意力都放在了訓練過程里一些非常複雜的奇技淫巧上,正確的做法是轉移注意力,從調用過程來思考問題,這才是初學者正確的思考順序,也是本文主要想展示的東西。
延伸閱讀
關於模型的可解釋性
想要看到對於可解釋性更全面的解讀,可以看看這篇文章:機器學習模型可解釋的重要及必要性
logistic regression PLUS GBDT
GBDT 和 logistic 回歸是本文主要提到的兩種模型,這兩種模型有一種很有意思的組合使用方法。在互聯網廣告點擊率預估領域(簡稱CTR 預估),有一種方法是利用 GBDT 構造新特徵來作為 logistic 回歸的輸入,算是一種 non-voting 集成方法。這種方法最早由 Facebook 在 2014 年發表的這篇論文中提出:
Practical Lessons from Predicting Clicks on Ads at Facebook
推薦閱讀:
※信貸經理做到這三招,業績滾滾來!
※刺激政策顯效:中國6月新增信貸創年內次高 M2增至11.8%
※等額本息和等額本金到底怎麼選擇
※暫停銀信合作 信貸調控新彈上膛
※小心被下屬綁架