1. 程式人生 > >xgboost和lightgbm的模型建立

xgboost和lightgbm的模型建立

學習筆記(四)xgboost和lightgbm的模型建立

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

資料需求分析

  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)

使用xgboost進行預測

安裝說明:xgboost安裝教程
參考文章:xgboost分類使用說明

分類使用的是 XGBClassifier
迴歸使用的是 XGBRegression

xgbc_model = XGBClassifier()
xgbc_model.fit(X_train_fit, y_train)
xgbc_model_predict = xgbc_model.predict(X_test_fit)

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) ) 

結果如下:
在這裡插入圖片描述

使用lightgbm預測

lightgbm安裝說明:lightgbm安裝教程,經實踐發現好像lightgbm並不支援32位的python。
參考文獻:lightgbm分類使用參考1lightgbm分類使用參考2

分類使用的是 LGBMClassifier
迴歸使用的是 LGBMRegression

lgbm_model = LGBMClassifier()
lgbm_model.fit(X_train_fit, y_train)

lgbm_model_predict = lgbm_model.predict(X_test_fit)
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) ) 

結果如下:
在這裡插入圖片描述

模型建立問題總結

  1. lightGBM的安裝時,由於不支援32位,一直報錯安裝不上。因此,重灌了64位版本的才安裝成功。
  2. 由於不瞭解模型, lightGBM剛開始使用了LGBMRegression(),結果得出的預測值是0.0-1.0的迴歸值,後使用LGBMClassifier才能得到【0,1】的預測值。故明白LGBMRegression是解決線性問題,LGBMClassifier解決的是分類問題。、
  3. lightGBM和xgboost不熟悉,需要好好讀讀文件。