百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

LC建模.历史最详细(一 数据筛选)

toyiye 2024-06-21 12:24 8 浏览 0 评论

数据来源:https://www.kaggle.com/ethon0426/lending-club-20072020q1

kaggle相关文章:https://www.kaggle.com/ethon0426/lending-club-20072020q1/code

为了聚焦,每个阶段拆开展示。让大家了解全过程。本文是自己对分类、预测精确理解后,进行组件化、自动化形成的最终结果。

在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 :   lousugang@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)
if 'loadFile' in stage:
    print("一、数据筛选")
    start_time = time.time()  # ps:关于dataframe用法(https://pandas.pydata.org/docs/reference/frame.html)
    data = pd.read_csv(loan_excel, low_memory=False, error_bad_lines=False)  # error_bad_lines删除行列不对齐的数据,usecols可过滤指定列
    print("装载:")
    print(data.info())  # 数据整体情况(行列及数据类型、内存)
    # o_ml.see_detail(data,'issue_d')    # 检查列的值分布及具体值例子
    data = data[data['issue_d'].str.contains('-20', na=False)]  # issue_d含有非标准日期格式,去除数字干扰
    dt_series = pd.to_datetime(data['issue_d'], format="%b-%Y")  # 将 ‘issue_d’ str形式的时间日期转换iso8601
    data['year'] = dt_series.dt.year
    df = data[(data[u'year'] >= start_point) & (data[u'year'] <= end_point)]  # 时间过滤df.issue_d.isin([2020, 2019, 2018])
    print("过滤结果:{}".format(file_tag))
    # o_utils.see_detail(data,'loan_status')
    # loan_condition为数据分析/画像等报表使用,更容易理解;loan_condition_int为后续建模和数据计算使用
    df.loc[:, 'loan_condition'] = df['loan_status'].apply(o_lc.loan_condition)  # apply/map/lambda/df转数组方式 三种替换列值的方式
    df.loc[:, 'loan_condition_int'] = df['loan_condition'].map(o_lc.loan_condition_map).astype(int)  # map替换方式
    o_ml.see_detail(df, 'loan_condition_int')  # 检查列的值分布及具体值例子
    df.reset_index(drop=True)  # 刷新索引
    # print(df.head(2))     # tail为后几行数据
    # print(df.describe().T)        #追加各列类型、首行值、空值/空值率、同值率、值分组  pd.concat索引匹配
    print(df.info())
    df.to_pickle(file)
    end_time = time.time()
    print("loadFile 耗时: {:.2f}秒".format(end_time - start_time))

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码