機器學習建模全流程及資料總結(4)

五. 結果分析

結果分析我們包含兩部分,一是訓練過程的分析,二是模型效果的分析。

5.1 模型誤差評估

關於偏差和方差的問題不再敘述,偏差和方差是統計模型必有,除了增加數據以外,主要還是通過調整模型的超參來降低偏差和方差。

調參問題——網格搜素GridSearchCV和隨機搜素RandomizedSearchCV可以提供一定的方案,但是最主要的幾點觀點是:

1)在數據量足夠的情況下,xgboost 一般不需要大費周章調參,其他模型也是如此,在比賽中一點提升很有用,在項目中可能並不;另外所謂的提升也是存在偏差的,提升是在驗證集上的,如何客觀評價模型的提升更重要;

2)瞭解模型原理,掌握調參技巧,合理調參;xgboost 可調的 樹深,最小子節點權重,學習率等,其他參數一般不調;

3)調參後帶來提升,也可能帶來更高的偏差和方差,因此調參必須緊密結合評估指標。

驗證曲線

繪製單個超參數對訓練分數和驗證分數的影響,有時有助於發現該估計是否因爲某些超參數的值 而出現過擬合或欠擬合。

可以用 validation_curve方法,不滿意的話自己寫個循環即可,即每個循環選取超參數的一個值,然後cv訓練得到訓練集和驗證集的分數,畫如下曲線,然後可以得到參數大概最佳值。

學習曲線

學習曲線顯示了對於不同數量的訓練樣本的估計器的驗證和訓練評分。它可以幫助我們發現從增加更多的訓 練數據中能獲益多少,以及估計是否受到更多來自方差或偏差的影響。

注意學習曲線的含義。

http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_learning_curve_0011.png

還有一種我們經常關注的,就是隨着訓練的輪次,訓練集和測試集上的分數,用來判斷是否過擬合,以及訓練的收斂性。

 

5.2 模型效果分析

這裏我們介紹幾個重要的評估指標。推薦幾篇文章看,不多敘述。如下以二分類問題爲準。

機器學習之分類性能度量指標 : ROC曲線、AUC值、正確率、召回率

機器學習模型性能評估(一):錯誤率與精度、P-R曲線和ROC曲線

機器學習模型性能評估二:代價曲線與性能評估方法總結

一維評估指標包括:準確率,召回率,f1分數。稱之爲一維,他們對應於分類模型的一個閾值下的分類表現。進而可以畫出一個混淆矩陣。metrics.classification_report 是個不錯的api

二維評估指標包括: ROC曲線,AUC值,AUC 的含義需要掌握,ROC 的橫座標縱座標。AUC 的意義還可以理解爲正樣本排在負樣本前面的概率,對於不平衡的數據,這一指標往往不好用。

模型評估常用指標這一篇是綜合一維二維指標的介紹。

再着重介紹一下ks曲線和逾期率曲線。在風控業務上這一曲線是十分重要的。ks值就是ks曲線中兩條曲線之間的最大間隔距離。但是在實際情況,模型並不是要選取ks值附近作爲閾值,而是根據業務允許的壞賬定通過率的,因此,還有一種曲線可以表達這種需求。

如上圖所示,對應不同通過率(也可認爲是分數/閾值)下壞賬的比例(即壞賬數/通過數),尤其是當兩個模型AUC差不多時,比較兩個模型業務上的效果。曲線畫法也很簡單,將所有數據(分數,label)排序,然後一個一個通過。下面的方法可供參考。lsta,lstb是兩個模型對於一組測試數據(分數,label)的排序後的列表。

def plot_passover_curve(lsta, lstb, name):
    plt.figure(figsize=(30,20))
    plt.grid()
    pass_r = []
    over1_r = []
    over1 = 0
    over2_r = []
    over2 = 0
    tot = len(lsta)
    for i in range(tot):
        pass_r.append((i+1)/tot)
        over1 += lsta[i][1]
        over1_r.append(over1/(i+1))
        over2 += lstb[i][1]
        over2_r.append(over2/(i+1))
    plt.plot(pass_r, over1_r, lw=1, color='r', label='model_1')
    plt.plot(pass_r, over2_r, lw=1, color='b', label='model_2')

    plt.xlim([-0.02, 1.02])
    plt.ylim([0, 0.3])
    plt.xticks(np.linspace(0, 1.0, 21))
    plt.yticks(np.linspace(0, 0.30, 7))
    plt.xlabel('pass_rate')
    plt.ylabel('overdue rate')
    plt.title('%s pass rate - overdue rate' % name,fontsize=22)
    plt.legend(loc="lower right", prop=font1)
    plt.show()
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 24}

機器學習模型/做項目及分析的完整流程基本就這些了~

系列文章結束(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章