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

本文对比分析了五种常见模型(逻辑回归、SVM、决策树、xgboost、lightgbm)在信贷风险预测中的表现,通过数据预处理、模型训练及评估,详细展示了各模型的精确度、召回率、F1分数及AUC值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据是金融数据,我们要做的是预测贷款用户是否会逾期,表格中,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的评分表格(为了方便仅保留四位)

precisionrecallf1_scoreaucroc_auc_score
逻辑回归0.70590.34290.66330.79390.6450
线性SVM0.72020.31420.43760.79650.7821
决策树0.50820.40000.44760.67250.6285
xgboost0.72340.35320.47460.79090.6516
lightGBm0.66670.35320.46180.77750.6440

模型建立问题总结

  1. dtc = DecisionTreeClassifier(max_depth=8) ,为什么没有max_depth=8时,predict_proba(x_test_fit)输出的是(0,…,1)。
  2. 评价分类结果相关知识和几个算法的具体使用需要多看。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值