信用评分模型开发(FICO评分)

更新时间:2023-06-11 17:44:33 阅读: 评论:0

信⽤评分模型开发(FICO评分)
以⽀付宝的芝⿇信⽤为例,其分值范围在350-950分。⼀般认为分值越⾼,信⽤越好,个⼈业务的违约率越低。这⾥⽤的也是与FICO评分类似的个⼈信⽤评分⼯具。
FICO评分的只要思路是:多⼤量拥有多个属性的⽤户数据进⾏收集/分析/转换,使⽤各项统计指标(如相关系数/卡⽅校验/⽅差膨胀系数等)对属性进⾏取舍/复制/组合,最终得到⼀个量化的/综合的/可⽤于对⽐的分值。分值的⾼低,⼀⽅⾯反映了⽤户历史信⽤记录的好坏,另⼀⽅⾯暗⽰了未来违约可能性的⼤⼩。
这⾥使⽤到的原始数据主要包括客户的个⼈信息(包括性别/年龄/⼯作岗位/婚姻情况/学历状况等)/账户信息(包括各种账户的数量/存贷款余额等),以及该客户是否存在违约的分类标签。
数据集经过处理后,需要经过数据分箱/属性选择以及离散分类标签与连续信⽤评分结果的转换等过程。
⼀.导⼊数据
#导⼊包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#查看原始数据
属牛的婚姻
data = pd.read_csv('credit.csv')
print('原始数据概况')
data.info()
#数据为12.6M,11个属性,有两个属性MonthlyIncome和NumberOfDependents中有空值
数据为12.6M,有11个属性,有两个属性MonthlyIncome和NumberOfDependents中有空值
⼆.数据清洗
八角寨因为MonthlyIncome和NumberOfDependents中有缺失值,需要对其进⾏处理,常⽤的⽅法1.有上下值填⼊空⽩处;2.属性均值填⼊空⽩处。但是各有它的缺点。这⾥定义了⼀个t_missing的函数,⽤来填充随机森林回归算法对缺失值进⾏填充。
#进⾏数据清洗
#⽤随机森林⽅法对MonthlyIncome缺失值进⾏预测填充,这⾥定义了t_missing函数
ble import RandomForestRegressor
def t_missing(df):
print('随机森林回归填充0值:')
process_df = df.iloc[:,[5,0,1,2,3,4,6,7,8,9]]
#把第5列的MonthlyIncome提前到第0列,作为⼀个标签,便于后续划分数据
#分成有数值缺失值两组
known = process_df.loc[process_df['MonthlyIncome']!=0].values
unknown = process_df.loc[process_df['MonthlyIncome']==0].values
X = known[:,1:]
y = known[:,0]
#⽤x,y训练随机森林回归算法
rfr = RandomForestRegressor(random_state=0,n_estimators=200,max_depth=3,n_jobs=-1)
朱涵燕rfr.fit(X,y)
#得到的模型进⾏缺失值预测
predicted = rfr.predict(unknown[:,1:]).round(0)
捕捉昆虫
#得到的预测结果填补原缺失数据
小熊贝贝df.loc[df['MonthlyIncome']==0,'MonthlyIncome']= predicted
return df
定义outlier_processing函数,⽤于对属性中的离群数据点进⾏删除处理
这⾥⽤到的⽅法是数据分箱:将属性的取值分成若⼲段(箱体),落在同⼀个箱体范围内的数据,⽤⼀个统⼀的数值代替。#对属性中的异常值进⾏删除处理,找出离群点,先计算最⼤和最⼩阈值作为删除标准
#最⼩阈值 = 第⼀四位点 - 1.5*(第三四分位点 - 第⼀四分位点)
#最⼤阈值 = 第三四位点 + 1.5*(第三四分位点 - 第⼀四分位点)
#  <;最⼩阈值和  >最⼤阈值的⾏将会被删除
#定义了outlier_processing函数,⽤于处理离群数据点
def outlier_processing(df,cname):
s = df[cname]
onequater = s.quantile(0.25)
threequater = s.quantile(0.75)
irq = threequater - onequater
min= onequater -1.5*irq
max= threequater +1.5*irq
df = df[df[cname]<=max]
df = df[df[cname]>=min]
return df
MonthlyIncome原始分布图和处理后分布图
#对MonthlyIncome列进⾏数据整理
print('MonthlyIncome属性离群点原始分布:')
data[['MonthlyIncome']].boxplot()
plt.savefig('MonthlyIncome1.png',dpi =300,bbox_inches ='tight')
plt.show()
print('删除离群点,填充缺失数据:')
data = outlier_processing(data,'MonthlyIncome')#删除离群点
data = t_missing(data)#填充缺失数据
print('处理MonthlyIncome后数据概况:')
data.info()#查看整理后数据
#图像显⽰
data[['MonthlyIncome']].boxplot()#箱线图
plt.savefig('MonthlyIncome2.png',dpi =300,bbox_inches ='tight')
plt.show()
删除离群点,填充缺失数据后,数据集少了2M
同理,对其他属性进⾏离群点处理
#同理,对其他属性进⾏离群点处理
data = outlier_processing(data,'age')
data = outlier_processing(data,'RevolvingUtilizationOfUncuredLines') data = outlier_processing(data,'DebtRatio')
data = outlier_processing(data,'NumberOfOpenCreditLinesAndLoans') data = outlier_processing(data,'NumberRealEstateLoansOrLines') data = outlier_processing(data,'NumberOfDependents')
对于三个取值过于集中的属性进⾏⼿⼯处理
#三个取值过于集中的属性,三个四分位点的值相等,直接⽤outlier_processing的函数会导致所有值被删除
#因此对这三个属性进⾏⼿⼯处理
features =['NumberOfTime30-59DaysPastDueNotWor','NumberOfTime60-89DaysPastDueNotWor','NumberOfTimes90DaysLate'] features_labels =['30-59days','60-89days','90+days']
print('三个属性的原始分布:')
data[features].boxplot()
plt.savefig('三个属性的原始分布', dpi =300,bbox_inches ='tight')
实是欲界之仙都plt.show()
print('删除离群点后:')
data = data[data['NumberOfTime30-59DaysPastDueNotWor']<90]
data = data[data['NumberOfTime60-89DaysPastDueNotWor']<90]
data = data[data['NumberOfTimes90DaysLate']<90]
data[features].boxplot()
plt.savefig('三个属性的整理后分布', dpi =300,bbox_inches ='tight')
plt.show()
print('处理离群点后数据概况:')
data.info()
#⽣成数据集和测试集
from  sklearn .model_lection import  train_test_split
#原始值0为正常,1为违约。因为习惯上信⽤评分越⾼,违约的可能越⼩,所以将原始值0和1置换data ['SeriousDlqin2yrs'] = 1-data ['SeriousDlqin2yrs']
Y = data ['SeriousDlqin2yrs']
X = data .iloc [:,1:]
#拆分训练集和数据集
X_train ,X_test ,Y_train ,Y_test = train_test_split (X ,Y ,test_size =0.3,random_state = 0)train = pd .concat ([Y_train ,X_train ],axis = 1)
test = pd .concat ([Y_test ,X_test ],axis = 1)我的好兄弟吉他谱
clasTest = test .groupby ('SeriousDlqin2yrs')['SeriousDlqin2yrs'].count ()
print ('训练集数据')
print (train .shape )
print ('测试集数据')
船的组词
print (test .shape )

本文发布于:2023-06-11 17:44:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/931207.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   属性   缺失   离群   填充
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图