從金融風(fēng)控實(shí)戰(zhàn)中學(xué)到的經(jīng)驗(yàn)

這個(gè)比賽來(lái)自于這里
https://kesci.com/apps/home_log/index.html#!/competition/56cd5f02b89b5bd026cb39c9/content/0


1、數(shù)據(jù)清洗

加載數(shù)據(jù)的方法:
data = pd.read_csv(filename,encoding="gb1830")

原始數(shù)據(jù)中會(huì)有噪聲,如果不做任何處理直接應(yīng)用,回拉偏模型。

對(duì)缺失值的多維度處理

對(duì)于征信系統(tǒng)來(lái)說(shuō),用戶提供的信息越完整,用戶可信度越高,所以我們會(huì)很看重?cái)?shù)據(jù)中的缺失值。
對(duì)于其它的場(chǎng)景可以具體處理。、

首先,觀察數(shù)據(jù)缺失值的情況,包括橫向和縱向兩個(gè)方向觀察。

panda中的方法
datafram.isnull().sum(axis=1) 每一行記錄有幾個(gè)缺失字段
datafrme.isnull().sum() 從列的維度進(jìn)行觀察,每一列有多少個(gè)記錄是缺失值

對(duì)于缺失值比例非常高的列,其實(shí)可以直接刪除。
對(duì)于缺失比例不高的列,而且如果是類別型的列,可以直接把缺失當(dāng)作一個(gè)類別填充進(jìn)來(lái),比如用-1填充。

df['colname'].fillna(-1)

如果是數(shù)值型的列,我們可以用中位數(shù)等方法填充。

按行統(tǒng)計(jì)每個(gè)樣本缺失屬性的個(gè)數(shù),然后按照缺失數(shù)量進(jìn)行排序。并給每個(gè)樣本一個(gè)序號(hào)。然后以序號(hào)作為橫坐標(biāo),以缺失值個(gè)數(shù)作為縱坐標(biāo)畫出一個(gè)散點(diǎn)圖。

對(duì)于訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)都是這樣操作,于是畫出兩個(gè)散點(diǎn)圖。

盡量保證訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)上缺失值的分布模式是一樣的

觀察這兩個(gè)散點(diǎn)圖的形狀,有助于比較測(cè)試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)的缺失值的模式是否一樣。

對(duì)于其中明顯不一樣的部分,也就是說(shuō)在訓(xùn)練數(shù)據(jù)中沒有能夠反應(yīng)這些測(cè)試樣本的測(cè)試集,所以訓(xùn)練出來(lái)的模型也可能不能很好的應(yīng)用到這部分測(cè)試數(shù)據(jù)上。這部分訓(xùn)練數(shù)據(jù)可以作為離群點(diǎn)數(shù)據(jù)剔除。

對(duì)于變化幅度不大的列可以剔除

對(duì)于數(shù)值型特征,通過(guò)計(jì)算列的方差,來(lái)看屬性值的波動(dòng)情況。對(duì)于哪些非常小的列,可以剔除。

datafram.var()

對(duì)離群點(diǎn)的剔除方法

繼續(xù)尋找離群點(diǎn),由于離群點(diǎn)的異常特征可能來(lái)自于多個(gè)維度的組合,我們除了根據(jù)樣本中缺失屬性的個(gè)數(shù)剔除掉一些離群點(diǎn)。還可以這個(gè)做。

用xgboost得到特征的重要度,取前面最重要的n個(gè)特征,然后重點(diǎn)觀察樣本在這些特征上的缺失值個(gè)數(shù),如果大于一定數(shù)量比如一半,也把這些樣本作為離群點(diǎn)剔除。這也是一個(gè)合理的假設(shè),既然這些特征最重要,但是你的記錄卻在這些特征上缺少關(guān)鍵數(shù)據(jù),當(dāng)然做出來(lái)的模型會(huì)不可靠。

這個(gè)地方可以畫一個(gè)條形圖來(lái)可視化。

get_fscore

文本處理

比如大小寫統(tǒng)一變成小寫,去掉多余的空格。盡量讓相同含義的文本統(tǒng)一,不如省份統(tǒng)一都不帶省字樣。

dataframe['colname'].unique() 查看列上的值


2、特征工程

地理信息處理

在原始數(shù)據(jù)中,記錄了用戶的省市信息。屬于類別型變量,對(duì)這種變量最常用的做法就是One-hot encoding。但是這樣以來(lái)會(huì)得到很高維的稀疏特征。尤其是GBDT這種tree base的模型,這么多稀疏特征會(huì)讓運(yùn)行性能非常慢。

于是,作者在one-hot 基礎(chǔ)上加上了特征選擇。

從統(tǒng)計(jì)的角度做特征(處理省份信息)

這種方法是對(duì)那些取值比較少的類別型變量,肉眼可以觀察的過(guò)來(lái)的,比如對(duì)省份直轄市,最多也不過(guò)就32個(gè)。

具體的做法是分層統(tǒng)計(jì)數(shù)據(jù)分布,其實(shí)就是看看哪些省市的違約率特別高,對(duì)于這些特別高的省份,我們單獨(dú)提出來(lái)作為一個(gè)屬性。
比如統(tǒng)計(jì)出四川、湖北、北京特別高。

于是可以構(gòu)建三個(gè)二值特征,是否四川用戶、是否湖北用戶、是否北京用戶。這樣就用了三個(gè)one-hot變量取代了原來(lái)n多的one-hot變量。

借助xgboost篩選(處理城市信息)

對(duì)于地級(jí)市這樣的特征,可能會(huì)有成百上千中看可能取值,這時(shí)再用基于統(tǒng)計(jì)的方法就觀察不過(guò)來(lái)了。

這時(shí)我們就采用one-hot + xgboost的方法。
比如地級(jí)市這一列,one-hot之后得到400個(gè)二值屬性。我們就在這400個(gè)二值屬性上是用xgboost,然后得到特征的重要性。然后去最重要的城市做二值變量。

這一步其實(shí)就相當(dāng)于數(shù)據(jù)降維

添加城市等級(jí)

比如一線城市是1,二線城市是2,三線城市是3。

添加經(jīng)緯度

光有省市信息并不能體現(xiàn)更多的信息。現(xiàn)在我們引入經(jīng)緯度,考慮地理上較勁的城市,違約率可能差不多,所以引入這部分信息。最終結(jié)果有千分之幾的提升。

城市特征向量化

比如,對(duì)于數(shù)據(jù)集中的記錄按照城市計(jì)數(shù),然后做個(gè)等值離散化。
也就是某個(gè)城市落在什么樣的人口區(qū)間,只不過(guò)是用樣本中的記錄數(shù)來(lái)作為人口屬性。

更多的思考

比如,數(shù)據(jù)中有兩個(gè)城市列,可能一個(gè)是出生城市,一個(gè)是工作城市。我們可以看看這兩個(gè)城市是否一樣,并作為一個(gè)特征加進(jìn)來(lái)。

總之,如何引入更多的特征,取決于對(duì)于數(shù)據(jù)業(yè)務(wù)的理解。

成交時(shí)間處理

類別型編碼

特征組合

gbdt做特征組合是有兩種方式
其一:就是得到樹的所有葉子節(jié)點(diǎn)結(jié)果
其二:根據(jù)特征重要度,這里用的方法

在這個(gè)案例中,作者用xgboost得到原始記錄中特征的重要性,然后對(duì)于其中topn 重要的特征兩兩組合得到更多(7000+)特征,然后對(duì)這7000個(gè)組合特征單獨(dú)訓(xùn)練模型。訓(xùn)練后又可以得到組合特征的重要程度。然后從中提取top500個(gè)組合特征,把這些組合特征加回到原始的特征中。
在這個(gè)案例中,作者選擇待組合的特征都是數(shù)值型的,于是作者分別用了 兩兩相除的運(yùn)算,然后取出top500,然后再做兩兩相乘取對(duì)數(shù),又取出top200,把這700個(gè)都加回到原始特征體系中。

當(dāng)然,并不一定必須加回到原始特征體系,也可以就使用組合特征去做模型。


3、特征選擇

特征選擇至少可以有三種方法:
根據(jù)一些指標(biāo),比如Person相關(guān)系數(shù)(衡量變量之間的線性相關(guān)性)
正則化方法(L1)
基于模型的特征重要性排序(xgboost),這里用的就是這個(gè)方法

用Xgboost的重要度排序

其實(shí)特征選擇和特征工程是交叉在一起進(jìn)行的。


4、類別不平衡的處理

也是有三種方式:
代價(jià)敏感學(xué)習(xí)
上采樣(oversampling)
把多的類別拆成n份,每一份和少的一類做一個(gè)模型出來(lái),最后n個(gè)模型投票。有點(diǎn)類似bagging。

代價(jià)敏感學(xué)習(xí)

修改損失函數(shù)

上采樣


5、模型融合

參考Blending。
作者用了一個(gè)LR、一個(gè)gbdt、SVC

保證模型結(jié)果穩(wěn)定
只是為了gbdt的穩(wěn)定,作者通過(guò)對(duì)參數(shù)加入微小擾動(dòng)生成30個(gè)gbdt,然后用折30個(gè)gbdt的輸出的平均值作為整個(gè)gbdt的平均值,這么做只是希望gbdt模型的輸出更穩(wěn)定,這個(gè)思想可以用于所有算法

然后把這三個(gè)模型用blend方法做融合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容