一、 前言
之前看到信用标准评分卡模型开发及实现的文章,是标准的评分卡建模流程在R上的实现,非常不错,就想着能不能把开发流程在Python上实验一遍呢,经过一番折腾后,终于在Python上用类似的代码和包实现出来,由于Python和R上函数的差异以及样本抽样的差异,本文的结果与该文有一定的差异,这是意料之中的,也是正常,接下来就介绍建模的流程和代码实现。
#####代码中需要引用的包#####
import numpy as np
import pandas as pd
from sklearn.utils import shuffle
from sklearn.feature_selection import RFE, f_regression
import scipy.stats.stats as stats
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
import math
二、数据集准备
数据来自互联网上经常被用来研究信用风险评级模型的加州大学机器学习数据库中的german credit data,原本是存在R包”klaR”中的GermanCredit,我在R中把它加载进去,然后导出csv,最终导入Python作为数据集
############## R #################
library(klaR)
data(GermanCredit ,package="klaR")
write.csv(GermanCredit,"/filePath/GermanCredit.csv")
该数据集包含了1000个样本,每个样本包括了21个变量(属性),其中包括1个违约状态变量“credit_risk”,剩余20个变量包括了所有的7个定量和13个定性指标
>>> df_raw = pd.read_csv('/filePath/GermanCredit.csv')
>>> df_raw.dtypes
Unnamed: 0 int64
status object
duration int64
credit_history object
purpose object
amount int64
savings object
employment_duration object
installment_rate int64
personal_status_sex object
other_debtors object
present_residence int64
property object
age int64
other_installment_plans object
housing object
number_credits int64
job object
people_liable int64
telephone object
foreign_worker object
credit_risk object
接下来对数据集进行拆分,按照7:3拆分训练集和测试集,并将违约样本用“1”表示,正常样本用“0”表示。
#提取样本训练集和测试集
def split_data(data, ratio=0.7, seed=None):
if seed:
shuffle_data = shuffle(data, random_state=seed)
else:
shuffle_data = shuffle(data, random_state=np.random.randint(10000))
train = shuffle_data.iloc[:int(ratio*len(shuffle_data)), ]
test = shuffle_data.iloc[int(ratio*len(shuffle_data)):, ]
return train, test
#设置seed是为了保证下次拆分的结果一致
df_train,df_test = split_data(df_raw, ratio=0.7, seed=666)
#将违约样本用“1”表示,正常样本用“0”表示。
credit_risk = [0 if x=='good' else 1 for x in df_train['credit_risk']]
#credit_risk = np.where(df_train['credit_risk'] == 'good',0,1)
data = df_train
data['credit_risk']=credit_risk
三、定量指标筛选
四、定性指标筛选
至此,就完成了数据集的准备和指标的筛选,下面就要进行逻辑回归模型的建模了,请见