数据预处理——以银行借贷评分卡项目为例

一、数据预处理

1、读入数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data=pd.read_csv(r'rankingcard.csv',index_col=0)
data.head()

看一下冰山一角的真实数据,像年龄,收入这样连续型的数据,肯定是需要先做个分箱操作的(先提一下)。

在这里插入图片描述

2 、简单的预处理
  1. 去重
  2. 重置索引
  3. 填补缺失值

这里家庭成员数(NumberOfDependents)直接使用的众数填充,方法比较简单粗暴。

data.drop_duplicates(inplace=True)
data.index=range(data.shape[0])
data['NumberOfDependents'].fillna(value=0,inplace=True)
3、使用随机森林填补缺失的月收入值

缺失的收入值都填充同样的值,肯定会对模型的准确率造成一定的影响。使用随机森林反向预测填补缺失值不失为一个好主意!

def fill_missing_rf(X,y,to_fill): 
	""" 使用随机森林填补一个特征的缺失值的函数 
	参数: X:要填补的特征矩阵 
	y:完整的,没有缺失值的标签 
	to_fill:字符串,要填补的那一列的名称 """ 
	#构建我们的新特征矩阵和新标签 
	df = X.copy() 
	fill = df.loc[:,to_fill] 
	df = pd.concat([df.loc[:,df.columns != to_fill],pd.DataFrame(y)],axis=1) 
	# 找出我们的训练集和测试集 
	Ytrain = fill[fill.notnull()] 
	Ytest = fill[fill.isnull()] 
	Xtrain = df.iloc[Ytrain.index,:] 
	Xtest = df.iloc[Ytest.index,:] 
	
	#用随机森林回归来填补缺失值 
	from sklearn.ensemble import RandomForestRegressor as rfr 
	rfr = rfr(n_estimators=100).fit(Xtrain, Ytrain) 
	Ypredict = rfr.predict(Xtest) 

	return Ypredict

定义评分卡模型本身的特征和标签:

X = data.iloc[:,1:] 
y = data["SeriousDlqin2yrs"] 
X.shape

利用自定义函数计算缺失值:

#求得需要填补的缺失值 
y_pred = fill_missing_rf(X,y,"MonthlyIncome") 

#确认得到y_pred个数 
y_pred.shape 

#确认实际缺失值的个数
data.loc[:,"MonthlyIncome"].isnull().sum()

将得到的结果覆盖原始表格:

#确认个数没有问题,我们就可以将数据覆盖了
data.loc[data.loc[:,"MonthlyIncome"].isnull(),"MonthlyIncome"] = y_pred 
data.info()
4、异常值处理

发现有年龄为0的用户,查看一下个数。
只有一个,直接删掉。

(data["age"] == 0).sum()
data = data[data["age"] != 0]

其他指标也有些奇奇怪怪的值,因为不懂业务,可以问一下业务人员,这里还是先统计一下,删除异常值。

# 有225个样本存在这样的情况,并且这些样本,我们观察一下,标签并不都是1,他们并不都是坏客户。
data[data.loc[:,"NumberOfTimes90DaysLate"] > 90] 
data[data.loc[:,"NumberOfTimes90DaysLate"] > 90].count() 

# 98 96 为异常值,应该把它们删除。
data.loc[:,"NumberOfTimes90DaysLate"].value_counts()
data = data[data.loc[:,"NumberOfTimes90DaysLate"] < 90]

# 一定要恢复索引 
data.index = range(data.shape[0]) 
data.info()

# 查看各个分位数的数据情况
# 不做量纲统一和标准化,因为业务人员需要原本量纲作为参考。
data.describe([0.01,0.1,0.25,0.5,0.75,0.9,0.99]).T
5、处理标签分布不均

银行借贷,违约的人毕竟是相对少数。在样本严重分布不均的情况下,模型不做任何判断,准确率也可以高达99%。

为了使得样本分布均匀,可以使用下采样上采样

因为这里的违约数据本来就不多,所以采用上采样了。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值