文章目录
1、明确需求和目的
- 客户向P2P平台申请贷款时,平台会通过线上或线下的的方式让客户填写贷款申请表,收集客户信息,同时也会借助第三方平台如征信机构等信息,通过以往的历史数据可以训练出一个预测模型。
- 当有新客户时,就可以根据新客户的信息来预测判断出客户是否有还款能力,从而决定是否向客户发放贷款。
2、数据收集
- 数据集是某P2P平台发生借贷的业务数据,原始数据共有111个变量,39535条记录。

3、数据预处理
3.1 数据整合
3.1.1 加载相关库和数据集
- 使用的库主要有:pandas、numpy、sklearn
- 使用的数据集:某P2P平台发生借贷的业务数据(LoanStats3a.csv)
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore") # 忽略警告信息
# 加载数据集,第一行是字符串,所以要skiprows=1跳过第一行
loans_2020 = pd.read_csv('LoanStats3a.csv', skiprows=1)
3.1.2 数据总体概览
print(loans_2020.info()) # 展示概览信息
print(loans_2020.describe()) # 展示数值类型字段的统计信息
print(loans_2020.sample(5)) # 随机抽样10条数据
print(loans_2020.shape) # 展示形状信息
-----------------------------------
(39535, 111)
3.2 数据清洗
3.2.1 多余列的删除
首先删除空白值超过一半的列
# 剔除空白值超过一半的列,thresh=n:至少有n个NaN的列才会去除
loans_2020 = loans_2020.dropna(thresh=len(loans_2020) / 2 , axis=1)
# 输出到“loans_2020.csv”文件 , index=False表示不加索引
loans_2020.to_csv('loans_2020.csv', index=False)
重新加载数据集,查看数据信息:
loans_2020 = pd.read_csv("loans_2020.csv")
print(loans_2020.shape)
------------------------------- # 去除多余的列之后,剩余54列
(39535, 54)
print("第一行的数据展示 \n",loans_2020.iloc[0]) #第一行的数据
进一步分析数据,继续删除无用的列(描述、URL、id等对模型建立没有什么作用的字段):
"""
desc:贷款描述
url:URL链接
id:用户ID
member_id:会员编号
funded_amnt:承诺给该贷款的总金额
funded_amnt_inv:投资者为该贷款承诺的总金额
grade:贷款等级。贷款利率越高,则等级越高
sub_grade:贷款子等级
emp_title:工作名称
issue_d:贷款月份
...
"""
loans_2020 = loans_2020.drop(['desc', 'url',"id", "member_id", "funded_amnt", "funded_amnt_inv", "grade", "sub_grade", "emp_title", "issue_d","zip_code", "out_prncp", "out_prncp_inv", "total_pymnt", "total_pymnt_inv", "total_rec_prncp","total_rec_int", "total_rec_late_fee", "recoveries", "collection_recovery_fee", "last_pymnt_d", "last_pymnt_amnt"], axis=1)
print(loans_2020.shape)
------------------------------ # 进一步去除多余的列之后,剩余32列
(39535, 32)
进一步分析,去掉特征中只有一种属性的列(在原始数据中的特征值只有一种属性的话,对于分类模型的预测是没有用的):
orig_columns = loans_2020.columns # 展现出所有的列
drop_columns = [] # 初始化空列表
for col in orig_columns:
# dropna()先删除空值,再找出唯一的属性,否则加上空值就是两个属性了
col_series = loans_2020[col].dropna().unique() # 去重,找出唯一属性的特征
if len(col_series) == 1: #如果该特征的属性只有一个属性,就给过滤掉该特征
drop_columns.append(col)
loans_2020 = loans_2020.drop(drop_columns, axis=1) # 去除特征中只有一种属性的列
print(drop_columns)
print(loans_2020.shape)
-----------------------
['initial_list_status', 'collections_12_mths_ex_med', 'policy_code', 'application_type', 'acc_now_delinq', 'chargeoff_within_12_mths', 'delinq_amn

本文通过python进行数据分析,旨在预测客户还款能力。首先明确了需求,收集了P2P平台的借贷业务数据。在数据预处理阶段,进行了数据整合、清洗,包括删除多余列、处理缺失值、数据类型转换和重复值处理。接着,使用逻辑回归和KNN模型进行训练,发现模型效果一般,提出改进策略,如调整权重、参数、生成新特征或更换模型。
最低0.47元/天 解锁文章
588

被折叠的 条评论
为什么被折叠?



