风控模型师面试准备--技术篇(逻辑回归、决策树、集成学习)
原文地址:https://zhuanlan.zhihu.com/p/56175215
編輯于2019-02-12,持續更新中,有風控建模工作經驗的,或者想轉行風控建模的小伙伴可以互相交流下...
一.算法
- 邏輯回歸
- 決策樹
- 集成學習(隨機森林,Adaboost,GBDT,XGBOOST,LightGbm)
二.特征工程
三.模型評估與優化
一. 算法
1.邏輯回歸
Q : 邏輯回歸的優缺點,在金融領域相比其他算法有什么優勢,局限性在哪?
1)優點:
- 實現簡單,速度快,占用內存小,可在短時間內迭代多個版本的模型。
- 模型的可解釋性非常好,可以直接看到各個特征對模型結果的影響,可解釋性在金融領域非常重要,所以在目前業界大部分使用的仍是邏輯回歸模型。
- 模型客群變化的敏感度不如其他高復雜度模型,因此穩健更好,魯棒性更強。
- 特征工程做得好,模型的效果不會太差,并且特征工程可以并行開發,大大加快開發的速度。
- 模型的結果可以很方便的轉化為策略規則,且線上部署簡單。
2)缺點和局限性:
- 容易欠擬合,相比集成模型,準確度不是很高。
- 對數據的要求比較高,邏輯回歸對缺失值,異常值,共線性都比較敏感,且不能直接處理非線性的特征。所以在數據清洗和特征工程上會花去很大部分的時間。
- 在金融領域對場景的適應能力有局限性,例如數據不平衡問題,高維特征,大量多類特征,邏輯回歸在這方面不如決策樹適應能力強。
Q : 邏輯回歸是線性模型嗎?邏輯回歸和線性回歸的區別?
- 邏輯回歸是一種廣義線性模型,它引入了Sigmod函數,是非線性模型,但本質上還是一個線性回歸模型,因為除去Sigmod函數映射關系,其他的算法原理,步驟都是線性回歸的。
- 邏輯回歸和線性回歸首先都是廣義的線性回歸,在本質上沒多大區別,區別在于邏輯回歸多了個Sigmod函數,使樣本映射到[0,1]之間的數值,從而來處理分類問題。另外邏輯回歸是假設變量服從伯努利分布,線性回歸假設變量服從高斯分布。邏輯回歸輸出的是離散型變量,用于分類,線性回歸輸出的是連續性的,用于預測。邏輯回歸是用最大似然法去計算預測函數中的最優參數值,而線性回歸是用最小二乘法去對自變量因變量關系進行擬合。
Q:邏輯回歸做分類的樣本應該滿足什么分布?
應該滿足伯努利分布,邏輯回歸的分類標簽是基于樣本特征通過伯努利分布產生的,分類器要做的就是估計這個分布。
Q:邏輯回歸解決過擬合的方法有哪些?
- 減少特征數量,在實際使用中會用很多方法進行特征篩選,例如基于IV值的大小,變量的穩定性,變量之間的相關性等。
- 正則化,常用的有L1正則化和L2正則化。
Q:什么是特征的離散化和特征交叉?邏輯回歸為什么要對特征進行離散化?
- 特征離散化是將數值型特征(一般是連續型的)轉變為離散特征,例如評分卡中的woe轉化,就是將特征進行分箱,再將每個分箱映射到woe值上,就轉換為了離散特征。特征交叉也叫作特征組合,是將單獨的特征進行組合,使用相乘/相除/笛卡爾積等形成合成特征,有助于表示非線性關系。比如使用One-Hot向量的方式進行特征交叉。這種方式一般適用于離散的情況,我們可以把它看做基于業務理解的邏輯和操作,例如經度和緯度的交叉,年齡和性別的交叉等。
- 實際工作中很少直接將連續型變量帶入邏輯回歸模型中,而是將特征進行離散化后再加入模型,例如評分卡的分箱和woe轉化。這樣做的優勢有以下幾個:1)特征離散化之后,起到了簡化模型的作用,使模型變得更穩定,降低了模型過擬合的風險。2)離散化之后的特征對異常數據有很強的魯棒性,實際工作中的哪些很難解釋的異常數據一般不會做刪除處理,如果特征不做離散化,這個異常數據帶入模型,會給模型帶來很大的干擾。3)離散特征的增加和減少都很容易,且稀疏向量的內積乘法運算速度快,易于模型的快速迭代。4)邏輯回歸屬于廣義線性模型,表達能力有限,特征離散化之后,每個離散變量都有單獨的權重,相當于給模型引入了非線性,能夠提高模型的表達能力。5)離散化后的特征可進行特征交叉,進一步引入非線性,提高模型的表達能力。
Q:在邏輯回歸中,為什么要常常做特征組合(特征交叉)?
邏輯回歸模型屬于線性模型,線性模型不能很好處理非線性特征,特征組合可以引入非線性特征,提升模型的表達能力。另外,基本特征可以認為是全局建模,組合特征更加精細,是個性化建模,但對全局建模會對部分樣本有偏,對每一個樣本建模又會導致數據爆炸,過擬合,所以基本特征+特征組合兼顧了全局和個性化。
Q:做評分卡中為什么要進行WOE化?
- 更好的解釋性,變量離散化之后可將每個箱體映射到woe值,而不是通常做one-hot轉換。
- woe化之后可以計算每個變量的IV值,可用來篩選變量。
- 對離散型變量,woe可以觀察各個level間的跳轉對odds的提升是否呈線性。
- 對連續型變量,woe和IV值為分箱的合理性提供了一定的依據,也可分析變量在業務上的可解釋性。
- 用woe編碼可以處理缺失值問題。
Q:高度相關的特征帶入邏輯回歸到底有什么影響?為什么邏輯回歸要將高度相關特征剔除?
- 在損失函數最終收斂的情況下,就算有很多相關度很高的特征,也不會影響模型的效果。假設一個特征將它重復100次,生成100個高度相關的特征。那么模型訓練完之后,這100個特征和原來那一個特征扮演的效果一樣,每一個特征的權重都是原來特征的1/100,只是可能中間很多特征的系數正負相互抵消了,比如做評分卡,如果引入了高度相關的特征,那么最后邏輯回歸的系數符號可能就會不一致。
- 雖然高度相關特征對模型結果沒什么大的影響,但還是要剔除相關性高的特征,原因是一個可以減少特征數量,提高模型的訓練速度,減少過擬合的風險。二是去掉高相關特征可以讓模型的可解釋性更好。尤其在做評分卡時,為了使最后每個特征的系數符號一致,必須做特征相關性篩選。
Q:邏輯回歸的特征系數的絕對值可以認為是特征的重要性嗎?
首先特征系數的絕對值越大,對分類效果的影響越顯著,但不能表示系數更大的特征重要性更高。因為改變變量的尺度就會改變系數的絕對值,而且如果特征是線性相關的,則系數可以從一個特征轉移到另一個特征,特征間相關性越高,用系數解釋變量的重要性就越不可靠。
Q:邏輯回歸為什么要用極大似然函數作為損失函數?
- 數據歸一到0和1,這樣的話梯度下降會收斂的更快,相比不歸一化,不會出現扁平的情況。
- 數據歸一化之后可以提高結果的精度,尤其在與正則化同時使用時,數據歸一化可以避免由于特征取值范圍差距過大,對取值較小特征的參數影響更大的問題。
2.決策樹
Q:決策樹模型的優缺點及適用性?
優點:
- 易于理解,決策樹可以生成IF..TEHN邏輯表達的樹結構,可解釋性很好。
- 相比邏輯回歸對數據的處理較簡單,不太需要做例如數據離散化,歸一化等操作。
- 決策樹是目前已知的對于處理非線性交互的最好的算法。
- 模型的效果比較好,例如隨機森林,xgboost都是基于決策樹構建的。
缺點:
- 很容易在訓練過程中生成過于復雜的樹結構,造成過擬合。
- 不適合處理高維數據,當屬性數量過大時,部分決策樹就不適用了。
- 泛化能力能力比較差,對于沒有出現過的值幾乎沒有辦法。
Q:簡述一下決策樹的原理以及樹的構建過程。
決策樹時基于樹的結構進行決策的,學習過程包括特征選擇,決策樹的生成和剪枝過程。決策樹的學習過程通常是遞歸地選擇最優特征,并用最優特征對數據集進行分割。開始時,構建根節點,選擇最優特征,該特征有幾種值就劃分為多少子集,每個子集遞歸調用此方法,返回結點,返回的結點就是上一層的子節點,直到所有特征都已經用完,或者數據集只有一維特征為止。
Q:簡述一下ID3,C4.5,CART三類決策樹的原理和異同點。
- ID3選擇最佳分割點是基于信息增益的,信息增益越大,表明使用這個屬性來劃分所獲得的“純度提升”越大。C4.5對ID3進行了改進,因為ID3使用的信息增益對數據劃分時,可能出現每個結點只包含一個樣本,這些子節點的純度已經達到最大,但是,這樣的決策樹并不具有泛化能力,無法對新樣本進行預測。且ID3不能處理連續型變量和缺失值。而C4.5使用信息增益率來選擇屬性,克服了信息增益選擇屬性時偏向選擇值多的屬性的不足。且可以處理連續型變量和缺失值。
- C4.5是基于ID3的改進版,只能用于分類。而CART樹既可以做分類,也可以做回歸。CART的本質是對特征空間進行二元劃分,所以CART生成的是一顆二叉樹,且可以對類別型變量和數值型變量進行分裂。對分類型變量進行劃分時,分為等于該屬性和不等于該屬性,在對連續型變量進行劃分時,分為大于和小于,在做分類是使用的是GINI系數作為劃分標準,在做回歸時使用的是均方誤差。
Q:分類樹和回歸樹的區別在哪里?
- 分類樹以C4.5為例,在對一個特征進行劃分時,是窮舉這個特征的每一個閾值,找到使得特征<=閾值和特征>閾值分成的兩個分支的熵的最大值,按照該標準分支得到兩個新的節點,用同樣的方法繼續分支,直到得到種類唯一的葉子節點,或者達到預設的終止條件為止。
- 回歸樹的流程是類似分類樹的,區別在于劃分時的標準不再是最大熵,而是最小化均差,如果節點的預測值錯的越離譜,均方差越大,通過最小化均差能夠找到最可靠的分支依據。
Q:決策樹對缺失值是如何處理的?
決策樹處理缺失要考慮以下三個問題:
- 忽略這些缺失的樣本。
- 填充缺失值,例如給屬性A填充一個均值或者用其他方法將缺失值補全。
- 計算信息增益率時根據缺失率的大小對信息增益率進行打折,例如計算屬性A的信息增益率,若屬性A的缺失率為0.9,則將信息增益率乘以0.9作為最終的信息增益率。
2. 一個屬性已經被選擇,那么在決定分割點時,有些樣本在這個屬性上有缺失怎么處理?
- 忽略這些缺失的樣本。
- 填充缺失值,例如填充一個均值或者用其他方法將缺失值補全。
- 把缺失的樣本,按照無缺失的樣本被劃分的子集樣本個數的相對比率,分配到各個子集上去,至于那些缺失樣本分到子集1,哪些樣本分配到子集2,這個沒有一定準則,可以隨機而動。
- 把缺失的樣本分配給所有的子集,也就是每個子集都有缺失的樣本。
- 單獨將缺失的樣本歸為一個分支。
3.決策樹模型構建好后,測試集上的某些屬性是缺失的,這些屬性該怎么處理?
- 如果有單獨的缺失值分支,依據此分支。
- 把待分類的樣本的屬性A分配一個最常出現的值,然后進行分支預測。
- 待分類的樣本在到達屬性A結點時就終止分類,然后根據此時A結點所覆蓋的葉子節點類別狀況為其分配一個發生概率最高的類。
Q:為什么決策樹不需要對數據做歸一化等預處理?
決策樹是一種概率模型,所以不需要做歸一化,因為它不關心變量的值,而是關心變量的分布和變量之間的條件概率,所以歸一化這種數值縮放,不影響分裂結點位置。
Q:如何解決決策樹的過擬合問題?
- 預剪枝的方法:通過提前停止樹的構建而對樹剪枝,是目前解決過擬合的主要方法。常用的剪枝條件包括限制樹的深度,限制葉節點最小樣本數,限制葉節點的最小樣本權重,限制葉節點的信息增益值的閾值等。
- 后剪枝的方法:首先構造完整的決策樹,允許樹過度擬合數據,然后應單個結點代替子樹,節點的分類采用子樹的主要分類。剪枝方法有錯誤率降低剪枝,悲觀錯誤剪枝,代價復雜度剪枝
3.集成學習
Q:什么是集成學習?集成學習有哪些框架?簡單介紹各個框架的常用算法。
- 集成學習是一種優化手段和策略,通常是結合多個簡單的弱分類器來集成模型組,去做更可靠的決策。一般的弱分類器可以是決策樹,SVM,kNN等構成,其中的模型可以單獨來訓練,并且這些弱分類器以某種方式結合在一起去做出一個總體預測。集成學習就是找出哪些弱分類器可以結合在一起,以及如何結合的方法。目前集成學習主要有bagging,boosting,stacking三種:
- bagging:對訓練集進行隨機子抽樣,對每個子訓練集構建基模型,對所有的基模型的預測結果進行綜合產生最后的預測結果。如果是分類算法,則用多數投票法確定最終類別,如果是回歸算法,則將各個回歸結果做算術平均作為最終的預測值。常用的bagging算法:隨機森林
- boosting:訓練過程為階梯狀,基模型按照次序進行訓練(實際上可以做到并行處理),先給定一個初始訓練數據,訓練出第一個基模型,根據基模型的表現對樣本進行調整,在之前基模型預測錯誤的樣本上投入更多的關注,然后用調整后的樣本訓練下一個基模型,重復上述過程N次,將N個基模型進行加權結合,輸出最后的結果。常用的算法有GBDT,XGBOOST等。
- stacking:是一種組合分類器的方法,以兩層為例,第一層由多個基學習器組成,其輸入為原始訓練集,第二層的模型則是以第一層基學習器的輸出作為訓練集進行再訓練(一般用LR進行回歸組合),從而得到完整的stacking模型。要得到stacking模型,關鍵在于如何構造第二層的特征,構造第二層特征的原則是盡可能的避免信息泄露,因此對原始訓練集常常采用類似于K折交叉驗證的劃分方法。各個基模型要采用相同的Kfold,這樣得到的第二層特征的每一折(對應于之前的K折劃分)都將不會泄露進該折數據的目標值信息 ,從而盡可能的降低過擬合的風險。
Q : 簡單描述一下模型的偏差和方差?bagging和boosting主要關注哪個?
- 偏差描述的是預測值與真實值的差距,偏差越大,越偏離真實數據。
- 方差描述的是預測值的變化范圍,離散程度,方差越大,數據分布越分散。
- bagging主要關注的是降低方差,boosting主要關注降低偏差。
Q:簡述一下隨機森林的原理,隨機森林的構造過程。
隨機森林是bagging算法的代表,使用了CART樹作為弱分類器,將多個不同的決策樹進行組合,利用這種組合來降低單棵決策樹的可能帶來的片面性和判斷不準確性。對于普通的決策樹,是在所有樣本特征中找一個最優特征來做決策樹的左右子樹劃分,而隨機森林會先通過自助采樣的方法(bootstrap)得到N個訓練集,然后在單個訓練集上會隨機選擇一部分特征,來選擇一個最優特征來做決策樹的左右子樹劃分,最后得到N棵決策樹,對于分類問題,按多數投票的準則確定最終結果,對于回歸問題,由多棵決策樹的預測值的平均數作為最終結果。隨機森林的隨機性體現在兩方面,一個是選取樣本的隨機性,一個是選取特征的隨機性,這樣進一步增強了模型的泛化能力。
Q:隨機森林的優缺點?
優點:
- 訓練可以高度并行化,訓練速度快,效率高。
- 兩個隨機性的引入,使得隨機森林不容易過擬合,具有很好的抗噪聲能力。
- 由于每次不再考慮全部的特征屬性,二是特征的一個子集,所以相對于bagging計算開銷更小,效率更高。
- 對于數據的適應能力強,可以處理連續型和離散型的變量,數據無需規范化。
- 可以輸出變量的重要程度,被認為是一種不錯的降維方法。
缺點:
- 在某些噪聲較大的分類問題和或回歸問題上容易過擬合。
- 模型的可解釋性比較差,無法控制模型內部的運行。
- 對于小數據或者低維數據,效果可能會不太好。
Q:隨機森林為什么不容易過擬合?
隨機森林由很多棵樹組合在一起,單看每一棵樹可以是過擬合的,但是既然是過擬合,就會擬合到非常小的細節,隨機森林通過引入隨機性,讓每一棵樹過擬合的細節不同,再將這些樹組合在一起,過擬合的部分就會抵消掉,不過隨機森林還是可能會出現過擬合的現象,只是出現的概率相對較低。
Q:隨機森林輸出特征重要性的原理?
- 隨機森林對于特征重要性的評估思想:判斷每個特征在隨機森林中的每顆樹上做了多大的貢獻,然后取個平均值,最后比一比特征之間的貢獻大小。其中關于貢獻的計算方式可以是基尼指數或袋外數據錯誤率。
- 基于基尼系數:如果特征X出現在決策樹J中的結點M,則計算節點M分枝前后的Gini指數變化量,假設隨機森林由N棵樹,則計算N次的Gini系數,最后將所有的Gini系數做一個歸一化處理就得到了該特征的重要性。
- 基于袋外數據錯誤率:袋外數據指的是每次隨機抽取未被抽取達到的數據,假設袋外的樣本數為O,將這O個數據作為測試集,代入已生成好的隨機森林分類器,得到預測的分類結果,其中預測錯誤的樣本數為X,則袋外數據誤差為X/O,這個袋外數據誤差記為errOOB1,下一步對袋外數據的特征A加入噪聲干擾,再次計算袋外誤差errOOB2,假設隨機森林由N個分類器,則特征A的重要性為:sum(errOOB2-errOOB1)/N,其依據就是,如果一個特征很重要,那么其變動后會非常影響測試誤差,如果測試誤差沒有怎么改變,則說明特征A不重要。
Q:簡單描述一下Adaboost的算法原理和流程。
- Adaboost基于分類器的錯誤率分配不同的權重系數,最后得到累加加權的的預測結果。
算法流程:
- 給數據中每一個樣本一個權重,若有N個樣本,則每個樣本的權重為1/N.
- 訓練數據的每一個樣本,得到第一個分類器。
- 計算該分類器的錯誤率,根據錯誤率計算給分類器分配的權重。
- 將第一個分類器分錯的樣本權重增加,分對的樣本權重減少,然后再用新的樣本權重訓練數據,得到新的分類器。
- 迭代這個訓練步驟直到分類器錯誤為0或達到迭代次數。
- 將所有的弱分類器加權求和,得到分類結果(分類器權重),錯誤率低的分類器獲得更高的決定系數,從而在數據進行預測起關鍵作用。
Q:Adaboost的優點和缺點?
優點:
- 分類精度高,構造簡單,結果可理解。
- 可以使用各種回歸分類模型來構建弱學習器,非常靈活。
- 不容易過擬合。
缺點:
- 訓練時會過于偏向分類困難的數據,導致Adaboost容易受噪聲數據干擾。
- 依賴于弱分類器,訓練時間可能比較長。
Q:簡單說一下GBDT的原理。
- GBDT是boosting的一種方法,主要思想是每一次建立單個分類器時,是在之前建立的模型的損失函數的梯度下降方向。損失函數越大,說明模型越容易出錯,如果我們的模型能讓損失函數持續的下降,則說明我們的模型在持續不斷的改進,而最好的方式就是讓損失函數在其梯度的方向上下降。
- GBDT的核心在于每一棵樹學的是之前所有樹結論和的殘差,殘差就是真實值與預測值的差值,所以為了得到殘差,GBDT中的樹全部是回歸樹,之所以不用分類樹,是因為分類的結果相減是沒有意義的。
- Shrinkage(縮減)是 GBDT 的一個重要演進分支,Shrinkage的思想在于每次走一小步來逼近真實的結果,要比直接邁一大步的方式更好,這樣做可以有效減少過擬合的風險。它認為每棵樹只學到了一小部分,累加的時候只累加這一小部分,通過多學習幾棵樹來彌補不足。這累加的一小部分(步長*殘差)來逐步逼近目標,所以各個樹的殘差是漸變的而不是陡變的。
- GBDT可以用于回歸問題(線性和非線性),也可用于分類問題。
Q:為什么對于高維稀疏特征不太適合用GBDT?
- GBDT在每一次分割時需要比較大量的特征,特征太多,模型訓練很耗費時間。
- 樹的分割往往只考慮了少部分特征,大部分的特征都用不到,所有的高維稀疏的特征會造成大量的特征浪費。
Q:GBDT和隨機森林的異同點?
相同點:
- 都是由多棵樹構成,最終的結果也是由多棵樹決定。
不同點:
- 隨機森林可以由分類樹和回歸樹組成,GBDT只能由回歸樹組成。
- 隨機森林的樹可以并行生成,而GBDT只能串行生成,所以隨機森林的訓練速度相對較快。
- 隨機森林關注減小模型的方差,GBDT關注減小模型的偏差。
- 隨機森林對異常值不敏感,GBDT對異常值非常敏感。
- 隨機森林最終的結果是多數投票或簡單平均,而GBDT是加權累計起來。
Q:GBDT的優缺點?
優點:
- GBDT每一次的殘差計算都增大了分錯樣本的權重,而分對的權重都趨近于0,因此泛化性能比較好。
- 可以靈活的處理各種類型的數據。
缺點:
- 對異常值比較敏感。
- 由于分類器之間存在依賴關系,所以很難進行并行計算。
Q:XGBOOST和GBDT的區別在哪里?
- 傳統的GBDT是以CART樹作為基分類器,xgboost還支持線性分類器,這個時候xgboost相當于帶L1和L2正則化項的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題),線性分類器的速度是比較快的,這時候xgboost的速度優勢就體現了出來。
- 傳統的GBDT在優化時只使用一階導數,而xgboost對損失函數做了二階泰勒展開,同時用到了一階和二階導數,并且xgboost支持使用自定義損失函數,只要損失函數可一階,二階求導。
- xgboost在損失函數里加入了正則項,用來減小模型的方差,防止過擬合,正則項里包含了樹的葉節點的個數, 每個葉子節點上輸出的score的L2模的平方和。
- xgboost里有一個參數叫學習速率(learning_rate), xgboost在進行完一次迭代后,會將葉子節點的權重乘上學習速率,主要是為了削弱每棵樹的影響,讓后面有更大的學習空間。實際應用中,一般把learing_rate設置得小一點,然后迭代次數(n_estimators)設置得大一點。
- xgboost借鑒了隨機森林的原理,支持行抽樣(subsample)和列抽樣(colsample_bytree,colsample_bylevel), 行抽樣指的是隨機森林里對數據集進行有放回抽樣,列抽樣指的是對特征進行隨機選擇,不僅能降低過擬合,還能減少計算,這也是xgboost異于傳統gbdt的一個特性。
Q:為什么XGBOOST要用泰勒展開,優勢在哪里?
xgboost使用了一階和二階偏導,二階導數有利于梯度下降的更快更準,使用泰勒展開取得函數做自變量的二階導數形式,可以在不選定損失函數具體形式的情況下,僅僅依靠輸入數據的值就可以進行葉子分裂優化計算,本質上也就把損失函數的選取和模型算法的優化分開來了,這種去耦合增加了xgboost的適用性,使得它按需選取損失函數,既可以用于分類,也可以用于回歸。
Q:XGBOOST是如何尋找最優特征的?
xgboost在訓練過程中給出各個特征的增益評分,最大增益的特征會被選出來作為分裂依據,從而記憶了每個特征在模型訓練時的重要性,從根到葉子中間節點涉及某特征的次數作為該特征重要性排序。
Q:XGBOOST是如何處理缺失值的?
xgboost為缺失值設定了默認的分裂方向,xgboost在樹的構建過程中選擇能夠最小化訓練誤差的方向作為默認的分裂方向,即在訓練時將缺失值劃入左子樹計算訓練誤差,再劃入右子樹計算訓練誤差,然后將缺失值劃入誤差小的方向。
Q:XGBOOST的并行化是如何實現的?
- xgboost的并行不是在tree粒度上的并行,xgboost也是一次迭代完才能進行下一次迭代(第t次迭代的損失函數包含了第t-1次迭代的預測值),它的并行處理是在特征粒度上的,在決策樹的學習中首先要對特征的值進行排序,然后找出最佳的分割點,xgboost在訓練之前,就預先對數據做了排序, 然后保存為block結構,后面的迭代中重復地使用這個結構,大大減小計算量。這個block結構也使得并行成為了可能,在進行節點的分裂時,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進行。
- 可并行的近似直方圖算法。樹節點在進行分裂時,我們需要計算每個特征的每個分割點對應的增益,即用貪心法枚舉所有可能的分割點。當數據無法一次載入內存或者在分布式情況下,貪心算法效率就會變得很低,所以xgboost還提出了一種可并行的近似直方圖算法,用于高效地生成候選的分割點。
Q:XGBOOST采樣時有放回的還是無放回的?
xgboost屬于boosting方法的一種,所以采樣時樣本是不放回的,因而每輪計算樣本不重復,另外,xgboost支持子采樣,每輪計算可以不使用全部的樣本,以減少過擬合。另外一點是xgboost還支持列采樣,每輪計算按百分比隨機抽取一部分特征進行訓練,既可以提高速度又能減少過擬合。
Q:XGBOOST的調參步驟是怎樣的?
PS:這里使用Gridsearch cv來窮舉檢索最佳的參數,如果時間允許,可以通過設置步數先粗調,再細調。
- 保持learning rate和其他booster相關的參數不變,調節和estimators的參數。learing_rate可設為0.1, max_depth設為4-6之間,min_child_weight設為1,subsample和colsample_bytree設為0.8 ,其他的參數都設為默認值即可。
- 調節max_depth 和 min_child_weight參數,首先,我們先大范圍地粗調參數,然后再小范圍地微調。
- gamma參數調優
- subsample和colsample_bytree 調優
- 正則化參數調優,選擇L1正則化或者L2正則化
- 縮小learning rate,得到最佳的learning rate值
Q:XGBOOST特征重要性的輸出原理?
xgboost是用get_score方法輸出特征重要性的,其中importance_type參數支持三種特征重要性的計算方法:
- importance_type=weight(默認值),使用特征在所有樹中作為劃分屬性的次數。
- importance_type=gain,使用特征在作為劃分屬性時loss平均的降低量。
- importance_type=cover,使用特征在作為劃分屬性時對樣本的覆蓋度。
Q:LightGBM相比XGBOOST在原理和性能上的差異?
1.速度和內存上的優化:
- xgboost用的是預排序(pre-sorted)的方法, 空間消耗大。這樣的算法需要保存數據的特征值,還保存了特征排序的結果(例如排序后的索引,為了后續快速的計算分割點),這里需要消耗訓練數據兩倍的內存。 其次,時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。
- LightGBM用的是直方圖(Histogram)的決策樹算法,直方圖算法的基本思想是先把連續的浮點特征值離散化成k個整數,同時構造一個寬度為k的直方圖。在遍歷數據的時候,根據離散化后的值作為索引在直方圖中累積統計量,當遍歷一次數據后,直方圖累積了需要的統計量,然后根據直方圖的離散值,遍歷尋找最優的分割點。
2.準確率上的優化:
- xgboost 通過level(depth)-wise策略生長樹, Level-wise過一次數據可以同時分裂同一層的葉子,容易進行多線程優化,也好控制模型復雜度,不容易過擬合。但實際上Level-wise是一種低效的算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,因為實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。
- LightGBM通過leaf-wise(best-first)策略來生長樹, Leaf-wise則是一種更為高效的策略,每次從當前所有葉子中,找到分裂增益最大的一個葉子,然后分裂,如此循環。因此同Level-wise相比,在分裂次數相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度。Leaf-wise的缺點是可能會長出比較深的決策樹,產生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合。
3.對類別型特征的處理:
- xgboost不支持直接導入類別型變量,需要預先對類別型變量作亞編碼等處理。如果類別型特征較多,會導致啞變量處理后衍生后的特征過多,學習樹會生長的非常不平衡,并且需要非常深的深度才能來達到較好的準確率。
- LightGBM可以支持直接導入類別型變量(導入前需要將字符型轉為整數型,并且需要聲明類別型特征的字段名),它沒有對類別型特征進行獨熱編碼,因此速度比獨熱編碼快得多。LightGBM使用了一個特殊的算法來確定屬性特征的分割值。基本思想是對類別按照與目標標簽的相關性進行重排序,具體一點是對于保存了類別特征的直方圖根據其累計值(sum_gradient/sum_hessian)重排序,在排序好的直方圖上選取最佳切分位置。
二. 特征工程
Q:什么是特征工程?為什么特征工程對機器學習很重要?
- 特征工程指的是使用專業知識和技巧來處理數據,使得特征在機器學習算法上發揮更好的作用的過程。這個過程包含了數據預處理,特征構建,特征篩選等。特征工程的目的就是篩選出好的特征,得到更好的訓練數據,使模型達到更好的效果。
- 從數據中提取出來的特征好壞會直接影響到模型的效果,有的時候,如果特征工程做得好,僅使用一些簡單的機器學習算法,也能達到很好的效果。由此可見特征工程在實際的機器學習中的重要性。
Q:特征工程的一般步驟是什么?什么是特征工程的迭代?
特征工程常規步驟:
- 數據獲取,數據的可用性評估(覆蓋率,準確率,獲取難度)
- 探索性數據分析,對數據和特征有一個大致的了解,同時進行數據的質量檢驗,包括缺失值,異常值,重復值,一致性,正確性等。
- 特征處理,包括數據預處理和特征轉換兩部分,數據預處理主要做清洗工作(缺失值,異常值,錯誤值,數據格式),特征轉換即對連續特征,離散特征,時間序列特征進行轉換,便于入模。
- 特征構建,特征構建的目的是找尋與目標變量相關且區分度較好的特征。常用的方法有特征交叉,四則運算,基于業務理解進行頭腦風暴構建特征等。
- 特征篩選,大量的特征中選擇少量的有用特征,也叫作特征降維,常用的方法有過濾法,包裝法,嵌入法。
特征工程的迭代:
- 選擇特征:具體問題具體分析,通過查看大量的數據和基于對業務的理解,從數據中查找可以提出出數據的關鍵。
- 設計特征:可以自動進行特征提取工作,也可以手工進行特征的構建。
- 選擇特征:使用不同的特征構造方法,從多個角度來評判這個特征是否適合放入模型中。
- 計算模型:計算模型在該特征上所提升的準確率。
- 上線測試:通過在線測試的效果來評估特征是否有效。
Q:常用的特征工程方法有哪些?
- 特征處理:數據的預處理包括異常值和缺失值,要根據實際的情況來處理。特征轉換主要有標準化,歸一化,區間縮放,二值化等,根據特征類型的不同選擇合適的轉換方法。
- 特征構建:特征之間的四則運算(有業務含義),基于業務理解構造特征,分解類別特征,特征交叉組合等。
- 特征篩選:過濾法,封裝法,嵌入法。
Q:在實際的風控建模中怎么做好特征工程?
本人工作中的一些經驗總結:
- 因為做風控模型大部分的數據源來自第三方,所以第三方數據的可用性評估非常重要,一方面需要了解這些特征底層的衍生邏輯,判斷是否與目標變量相關。另一方面考察數據的覆蓋率和真實性,覆蓋率較低和真實性存疑的特征都不能使用在模型中。
- 基于金融的數據特點,在特征篩選這個步驟上考量的因素主要有:一個是時間序列上的穩定性,衡量的指標可以是PSI,方差或者IV。一個是特征在樣本上覆蓋率,也就是特征的缺失率不能太高。另外就是特征的可解釋性,特征與目標變量的關系要在業務上要解釋的通。
- 如果第三方返回有用戶的原始底層數據,例如社保的繳納記錄,運營商的通話/短信記錄,則需要在特征衍生上多下功夫,基于自身對數據的敏感性和業務的理解,構建具有金融,風險屬性的特征,也可以與業務部門進行溝通找尋與業務相關的特征。
Q:實際項目中原始數據通常有哪些問題?你是如何解決的?
- 一些特征的底層邏輯不清晰,字面上的意思可能與實際的衍生邏輯相悖,這個需要與第三方數據供應商進行溝通,了解清楚特征的衍生邏輯。
- 數據的真實性可能存在問題。比如一個特征是歷史總計,但第三方只是爬取了用戶近2年的數據,這樣的特征就不符合用戶的真實情況。所以對數據的真實性校驗顯得非常重要。
- 有缺失的特征占的比例較高。在進行缺失值處理前先分析缺失的原因,而不是盲目的進行填充,刪除等工作。另外也要分析缺失是否有風險屬性,例如芝麻分缺失的用戶相對來說風險會較高,那么缺失可以當做一個類別來處理。
- 大量多類特征如何使用。例如位置信息,設備信息這些特征類別數較多,如果做亞編碼處理會造成維度災難,目前常用的方法一個是降基處理,減少類別數,另一個是用xgboost來對類別數做重要性排序,篩選重要性較高的類別再做亞編碼處理。
Q:在做評分卡或其他模型中,怎么衡量特征(數據)的有用性?
- 特征具有金融風險屬性,且與目標變量的關系在業務上有良好的可解釋性。
- 特征與目標變量是高度相關的,衡量的指標主要是IV。
- 特征的準確率,這個需要了解特征的衍生邏輯,并與實際一般的情況相比較是否有異常。
- 特征的覆蓋率,一般來說覆蓋率要達到70%以上。
- 特征的穩定性,特征的覆蓋率,分布,區分效果在時間序列上的表現比較穩定。
- 特征的及時性,最好是能代表用戶最近的信用風險情況。
Q:為什么探索性數據分析(EDA)在機器學習中非常重要?
- EDA不單是看看數據的分布,而是對數據整體有一個大概的了解。通過作圖、制表、方程擬合、計算特征量等手段探索數據的結構和規律。從中發現關鍵性的價值信息,這些信息對于后續建模及對模型的正確理解有很重要的意義。
- 通過EDA可以發現數據的異常,可以分析每個特征與目標變量之間的關系,特征與特征之間的關系,為特征構建和特征篩選提供有價值的信息。
- EDA分析可以驗證數據是不是你認為的那樣,實際情況中由于數據和特征量比較大,往往忽視這些數據是如何生成的,數據突出的問題或模型的實施中的錯誤會被長時間忽視,這可能會導致基于錯誤信息做出決策。
Q:缺失值的處理方式有哪些?風控建模中該如何合理的處理缺失?
- 首先要了解缺失產生的原因,因數據獲取導致的缺失建議用填充的方式(缺失率比較低的情況下),因用戶本身沒有這個屬性導致的缺失建議把缺失當做一個類別。另外可以分析缺失是否有風險屬性,有的話最好當做一個類別來處理。
- 風控模型對于缺失率的要求比較高,尤其是評分卡。個人認為,缺失率在30%以上的特征建議不要用,缺失率在10%以下的變量可用中位數或隨機森林來填充,10%-30%的缺失率建議當做一個類別。對于xgboost和lightgbm這類可以自動處理缺失值的模型可以不做處理。
Q:如何發現數據中的異常值?對異常值是怎么處理的?
- 一種是基于統計的異常點檢測算法例如極差,四分位數間距,均差,標準差等,這種方法適合于挖掘單變量的數值型數據。另一種主要通過距離方法來檢測異常點,將數據集中與大多數點之間距離大于某個閾值的點視為異常點,檢測的標準有歐式距離,絕對距離。
- 對于異常值先檢查下是不是數據錯誤導致的,數據錯誤的異常作刪除即可。如果無法判別異常的原因,要根據實際情況而定,像評分卡會做WOE轉換,所以異常值的影響不大,可以不做處理。若異常值的數量較多,建議將異常值歸為一類,數量較少作刪除也可以。
Q:對于時間序列特征,連續特征,離散特征這三類是怎么做特征轉換的?
- 時間序列特征:將時間變量的維度進行分離(年/月/日/時/分/秒),或者與位置變量進行結合衍生成新的特征。
- 連續型特征:標準化,歸一化,區間縮放,離散化。在評分卡中主要用的是離散化,離散化常用的方法有卡房分箱,決策樹分箱,等頻和等深分箱。
- 離散型特征:如果類別數不是很多,適合做亞編碼處理,對于無序離散變量用獨熱編碼,有序離散變量用順序編碼。如果類別數較多,可用平均數編碼的方法。
Q:如何處理樣本不平衡的問題?
- 在風控建模中出現樣本不平衡主要是壞樣本的數量太少,碰到這個問題不要急著試各種抽樣方法,先看一下壞用戶的定義是否過于嚴格,過于嚴格會導致壞樣本數量偏少,中間樣本偏多。壞用戶的定義一般基于滾動率分析的結果,不過實際業務場景復雜多樣,還是得根據情況而定。
- 確定好壞用戶定義是比較合理的之后,先嘗試能不能擴大數據集,比如一開始取得是三個月的用戶數據,試著將時間線延長來增加數據。因為機器學習是使用現在的數據在整個數據分布上進行估計,因此更多的數據往往能夠得到更多的分布信息,以及更好的分布估計。
- 對數據集進行抽樣,一種是進行欠采樣,通過減少大類的數據樣本來降低數據的不平衡,另一種是進行過采樣,通過增加小類數據的樣本來降低不平衡,實際工作中常用SMOTE方法來實現過采樣。
- 嘗試使用xgboost和lightgbm等對不平衡數據處理效果較好的模型。
- 嘗試從新的角度來理解問題,可以把那些小類樣本當做異常點,因此該分類問題轉化為異常檢測問題或變化趨勢檢測問題,這種方法筆者很少用到,就不詳細說明了。
Q:特征衍生的方法有哪些?說說你平時工作中是怎么做特征衍生的?
常規的特征衍生方法:
- 基于對業務的深入理解,進行頭腦風暴,構造特征。
- 特征交叉,例如對類別特征進行交叉相乘。
- 分解類別特征,例如對于有缺失的特征可以分解成是否有這個類別的二值化特征,或者將缺失作為一個類別,再進行亞編碼等處理。
- 重構數值量(單位轉換,整數小數拆分,構造階段性特征)
- 特征的四則運算,例如取平均/最大/最小,或者特征之間的相乘相除。
平時工作特征衍生的做法:
- 因為風控模型通常需要好的解釋能力,所以在特征衍生時也會考慮到衍生出來的特征是否與目標變量相關。例如拿到運營商的通話記錄數據,可以衍生一個"在敏感時間段(深夜)的通話次數占比",如果占比較高,用戶的風險也較大。
- 平常會將大量的時間和精力花在底層數據的衍生上,這個不僅需要對業務的理解,也需要一定的想象力進行頭腦風暴,即使衍生出來的特征90%都效果不佳,但只要剩下的10%是好的特征,那對于模型效果的提升是很顯著的。
- 對于評分卡來說,特征需要好的解釋能力,所以一些復雜的衍生方法,像特征交叉,log轉換基本不會用到。但如果是xgboost等復雜模型,進行特征交叉等方法或許有比較好的效果。
Q:特征篩選的作用和目的?篩選的特征需要滿足什么要求?
作用和目的:
- 簡化模型,增加模型的可解釋性, 降低模型過擬合的風險。
- 縮短模型的訓練時間。
- 避免維度災難。
篩選特征滿足的要求:
- 具有良好的區分能力。
- 可解釋性好,與目標變量的關系在業務上能解釋的通。
- 在時間序列上有比較好的穩定性。
- 特征的用戶覆蓋率符合要求。
Q:特征篩選的方法有哪些?每種方法的優缺點?實際工作中用到了哪些方法?
Filter(過濾法):按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。
- 相關系數,方差(適用于連續型變量),卡方檢驗(適用于類別型變量),信息熵,IV。實際工作中主要基于IV和相關性系數(皮爾遜系數)。
- 優點:算法的通用性強;省去了分類器的訓練步驟,算法復雜性低,因而適用于大規模數據集;可以快速去除大量不相關的特征,作為特征的預篩選器非常合適。
- 缺點:由于算法的評價標準獨立于特定的學習算法,所選的特征子集在分類準確率方面通常低于Wrapper方法。
Wrapper(封裝法):封裝式特征選擇是利用學習算法的性能評價特征子集的優劣。因此,對于一個待評價的特征子集,Wrapper方法需要訓練一個分類器,根據分類器的性能對該特征子集進行評價。
- 方法有完全搜索(遞歸消除法),啟發式搜索(前向/后向選擇法,逐步選擇法),隨機搜索(訓練不同的特征子集)。實際工作中主要用到啟發式搜索,例如評分卡的逐步邏輯回歸。
- 優點:相對于Filter方法,Wrapper方法找到的特征子集分類性能通常更好。
- 缺點:Wrapper方法選出的特征通用性不強,當改變學習算法時,需要針對該學習算法重新進行特征選擇;由于每次對子集的評價都要進行分類器的訓練和測試,所以算法計算復雜度很高,尤其對于大規模數據集來說,算法的執行時間很長。
Embedded(嵌入法):先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似于Filter方法,但是是通過訓練來確定特征的優劣。
- 一種是基于懲罰項,例如嶺回歸,lasso回歸,L1/L2正則化。另一種是基于樹模型輸出的特征重要性,在實際工作中較為常用,可選擇的模型有隨機森林,xgboost,lightgbm。
- 優點:效果最好速度最快,模式單調,快速并且效果明顯。
- 缺點:如何參數設置, 需要對模型的算法原理有較好的理解。
三.模型評估和優化
Q:簡單介紹一下風控模型常用的評估指標。
- 混淆矩陣指標:精準率,查全率,假正率。當模型最后轉化為規則時,一般用這三個指標來衡量規則的有效性。要么注重精準率,要么注重查全率,兩者不可兼而得之。
- ROC曲線和AUC值,ROC曲線是一種對于查全率和假正率的權衡,具體方法是在不同閾值下以查全率作為縱軸,假正率作為橫軸繪制出一條曲線。曲線越靠近左上角,意味著越多的正例優先于負例,模型的整體表現也就越好。AUC是ROC曲線下面的面積,AUC可以解讀為從所有正例中隨機選取一個樣本A,再從所有負例中隨機選取一個樣本B,分類器將A判為正例的概率比將B判為正例的概率大的可能性。在對角線(隨機線)左邊的點上TPR總大于FPR,意為正例被判為正例的概率大于負例被判為正例的概率。從另一個角度看,由于畫ROC曲線時都是先將所有樣本按分類器的預測概率排序,所以AUC反映的是分類器對樣本的排序能力。AUC越大,自然排序能力越好,即分類器將越多的正例排在負例之前。
- KS:用于區分預測正負樣本分隔程度的評價指標,KS越大,表示模型能將好壞樣本區分開的程度越大。KS的繪制方法是先將每個樣本的預測結果化為概率或者分數,將最低分到最高分(分數越低,壞的概率越大)進行排序做樣本劃分,橫軸就是樣本的累計占比,縱軸則是好壞用戶的累計占比分布曲線,KS值為兩個分布的最大差值(絕對值)。KS值僅能代表模型的區隔能力,KS不是越高越好,KS如果過高,說明好壞樣本分的過于開了,這樣整體分數(概率)就是比較極端化的分布狀態,這樣的結果基本不能用。
- 基尼系數:其橫軸是根據分數(概率)由高到低累計的好用戶占總的好用戶的比例,縱軸是分數(概率)從高到低壞用戶占總的壞用戶的比例。由于分數高者為低風險用戶,所以累計壞用戶比例的增長速度會低于累計好用戶比例,因此,基尼曲線會呈現向下彎曲的形式,向下突出的半月形的面積除以下方三角形的面積即是基尼系數。基尼系數越大,表示模型對于好壞用戶的區分能力越好。
Q:為什么ROC適合不平衡數據的評價?
- ROC曲線的縱軸是TPR= ,橫軸是FPR= ,TPR聚焦于正例,FPR聚焦于與負例,所以ROC兼顧了正樣本和負樣本的權衡,使其成為一個比較均衡的評估方法。
- 因為TPR用到的TP和FN都是正樣本,FPR用到的FP和TN都是負樣本,所以說正樣本或負樣本發生了改變,TPR和FPR也不會相互影響,因此即使類別分布發生了改變,數據變得不平衡了,ROC曲線也不會產生大的變化。ROC曲線的優點,即具有魯棒性,在類別分布發生明顯改變的情況下依然能客觀地識別出較好的分類器。
Q:AUC和KS的關系是什么?
- 左圖是KS曲線,紅色的是TPR曲線(累計正樣本占比),藍色的是FPR曲線(累計負樣本占比)。由于按照正樣本預測概率降序排列,所以排在前面的樣本為正的概率更大,但為正的概率是遞減的;相反排在前面的樣本為負的概率更小,但為負的概率遞增。所以KS圖中,TPR曲線在FPR曲線上方,并且TPR曲線的導數遞減,FPR曲線的導數遞增,而KS曲線先上升到達峰值P點(導數為0)后下降,P點對應的C值就是KS值。ROC圖中,ROC曲線的導數是遞減的,且剛開始導數大于1,逐漸遞減到導數為1的T點(T點對應P點),然后導數繼續降低。另外,A值對應X值,B值對應Y值,且C=B-A=Y-X
- 在用KS評估模型時,除了看P點對應的KS值C,還要看P點的橫坐標F值的大小,F值表示的是將分數從低到高排序后的累計樣本占比,F值越小,說明模型對正樣本的預測越精確,也就是說在識別出正樣本的同時也能保證對負樣本更小的誤殺率。
- 假設F值不變,C值增大,即P點沿著垂直方向向上移動,那么A值應該減小,B值應該增大;對應地,X值減小,Y值增大,T點會向左上角移動;所以ROC曲線下方的面積會增大,也就是AUC值增大。
- 假設C值不變,F值減小,即P點沿著水平方向向左移動,因為C=B-A,所以A和B減小相同的幅度,也是就說X和Y減小相同的幅度,即T點沿著斜率為1的切線方向向下移動,此時ROC曲線下方的面積也會增大,即AUC值增大。
- 所以P點的位置決定了T點的位置,C值和F值均會影響AUC值。AUC值看上去更像一個綜合評估指標,但缺乏對模型細節的評估。而KS值結合F值,可以評估每一段評分的效果,還可以找出評分切分的閾值等。
Q:什么是模型的欠擬合和過擬合?
- 欠擬合指的是模型沒有很好的捕捉到數據特征,不能很好的擬合數據。
- 過擬合指的是模型把數據學習的太徹底,以至于把噪聲數據學習進去了,這樣模型在預測未知數據時,就不能正確的分類,模型的泛化能力太差。
Q:如何判斷模型是否存在過擬合或欠擬合?對應的解決方法有哪些?
- 判斷模型是否存在過擬合/欠擬合主要用學習曲線,學習曲線指的是通過畫出不同訓練集大小時訓練集和交叉驗證的準確率,可以看到模型在新數據上的表現,進而來判斷模型是否方差偏高(過擬合)或偏差過高(欠擬合)。當訓練集和測試集的誤差收斂但卻很高時,即為欠擬合,當訓練集和測試集的誤差之間有大的差距時,為過擬合。
- 解決欠擬合的方法:增加效果好的特征,添加多項式特征,減小正則化參數等。
- 解決過擬合的方法:使用更多的數據,選擇更加合適的模型,加入正則項等。
Q:什么是正則化?什么是L1正則化和L2正則化?
- 正則化是在模型的loss function的基礎上,加上了一些正則化項或者稱為模型復雜度懲罰項,它會向學習算法略微做些修正,從而讓模型能更好地泛化。這樣反過來能提高模型在不可見數據上的性能。
- L1正則化就是在loss function后邊所加正則項為L1范數,加上L1范數容易得到稀疏解,所以L1正則化會趨向于產生少量的特征。
- L2正則化就是loss function后邊所加正則項為L2范數的平方,加上L2正則相比于L1正則來說,得到的解比較平滑(不是稀疏),所以L2正則化會使特征的解趨近于0,但不會為0。
Q:正則化為什么可以防止過擬合?
最簡單的解釋是正則化對模型參數添加了先驗,在數據少的時候,先驗知識可以防止過擬合。舉個例子:拋一枚硬幣5次,得到的全是正面,則得出結論:正面朝上的概率為1,這類似于模型的過擬合,如果加上硬幣朝上的概率是0.5的先驗,結果就不會這么離譜,這就是正則。
Q:什么是交叉驗證?交叉驗證的目的是什么?有哪些優點?
交叉驗證概念:
交叉驗證,就是重復的使用數據,把得到的樣本數據進行切分,組合為不同的訓練集和測試集,用訓練集來訓練模型,用測試集來評估模型預測的好壞。在此基礎上可以得到多組不同的訓練集和測試集,某次訓練集中的某樣本在下次可能成為測試集中的樣本,即所謂"交叉"。
交叉驗證的目的:
評估給定算法在特定數據集上訓練后的泛化性能,比單次劃分訓練集和測試集的方法更加穩定,全面。
交叉驗證的優點:
- 如果只是對數據隨機劃分為訓練集和測試集,假如很幸運地將難以分類的樣本劃分進訓練集中,則在測試集會得出一個很高的分數,但如果不夠幸運地將難以分類的樣本劃分進測試集中,則會得到一個很低的分數。所以得出的結果隨機性太大,不夠具有代表性。而交叉驗證中每個樣本都會出現在訓練集和測試集中各一次,因此,模型需要對所有樣本的泛化能力都很好,才能使其最后交叉驗證得分,及其平均值都很高,這樣的結果更加穩定,全面,具有說服力。
- 對數據集多次劃分后,還可以通過每個樣本的得分比較,來反映模型對于訓練集選擇的敏感性信息。
- 對數據的使用更加高效,可以得到更為精確的模型。
Q:交叉驗證常用的方法有哪些?
- 標準K折交叉驗證:K是自定義的數字,通常取5或10,如果設為5折,則會訓練5個模型,得到5個精度值。
- 分層K折交叉驗證:如果一個數據集經過標準K折劃分后,在測試集上只有一種類別,則無法給出分類器整體性能的信息,這種情況用標準K折是不合理的。而在分層K折交叉驗證中,每個折中的類別比例與整個數據集類別比例相同,這樣能對泛化性能做出更可靠的估計。
- 留一法交叉驗證:每次劃分時,把單個數據點作為測試集,如果數據量小,能得到更好的估計結果,數據量很大時則不適用。
- 打亂劃分交叉驗證:每次劃分數據時為訓練集取樣train_size個點,為測試集取樣test_size個點,將這一劃分劃分方法重復n_splits次。這種方法還允許每次迭代中使用部分數據,可通過設置train_size和test_size之和不為0來實現,用這種方法對數據進行二次采樣可能對大型數據上的試驗很用用。另外也有分層劃分的形式( StratifiedShuffleSplit),為分類任務提供更可靠的結果。
- 分組交叉驗證:適用于數據中的分組高度相關時,以group數組作為參數,group數組表示數據中的分組,在創建訓練集和測試集的時候不應該將其分開,也不應該與類別標簽弄混。
總結
以上是生活随笔為你收集整理的风控模型师面试准备--技术篇(逻辑回归、决策树、集成学习)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 连接 rabbitMQ以及
- 下一篇: 科普 | 动态本体简介