編輯整理:帖雨薇 小米
出品平臺(tái):DataFunTalk
導(dǎo)讀:隨著公司業(yè)務(wù)的不斷擴(kuò)大,包括金融領(lǐng)域在內(nèi)的各個(gè)領(lǐng)域中,逐漸積累了大量的時(shí)序數(shù)據(jù),通過(guò)時(shí)序數(shù)據(jù)建立模型和制定策略能為業(yè)務(wù)提供有效地幫助。目前,在面對(duì)日益增長(zhǎng)的數(shù)據(jù)量和復(fù)雜度,依靠人工衍生處理特征效率低,局限性大。因此采用深度學(xué)習(xí)挖掘時(shí)序數(shù)據(jù)特征,使得時(shí)序數(shù)據(jù)在多業(yè)務(wù)場(chǎng)景的應(yīng)用中,帶來(lái)對(duì)模型效果的明顯提升。
本文會(huì)圍繞以下四點(diǎn)展開(kāi):① 業(yè)務(wù)背景;② 業(yè)務(wù)效果;③ 系統(tǒng)框架;④ 模型算法。
首先和大家分享下時(shí)間序列模型在金融領(lǐng)域應(yīng)用的背景。
1. 時(shí)間序列數(shù)據(jù)的現(xiàn)狀
我們知道在隨著公司業(yè)務(wù)的發(fā)展,會(huì)積累大量的結(jié)構(gòu)化和非結(jié)構(gòu)化的時(shí)序數(shù)據(jù),例如:
設(shè)備埋點(diǎn)數(shù)據(jù):APP中捕獲的用戶的行為數(shù)據(jù);
傳統(tǒng)的人行征信數(shù)據(jù):用戶過(guò)往在個(gè)銀行等機(jī)構(gòu)的不同時(shí)間的查詢、借貸記錄;
客服互動(dòng)數(shù)據(jù):用戶和客服之間不同時(shí)間的溝通信息。
2. 時(shí)間序列數(shù)據(jù)應(yīng)用的過(guò)去、現(xiàn)在和未來(lái)
行業(yè)內(nèi)面對(duì)時(shí)間序列類數(shù)據(jù)的主流處理方式為人工衍生,衍生出類似近三個(gè)月、近一年等對(duì)字段進(jìn)行加總的特征,通過(guò)加工好的特征再構(gòu)建業(yè)務(wù)模型。這種方法在應(yīng)用時(shí)間序列數(shù)據(jù)時(shí)會(huì)存一些問(wèn)題:
特征處理效率低,思路局限,類似于設(shè)備埋點(diǎn)數(shù)據(jù),時(shí)間戳的顆粒度達(dá)到毫秒級(jí),手工衍生特征十分稀疏,且單個(gè)特征的iv極低,難以建立有效的評(píng)分卡;
在大量特征加工中可能會(huì)出現(xiàn)維度爆炸,繼續(xù)衍生手工特征的邊際價(jià)值越來(lái)越低,導(dǎo)致模型效果達(dá)到瓶頸。
因此,目前采用深度學(xué)習(xí)方式跳過(guò)人工處理這一步,直接給業(yè)務(wù)模型賦能,提升業(yè)務(wù)模型效果,具體從以下三點(diǎn)實(shí)現(xiàn):
使用深度學(xué)習(xí)序列模型豐富了對(duì)時(shí)序數(shù)據(jù)的表征,補(bǔ)充了手工特征未充分挖掘的信息;
加入了embedding和attention技術(shù),提高了序列模型表征能力,增強(qiáng)了模型對(duì)業(yè)務(wù)指標(biāo)的貢獻(xiàn);
建立了一套泛用型時(shí)間序列模型框架,完成了相應(yīng)的工程化代碼。
在未來(lái),時(shí)間序列數(shù)據(jù)還會(huì)發(fā)揮更重要的作用,希望可以建立一整套時(shí)間序列數(shù)據(jù)的應(yīng)用體系,實(shí)現(xiàn)從數(shù)據(jù)端到業(yè)務(wù)端的端到端處理;完成手工特征與深度學(xué)習(xí)互補(bǔ)共生的數(shù)據(jù)生態(tài)體系,實(shí)現(xiàn)更有深度的人機(jī)交互。
接下來(lái)具體展示一下目前自研兩個(gè)模型的效果,分別是人行征信模型和埋點(diǎn)行為模型。
1. 模型效果
首先,針對(duì)人行征信數(shù)據(jù)和埋點(diǎn)行為數(shù)據(jù)分別訓(xùn)練baseline模型,baseline模型為目前線上使用中的業(yè)務(wù)模型,時(shí)序數(shù)據(jù)的特征衍生依賴人工的業(yè)務(wù)經(jīng)驗(yàn),主要應(yīng)用于貸前審核和反欺詐場(chǎng)景。
然后,用深度學(xué)習(xí)模型對(duì)同樣的數(shù)據(jù)挖掘訓(xùn)練stacking模型,stacking模型是挑戰(zhàn)者模型,除了baseline用到的特征,它還加入了時(shí)間序列模型的評(píng)分作為特征,在auc和ks上都有比較明顯的改善,提現(xiàn)了時(shí)間序列模型的邊際價(jià)值。
以下兩類模型的具體效果:
2. 工程效果
現(xiàn)階段已將以上一套自研算法集成為python包,適用于大部分時(shí)間序列表單處理,可實(shí)現(xiàn)將數(shù)據(jù)簡(jiǎn)單處理后就能實(shí)現(xiàn)建模,是一個(gè)自動(dòng)化極高的模塊,實(shí)現(xiàn)了:
高泛用:同一套代碼適用于不同場(chǎng)景和數(shù)據(jù)源,無(wú)需修改源碼即可完成模型訓(xùn)練;
高集成:集成數(shù)據(jù)預(yù)處理模塊與深度學(xué)習(xí)推理模塊,實(shí)現(xiàn)從原始數(shù)據(jù)到模型結(jié)果的端到端處理;
高效率:模塊高度自動(dòng)化,幾乎不需要特征工程,只需簡(jiǎn)單配置,訓(xùn)練無(wú)需人工干預(yù)。
這部分介紹整體的系統(tǒng)框架,以及算法的嵌入方法。
1. 上線方案
如上圖所示,整個(gè)框架是分為模型訓(xùn)練以及業(yè)務(wù)真實(shí)上線兩大部分。在訓(xùn)練部分,首先需要將整個(gè)時(shí)間序列數(shù)據(jù)的字段進(jìn)行配置,配置后自動(dòng)生成預(yù)處理模塊,將原始表單數(shù)據(jù)轉(zhuǎn)化為pytorch可以識(shí)別的tensor,pytorch模型會(huì)進(jìn)一步訓(xùn)練、評(píng)估、調(diào)優(yōu)。模型訓(xùn)練結(jié)束后,在訓(xùn)練部分的預(yù)處理模塊和pytorch模型會(huì)直接嵌入到線上的系統(tǒng)中,換句話說(shuō),將預(yù)處理模塊和pytorch模型處理線上數(shù)據(jù)生成子模型分,與之前特征平臺(tái)的衍生特征進(jìn)行融合,生產(chǎn)新的模型(任意業(yè)務(wù)模型),最后導(dǎo)入到?jīng)Q策引擎中。這種處理方式,不會(huì)破壞系統(tǒng)原有的結(jié)構(gòu)。
2. 業(yè)務(wù)適配
具體介紹一下這套框架的實(shí)現(xiàn)。
這套框架的建立之初,目的是實(shí)現(xiàn)更好的人機(jī)交互。如上圖所示,首先需要人確定使用場(chǎng)景、尋找相應(yīng)客群、定義事件、針對(duì)不同事件選擇字段,將上述內(nèi)容配置好以后傳輸?shù)脚渲闷髂K,配置器模塊生成一個(gè)預(yù)處理模塊對(duì)表單數(shù)據(jù)進(jìn)行預(yù)處理轉(zhuǎn)化,最后將轉(zhuǎn)換好的數(shù)據(jù)和模型一起進(jìn)行訓(xùn)練、評(píng)估、調(diào)優(yōu)。
04
1. 技術(shù)處理
舉個(gè)數(shù)據(jù)預(yù)處理的例子:上圖中第一個(gè)表單是從人行報(bào)文中截取的一小段原始數(shù)據(jù),每一行為一個(gè)事件(item),每一列是一個(gè)字段(field),是一個(gè)完整的時(shí)間行為序列表單。下一步,需要將表單歸納總結(jié),進(jìn)行標(biāo)準(zhǔn)化處理,將類別行變量映射到編碼上,時(shí)間型變量進(jìn)行時(shí)間間隔提取,時(shí)分秒的拆分以及標(biāo)準(zhǔn)化,數(shù)值型變量進(jìn)行歸一化處理。接下來(lái)將已經(jīng)處理好的數(shù)據(jù)轉(zhuǎn)化為tensor數(shù)據(jù)用模型編碼器編碼,即得出每個(gè)事件的編碼,至此處理完成的數(shù)據(jù)供任何模型使用。
2. 模型框架
接下來(lái)介紹一下模型框架。舉個(gè)例子:一個(gè)用戶的原始數(shù)據(jù)是一個(gè)表單,將表單預(yù)處理為pytorch可以識(shí)別的tensor,縱向是事件,橫向是字段,第一步,需要對(duì)數(shù)據(jù)的每一個(gè)格進(jìn)行embedding,生成一個(gè)三維張量,進(jìn)一步對(duì)張量進(jìn)行壓縮,壓縮過(guò)程分為兩步,首先使用Filed Aggregation對(duì)字段進(jìn)行壓縮,得到一個(gè)事件的單獨(dú)向量,再使用Item Aggregation對(duì)時(shí)間維度進(jìn)行壓縮,最后將整個(gè)時(shí)間序列轉(zhuǎn)成向量,最后用一個(gè)全連接層轉(zhuǎn)化為模型的輸出。
① 模型框架-Embedding
下面具體介紹一下算法框架中的Embedding部分,第一步對(duì)類別型變量進(jìn)行embedding,由于類別型張量每一值都為整數(shù),因此,將每一個(gè)類別型代碼都映射成一個(gè)向量;對(duì)于數(shù)字型張量,將每一個(gè)張量都單獨(dú)形成一個(gè)向量;將類別型和數(shù)字型都轉(zhuǎn)為向量后再連接起來(lái),構(gòu)成三維矩陣;時(shí)間張量進(jìn)行單獨(dú)處理,進(jìn)行升維和linear處理之后,最后得到時(shí)間表征的矩陣。
② 模型框架-Filed Aggregation
接下來(lái)具體介紹一下算法框架中的Filed Aggregation部分,該層為字段的加總。在上層的處理中, 類別型和數(shù)字型形成的三維張量通過(guò)attention和query的操作降維,形成一個(gè)矩陣,再與時(shí)間特征的矩陣相加得到一個(gè)新的矩陣,稱為事件的矩陣。
③ 模型框架-Item Aggregation
最后具體介紹一下算法框架中的Item Aggregation部分,將上一層處理得到的矩陣直接放入transformer encoder中進(jìn)行提取,再使用一個(gè)attention和query的模式加總,得到每一個(gè)時(shí)間序列向量的表示,再加單個(gè)或多個(gè)的linear層輸出模型。
3. 模型總結(jié)
在模型開(kāi)發(fā)和訓(xùn)練中的一些經(jīng)驗(yàn)總結(jié):
對(duì)于風(fēng)控領(lǐng)域的應(yīng)用,參數(shù)層和層數(shù)不用很多,參數(shù)量和層數(shù)不用很多,emb_dim=8,nhead=2,transformer_layers=1,即可得到較好的效果;
有多個(gè)序列時(shí)可以單序列建模出分,然后與業(yè)務(wù)模型融合,既能增加可解釋性,又基本不損失精度;
將字段的缺失值和padding單獨(dú)編碼,并學(xué)習(xí)參數(shù)表示,能提高模型泛化能力。
未來(lái)的展望和可發(fā)展方向:
嵌套序列:序列的每個(gè)item也是序列;
異構(gòu)序列:序列的每個(gè)item類型不同;
多模態(tài)輸入:序列的item本身,甚至item的field可以是語(yǔ)音或者圖片。
聯(lián)系客服