回顧·深度學習的可解釋性與低頻事件學習在金融領域的研究與應用
本文根據平安人壽數據科學家董厶溢在平安人壽&DataFunTalk演算法主題技術沙龍 —「機器學習/深度學習在金融領域最新研究和應用實踐」中分享的《深度學習的可解釋性與低頻事件學習在金融領域的研究與應用》編輯整理而成,在未改變原意的基礎上稍做修改。
今天分享的內容主要從以上五個方面介紹,首先講一下主流深度學習演算法在金融領域的局限性,然後針對這些局限性所做的探索解決方案,以及在探索過程中主要圍繞可解釋性和低頻學習這兩點的展開講解。
直接進入正題講一下深度學習在金融領域其局限性表現在哪些方面。金融領域面臨的問題可能和傳統互聯網公司面臨的問題可能不一樣,比如深度學習可以大致分為三塊:卷積神經網路、遞歸神經網路、深度神經網路。其優缺點都應該很明顯,簡單講卷積神經網路對空間結構相關性的探索比較強,遞歸神經網路對時間相關性探索(時間序列)較強,深度神經網路在全局相關性探索較強。它們的主流應用都集中在計算機視覺、自然語言處理等方向,特點是先驗知識很鮮明。要識別貓或狗,其特徵很明顯,可以構建這樣的數據集,在自然語言方面,辭彙是有限的,文章也是可以無限挖掘。但是在金融領域,絕大部分沒有先驗知識的,不知道樣本的特徵區分好不好,有時通過長期的積累可能會知道知識比較明顯。比如信用方面,一個人總是不還款就有問題,這可能是一個比較好的先驗知識,但是這樣的知識非常少,無法發掘。同樣的我們無法造數據,如果要對宏觀經濟走勢的預測或股指感興趣,但是我們無法把股指造出來,不知道成交量與股指的點數到底有何關係。除了可解釋性不強外還有對專業知識的匱乏,因此在深度學習做決定時一定要知道為什麼,更願意知道模型如何做決定。
那麼圍繞這些難點如何解決這些問題呢,首先介紹下我們的難點問題。可解釋性問題、低頻時間、、稀疏性、特徵的時變性和數據的有效性,以及數據的不可擴展性,今天主要圍繞這兩個點,其他四個點也是很重要的。在可解釋性方面的探索分為兩個方面:局部特徵探索和敏感性分析,這兩者是相輔相成的,局部探索其實是對可解釋性做了不可磨滅的貢獻,今天主要介紹一些樹類的貢獻。敏感性分析主要在方差分析演算法上面,低頻學習有很多類別可以做,今天主要是圍繞助力機制,主要介紹一些最新的研究情況。
首先介紹樹模型為什麼在可解釋性方面做了很多貢獻,之所以不說作用因為它不是直接在這個體系起到可解釋性的作用,但是它可以做一些解釋。目前演算法主要分為深度學習和非深度學習,主要圍繞決策樹。深度學習擬合能力非常強,但是解釋能力較差;決策樹可解釋、訓練快,但是擬合能力受限。之前兩個流派很對立,後來兩者去相互學習,利用各自的優點。如在解釋方面Jefreeheten提出asab Tree演算法,大致學習深度學習在圖像學習如何做預測和分析,做樹模型也在擬合能力方面做出相應的探索。還有阿里巴巴、以及其旗下的賣金服在樹模型探索和與Deep learning結合方面也做了很多工作。結合我們自身,我們的解決思路是利用樹模型很好地可解釋性對局部的探索能力去挖掘特徵,將價值發揮到最大,深度學習去探索局部特徵還是有一些問題,主要是低頻特徵影響。利用混合架構wide&deep或者其他對稀疏化或者稠密的數據進行學習,最後利用敏感性分析對其進行解釋,對預測值歸類的依據是什麼。為什麼不直接利用深度學習對其敏感性進行分析呢,敏感性分析有一個問題就是重要性差異不大,敏感性不強。而且在金融領域有個特點就是沒有先驗特徵,很難有明顯特徵區分類別,這也是樹模型所起的作用。
接下來介紹下如何將樹模型利用到極致。Wide&Deep模型是16年提出的,將稀疏數據和稠密數據聯合訓練,找到低頻特徵,我們就是基於這個思想實現相關演算法和模型。不同的樹模型有不同的特點,但是很多演算法都是基於GBDT演算法,以chartputs為例,涉及不同的subsimpling和subcorling局部特徵採取和垂直種子選取,最後結果是完全不一樣,因為會從很多角度去挖掘不同數據組合信息。那能不能將所有演算法都拿來使用呢,如同周志華教授提出在gcForest中不外乎兩條樹是完全隨機的,可以有更大的探索空間。我們也是盡量用所有不同的模型,將相似的節點合併構成一個知識庫,這個知識庫有很多無向邊將之間的特徵關係連接,與節點配合形成一個大的體系。這樣做的一個好處就是可以忽略演算法、數據,而在知識庫中絕大部分的特徵是無用的,會有很多干擾。
我們的業務範圍大都幾種在金融領域,金融領域有個特點就是數據有時變性,幾乎沒有一個特徵是穩定的。因此我們可能會做一個簡單的篩選,一般用規則法和評分法將明顯無效特徵做一個篩選。其核心就是分布的穩定性以及重要性的穩定性和良好的趨勢性,評分法能夠更加量化,有些時候很難衡量分布穩定和重要性穩定該取什麼樣的比值,最後直接用評分法打分。有時訓練一個模型會引入上百個樹模型,支點會有很多,葉子節點有時會有幾十萬個,就算通過篩選也會有幾萬個特徵,如果進入深度學習會崩潰。因此還要進行進一步的篩選,藉助的是Auto-Encoder編碼器壓縮,目的是去掉比較相似的特徵。雖然很多演算法不同,但是其分裂方式是很相似的,會找到很多相似的葉子節點,引入的模型越多,產生的相似節點就越大。以兩個相同的GBDT模型引入差異參數最後會產生1-2%的相似葉子節點,重要的葉子節點重複會嚴重影響模型精度,權重估計也會出現很大的偏差。就會出現你認為這兩個東西很重要,但是這兩個特徵確實相似的。在金融領域描述一個問題,感覺是從不同基礎數據衍生出來,但是其邏輯可能會是一樣的。
基於上面這個問題,我們基於Wide&Deep架構依據自己業務需求構建了一些模型架構Conditional Multi-Fields Deep Neural Network。將稀疏化的數據做一個壓縮,取得Auto-Encoder編碼器壓縮的中間隱藏層作為輸入,正常稠密格式就用正常格式,如果有時間連續的特徵會有skm做一個embedding,然後利用DNN進行訓練。雖然架構有很多模型,但是並不需要使用所有模型,有時只用左邊的模型就能滿足需求。如果直接利用Google的原始架構Wide&Deep演算法,不同的模塊運用不同的優化演算法,如果權重更新調整不好,整個訓練過程會出現很大的擾動,會出現距離的波動,很難出現穩定狀態。這樣出現的原因是在聯合訓練時梯度更新不一致,會出現左邊調整好出現一個擾動就會破壞左邊的穩定,最後通過coding later去限制優化的比例,使更新的比例盡量一致。
敏感性分析偏統計方面,在工業領域用的比較多,在純計算機領域用的比較少。一個輸入性的變動擾動,輸出是怎麼樣變動、以及變動的程度是怎麼樣的,這種情況敏感性分析用的比較多。敏感性分析用的不多但是並不陌生,如線性回歸,在信用卡評分模型中,對特徵做WE分箱,會用線性回歸,會看權重判斷輸入對輸出的影響程度是多少,這也是敏感性分析的一部分。再者再深度學習,對抗樣本在圖像識別的干擾作用,背後也是利用的敏感性問題,再深度學習領域會將局部權重無限放大,會出現顯著特徵,如果攻擊點正好對應顯著特徵,結果會出現很大的偏差。
Worst case analysis、可靠性分析這兩個分析更偏工業性些,在金融領域比較罕見。敏感性分析在工業領域尤其是量化領域應用較多,引入敏感性分析目的就是解釋黑箱的DN。DNN也是一個黑箱問題,知道大概機理,但內部如何運作原理不清楚。其實在這塊早就有研究,真正火起來是在15年,《Sensitivity Analysis for Nerual Network》的作者在10年就提出來,講述了如何利用敏感性分析去闡釋神經網路。敏感性分析目的是將變數的敏感度量化起來,規劃為線性回歸的模式,提供重要性指標,利用線性加權。常用的方法有偏微分、回歸模型、One-At-A-Time、方差分析、散點圖、Meta-model,前面三個為一階分析,變數對其自身變化敏感性分析,這樣應用的假設是變數之間基本沒關係。在金融領域變數間基本都有關係,會用到方差分析和Meta-model,散點圖是為了直觀分析。這是為了適應應用場景非線性、局部相關性(局部高階)、高緯度、可量化、模型複雜、難解釋,今天主要是將Analysis of Variance和Gaussian Process,這兩塊可以獨立模塊,後續會將其聯合講解。
方差分析理論基礎是任何一個模型都由一些常量關係加一些單變數輸出以及變數兩兩輸出等,比如輸入一個X,輸出一個Y,fn是差值,如果擾動xi, fi是如何變化的。如果把所有的方差放在一起,改變一些參數,輸出擾動變化程度是多少,這就是方差分析的工作。方差分析由於輸入的參數不同,最後會有很大差異,因此利用Sobol Index技術將其歸一化,就是用求出的方差與自身方差做比值。方差分析的優點:適用於複雜非線性模型,敏感度可以被量化,取值範圍通常在[0-1],可以細化到對某個參數/變數取值區間敏感性進行度量,能衡量依賴關係;缺點是:需要足夠多的數據才能保證計算精度,隨著維度增加,需要的數據也指數級增長,對重要性不夠強的變數/參數區分能力較弱。
針對方差分析的缺點如何解決呢,嘗試用一個模型去描述模型的分布情況,用一個模型去監測變化的狀態,利用一個模型學習模型進行替代。這樣的模型有很多,我們選擇是Gaussian Process,它輸出的是你輸入一個變數所產生的期望的均值以及方差,這也是敏感性分析所需要的信息。不用樸素貝葉斯或者其他原因是我們的對象是複雜的非線性模型,樸素貝葉斯擬合能力有限,Gaussian Process需要設置很多的操作樹和function,這些function是為了擬合變數的均值和不同情況出現的方差,能夠很好地擬合現實中的分布。其原理是基於樸素貝葉斯,將變數進行了更複雜的空間映射,找出後驗的權重分布,用Inference 去估算由輸入/參數改變帶來的輸出在分布上的改變,其具體原理和思路可以參考論文《Probabilistic Sensitivity analysis of system availability using Gaussian Process》。敏感性分析核心就是輸入的變化對輸出有怎樣的改變,可以用很多方法得出近似的重要性。深度學習如果從機理上證明是很困難的,大都是在選取適合自己業務情況下用不同的方法去闡釋。
低頻事件在金融領域太過常見,在做量化股指期,需要對拐點期進行預測判斷,拐點出現的次數非常少,特徵也很模糊。在反洗錢領域,拐點出現也很稀少,但是有些特徵會很明顯,如果直接拿模型去學習是無法得到結果的。我們之前一直嘗試用attention做低頻事件學習,但是有一個難點低頻事件很難出現,而且很多是基於先驗知識,在金融領域先驗知識又很少。近期由谷歌研究員提出的《Attention is all you need》與 Deep Mind 團隊的研究成果《Relational recurrent netrual network》將Attention機制對特徵記憶的延續性做更好的探索。這兩篇文章主要解釋的是時序相關,但是我們領域不需要關注時序相關,只對某一些我總分錯有很重要的數據樣本感興趣。為了提高對低頻事件的學習能力,我們基於上述研究成果設了一套的適合自己的演算法,目的為了將容易被分錯的重要的小數據樣本中的顯著特徵進行學習,並將學到的特徵進行保留與傳承。我們將該演算法稱為《Low Frequent Events Detection with attention mechanism》。Scaled Dot-Product Attention很早就開始用了,就是給你一個請求,對應會有一些key,觀察每一個query對key的響應程度是多少,將這種影響隨value傳遞下去,最後改變value實際輸出值。Mult-Head Attention是多個組合,做了一些線性變化,目的使特徵更加豐富。
在《Relational recurrent netrual network》中利用了memory core機制,給一個以前對數據特徵分布情況,給一個當前輸入情況,兩個一起考慮學習。這種如何和我們低頻事件學習相結合呢,attention機制是對query形成一個key矩陣,然後計算權重歸一化處理去影響輸出值。我們的模型是對一個輸入,經過MLP最後輸出結果,加入attention機制後,在MLP模塊會做一個二分類,將中間的embedding提出來進入discriminator,機制類似於gate網路。利用其它特徵去判別那些分對了哪些沒分對,就可以知道你對那些樣本敏感那些不敏感,通過設置閾值,將分錯的特徵放到memory core中學習進行修正。找到那些分錯的獨有的但又有共性的特徵來糾正,對output進行糾正,這就是模型的整個思路。MLP是中間隱藏層出現的embedding,利用discriminator進行分類,從空間改變樣本分布情況。
在整個優化過程中分為三塊,一個是正常MLP優化過程,discriminator優化過程,以及MC優化過程。分為三個損失函數,第一個實際真是情況,第二個是分沒分對的情況,經過mc優化後擬合的真是情況。模型訓練需要注意的事項有:(1)由於第二個損失函數需要依賴於模型的預測結果。因此模型的訓練過程由3個獨立的模塊非同步訓練。(2)由於各個模塊的目的不一樣,因此所用到的優化演算法和優化策略所有不同。(3) 選擇合適閾值t對模型訓練很重要(推薦t>0.8)。(4) 選擇適當數量的Query和keys。(5)MC模塊僅會使用滿足判別器要求的樣本。(6) 各個模塊訓練開始時間不同:當MLP訓練模塊趨於穩定時,激活discriminator的訓練;當discriminator訓練趨於穩定時,激活MC模塊評估的方法主要有:Discriminator的評估除了看損失值以外,還需要監控Accuracy的變化。損失函數(1)與損失函數(2)之差可用於評估MC模塊的作用。
下面介紹一個案例,壽險內部某推薦任務,2分類目標(0或1),樣本總量170W,目標樣本39W,不算很低頻。演算法架構:主框架基於Conditional Multi-Fields DNN, 稠密數據部分使用了:(1)DNN(2)Attention Mechanism 訓練細節:在引入Attention機制後,在MLP模型訓練到1000步後,激活了判別器(Discriminator),並對判別器進行了預熱訓練。在判別器Loss穩定後,激活MC模塊並進行預測訓練。隨後模型每輪進行非同步更新。基本很平穩沒啥區別,但是單看accuracy慢慢增長說明模型取得一定效果,但是沒有證明要達到多少才能證明有效果,目前定義要高於本身MLP準確效果。同時difference改變越來越大就說明memory模塊起作用。
模型結果(1)由於數據樣本的標籤並非1:1關係,基於數據的基準準確率為77.06%;(2)利用DNN處理稠密數據時,模型整體準確率為82.35%(得分前23%的預測樣本為正樣本)。但是不是按0.5,需要根據樣本實際情況定義閾值;(3)其中正樣本的預測準確的樣本約為24W,準確率約61.53%;負樣本預測準確率為88.54%;(4)判別器能夠準確區分91.04%的樣本被判斷對錯的情況。換句話說,在被錯誤歸類的樣本中,有8.96%的樣本在當前低維映射空間下與被歸類正確的樣本極其相似;(5)從結果(2)和(4)的結論中可以得出,有機會被MC糾正的樣本量的上限為8.69%;(6)經過最終統計,有6.97萬的樣本通過MC得到的糾正。佔總樣本的4.1%。其中正樣本佔2.1萬。得到糾正的正樣本佔總正樣本的5.38%。
最後總結一下演算法局限性:低頻事件的挖掘一定需要和實際情況結合起來,不是所有的場景都適合使用此類演算法。歸納起來,需要滿足以下情況時,才可以考慮使用該演算法。① 低頻事件需要有一定的數量(飽和度不能過低)且存在共性② 低頻事件的特徵不能與高頻事件的特徵過度相似③ 主模塊(MLP)的準確率不能過低④ 判別器(Discriminator)的分類效果需要保持一定的精度,至少應該稍大於模型整體的預測準確率。但是演算法也有很多優勢, 與單一的attention結構相比,有以下優勢。① 採用判別器,將樣本進行區分,主要針對被錯誤歸類的樣本。而非直接使用Attention模塊。② MC模塊僅對小量且重要的樣本進行學習,而非整個數據集,降低了學習難度,提高了學習的效率。③ 非同步訓練使得訓練更加穩定,針對不同的網路結構、數據結構與功能採用不同的優化策略。④ 記憶模塊將對整個低頻數據集的特徵進行學習,並將學習到的信息有效的傳遞下去,從而更有效的對數據特徵特點做出區分,增強泛化性。
推薦閱讀:
※指針數組的使用
※科技如此進步,是善還是惡?
※iPhone X之後是什麼?——2018年新iPhone:照片、價格及傳聞
※《福布斯》最新科技富豪榜:蓋茨居首 內地19人上榜
※一個誠實的錯誤:《新英格蘭醫學》首次撤稿重刊調查
TAG:深度學習DeepLearning | 科技 | 自然語言處理 |