python数据分析实战之客户还款能力预测

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

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
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值