全系列过程谢谢杨总引入门,自己兴趣所在,分享了出来。文章中所涉及代码无隐私问题,量比较多(700多行,分6个模块),且逐步在调整结构,优化逻辑处理,代码逐步放出来。
有思维、有动作、有结果
Lending club之所以一度成为全球p2p行业老大的地位得益于其风控系统,不过中美信用体系,金融行业发展程度相差很大,lending club在交易中只充当交易平台,风险由投资者自己承担,lending club 利用其风控系统一度将坏账控制在很小的比例,其实由于模式之差,有参考的意义,并不能完全依赖。该信贷数据曾作为kaggle比赛参考数据,题目为建立信贷违约预测模型。以下为LC的审批流程。

关于Lending club数据的分析,我将从准备工作、获取数据及数据筛选、数据画像PPT、特征探索、特征字段业务分析、数据清洗及预处理、特征衍生、建模八个步骤对数据进行处理,主要的语言为python。
一、准备工作
下载:登录https://www.kaggle.com/wendykan/lending-club-loan-data,下载最新的数据,网页有下载包的介绍。如下图,图示中标红为该数据配套信息。大小2.33GB,三个文件(sqlite数据库文件、csv数据文件、字典文件),外网网速太慢,我传到自己百度网盘,如下:

翻译数据字典:数据字典字段名,均有对应的英文介绍,通过部分中文网站也能获取到翻译名,由于一个字段的字面理解从字典看永远不够,建议大家先翻译,不准确或者生硬的字段,去查阅美国信贷的名词介绍即可。LC的数据库表,是合并处理过的数据,类似共同借款人、困难计划等设计从原始是分表的,还有贷前申请也是分表的。投资人信息、二级申请人等都是独立表分离的。这里是整合后的数据。翻译初稿见wps云:
[金山文档] LCDataDictionary.xlsx
python环境:熟悉python语法,至少能读懂。类、装饰器等使用不多。
若需要运行代码,安装下pycharm,网上找个永久破解,学习用,若有正规开发,还是建议官方购买下。注意部分网络有防火墙,影响破解。版本如下:

新建工程:工程环境无所限制,引入requirements.txt,执行以下命令,安装所需库,部分库需要国外连接。requirements.txt在百度网盘有:
pip install -r requirements.txt
二、获取数据及数据筛选
以下为第一部分的代码,主要头部结构如下:相关库引入、公共参数设置、阶段设置、字典表挂载。支持阶段顺序进行,同时支持各阶段直接跳入进行。
# coding:utf-8import sysimport pandas as pdimport numpy as npimport os,timefrom pathlib import Pathfrom datetime import datetimeimport matplotlib.pyplot as pltimport seaborn as snsimport ofun.o_utils as o_utilsimport mathimport reportgen as rptfrom wordcloud import WordCloudimport sklearnfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.cluster import KMeansfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import roc_auc_score,roc_curvefrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import GridSearchCVfrom statsmodels.stats.outliers_influence import variance_inflation_factor as vifimport statsmodels.api as smfrom scipy.stats import modeplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号,#有中文出现的情况,需要u'内容'# plt.rcParams.update({'figure.max_open_warning': 0})# 显示设置np.set_printoptions(threshold=sys.maxsize) # 这个参数填的是你想要多少行显示np.set_printoptions(linewidth=50000) # 这个参数填的是横向多宽pd.set_option('display.max_columns', 50000)pd.set_option('display.max_rows', 50000)pd.set_option('display.width', 50000) # 影响显示pd.set_option('display.max_colwidth', 50000)start_time = time.process_time()# stage = ['loadFile','dataanyla','dataFilter','dataClrAndPre','genFeatures'] # dataPPT (可选)stage = ['loadFile','dataanyla','dataFilter','dataClrAndPre']print("一:课题分析:构造一个简单明了的传统信贷申请评分卡(A卡),和一个解释性较差的黑箱预测模型,用于辅助决策")disk_file='F:/jcbank青干班/D11/34_1110834_bundle_archive/LCDataDictionary.xlsx'disk = pd.read_excel(disk_file,sheet_name='LoanStats')data_disc = dict(zip(disk['LoanStatNew'],disk['LoanStatNew_trans']))data = Nonefile = "lc_2016-2018.pkl"file_test = "lc_test_2016-2018.pkl"file_vail = "lc_vail_2016-2018.pkl"file_train = "lc_train_2016-2018.pkl"df_list = []if(Path(file).exists()):df = pd.read_pickle(file)df_list.append(df)if (Path(file_test).exists()):df_test = pd.read_pickle(file_test)df_list.append(df_test)if (Path(file_vail).exists()):df_vail = pd.read_pickle(file_vail)df_list.append(df_vail)if (Path(file_train).exists()):df_train = pd.read_pickle(file_train)df_list.append(df_train)# df_list = [df, df_test, df_vail, df_train]print("loadFile" + str(df_train.shape))
第二部分代码:该部分主要以数据装载、根据时间进行分段筛选,代码中为2016-2018三年的数据为主,同时进行特征扩展,将贷款状态进行分类转换及数值化,同时to_pickle以文件形式固化该部分数据。
'''二:数据获取'''# 根据贷款状态 ‘loan_status’ 定义好坏贷款bad_loan = ["Charged Off","Default","Does not meet the credit policy. Status:Charged Off","In Grace Period","Late (16-30 days)","Late (31-120 days)"]def loan_condition(status):if status in bad_loan:return 'Bad Loan'else:return 'Good Loan'if 'loadFile' in stage:print("二:数据获取:")afile='D:/workspace/python3/OupFlask/apps/lc/data/loan.csv'data = pd.read_csv(afile,low_memory=False)print(data.info())print(o_utils.get_bp(2) + "1)、数据分拆: issue_d(2016-2018年)")# print(df['issue_d'].value_counts) #过滤字段 值初评估dt_series = pd.to_datetime(data['issue_d']) # 将 ‘issue_d’ str形式的时间日期转换data['year'] = dt_series.dt.yeardata['month'] = dt_series.dt.monthdf = data[(data[u'year'] >= 2016) & (data[u'year'] <= 2018)] # 过滤df.loc[:, 'loan_condition'] = np.nan # 初始化字段df.loc[:, 'loan_condition'] = df['loan_status'].apply(loan_condition)df.loc[:, 'loan_condition_int'] = np.nan # 初始化字段lst = [df]for col in lst:col.loc[df['loan_condition'] == 'Good Loan', 'loan_condition_int'] = 0 # Negative (Bad Loan)col.loc[df['loan_condition'] == 'Bad Loan', 'loan_condition_int'] = 1 # Positive (Good Loan)df.loc[:, 'loan_condition_int'] = df['loan_condition_int'].astype(int)print(df.info())df.to_pickle(file)# badloanDf = df[df['loan_condition'] == 'Bad Loan'] # 整理出坏账数据
这是python应用的一个场景,同时提升我们了解业务、分析建模、
python应用、数据分析四个方面的能力,有思维、有动作、
有结果,不断循环找个过程,能看到能做到的事会越来越多。




