逻辑回归预测贷款用户是否会逾期

学习笔记(二)逻辑回归预测贷款用户是否会逾期

算法实践能力的【整个思路】:构建模型——>模型融合——>模型评估——>交叉验证——>模型调参——>特征工程。【遵循】一次只做一件事,【先做再优化】的思路。每一个过程在完成任务的前提下,都可以拓展学习。【期望目标】掌握数据挖掘的流程,提升合作的能力。各位已经有经验,尤其是辅助的助教,还请多指导

给大家的是金融数据,我们要做的是预测贷款用户是否会逾期,表格中,status是标签:0表示未逾期,1表示逾期。要求:构建逻辑回归模型进行预测(在构建部分数据需要进行缺失值处理和数据类型转换,如果不能处理,可以直接暴力删除)
数据

数据处理

  1. 需要直接删除的数据
    -Unnamed: 0 用户ID
    trade_no:不知道是什么,可以分析下
    bank_card_no:卡号
    id_name:名字
    custid: ???
  2. 需要离散化处理的数据(未处理好,待学习)
  3. 针对日期数据的处理(转换成年月日)(未处理好,待学习)
  4. 缺失值的填充
  5. 归一化处理所有数据

代码展示

import numpy as np
import pandas as pd
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import f1_score,mean_squared_error
"""
# 逻辑回归预测贷款用户是否会逾期
"""
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 的处理  
"""
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.4标准化数据,方差为1,均值为零
"""
standardScaler = StandardScaler()
X_train_fit = standardScaler.fit_transform(X_train)
X_test_fit = standardScaler.transform(X_test)

log_reg = LogisticRegression()
log_reg.fit(X_train_fit, y_train)
log_reg_predict = log_reg.predict(X_test_fit)
a=0
for i in log_reg_predict:
    if i == 1:
        a += 1
print("预测为1的个数:",a)
print("predict:",log_reg.score(X_test_fit, y_test))
print("f1_score:",f1_score(y_test, log_reg_predict, average='macro')) 
print("mean_squared_error:",mean_squared_error(y_test, log_reg_predict))

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

问题

缺失值、日期、离散化数据的处理需要学习,数据处理的知识急需补充

猜你喜欢

转载自blog.csdn.net/zhangyunpeng0922/article/details/84106715
今日推荐