可能有些人還不知道,黃姐姐消失的這幾個月,去生了個孩子。寶寶滿月去打疫苗,被醫院震耳欲聾、此起彼伏的小朋友哭聲嚇到了,回來後哭鬧了好幾天。於是乎,黃姐姐這個新手媽媽開始各種諮詢醫生,老人家,並在網上查:寶寶受到了驚嚇怎麼辦?經過篩選,嘗試了幾種操作性比較強,且不那麼嚇人的方法:

1.安全感:多撫摸,多抱,讓寶寶時常聽到媽媽的聲音;

2.吹氣:沖著額頭吹氣,讓寶寶眨眼,重複幾次;3.趴在手臂上睡:一個神奇的抱娃姿勢;4.補充微量元素:主要是鈣和鋅;

5.喫藥:治療「驚悸不眠」的葯《猴棗散》;

6.半夜叫魂:晚上寶寶睡著後,唸到:摸摸毛(頭髮),嚇不著;摸頭芯兒,嚇一陣兒;摸摸耳,嚇一會兒;xx回來吧。7.敲牀:敲著牀邊唸到:牀幫牀幫神,俺的小孩丟了魂,您給俺找,您給俺尋,找來交給他母親。8.貼紙:在一張紙上書寫「天皇皇,地皇皇,我家有個夜哭郎。過路君子念三遍,一覺睡到大天亮」,並貼到人來人往的街道上,希望更多的人可以看到並念出來。

黃姐姐向來以唯物主義者自居,不信什麼鬼神說。所以,當然黃姐姐先是用了方法1-5,三天後並沒有任何改善,於是在第四天,纔在外婆的商(bi)量(po)下,用了方法6-8。

神奇的是,到了第五天,寶寶竟然可以安心睡覺了,而且也不再哭鬧了。

這時,外婆問了句:你覺得,是哪種方法管用了?

黃姐姐實在不想說是6-8管用,便回答個「不知道」敷衍過去了。

其實,這像極了黃姐姐經常被問到的一個問題:從哪個角度可以看出這是個欺詐分子?以及哪個欄位比較好用?

如果單純地從理性分析(暫且忽略鬼神說的不可解釋性),1-8被黃姐姐分成兩組:

組A:1-5;

組B:6-8。

整理一下:組A應用了4天,組B應用了1天,且最終結果為True。

那麼,最終結果為true,可能是組A作用力的累加效果,也可能是組B立竿見影的效果。想要確定,還需要進行重複實驗。確定了組A和組B後,還可以進一步拆分分析。比如,可能是組A的方法1加上組B的方法6起到的作用。

一個著急的母親,會同時採用多種方法來解決寶寶的非正常哭鬧;一個反欺詐從業者,也希望一下子把所有欄位輸入模型,跑出個結果來防範欺詐。但正如黃姐姐所做的,先去掉操作性不強的,再去掉不嚇人的方法;由於一些欄位的雜訊很大,同樣需要我們先予以去除,然後再進行系統的分析。這一過程需要充足的樣本和不斷的思考和實踐,著實費時費力。

不過,基於一些項目經驗,黃姐姐嘗試了很多處理不同list的方法。以下分享幾個比較有效的處理方法。

App list:Apriori+統計分析

先科普一下Apriori,以免有些讀者不瞭解。Apriori是關聯關係挖掘一個比較經典的演算法,其一個著名的應用就是指導超市貨架上物品的擺放位置——「尿布啤酒」問題。也就是,通過對顧客購買商品的關聯分析,發現購買了尿布的人中也有很多購買了啤酒。單純想一想覺得很不可思議,而通過調查發現,去超市購買尿布的多為男人。反正也要跑到超市買尿布,索性再給自己捎上兩罐啤酒,算是自己的「跑腿費」了。是的,Apriori演算法對於發現這些可能違背常識的事物和事物之間的內在聯繫是非常有效的。而團夥欺詐,也屬於這一類問題。很多欺詐團夥的作案手法,在被揭發前,也是不為人知且看上去匪夷所思的。但鮮有將Apriori演算法應用於反欺詐的,究其原因,大概是由於關聯濃度過低以至於難於檢測。試想,假設一個平臺,擁有2000萬用戶,其中有100個人,採用(同一IP 10.10.10.10 +同一小時註冊23:00:00+同一手機前綴1880000xxxx)這一組合發起了虛假註冊。如果採用Apriori來計算支持度,可以想像,由於巨大的分母,這一組合的置信度會非常低。這與「尿布啤酒」不同,欺詐檢測的欄位更多,欄位值更豐富,直接運用值(value)來做關聯挖掘,幾乎是不可能完成的事情。這就像把一勺鹽扔進一片海,企圖提高整片海域的鹹度一樣。

對App list的挖掘,也有類似的問題。APP name太多太複雜,直接調用Apriori很難看到效果。但其實我們稍微動動腦筋,就會發現,「尿布啤酒」問題中,我們得到的結論是「尿布」+「啤酒」這一組合常常出現,而不是「青島啤酒」+「幫寶適尿布」,對嗎?相信大家已經看到了問題所在,是的,我們在對App list進行Apriori運算時,採用品類數據可能會更好。事實的確如此,我們可以做如下操作:

  1. 先將採集到的所有app進行人工標註品類(有現成的品類數據更好),如:理財類,學習類,貸款類,商城類,遊戲類等等;
  2. 分別對好人和壞人的app list進行apriori運算,並計算區分度;
  3. 如果區分度明顯,可停止計算。如果區分度不好,繼續統計每一品類的個數,例如:理財3,學習2 表示理財類app裝了3個,學習類app裝了2個,並再次分別對好人和壞人進行apriori運算,得到好人壞人app品類的個數組合傾向。

以上,便可得到一些比較有趣的組合。例如,黃姐姐發現:

  • 安裝了學習類app的逾期率低,其中以「作業幫」最為典型;
  • 安裝支付寶但沒有安裝微信的用戶逾期率高。黃姐姐事後諸葛亮一下,可能是新刷的機器,而這次借款申請需要芝麻分授權,所以只安裝了支付寶,沒有安裝微信;
  • 對於現金貸產品,安裝同類app多,逾期率反而低,只安裝本借款app的,逾期率反而高。同樣事後諸葛亮一下,可能是欺詐分子更懂得包裝,所以在申請借款前,會先清機,刪除其他同類借款產品;
  • 對於消費分期產品,安裝x個借款類app+y個遊戲類app的人逾期率偏高(在黃姐姐的項目中,數字為3個借款了app和2個遊戲類app)

統計分析可以從以下幾個角度進行:

  • Odds:統計每個app的好人壞人比,並按照從小到大排序,作為風險係數/風險等級;
  • 個數:統計安裝app的總個數(需要排除預裝軟體),以及每個品類的個數。(黃姐姐發現,app安裝特別少的機器逾期率較高)
  • 是否命中黑中介常用app:如一鍵新機軟體、GPS模擬軟體等;(這需要一個list,最好有一個人負責維護這個list,黃姐姐的list從休產假後就沒再更新了,需要的可以私信留郵箱)

舉個例子,在一個項目中,黃姐姐統計的部分借款類app的odds,如下:

黃姐姐將其分成三個風險等級:高、中、低。並做了人工的keywords提取處理,以涵蓋更多的新app(可能未在統計列表中,以及未來可能會出現的借款app名稱),例如:將「來借貸款」、「借點錢貸款」、「貸款123」和「搜易借貸款」四個的公共詞「貸款」提取出來,作為keyword入模型,其風險等級為「中」,風險係數(odds)為14.88。如此這般,假設有一個新的借款app,名稱叫「黃姐姐誠信貸款」,便也會被納入這一等級,並賦予此風險係數。

此列表需要在每次模型更新時重新計算,建議維護時間為每月或每季度一次。

Wifi list:keywords+UML

wifi list主要有兩個用途,一是可以匹配關鍵詞,如「借款」,「貸款」,「錢」等;二是可以對wifi name做聚類,發現那些地理距離很近的人羣,甚至是在同一個房間的人羣。

衍生建議:

Risk_wifi_ssid:是否命中高風險關鍵詞,value = true / false

簡訊list:統計分析+keywords

這裡,我們將簡訊拆成兩個元素:一是簡訊號碼,二是簡訊內容。對簡訊號碼的處理比較簡單,主要是進行統計分析,我們可以這樣:

  1. 統計所有壞人的簡訊list號碼,並按照出現的頻率排序,作為風險指數(需要排除10086、95555等);
  2. 統計所有用戶的簡訊list號碼,按照(號碼,時間)對統計同一天/同一周的用戶。

衍生建議:

  • Loan_app_message_day:同一個簡訊號碼在同一天接收,且多頭借貸用戶;
  • Loan_app_message_week:同一個簡訊號碼在同一周接收,且多頭借貸用戶;

對於簡訊內容,建議採用兩個極端:極好和極壞。

衍生建議:

  • HitGkeywords:命中好關鍵詞;根據簡訊內容,命中好的關鍵詞,如:運營商查詢簡訊回復(注意,是用戶主動查詢,不是運營商主動發送的內容);快遞/外賣簡訊。此類信息表示這是一個正常使用的手機號碼,好人的概率大;
  • HitBkeywords:命中壞的關鍵詞;例如貸款、賭博相關(六合彩等)等關鍵詞;

通訊錄list:統計分析+keywords

通訊錄也可拆成兩個元素:一是存儲的暱稱;二是存儲的號碼。這個也是個挺有趣的事情,黃姐姐的項目中,發現有些統計真的讓人匪夷所思。比如,通訊錄4個字暱稱佔比較高的用戶逾期率高;非11位手機號碼佔比高的用戶逾期率也高。這個很難有一個特別合理的解釋,但事實就是如此,就像文章開頭關於叫魂的靈異方法一樣。

衍生建議:

  • Contact_no: 通訊錄條數;
  • Not_11bit_ratio: 通訊錄非11位手機號佔比;
  • Contact_city_no: 通訊錄聯繫人歸屬地個數;
  • Contact_is_user_no: 通訊錄中申請了本平臺借款的人數;
  • Name_4char_ratio:通訊錄中4個字的暱稱的比例(同理可看5個字/6個字等的比例);
  • Contact_each_other:如果緊急聯繫人也是產品用戶,那麼,雙方的通訊錄是否有彼此,value = true / false;

Keywords也挺有趣,黃姐姐發現,存儲的暱稱中,如果包含了地址關鍵詞,則逾期率較高;還有些人,爸爸媽媽的號碼就存了十幾個,請問誰是你的親爸親媽?其他都是乾爹?還有一類比較常見的,就是有明顯屬性的詞,例如:貸款中介黃經理。

衍生建議:

  • Parent_no: 命中如下關鍵詞的個數:爸爸、媽媽、爸、媽、老爸、老媽、Dad,Mum,Daddy,Mummy
  • Risk_name:是否命中風險關鍵詞,如中介、貸、款、借等;
  • City_no: 存儲的暱稱中,包含地址關鍵詞,如:上海黃姐姐。

通話詳單list:統計分析+LR

由於通話詳單數據量通常非常大,所以常常需要先做過濾處理。

過濾方式有兩種:

一是把主叫和被叫都是本產品的客戶的用戶過濾出來;

二是過濾掉被叫時常超過15秒(或其他閾值,根據數量級確定)的通話;

通話詳單可以做如下統計:

  • 6_month_times:最近6個月與緊急聯繫人的通話次數;
  • 1_month_times:最近1個月與緊急聯繫人的通話次數;
  • 1_week_times:最近1周與緊急聯繫人的通話次數;
  • 1_day_times: 申請當天的通話次數;
  • Call_freq_ratio: 呼出比例;
  • Early_freq_ratio: 凌晨(例如:2:00-5:00)通話次數比例;
  • Call_city:通話城市個數
  • Frequent_call_city: 最常用通話地;
  • Call_in_contact_ratio:通話電話號碼在通訊錄中的比例;
  • Tel_ratio: 固定電話佔比;
  • Virtual_ratio:虛擬號碼佔比;
  • Length11_ratio:11位號碼佔比;
  • Length10_ratio:10位號碼佔比;
  • 400_ratio: 400號碼佔比;
  • Refuse_ratio: 拒接/未接佔比;
  • Other_city_ratio: 對方歸屬地個數;

衍生建議:

  • 1_month_freq:最近一個月溝通頻繁(1_month_times/6_month_times >=x,x根據數據分析確定)
  • 1_week_freq:最近一週溝通頻繁(1_week_times/1_month_times>=x,x根據數據分析確定)
  • 1_day_freq: 申請當天溝通頻繁(1_day_times/1_week_times>=x,x根據數據分析確定)

以上數據作為羅輯回歸(LR)的輸入,最合適不過,效果很好。

GPS list:GPS漁網+xgboost

GPS list嚴格來講,應該是GPS網格list。操作方式非常簡單,把目標區域按照一個一個方格劃分(例如:100m*100m),然後根據壞人標籤統計每個方格內的壞人濃度,可以把格子按照黑白灰劃分,或者按照更多的等級劃分,以此來決定是否對某一個方格內的用戶放款,或者將其作為xgboost的一個輸入,效果也很好。

寫在最後

風控建模要處理很多list,對各種list進行合適的處理並衍生出有效的特徵,對模型效果大有裨益,對A卡KS等指標的貢獻也會比較顯著,雖然有些list的組合看起來那麼讓人匪夷所思。但這世間的事,本不是都能解釋的,就像文章開頭,連自詡為堅定的唯物主義者的黃姐姐都開始叫魂了,你還在等什麼?如果將每一種list的處理結果都生成一個風險分,作為A卡的一個輸入,相信你會讓自己的模型起死回生。

BTW:如果有足夠的樣本,黃姐姐真的挺想用機器學習研究下治療小兒驚嚇的方法,會不會成為磚(wu)家(po)呢?哈哈哈……


來個硬廣:

想跟黃姐姐一樣成為風控小巫婆的童鞋,歡迎關注以下招聘信息


推薦閱讀:
相關文章