日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模型优化

發布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模型优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是《智能風控原理、算法和工程實踐》第7章學習筆記。
? 模型融合是指根據不同的數據或模型特點選擇合適的模型進行融合,從而直接或間接提升模型在未來樣本上的表現。

多損失函數分段預測

? 基于多損失函數的模型融合方法,使用不同的損失函數分別訓練多個模型,用于在不同樣本集上進行預測。這種融合方法稱作“后融合”,即將多個訓練得到的模型結果進行加權平均或分段預測。
? 下面介紹兩種損失函數。

  • 平均絕對差值(MAE)
    絕對誤差的平均值,通常用來衡量模型預測結果對標準結果的接近程度。
    MAE=1n∑i=1n∣predi?yi∣MAE=\frac{1}{n}\sum_{i=1}^n|pred_i-y_i|MAE=n1?i=1n?predi??yi?

  • 均方誤差(MSE)
    參數估計值與參數值之差的平方的期望值。
    MSE=1n∑i=1n(predi?yi)2MSE=\frac{1}{n}\sum_{i=1}^n(pred_i-y_i)^2MSE=n1?i=1n?(predi??yi?)2
    ? 由于MSE損失函數能夠加大對異常值的懲罰,在高分段和低分段能獲得更好的表現,使用MAE的模型在中分段能獲得更好的表現。因此可以結合使用以MSE和MAE為損失函數的模型,分段進行預測。
    ? 下面使用lightgbm建模并進行融合,只列出關鍵代碼。

# ‘regression_l1’表示MAE損失函數 lgb_param_l1={'learning_rate':0.01,'objective':'regression_l1' } # ‘regression_l2’表示MSE損失函數 lgb_param_l2={'learning_rate':0.01,'objective':'regression_l2' } #第一種參數預測 clf1=lgb.LGBMRegressor(**lgb_param_l1) clf1.fit(X_train,y_train,eval_set=[(X_train,y_train),(X_val,y_val)],eval.metric='mae',early_stopping_round=200) #預測的劃分出來的測試集的標簽 pred_val1=clf1.predict(X_val,num_iteration=clf.best_iteration_) vali_mae1=accuracy_score(y_val,np.round(pred_val)) # 預測的未來標簽的測試集的標簽 pred_test1=clf.predict(test[feature_name],num_iteration=clf.best_iteration)#第二種參數預測 clf2=lgb.LGBMRegressor(**lgb_param_l1) clf2.fit(X_train,y_train,eval_set=[(X_train,y_train),(X_val,y_val)],eval.metric='mae',early_stopping_round=200) #預測的劃分出來的測試集的標簽 pred_val2=clf1.predict(X_val,num_iteration=clf.best_iteration_) vali_mae2=accuracy_score(y_val,np.round(pred_val)) # 預測的未來標簽的測試集的標簽 pred_test2=clf.predict(test[feature_name],num_iteration=clf.best_iteration)#模型參數進行融合之后的結果 pred_test=pd.DataFrame() pred_test['ranks']=list(range(50000)) pred_test['result']=1 pred_test.loc[pred_test.ranks<400,'result']=pred_test1.loc[pred_test1.ranks<400,'pred_mae']*0.4+pred_test2.loc[pred_test2.ranks<400,'pred_mae']*0.6 pred_test.loc[pred_test.ranks>46000,'result']=pred_test1.loc[pred_test1.ranks>46000,'pred_mae']*0.4+pred_test2.loc[pred_test2.ranks>46000,'pred_mae']*0.6

? 這種模型融合方法在實際生產環境中較難部署,因為需要提前確定每一個貸款客戶使用何種模型打分,通常難以實現。所以在實際應用中,通常將不同的模型分數加權組合得到用戶的最終分數。如使用AUC值作為權重將不同模型的結果進行組合。

樹模型特征衍生

? 由于邏輯回歸等線性模型很難發掘特征之間的非線性關系,因此實際應用中效果會差于樹模型。通過樹模型與邏輯回歸模型相結合,可以增加線性模型的非線性能力。在實際應用中,常使用XGboost或LightGBM來進行特征衍生。

LR+離散特征優勢

? 在工業界,很少直接將連續值作為特征喂給邏輯回歸模型,而是將連續特征離散化為一系列0、1特征交給邏輯回歸模型,這樣做的優勢有以下幾點:

1)稀疏向量內積乘法運算速度快,計算結果方便存儲,容易scalable(擴展)。

2)離散化后的特征對異常數據有很強的魯棒性:比如一個特征是年齡>30是1,否則0。如果特征沒有離散化,一個異常數據“年齡300歲”會給模型造成很大的干擾。

3)邏輯回歸屬于廣義線性模型,表達能力受限;單變量離散化為N個后,每個變量有單獨的權重,相當于為模型引入了非線性,能夠提升模型表達能力,加大擬合。

4)離散化后可以進行特征交叉,由M+N個變量變為M?NM*NM?N個變量,進一步引入非線性,提升表達能力。

5)特征離散化后,模型會更穩定,比如如果對用戶年齡離散化,20-30作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同的人。當然處于區間相鄰處的樣本會剛好相反,所以怎么劃分區間是門學問。

6)離散后每一個特征的每一個取值對應著評分卡加減分數,業務上更容易理解。

海量離散特征+LR是業內常見的一個做法。而少量連續特征+復雜模型是另外一種做法,例如GBDT。

模型是使用離散特征還是連續特征,其實是一個“海量離散特征+簡單模型” 同 “少量連續特征+復雜模型”的權衡。既可以離散化用線性模型,也可以用連續特征加深度學習。

GBDT離散化

? 使用GBDT編碼,可以解決人工組合特征過程中不知道切分點選取、不知道離散化多少份的問題。因為切分點選取根據均方差減小,客觀選取切分點和份數。每顆決策樹從根節點到葉節點的路徑,會經過不同的特征,此路徑就是特征組合,包括二階、三階等,這取決于樹的深度。
? 由于GDBT在線預測比較困難,而且訓練時間復雜度高于LR。所以實際中,可以離線訓練GDBT,然后將該模型作為在線ETL的一部分。

融合方案詳解

在介紹這個模型之前,先來介紹兩個問題:

1)為什么建樹采用ensemble決策樹,而不是單棵的決策樹模型:

  • 一棵樹的表達能力很弱,不足以表達多個有區分性的特征組合。
  • 多棵樹的表達能力更強一些。可以更好的發現有效的特征和特征組合

2)為什么建樹采用GBDT而非RF:

  • RF也是多棵樹,但從效果上有實踐證明不如GBDT。
  • 且GBDT前面的樹,特征分裂主要體現對多數樣本有區分度的特征。
  • 后面的樹,主要體現的是經過前N顆樹,殘差仍然較大的少數樣本。
  • 優先選用在整體上有區分度的特征,再選用針對少數樣本有區分度的特征,思路更加合理,這應該也是用GBDT的原因。

下面看一下二者是如何融合的。

? GBDT用來對訓練集提取特征作為新的訓練輸入數據,LR作為新訓練輸入數據的分類器。

具體步驟:

1)GBDT首先對原始訓練數據做訓練,得到一個二分類器,當然這里也需要利用網格搜索尋找最佳參數組合。

2)與通常做法不同的是,當GBDT訓練好做預測的時候,輸出的并不是最終的二分類概率值,而是要把模型中的每棵樹計算得到的預測概率值所屬的葉子結點位置記為1,這樣,就構造出了新的訓練數據。在用GBDT構造新的訓練數據時,采用的正是One-hot方法。并且由于每一弱分類器有且只有一個葉子節點輸出預測結果,所以在一個具有n個弱分類器、共計m個葉子結點的GBDT中,每一條訓練數據都會被轉換為 1 * m 維稀疏向量,且有n個元素為1,其余m-n 個元素全為0。

3)新的訓練數據構造完成后,下一步就要與原始的訓練數據中的label(輸出)數據一并輸入到Logistic Regression分類器中進行最終分類器的訓練。思考一下,在對原始數據進行GBDT提取為新的數據這一操作之后,數據不僅變得稀疏,而且由于弱分類器個數,葉子結點個數的影響,可能會導致新的訓練數據特征維度過大的問題,因此,在Logistic Regression這一層中,可使用正則化來減少過擬合的風險。

df_train = data[data.obs_mth != '2018-11-30'].reset_index().copy() df_test = data[data.obs_mth == '2018-11-30'].reset_index().copy() NUMERIC_COLS = ['person_info','finance_info','credit_info','act_info']from sklearn.preprocessing import OneHotEncoder,LabelEncoderlgb_train = lgb.Dataset(df_train[NUMERIC_COLS], df_train['bad_ind'], free_raw_data=False) params = {'num_boost_round': 50,'boosting_type': 'gbdt','objective': 'binary','num_leaves': 2,'metric': 'auc','max_depth':1,'feature_fraction':1,'bagging_fraction':1, } model = lgb.train(params,lgb_train) leaf = model.predict(df_train[NUMERIC_COLS],pred_leaf=True) lgb_enc = OneHotEncoder() lgb_enc.fit(leaf) data_leaf = np.hstack((lgb_enc.transform(leaf).toarray(),df_train[NUMERIC_COLS]))train, val, train_y, val_y = train_test_split(data_leaf,df_train['bad_ind'],test_size=0.2, random_state=random.choice(range(10000)))lgb_lm = LogisticRegression(penalty='l1',C = 0.3,solver='liblinear') lgb_lm.fit(train, train_y)y_pred_lgb_lm_train = lgb_lm.predict_proba(train)[:, 1] fpr_lgb_lm_train, tpr_lgb_lm_train, _ = roc_curve(train_y, y_pred_lgb_lm_train)y_pred_lgb_lm = lgb_lm.predict_proba(val)[:, 1] fpr_lgb_lm, tpr_lgb_lm, _ = roc_curve(val_y, y_pred_lgb_lm)plt.figure(1) plt.plot([0, 1], [0, 1], 'k--') plt.plot(fpr_lgb_lm_train, tpr_lgb_lm_train, label='LGB + LR train') plt.plot(fpr_lgb_lm, tpr_lgb_lm, label='LGB + LR test') plt.xlabel('False positive rate') plt.ylabel('True positive rate') plt.title('ROC curve') plt.legend(loc='best') plt.show() print('LGB+LR train ks:',abs(fpr_lgb_lm_train - tpr_lgb_lm_train).max(),'LGB+LR AUC:', metrics.auc(fpr_lgb_lm_train, tpr_lgb_lm_train)) print('LGB+LR test ks:',abs(fpr_lgb_lm - tpr_lgb_lm).max(),'LGB+LR AUC:', metrics.auc(fpr_lgb_lm, tpr_lgb_lm))

? 這樣生成的五十維特征有過擬合的風險,所以通過PSI和樹模型的特征重要度來進行特征篩選。篩選的閾值可以選原始特征中最大(小)的PSI(特征重要度)。

時間序列建模

介紹了RNN、LSTM算法,使用LSTM建立一張行為評分卡作為案例。

高維稀疏數據集建模

? 風控領域還有一種自動組合特征的模型叫作因子分解機(FM),可以實現元素級別的深層次特征交叉,且對輸入數據的稀疏性不敏感。
? 比如通過用戶APP列表進行建模,如果對APP特征進行one-hot編碼,特征就會很稀疏。如果將這樣的稀疏數據帶入模型效果模型的訓練結果將很難得到保證,但FM模型可以很好地處理這種問題。
FM的本質是對原始稀疏特征做嵌入得到低維稠密特征。

模型融合

? 如果對模型的解釋性要求較低,則可以使用多模型融合提高模型的表現。主流的融合方法就是基于AUC值的加權平均方法。多模型融合不能保證最終模型的效果一定提升,但是可以有效減小整體模型的方差。

業務應用方案

? 平臺審批策略非常依賴于外部數據,如果某天外部數據突然被切斷,將會對業務造成非常大的影響。因此在面對不穩定數據源的場景時,需要思考如何進行數據源和模型變量的配置。

? 根據每種數據源訓練一個獨立模型,使用每個單模型離線訓練時的AUC值作為融合權重,加權平均得到最終用戶的概率值后再通過映射得到信用評分。融合時需要注意幾點:

  • 對分數進行標準化。使多個模型的分值代表相同含義。
  • 對權重進行標準化。先判斷當前樣本被哪些數據源覆蓋。標準化公式為:
  • 小結

    ? 本章介紹了兩種提升模型效果的融合方案,以及針對時間序列和高維稀疏數據的建模方法,然后介紹多模型融合一些技巧。在實際應用中,還需要根據具體數據、場景進行模型選擇和融合。

    【作者】:Labryant
    【原創公眾號】:風控獵人
    【簡介】:某創業公司策略分析師,積極上進,努力提升。乾坤未定,你我都是黑馬。
    【轉載說明】:轉載請說明出處,謝謝合作!~

    總結

    以上是生活随笔為你收集整理的模型优化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。