学习笔记(五)5个常用模型的模型建立与评估

数据是金融数据,我们要做的是预测贷款用户是否会逾期,表格中,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'))

结果:
在这里插入图片描述

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

结果:
在这里插入图片描述

使用决策树进行预测

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

结果:
在这里插入图片描述

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

结果如下:
在这里插入图片描述

使用lightgbm预测

lightgbm安装说明:lightgbm安装教程,经实践发现好像lightgbm并不支持32位的python。
参考文献:lightgbm分类使用参考1lightgbm分类使用参考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) )

结果如下:
在这里插入图片描述

模型分析

roc图表

1.ROC原理
2.ROC原理
3.ROC画图
在这里插入图片描述

表格分析

记录五个模型关于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. 评价分类结果相关知识和几个算法的具体使用需要多看。

猜你喜欢

转载自blog.csdn.net/zhangyunpeng0922/article/details/84257426