为了聚焦,每个阶段拆开展示。让大家了解全过程。本文是自己对分类、预测精确理解后,进行组件化、自动化形成的最终结果。
在kaggle上我将LC相关的文章,全部阅读了一遍。并精读了每篇文章的过程。作者的思路大多雷同,但做的很精细。很多都没有最终结果。我上次做LC分析,模型精确度也就60%左右,本文章的精细程度到每句代码。内含特征分析、值分布、决策树、k-means聚类、分箱、平滑、样本均衡等点,并附带具体可视化分析,最终形成A卡评分模型。使用逻辑回归、随机森林、Xgboost、ANN、LightGBM等模型。首次模型计算精准度98.3%以上。
按章节提供,代码中保护最全的标准。每阶段代码不做删除。
全文实现按年提取。相对配置固化、分阶段输出隔离,支持按阶段进行重复进行。
全文实现按年提取。相对配置固化、分阶段输出隔离,支持按阶段进行重复进行。
前提:
本文python3.9.5 兼容M1。conda+pip3管理依赖
# -*- encoding: utf-8 -*-
"""
@File : s_lc.py(通过逻辑回归、随机森林、LightGBM、XGBoost、ANNs进行A卡分析,输出模型以及评分表)
@Contact : lou@126.com
@License : (C)Copyright 2018-2021
@Modify Time @Author @Version @Desciption
------------ ------- -------- -----------
2021/11/19 22:31 sugang.lou 1.0 Lending Club Data Model
"""
# lib库参考ReadMe.md,按基本库、第三库、自有库三部分引入
import time
import warnings
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import hvplot.pandas # https://hvplot.holoviz.org/
import pydotplus # 依赖Graphviz,用于dot解析树文件
import statsmodels.api as sm
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression # 逻辑回归
from sklearn.metrics import roc_auc_score, roc_curve, accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split # 测试集与训练集划分
from sklearn.pipeline import Pipeline # 详解Pipline(内含):https://blog.csdn.net/SanyHo/article/details/105472795
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder, \
StandardScaler # MinMaxScaler归一化:https://blog.csdn.net/GentleCP/article/details/109333753
from sklearn.tree import DecisionTreeClassifier, export_graphviz
import xgboost as xgb
from lightgbm import LGBMClassifier # image not found报错解决:https://blog.51cto.com/mapengfei/2476367
import o_lc
import ofun.o_ml as o_ml
import ofun.o_utils as o_utils
warnings.filterwarnings('ignore')
np, plt, pd = o_ml.init(np, plt, pd) # 初始化numpy matplotlib panda设置
base_dir = o_utils.get_base_dir("lc") # 根目录
'''Credit_Risk_Analysis(Lending Club Data)-分阶
loadFile:数据装载
dataAudit:数据画像
dataClrAndPre:数据预处理,需要重建索引rest_index,并排序sort_values
modelPrepare: 建模准备
genModel: 建模
genModelExt: 建模扩展
ps:pycharm测试时,为降低flask的影响,可临时关闭flaskConsole启动窗口,去除环境变量的初始化报错。
'''
print("课题分析:构造传统信贷申请评分卡(A卡)")
# 阶段控制 stage = ['loadFile','dataAudit','dataClrAndPre','modelPrepare','genModel','genModelExt'] dataClrAndPre支持重复处理
stage = ['genModel'] # 支持按步进行,也支持连续执行
disk_file = base_dir + 'LCDataDictionary.xlsx' # 装载列名字典
data_disc = o_ml.get_dic_excel(disk_file, 'LoanStats', 'LoanStatNew', 'LoanStatNew_trans')
loan_excel = base_dir + 'Loan_status_2007-2020Q3.gzip'
start_point, end_point = 2019, 2020 # 数据使用范围-时间过滤
file_tag = str(start_point) + "-" + str(end_point)
file = base_dir + "lc_%s.pkl" % file_tag
file_lcs = base_dir + "lc_filter_%s.pkl" % file_tag
file_sample_x = base_dir + "x_%s.pkl" % file_tag
file_sample_y = base_dir + "y_%s.pkl" % file_tag
df, df_lcs, sample_x, sample_y = o_lc.get_df_list(file, file_lcs, file_sample_x, file_sample_y)
panda常用处理:
转换/判断
|
改造
|
||||||||||||
包含
|
开始/结束
|
统计
|
寻找
|
获取
|
总长度
|
连接
|
大小写
|
追加
|
重复
|
替换
|
切分
|
去空格
|
抽取
|
contains
|
startsWith/endsWith
|
count
|
findall
|
get
|
len
|
cat
|
upper/lower
|
pad/center
|
repeat
|
slice_replace/replace
|
split+expend
|
strip/ltrip/lstrip
|
extract/extractall
|