信用评分python_信用评分卡模型在Python中实践(上)

信用标准评分卡模型开发及实现的文章,是标准的评分卡建模流程在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")

>>> 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

#提取样本训练集和测试集 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

三、定量指标筛选

#获取定量指标 quant_index = np.where(data.dtypes=='int64') quant_vars = np.array(data.columns)[quant_index] quant_vars = np.delete(quant_vars,0)

df_feature = pd.DataFrame(data,columns=['duration','amount','installment_rate','present_residence','age','number_credits','people_liable']) f_regression(df_feature,credit_risk) #输出逐步回归后得到的变量,选择P值<=0.1的变量 quant_model_vars = ["duration","amount","age","installment_rate"]

四、定性指标筛选

def woe(bad, good): return np.log((bad/bad.sum())/(good/good.sum())) all_iv = np.empty(len(factor_vars)) woe_dict = dict() #存起来后续有用 i = 0 for var in factor_vars: data_group = data.groupby(var)['credit_risk'].agg([np.sum,len]) bad = data_group['sum'] good = data_group['len']-bad woe_dict[var] = woe(bad,good) iv = ((bad/bad.sum()-good/good.sum())*woe(bad,good)).sum() all_iv[i] = iv i = i+1 high_index = np.where(all_iv>0.1) qual_model_vars = factor_vars[high_index]

至此,就完成了数据集的准备和指标的筛选,下面就要进行逻辑回归模型的建模了,请见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信用评分模型是一种用于预测个人信用违约风险的统计模型。其基本原理是通过对大量历史数据进行分析和建模,得出一组评分指标,进而根据个人的信用信息,计算出一个信用评分。而Python是一种功能强大且广泛应用于数据分析和建模的编程语言。 在Python,我们可以使用一些常用的机器学习库,如Scikit-learn和Pandas,来构建信用评分模型。以下是一个基本的步骤: 1. 数据收集和预处理:首先,我们需要获取大量包含个人信用信息的数据集,包括违约和非违约的标签。然后,我们需要对数据进行清洗、转换和特征工程等预处理步骤,以准备建模。 2. 变量选择和编码:在信用评分模型,通常使用一些关键的变量来预测信用违约风险,如收入、年龄、负债比等。我们需要选择与目标变量相关性较高的变量,并对其进行编码,以便于后续建模。 3. 模型训练和评估:使用收集到的数据集,我们可以将其分为训练集和测试集,然后使用训练集来拟合模型。常用的评分模型包括Logistic回归、支持向量机等。我们可以使用Scikit-learn库模型对象来训练模型,并使用测试集对其性能进行评估。 4. 评分计算和模型应用:当模型训练完成后,我们可以将其应用于新的个人信用信息,计算出一个信用评分。一般来说,评分较高的个人代表较低的信用违约风险,反之亦然。可以根据不同的信用评分分组,制定相应的风险管理策略和决策。 总体而言,使用Python构建信用评分模型需要进行数据处理、特征选择、模型训练和评估等步骤。Python的简洁、易用且丰富的机器学习库使得这一过程相对容易,能够帮助金融机构有效评估和管理个人信用风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值