天天看點

學習筆記(五)5個常用模型的模型建立與評估

5個常用模型的模型建立與評估

    • 基本思路
    • 資料需求分析
    • 資料處理過程
      • 導入包(包括下面的xgboost和lightgbm)
      • 資料分析過程
      • 資料标準歸一化
    • 使用邏輯回歸進行預測
    • 使用SVM進行預測
    • 使用決策樹進行預測
    • 使用xgboost進行預測
    • 使用lightgbm預測
    • 模型分析
        • roc圖表
        • 表格分析
    • 模型建立問題總結

資料是金融資料,我們要做的是預測貸款使用者是否會逾期,表格中,status是标簽:0表示未逾期,1表示逾期。建構xgboost和lightgbm進行預測(在建構部分資料需要進行缺失值處理和資料類型轉換,如果不能處理,可以直接暴力删除)

基本思路

主要分為以下若幹步驟:

1)資料集預覽

2)資料預處理:切分X,y;删除無用特征;字元型特征編碼;缺失值填充 等

3)特征工程:暫無

4)模型選擇:邏輯回歸,svm,決策樹,xgboost,lightgbm 等

5)模型調參:暫無

6)性能評估

7)最終結果

資料需求分析

  1. 需要直接删除的資料

    Unnamed: 0 使用者ID

    trade_no:不知道是什麼

    bank_card_no:卡号

    id_name:名字

    ‘source’ 提示xs 先去掉

  2. 需要離散化處理的資料(此處不涉及)
    • reg_preference_for_trad
  3. 針對日期資料的處理(轉換成年月日)(此處不涉及)
    • first_transaction_time
    • latest_query_time
    • loans_latest_time
  4. 缺失值的填充
  5. 歸一化處理所有資料

資料處理過程

導入包(包括下面的xgboost和lightgbm)

import numpy as np
import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import*

from xgboost import XGBClassifier
from lightgbm  import LGBMClassifier
           

資料分析過程

datanew = pd.read_csv('F:/ziliao/data/data1.csv', encoding='gbk')

"""
1.缺失值處理
"""
datanew=pd.DataFrame(datanew.fillna(0))
# 簡單的缺失值處理
# datanew.replace(to_replace='0.', value=np.nan)
# 丢棄帶有缺失值的資料
# datanew = datanew.dropna(axis=1, how='any')
data_columns = datanew.columns

"""
1.2 對reg_preference_for_trad 的處理  【映射】
    nan=0 境外=1 一線=5 二線=2 三線 =3 其他=4
"""
n = set(datanew['reg_preference_for_trad'])
dic = {}
for i, j in enumerate(n):
    dic[j] = i
datanew['reg_preference_for_trad'] = datanew['reg_preference_for_trad'].map(dic)
"""
1.3 資料集的切分
"""
X_train, X_test, y_train, y_test = train_test_split(datanew[data_columns[1:90]], datanew[data_columns[44]],test_size=0.3, random_state=666)
X_train.drop(["status","trade_no","bank_card_no","id_0me","source"],axis=1,inplace=True)
X_test.drop(["status","trade_no","bank_card_no","id_0me", "source"],axis=1,inplace=True)

           

資料标準歸一化

标準化資料,方差為1,均值為零進行資料的歸一化

"""
1.4标準化資料,方差為1,均值為零
"""
standardScaler = StandardScaler()
X_train_fit = standardScaler.fit_transform(X_train)
X_test_fit = standardScaler.transform(X_test)
           

使用邏輯回歸進行預測

print("\n{}使用邏輯回歸預測{}".format("*"*20, "*"*20))
log_reg = LogisticRegression()
# sgd = SGDClassifier()
log_reg.fit(X_train_fit, y_train)
log_reg.fit(X_train_fit, y_train)
log_reg_predict = log_reg.predict(X_test_fit)
decisions.update(logistic = log_reg.decision_function(X_test_fit)) ## (字典)模型:預測值

print("predict:",log_reg.score(X_test_fit, y_test))
print("roc_auc_score準确率:", roc_auc_score(y_test, log_reg_predict))
print("precision_score準确率:", precision_score(y_test, log_reg_predict))
print("recall_score準确率:", recall_score(y_test, log_reg_predict))
print("f1_score:",f1_score(y_test, log_reg_predict, average='macro'))

           

結果:

學習筆記(五)5個常用模型的模型建立與評估

使用SVM進行預測

print("\n{}使用svm預測{}".format("*"*20, "*"*20))
lsvc = LinearSVC()
lsvc.fit(X_train_fit, y_train)
lsvc_predict = lsvc.predict(X_test_fit)
decisions.update(svm=lsvc.decision_function(X_test_fit))
print("linear_svc準确率:", lsvc.score(X_test_fit, y_test))
print("roc_auc_score準确率:", roc_auc_score(y_test, lsvc_predict))
print("precision_score準确率:", precision_score(y_test, lsvc_predict))
print("recall_score準确率:", recall_score(y_test, lsvc_predict))
print("f1_score準确率:",f1_score(y_test, lsvc_predict) )
           

結果:

學習筆記(五)5個常用模型的模型建立與評估

使用決策樹進行預測

print("\n{}使用決策樹預測{}".format("*"*20, "*"*20))
dtc = DecisionTreeClassifier()
dtc.fit(X_train_fit, y_train)
dtc_predict = dtc.predict(X_test_fit)
decisions.update(DecisionTree=dtc.predict_proba(X_test_fit)[:,1])

print("DecisionTreeClassifier準确率:", dtc.score(X_test_fit, y_test))
print("roc_auc_score準确率:", roc_auc_score(y_test, dtc_predict))
print("precision_score準确率:", precision_score(y_test, dtc_predict))
print("recall_score準确率:", recall_score(y_test, dtc_predict))
print("f1_score準确率:",f1_score(y_test, dtc_predict) )

           

結果:

學習筆記(五)5個常用模型的模型建立與評估

使用xgboost進行預測

安裝說明:xgboost安裝教程

參考文章:xgboost分類使用說明

分類使用的是 XGBClassifier

回歸使用的是 XGBRegression

print("\n{}使用XGboost預測{}".format("*"*20, "*"*20))
xgbc_model = XGBClassifier()
xgbc_model.fit(X_train_fit, y_train)
xgbc_model_predict = xgbc_model.predict(X_test_fit)
decisions.update(xgboost=xgbc_model.predict_proba(X_test_fit)[:,1])
print("xgbc_model準确率:", xgbc_model.score(X_test_fit, y_test))
print("roc_auc_score準确率:", roc_auc_score(y_test, xgbc_model_predict))
print("precision_score準确率:", precision_score(y_test, xgbc_model_predict))
print("recall_score準确率:", recall_score(y_test, xgbc_model_predict))
print("f1_score準确率:", f1_score(y_test, xgbc_model_predict) )
           

結果如下:

學習筆記(五)5個常用模型的模型建立與評估

使用lightgbm預測

lightgbm安裝說明:lightgbm安裝教程,經實踐發現好像lightgbm并不支援32位的python。

參考文獻:lightgbm分類使用參考1,lightgbm分類使用參考2

分類使用的是 LGBMClassifier

回歸使用的是 LGBMRegression

print("\n{}使用lightgbm預測{}".format("*"*20, "*"*20))
lgbm_model = LGBMClassifier()
lgbm_model.fit(X_train_fit, y_train)

lgbm_model_predict = lgbm_model.predict(X_test_fit)
decisions.update(lightgmb=lgbm_model.predict_proba(X_test_fit)[:,1])
print(lgbm_model_predict)
print("lgbm_model準确率:", lgbm_model.score(X_test_fit, y_test))
print("roc_auc_score準确率:", roc_auc_score(y_test, lgbm_model_predict))
print("precision_score準确率:", precision_score(y_test, lgbm_model_predict))
print("recall_score準确率:", recall_score(y_test, lgbm_model_predict))
print("f1_score準确率:",f1_score(y_test, lgbm_model_predict) )
           

結果如下:

學習筆記(五)5個常用模型的模型建立與評估

模型分析

roc圖表

1.ROC原理

2.ROC原理

3.ROC畫圖

學習筆記(五)5個常用模型的模型建立與評估

表格分析

記錄五個模型關于precision,recall,f1_score,auc,roc的評分表格(為了友善僅保留四位)

precision recall f1_score auc roc_auc_score
邏輯回歸 0.7059 0.3429 0.6633 0.7939 0.6450
線性SVM 0.7202 0.3142 0.4376 0.7965 0.7821
決策樹 0.5082 0.4000 0.4476 0.6725 0.6285
xgboost 0.7234 0.3532 0.4746 0.7909 0.6516
lightGBm 0.6667 0.3532 0.4618 0.7775 0.6440

模型建立問題總結

  1. dtc = DecisionTreeClassifier(max_depth=8) ,為什麼沒有max_depth=8時,predict_proba(x_test_fit)輸出的是(0,…,1)。
  2. 評價分類結果相關知識和幾個算法的具體使用需要多看。

繼續閱讀