剛讀完一篇paper《Solving the 「false positives」 problem in fraud prediction》,趁熱打鐵,作個筆記。git
文章下載連接:https://arxiv.org/pdf/1710.07709.pdfgithub
這篇文章是對 bank transaction fraud prediction 場景下的機器學習算法作了優化,優化方法是,使用 Deep Feature Synthesis 自動生成大量的特徵,優化後 False Positive Rate能夠大大下降。算法
文章的核心在 Deep Feature Systhesis (DFS) 這種特徵生成方法。session
一、在欺詐檢測這個場景中,TPR和FPR都很關鍵,TPR是壞人的查全率,即抓到了多少壞人,FPR能夠理解爲好人的查全率,即抓到了多少好人。TPR越高越好,但是TPR越高,FPR也會越高,這裏存在一個經濟成本的tradeoff,多抓一個壞人,銀行會節省一筆money,多抓一個好人,銀行會損失一筆money,也就是說,抓壞人的代價是牽連了一部分好人。並且在實際應用場景中,customer retention(客戶維繫)十分關鍵,銀行寧願忍受欺詐帶來的損失,也不肯意流失一個優質客戶。這是作 fraud prediction的一大挑戰。dom
二、DFS是一種特徵生成方法,能夠針對多個關係型數據表自動生成統計特徵。機器學習
簡述一下DFS。它是一種特徵生成方法,能夠結構化的生成特徵,可是目前只能針對多個關係型數據表生成統計特徵,其餘高級特徵,好比 頻域變換、小波變換或者圖特徵、時序特徵還有待補充和增強。函數
DFS有幾個關鍵概念:學習
一是relationship,表示數據表之間的關係,目前只支持一種關係——parent and child,翻譯過來就是「一對多」,好比 user表和transaction表,一個user有多個transaction,因此user和transaction就是parent-child關係;測試
二是primitives,表示特徵算子,具體分爲兩類,一類叫 Transform Primitives,另外一類叫 Aggregation Primitives,Transform是對數據表的單個列作變換運算,好比把timestamp列的year,month,day,hour單獨提取出來,Aggregation是對一列中的多行數據作聚合運算,好比 sum, std, mean, max, min, skew,DFS就是結合多張表的relation,反覆運用Trans和Aggre兩類運算,計算出許多組合特徵,好比 SUM(sessions.STD(transactions.amount)), MEAN(sessions.COUNT(transactions))。優化
DFS對應的github項目:github-featureTools
DFS論文:http://www.jmaxkanter.com/static/papers/DSAA_DSM_2015.pdf
三、transaction相關的數據有兩類,一類是transaction發生時伴隨的屬性,好比 timestamp, userid, cash, 另外一類是與transaction相關的歷史數據,好比 user過去的交易行爲,只用第一類數據,能獲得93個feature,兩類數據放在一塊兒,使用DFS,能獲得267個feature,在模型不變的狀況下,後者的TPR和FPR比前者也高了很多,說明多出來的feature是十分有效的。
四、文中提到了一種尋找最優門限的方法。RandomForest用於分類問題時,最終輸出的是每一個測試樣本的得分(score),能夠理解爲樣本是壞人的機率,咱們須要肯定一個threshold,把高於threshold的人視爲模型抓到的壞人。
文中給出了訓練和測試流程,其中包括肯定threshold的方法。首先把數據集劃分爲三組,比例大約是55%、7%和38%,第一部分是訓練數據,用於訓練模型,第二部分作驗證,用來肯定門限threshold,肯定的方法是最大化 Precision*u(TPR-0.89),0.89是人爲指定的TPR參考值,也就是說,TPR=0.89就足夠高,在TPR>=0.89時,須要提升Precision,第三部分數據用於測試模型效果。
[注:u(x)是一個unit step函數,當x>=0時,u(x)=1,otherwise, u(x)=0]
p.s. featureTools這個項目值得繼續研究,對特徵生成仍是頗有借鑑意義的。