概述
验证过程
该数据集包含23个输入变量(input variable)和一个响应变量(response variable)。该数据集来源于UCI machine learning repository,为某银行的信用卡客户信息数据,共有30000个样本,包括过去六个月的账单还款情况。
Y:下个月还款违约情况(1=逾期,0=未逾期)
X1:信用额度,包括其个人和家庭补充信用。
X2:性别(1=male;2=female)
X3:教育(1=研究生,2=大学,3=高中,4=其他)
X4:婚姻状况(1=已婚,2=单身,3=其他)
X5:年龄,age
X6-X11:过去六个月的还款情况。X6(2005年九月还款情况)。。。X11(2005年四月还款情况)。其中XN=-1,代表按时还款,XN=1,代表延时一个月还款,XN=2,代表延时两个月还款,。。。,XN=n,代表延时n个月还款,
X12-X17:过去六个月的账单数额情况。X12(2005年九月账单数额情况)…X11(2005年四月账单数额情况)。
X18-X23:过去六个月的还款数额情况。X18(2005年九月还款数额情况)…X23(2005年四月还款数额情况)。
环境配置
操作系统:windows7+64位
内存:4G
Cpu: intel core i5@2.6GHz2.6GHz
Python version: python 3.6.0
Python平台:pycharm
首先获取数据,将原始csv文件转化为txt文件,逐行读取数据,为利于后期回归运算将变量格式的数据统一转化为float格式。在变量选取中我们本着类别变量均等,训练矩阵随机,训练与测试矩阵28原则。
如下:
float(listFromLine[i])
分别定义标签矩阵和变量矩阵,读入客户数据。
此模型预测变量为0或1。其中类别为1的变量6636个,类别为0的变量23364个。我们选择相等的两类样本数0和1分别6600个。
首先进行数据集进行拆分,使用sklearn的cross_validation进行数据拆分。
from sklearn.cross_validationimport train_test_split
X_train,X_test, y_train, y_test=train_test_split(ran_M,rand_V)
(正例1662个,负例1638个。)
我们选择13200个样本,为了使得选取的样本具有随机性,由于原始样本按照账户号输入,可能存在一定的序列关联性,打破原始顺序的方法函数如下:
dataIndex = list(range(randM))
for j in range(randM):
randIndex = int(random.uniform(0, len(dataIndex)))
retm[j, :] =retm1[dataIndex[randIndex]]
classV[j] =classV1[dataInde[randIndex]]
del (dataIndex[randIndex])
首先定义一个list序列,然后利用随机数函数,对序列取值,将取得的样本值顺序赋予新的序列矩阵。
变量筛选
计算输入变量之间的相关系数,输入变量与预测之间的相关关系。当数据量较大时,在进行corrcoef进行相关性计算时,超过了内存容量,出现memory error.我们只是为了大概掌握变量之间的相关程度,为避免memory error需进行矩阵的缩减,在这里选取前5000行进行相关性计算。
从预测变量与输入变量之间的相关系数可见,预测变量与大多数输入变量之间的相关性较小,选取相关系数绝对值大于0.1的变量为LIMIT_BAL、PAY_1、PAY_2、PAY_3、PAY_4、PAY_5、PAY_6。
Corrcoef | default of credit account |
LIMIT_BAL | -0.100 |
SEX | -0.013 |
EDUCATION | 0.037 |
MARRIAGE | -0.039 |
AGE | 0.020 |
PAY_1 | 0.293 |
PAY_2 | 0.220 |
PAY_3 | 0.203 |
PAY_4 | 0.175 |
PAY_5 | 0.172 |
PAY_6 | 0.140 |
BILL_AMT1 | -0.004 |
BILL_AMT2 | 0.000 |
BILL_AMT3 | 0.001 |
BILL_AMT4 | 0.004 |
BILL_AMT5 | 0.001 |
BILL_AMT6 | 0.003 |
PAY_AMT1 | -0.078 |
PAY_AMT2 | -0.081 |
PAY_AMT3 | -0.039 |
PAY_AMT4 | -0.066 |
PAY_AMT5 | -0.037 |
PAY_AMT6 | -0.049 |
在进行变量处理时,可选择归一化、标准化、特征化处理,也可根据变量大小进行类别化处理。LIMIT_BAL数值较大,求其百分位数,使用函数np.percentile(LIMIT_BAL),对变量进行重新设置,选择分位数80,50,30,0对应的值设置为(4,3,2,1)。
Percentile | Value |
100 | 1000000 |
90 | 360000 |
80 | 270000 |
70 | 210000 |
60 | 180000 |
50 | 140000 |
40 | 100000 |
30 | 70000 |
20 | 50000 |
10 | 30000 |
0 | 10000 |
首先我们来验证逐步增加变量的方法。首先选取LIMIT_BAL、PAY_1、PAY_2、PAY_3、PAY_4、PAY_5、PAY_6以及常量系数。
最后
以上就是虚幻摩托为你收集整理的信用卡违约客户的预测模型的选择(二)验证过程的全部内容,希望文章能够帮你解决信用卡违约客户的预测模型的选择(二)验证过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复