精华内容
下载资源
问答
  • 信用评分模型

    2018-04-28 10:47:40
    信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用评分模型 信用...
  • 信用评级模型的12堂课,详细阐述了互联网金融行业的消费信用风控模型设计,比较经典的风控模型材料 值得下载学习好好看看
  • 内容简介《信用评分模型技术与应用》理论联系实际,深入浅出地阐述了信用评分模型的概念、种类、优越性及其在各种金融管理活动中的重要应用,对信用评分模型的数据基础、数据挖掘的技术方法、信用评分模型的发展流程...
  • 信用评分模型(R语言)

    万次阅读 多人点赞 2016-04-23 10:45:57
    本文详细的介绍了信用评分卡的开发流程,开发语言为R语言,python版本请见:一行代码搞定信用评分模型(python) python版实例和数据请见我的github:https://github.com/chengsong990020186/CreditScoreModel,如...

    信用评分

    2016年1月10日

    本文详细的介绍了信用评分卡的开发流程,开发语言为R语言,python版本请见:一行代码搞定信用评分模型(python)

    python版实例和数据请见我的github:https://github.com/chengsong990020186/CreditScoreModel,如觉得实用就点下star,欢迎大家一起学习交流进步。

    一、数据准备

    1、 问题的准备

    •            目标:要完成一个评分卡,通过预测某人在未来两年内将会经历财务危机的可能性来提高信用评分的效果,帮助贷款人做出最好的决策。

    •            背景:

    –            银行在市场经济中起到至关重要的作用。他们决定谁在什么条件下可以得到融资,并且可以创造或打破投资决策。而市场、社会,以及个人和企业都需要获得贷款。

    –            信用评分算法,对默认可能性进行猜测,这是银行用来判断贷款是否应该被授予的方法。

    •            准备:

    –            首先是基于个人借贷的场景,确定“违约”的定义: 根据新的Basel II Capital Accord(巴塞尔二资本协议),一般逾期90天算作违约。

    –            在判别指标上,选择使用历史最大违约天数。

     

    2、数据的获取与整合

    •            数据来源:数据来自Kaggle,cs-training.csv是有15万条的样本数据,下图可以看到这份数据的大致情况。下载地址  为:https://www.kaggle.com/c/GiveMeSomeCredit/data 

                 如果下载出现问题,可以在此下载数据:http://download.csdn.net/download/csqazwsxedc/10228999

    •            数据描述:数据属于个人消费类贷款,只考虑评分卡最终实施时能够使用到的数据应从如下一些方面获取数据:

    –            基本属性:包括了借款人当时的年龄。

    –            偿债能力:包括了借款人的月收入、负债比率。

    –            信用往来:两年内35-59天逾期次数、两年内60-89天逾期次数、两年内90天或高于90天逾期的次数。

    –            财产状况:包括了开放式信贷和贷款数量、不动产贷款或额度数量。

    –            贷款属性:暂无。

    –            其他因素:包括了借款人的家属数量(不包括本人在内)。

    •            原始变量:

    变量名

    变量类型

    变量描述

    SeriousDlqin2yrs

    Y/N

    超过90天或更糟的逾期拖欠

    RevolvingUtilizationOf

    UnsecuredLines

    percentage

    无担保放款的循环利用:除了不动产和像车贷那样除以信用额度总和的无分期付款债务的信用卡和个人信用额度总额

    age

    integer

    借款人当时的年龄

    NumberOfTime30-59DaysPastDueNotWorse

    integer

    35-59天逾期但不糟糕次数

    DebtRatio

    percentage

    负债比率

    MonthlyIncome

    real

    月收入

    NumberOf

    OpenCreditLinesAndLoans

    integer

    开放式信贷和贷款数量,开放式贷款(分期付款如汽车贷款或抵押贷款)和信贷(如信用卡)的数量

    NumberOfTimes90DaysLate

    integer

    90天逾期次数:借款者有90天或更高逾期的次数

    NumberRealEstateLoans

    OrLines

    integer

    不动产贷款或额度数量:抵押贷款和不动产放款包括房屋净值信贷额度

    NumberOfTime60-89DaysPastDueNotWorse

    integer

    60-89天逾期但不糟糕次数:借款人在在过去两年内有60-89天逾期还款但不糟糕的次数

    NumberOfDependents

    integer

    家属数量:不包括本人在内的家属数量

    •            时间窗口:自变量的观察窗口为过去两年,因变量表现窗口为未来两年。

    二、数据处理

    首先去掉原数据中的顺序变量,即第一列的id变量。由于要预测的是SeriousDlqin2yrs变量,因此将其设为响应变量y,其他分别设为x1~x10变量。

    1、缺失值分析及处理

    在得到数据集后,我们需要观察数据的分布情况,因为很多的模型对缺失值敏感,因此观察是否有缺失值是其中很重要的一个步骤。在正式分析前,我们先通过图形进行对观测字段的缺失情况有一个直观的感受。

     

      matrixplot(traindata)

     

    
     

     

      md.pattern(traindata)
    ##        y x1 x2 x3 x4 x6 x7 x8 x9  x10    x5      
    ## 120269 1  1  1  1  1  1  1  1  1    1     1     0
    ##  25807 1  1  1  1  1  1  1  1  1    1     0     1
    ##   3924 1  1  1  1  1  1  1  1  1    0     0     2
    ##        0  0  0  0  0  0  0  0  0 3924 29731 33655

     

    
     

    利用matrixplot函数对缺失值部分进行可视化展示,上图中浅色表示值小,深色表示值大,而默认缺失值为红色。因此可以看到x5变量和x10变量,即MonthlyIncome变量和NumberOfDependents两个变量存在缺失值,具体确实情况可以见上表,monthlyincome列共有缺失值29731个,numberofdependents有3924个。

    对于缺失值的处理方法非常多,例如基于聚类的方法,基于回归的方法,基于均值的方法,其中最简单的方法是直接移除,但是在本文中因为缺失值所占比例较高,直接移除会损失大量观测,因此并不是最合适的方法。在这里,我们使用KNN方法对缺失值进行填补。

     

    traindata<-knnImputation(traindata,k=10,meth = "weighAvg")
    

     

    2、异常值分析及处理

    关于异常值的检测,这里简单介绍以下一些检测方法:

    •       单变量异常值检测:在R语言中使用函数boxplot.stats()可以实现单变量检测,该函数根据返回的统计数据生成箱线图。在上述函数的返回结果中,有一个参数out,它是由异常值组成的列表。更明确的说就是里面列出了箱线图中箱须线外面的数据点。比如我们可以查看月收入分布,第一幅图为没有删除异常值的箱线图。第二幅箱线图删除异常值后,可以发现月收入主要集中分布在3000-8000之间。但是在这份分析报告中,因为我们对业务尚不熟悉,不好将大于8000的数据直接归为异常值,因此对该变量未做处理。

    •       使用LOF(局部异常因子)检测异常值:LOF(局部异常因子)是一种基于密度识别异常值的算法。算法实现是:将一个点的局部密度与分布在它周围的点的密度相比较,如果前者明显的比后者小,那么这个点相对于周围的点来说就处于一个相对比较稀疏的区域,这就表明该点事一个异常值。LOF算法的缺点是它只对数值型数据有效。包‘DMwR’和包‘dprep’中的lofactor()可以计算LOF算法中的局部异常因子。

    •       通过聚类检测异常值:检测异常值的另外一种方式就是聚类。先把数据聚成不同的类,选择不属于任何类的数据作为异常值。例如,基于密度的聚类DBSCAN算法的实现就是将与数据稠密区域紧密相连的数据对象划分为一个类,因此与其他对象分离的数据就会作为异常值。也可以使用K均值算法实现异常值的检测。首先通过把数据划分为k组,划分方式是选择距离各自簇中心最近的点为一组;然后计算每个对象和对应的簇中心的距离(或者相似度),并挑出拥有最大的距离的点作为异常值。

    首先对于x2变量,即客户的年龄,我们可以定量分析,发现有以下值:

     

    unique(traindata$x2)
    ##  [1]  45  40  38  30  49  74  57  39  27  51  46  76  64  78  53  43  25
    ## [18]  32  58  50  69  24  28  62  42  75  26  52  41  81  31  68  70  73
    ## [35]  29  55  35  72  60  67  36  56  37  66  83  34  44  48  61  80  47
    ## [52]  59  77  63  54  33  79  65  86  92  23  87  71  22  90  97  84  82
    ## [69]  91  89  85  88  21  93  96  99  94  95 101  98 103 102 107 105   0
    ## [86] 109

     

    
     

     

    可以看到年龄中存在0值,显然是异常值,予以剔除。

     

    traindata<-traindata[-which(traindata$x2==0),] 

     

     

    而对于x3,x7,x9三个变量,由下面的箱线图可以看出,均存在异常值,且由unique函数可以得知均存在96、98两个异常值,因此予以剔除。同时会发现剔除其中一个变量的96、98值,其他变量的96、98两个值也会相应被剔除

     

    ##  [1]  2  0  1  3  4  5  7 10  6 98 12  8  9 96 13 11
    ##  [1]  0  1  3  2  5  4 98 10  9  6  7  8 15 96 11 13 14 17 12
    ##  [1]  0  1  2  5  3 98  4  6  7  8 96 11  9

     

    
     

     

    其它变量占不作处理。

    三、变量分析

    1、单变量分析

    我们可以简单地看下部分变量的分布,比如对于age变量,如下图:

     

    ggplot(traindata, aes(x = x2, y = ..density..)) + geom_histogram(fill = "blue", colour = "grey60", size = 0.2, alpha = 0.2) + geom_density()

     

     

    可以看到年龄变量大致呈正态分布,符合统计分析的假设。再比如月收入变量,也可以做图观察观察,如下:

     

    ggplot(traindata, aes(x = x5, y = ..density..)) + geom_histogram(fill = "blue", colour = "grey60", size = 0.2, alpha = 0.2) + geom_density() + xlim(1, 20000)

     

     

    月收入也大致呈正态分布,符合统计分析的需要。

     

    2、变量之间的相关性

    建模之前首先得检验变量之间的相关性,如果变量之间相关性显著,会影响模型的预测效果。下面通过corrplot函数,画出各变量之间,包括响应变量与自变量的相关性。

     

    cor1<-cor(traindata[,1:11])
    corrplot(cor1)

     

     

     

     

    corrplot(cor1,method = "number")

     

    由上图可以看出,各变量之间的相关性是非常小的。其实Logistic回归同样需要检验多重共线性问题,不过此处由于各变量之间的相关性较小,可以初步判断不存在多重共线性问题,当然我们在建模后还可以用VIF(方差膨胀因子)来检验多重共线性问题。如果存在多重共线性,即有可能存在两个变量高度相关,需要降维或剔除处理。

    四、切分数据集

     

    table(traindata$y)
    ## 
    ##      0      1 
    ## 139851   9879

     

    
     

     

    由上表看出,对于响应变量SeriousDlqin2yrs,存在明显的类失衡问题,SeriousDlqin2yrs等于1的观测为9879,仅为所有观测值的6.6%。因此我们需要对非平衡数据进行处理,在这里可以采用SMOTE算法,用R对稀有事件进行超级采样。

    我们利用caret包中的createDataPartition(数据分割功能)函数将数据随机分成相同的两份。

     

    set.seed(1234) 
    splitIndex<-createDataPartition(traindata$y,time=1,p=0.5,list=FALSE) 
    train<-traindata[splitIndex,] 
    test<-traindata[-splitIndex,] 

     

    
     

     

    对于分割后的训练集和测试集均有74865个数据,分类结果的平衡性如下:

     

    prop.table(table(train$y)) 

     

     

    ## 
    ##          0          1 
    ## 0.93314633 0.06685367

     

     

     

    prop.table(table(test$y)) 
    ## 
    ##          0          1 
    ## 0.93489615 0.06510385

     

     

     

    两者的分类结果是平衡的,仍然有6.6%左右的代表,我们仍然处于良好的水平。因此可以采用这份切割的数据进行建模及预测。

    五、Logistic回归

    Logistic回归在信用评分卡开发中起到核心作用。由于其特点,以及对自变量进行了证据权重转换(WOE),Logistic回归的结果可以直接转换为一个汇总表,即所谓的标准评分卡格式。

    2、建立模型

    首先利用glm函数对所有变量进行Logistic回归建模,模型如下

     

    fit<-glm(y~.,train,family = "binomial")
    summary(fit)
    ## 
    ## Call:
    ## glm(formula = y ~ ., family = "binomial", data = train)
    ## 
    ## Deviance Residuals: 
    ##     Min       1Q   Median       3Q      Max  
    ## -4.6144  -0.3399  -0.2772  -0.2240   3.6997  
    ## 
    ## Coefficients:
    ##               Estimate Std. Error z value Pr(>|z|)    
    ## (Intercept) -1.812e+00  6.411e-02 -28.268  < 2e-16 ***
    ## x1          -1.846e-05  8.972e-05  -0.206 0.836948    
    ## x2          -2.861e-02  1.276e-03 -22.428  < 2e-16 ***
    ## x3           5.767e-01  1.564e-02  36.867  < 2e-16 ***
    ## x4          -2.321e-05  1.538e-05  -1.509 0.131224    
    ## x5          -1.355e-05  3.845e-06  -3.524 0.000425 ***
    ## x6          -2.769e-03  3.798e-03  -0.729 0.466051    
    ## x7           8.468e-01  2.429e-02  34.855  < 2e-16 ***
    ## x8           8.620e-02  1.599e-02   5.393 6.94e-08 ***
    ## x9           8.294e-01  3.338e-02  24.848  < 2e-16 ***
    ## x10          5.126e-02  1.388e-02   3.694 0.000221 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## (Dispersion parameter for binomial family taken to be 1)
    ## 
    ##     Null deviance: 36747  on 74864  degrees of freedom
    ## Residual deviance: 29793  on 74854  degrees of freedom
    ## AIC: 29815
    ## 
    ## Number of Fisher Scoring iterations: 6

     

    
     

              可以看出,利用全变量进行回归,模型拟合效果并不是很好,其中x1,x4,x6三个变量的p值未能通过检验,在此直接剔除这三个变量,利用剩余的变量对y进行回归。

     

    fit2<-glm(y~x2+x3+x5+x7+x8+x9+x10,train,family = "binomial")
    summary(fit2)
    ## 
    ## Call:
    ## glm(formula = y ~ x2 + x3 + x5 + x7 + x8 + x9 + x10, family = "binomial", 
    ##     data = train)
    ## 
    ## Deviance Residuals: 
    ##     Min       1Q   Median       3Q      Max  
    ## -4.6223  -0.3402  -0.2777  -0.2239   3.5868  
    ## 
    ## Coefficients:
    ##               Estimate Std. Error z value Pr(>|z|)    
    ## (Intercept) -1.825e+00  6.320e-02 -28.873  < 2e-16 ***
    ## x2          -2.894e-02  1.252e-03 -23.120  < 2e-16 ***
    ## x3           5.742e-01  1.544e-02  37.187  < 2e-16 ***
    ## x5          -1.185e-05  3.513e-06  -3.373 0.000744 ***
    ## x7           8.500e-01  2.401e-02  35.397  < 2e-16 ***
    ## x8           7.494e-02  1.420e-02   5.276 1.32e-07 ***
    ## x9           8.306e-01  3.338e-02  24.883  < 2e-16 ***
    ## x10          5.169e-02  1.386e-02   3.730 0.000192 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## (Dispersion parameter for binomial family taken to be 1)
    ## 
    ##     Null deviance: 36747  on 74864  degrees of freedom
    ## Residual deviance: 29797  on 74857  degrees of freedom
    ## AIC: 29813
    ## 
    ## Number of Fisher Scoring iterations: 6

     

    
     

          第二个回归模型所有变量都通过了检验,甚至AIC值(赤池信息准则)更小,所有模型的拟合效果更好些。

     

    3、模型评估

    通常一个二值分类器可以通过ROC(Receiver Operating Characteristic)曲线和AUC值来评价优劣。

    很多二元分类器会产生一个概率预测值,而非仅仅是0-1预测值。我们可以使用某个临界点(例如0.5),以划分哪些预测为1,哪些预测为0。得到二元预测值后,可以构建一个混淆矩阵来评价二元分类器的预测效果。所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即true positive + true nagetive。同时可以相应算出TPR(真正率或称为灵敏度)和TNR(真负率或称为特异度)。我们主观上希望这两个指标越大越好,但可惜二者是一个此消彼涨的关系。除了分类器的训练参数,临界点的选择,也会大大的影响TPR和TNR。有时可以根据具体问题和需要,来选择具体的临界点。

    如果我们选择一系列的临界点,就会得到一系列的TPR和TNR,将这些值对应的点连接起来,就构成了ROC曲线。ROC曲线可以帮助我们清楚的了解到这个分类器的性能表现,还能方便比较不同分类器的性能。在绘制ROC曲线的时候,习惯上是使用1-TNR作为横坐标即FPR(false positive rate),TPR作为纵坐标。这是就形成了ROC曲线。

    AUCArea Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.51之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

     

    下面首先利用模型对test数据进行预测,生成概率预测值

    pre <- predict(fit2,test)
    
     

     

    在R中,可以利用pROC包,它能方便比较两个分类器,还能自动标注出最优的临界点,图看起来也比较漂亮。在下图中最优点FPR=1-TNR=0.845,TPR=0.638,AUC值为0.8102,说明该模型的预测效果还是不错的,正确较高。

     

    modelroc <- roc(test$y,pre)
    plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
         grid.col=c("green", "red"), max.auc.polygon=TRUE,
         auc.polygon.col="skyblue", print.thres=TRUE)

     

    
     

     

    ## 
    ## Call:
    ## roc.default(response = test$y, predictor = pre)
    ## 
    ## Data: pre in 69991 controls (test$y 0) < 4874 cases (test$y 1).
    ## Area under the curve: 0.8102

     

    六、WOE转换

    证据权重(Weight of Evidence,WOE)转换可以将Logistic回归模型转变为标准评分卡格式。引入WOE转换的目的并不是为了提高模型质量,只是一些变量不应该被纳入模型,这或者是因为它们不能增加模型值,或者是因为与其模型相关系数有关的误差较大,其实建立标准信用评分卡也可以不采用WOE转换。这种情况下,Logistic回归模型需要处理更大数量的自变量。尽管这样会增加建模程序的复杂性,但最终得到的评分卡都是一样的。

    用WOE(x)替换变量x。WOE()=ln[(违约/总违约)/(正常/总正常)]。

    通过上述的Logistic回归,剔除x1,x4,x6三个变量,对剩下的变量进行WOE转换。

     

    1、进行分箱

    age变量(x2):

     

       cutx2= c(-Inf,30,35,40,45,50,55,60,65,75,Inf)
       plot(cut(train$x2,cutx2))

     

    
     

    NumberOfTime30-59DaysPastDueNotWorse变量(x3):

     

     

       cutx3 = c(-Inf,0,1,3,5,Inf)
       plot(cut(train$x3,cutx3))

     

     

    
     

     

    MonthlyIncome变量(x5):

     

     

       cutx5 = c(-Inf,1000,2000,3000,4000,5000,6000,7500,9500,12000,Inf)
       plot(cut(train$x5,cutx5))

     

     

    
     

     

     

     

     

    NumberOfTimes90DaysLate变量(x7):

       cutx7 = c(-Inf,0,1,3,5,10,Inf)
       plot(cut(train$x7,cutx7))

    NumberRealEstateLoansOrLines变量(x8):

       cutx8= c(-Inf,0,1,2,3,5,Inf)
       plot(cut(train$x8,cutx8))
    
     

     

     

     

    NumberOfTime60-89DaysPastDueNotWorse变量(x9):

       cutx9 = c(-Inf,0,1,3,5,Inf)
       plot(cut(train$x9,cutx9))
    
     

     

     

     

    NumberOfDependents变量(x10):

       cutx10 = c(-Inf,0,1,2,3,5,Inf)
       plot(cut(train$x10,cutx10))

     

    
     

     

     

     

    2、计算WOE值

     

    计算WOE的函数

       totalgood = as.numeric(table(train$y))[1]
       totalbad = as.numeric(table(train$y))[2]
       getWOE <- function(a,p,q)
       {
          Good <- as.numeric(table(train$y[a > p & a <= q]))[1]
          Bad <- as.numeric(table(train$y[a > p & a <= q]))[2]
          WOE <- log((Bad/totalbad)/(Good/totalgood),base = exp(1))
          return(WOE)
      }

    比如age变量(x2)

       Agelessthan30.WOE=getWOE(train$x2,-Inf,30)
       Age30to35.WOE=getWOE(train$x2,30,35)
       Age35to40.WOE=getWOE(train$x2,35,40)
       Age40to45.WOE=getWOE(train$x2,40,45)
       Age45to50.WOE=getWOE(train$x2,45,50)
       Age50to55.WOE=getWOE(train$x2,50,55)
       Age55to60.WOE=getWOE(train$x2,55,60)
       Age60to65.WOE=getWOE(train$x2,60,65)
       Age65to75.WOE=getWOE(train$x2,65,75)
       Agemorethan.WOE=getWOE(train$x2,75,Inf)
       age.WOE=c(Agelessthan30.WOE,Age30to35.WOE,Age35to40.WOE,Age40to45.WOE,Age45to50.WOE,
                Age50to55.WOE,Age55to60.WOE,Age60to65.WOE,Age65to75.WOE,Agemorethan.WOE)
       age.WOE
    ##  [1]  0.57432879  0.52063157  0.34283924  0.24251193  0.22039521
    ##  [6]  0.07194294 -0.25643603 -0.55868003 -0.94144504 -1.28914527

    NumberOfTime30-59DaysPastDueNotWorse变量(x3)

    ## [1] -0.5324915  0.9106018  1.7645290  2.4432903  2.5682332

    MonthlyIncome变量(x5)

    ##  [1] -1.128862326  0.448960482  0.312423080  0.350846777  0.247782295
    ##  [6]  0.114417168 -0.001808106 -0.237224039 -0.389158800 -0.462438653

    NumberOfTimes90DaysLate变量(x7)

    ## [1] -0.3694044  1.9400973  2.7294448  3.3090003  3.3852925  2.3483738

    NumberRealEstateLoansOrLines变量(x8)

    ## [1]  0.21490691 -0.24386987 -0.15568385  0.02906876  0.41685234  1.12192809

    NumberOfTime60-89DaysPastDueNotWorse变量(x9)

    ## [1] -0.2784605  1.8329078  2.7775343  3.5805174  3.4469860

    NumberOfDependents变量(x10)

    ## [1] -0.15525081  0.08669961  0.19618098  0.33162486  0.40469824  0.76425365
    
     

    3、对变量进行WOE变换

    如age变量(x2)

     

    如age变量(x2)

        tmp.age <- 0
        for(i in 1:nrow(train)) {
          if(train$x2[i] <= 30)
            tmp.age[i] <- Agelessthan30.WOE
          else if(train$x2[i] <= 35)
            tmp.age[i] <- Age30to35.WOE
          else if(train$x2[i] <= 40)
            tmp.age[i] <- Age35to40.WOE
          else if(train$x2[i] <= 45)
            tmp.age[i] <- Age40to45.WOE
          else if(train$x2[i] <= 50)
            tmp.age[i] <- Age45to50.WOE
          else if(train$x2[i] <= 55)
            tmp.age[i] <- Age50to55.WOE
          else if(train$x2[i] <= 60)
            tmp.age[i] <- Age55to60.WOE
          else if(train$x2[i] <= 65)
            tmp.age[i] <- Age60to65.WOE
          else if(train$x2[i] <= 75)
            tmp.age[i] <- Age65to75.WOE
          else
            tmp.age[i] <- Agemorethan.WOE
        }
        
        table(tmp.age)
    ## tmp.age
    ##   -1.2891452711972 -0.941445039519045 -0.558680027962495 
    ##               5063               9196               8180 
    ## -0.256436029353835 0.0719429392949312  0.220395209955515 
    ##               8472               9009               9465 
    ##  0.242511934081286  0.342839240194068   0.52063156705216 
    ##               8008               6784               5390 
    ##  0.574328792863984 
    ##               5298
        tmp.age[1:10]
    ##  [1] 0.34283924 0.57432879 0.34283924 0.57432879 0.07194294 0.22039521
    ##  [7] 0.07194294 0.24251193 0.34283924 0.52063157
        train$x2[1:10]
    ##  [1] 38 30 39 30 51 46 53 43 39 32

    NumberOfTime30-59DaysPastDueNotWorse变量(x3)

    ## tmp.NumberOfTime30.59DaysPastDueNotWorse
    ## -0.53249146131578 0.910601840444591  1.76452904024992  2.44329031065646 
    ##             62948              8077              3160               562 
    ##  2.56823323027274 
    ##               118
    ##  [1]  0.9106018 -0.5324915 -0.5324915 -0.5324915 -0.5324915 -0.5324915
    ##  [7] -0.5324915 -0.5324915 -0.5324915 -0.5324915
    ##  [1] 1 0 0 0 0 0 0 0 0 0

    MonthIncome变量(x5)

    ## tmp.MonthlyIncome
    ##    -1.12886232582259   -0.462438653207328   -0.389158799506996 
    ##                10201                 5490                 5486 
    ##   -0.237224038650003 -0.00180810632297072    0.114417167554772 
    ##                 7048                 8076                 7249 
    ##    0.247782294610166    0.312423079500641    0.350846777249291 
    ##                 9147                 8118                 9680 
    ##    0.448960482499888 
    ##                 4370
    ##  [1]  0.350846777  0.350846777  0.350846777  0.312423080 -0.001808106
    ##  [6] -0.462438653 -0.237224039  0.350846777  0.312423080 -0.237224039
    ##  [1]  3042  3300  3500  2500  6501 12454  8800  3280  2500  7916

    NumberOfTime90DaysPastDueNotWorse变量(x7)

    ## tmp.NumberOfTimes90DaysLate
    ## -0.369404425455224   1.94009728631401   2.34837375415972 
    ##              70793               2669                  7 
    ##   2.72944477623793   3.30900029985393   3.38529247382249 
    ##               1093                222                 81
    ##  [1]  1.9400973 -0.3694044 -0.3694044 -0.3694044 -0.3694044 -0.3694044
    ##  [7] -0.3694044 -0.3694044 -0.3694044 -0.3694044
    ##  [1] 1 0 0 0 0 0 0 0 0 0

    NumberRealEstateLoansOrLines变量(x8)

    ## tmp.NumberRealEstateLoansOrLines
    ## -0.243869874062293 -0.155683851792327 0.0290687559545721 
    ##              26150              15890               3130 
    ##  0.214906905417014   1.12192809398173 
    ##              27901               1794
    ##  [1]  0.2149069  0.2149069  0.2149069  0.2149069 -0.1556839 -0.1556839
    ##  [7]  0.2149069 -0.2438699  0.2149069  0.2149069
    ##  [1] 0 0 0 0 2 2 0 1 0 0

    NumberOfTime60.89DaysPastDueNotWorse变量(x9)

    ## tmp.NumberOfTime60.89DaysPastDueNotWorse
    ## -0.278460464730538   1.83290775083723   2.77753428092856 
    ##              71150               2919                708 
    ##   3.44698604282783   3.58051743545235 
    ##                 13                 75
    ##  [1] -0.2784605 -0.2784605 -0.2784605 -0.2784605 -0.2784605 -0.2784605
    ##  [7] -0.2784605 -0.2784605 -0.2784605 -0.2784605
    ##  [1] 0 0 0 0 0 0 0 0 0 0

    NumberOfDependents变量(x10)

    ## tmp.NumberOfDependents
    ## -0.155250809857344 0.0866996065110081  0.196180980387687 
    ##              43498              14544              10102 
    ##  0.331624863227172  0.404698242905824   0.76425364970991 
    ##               4771               1815                135
    ##  [1] -0.1552508 -0.1552508 -0.1552508 -0.1552508  0.1961810  0.1961810
    ##  [7] -0.1552508  0.1961810 -0.1552508 -0.1552508
    ##  [1] 0 0 0 0 2 2 0 2 0 0

     

    
     

     

    4、WOE DataFrame构建:

     

       trainWOE =cbind.data.frame(tmp.age,tmp.NumberOfTime30.59DaysPastDueNotWorse,tmp.MonthlyIncome,tmp.NumberOfTime60.89DaysPastDueNotWorse,tmp.NumberOfTimes90DaysLate,tmp.NumberRealEstateLoansOrLines,tmp.NumberOfDependents)

     

    七、评分卡的创建和实施

    标准评分卡采用的格式是评分卡中的每一个变量都遵循一系列IF-THEN法则,变量的值决定了该变量所分配的分值,总分就是各变量分值的和。

     

     

     

    知道线性表达式的两个参数A,B后就可以求每条记录(申请人)的分值。为了求得A,B,需要设定两个假设(分数的给定,很主观)。

    以上就是推断,实际代码中,习惯用了q、p来代表A、B.

    通俗来说就是,评分需要自己预设一个阀值,比如:

    这个人预测出来“发生违约”的几率为0.8,设定这个人为600分;

    另一个人预测出来“发生违约”的几率为0.9,设定这个人为500分。

    阀值的设定需根据行业经验不断跟踪调整,下面的分数设定仅代表个人经验。

    下面开始设立评分,假设按坏好比15为600分,每高20分坏好比降一半算出P,Q。如果后期结果不明显,可以高30-50分坏好比降一半。

    另:Score = q + p * log(odds)

    即有方程:

    620 = q + p * log(15/2)

    600 = q + p * log(15)

    逻辑回归建模:

    trainWOE$y = 1-train$y
    glm.fit = glm(y~.,data = trainWOE,family = binomial(link = logit))
    summary(glm.fit)
    coe = (glm.fit$coefficients)
    p <- -20/log(2)
    q <- 600+20*log(15)/log(2)
    Score=q + p*{as.numeric(coe[1])+as.numeric(coe[2])*tmp.age +as.numeric(coe[3])*tmp.NumberOfTime30.59DaysPastDueNotWorse+p*as.numeric(coe[4])*tmp.MonthlyIncome+p*as.numeric(coe[5])*tmp.NumberOfTime60.89DaysPastDueNotWorse+p*as.numeric(coe[6])*tmp.NumberOfTimes90DaysLate+p*as.numeric(coe[7])*tmp.NumberRealEstateLoansOrLines+p*as.numeric(coe[8])*tmp.NumberOfDependents
    个人总评分=基础分+各部分得分
    基础分为:
       base <- q + p*as.numeric(coe[1])
       base
    ## [1] 446.2841

     

    1、对各变量进行打分

     

     

    比如age变量(x2)

        Agelessthan30.SCORE = p*as.numeric(coe[2])*Agelessthan30.WOE
        Age30to35.SCORE = p*as.numeric(coe[2])*Age30to35.WOE
        Age35to40.SCORE = p*as.numeric(coe[2])*Age35to40.WOE
        Age40to45.SCORE = p*as.numeric(coe[2])*Age40to45.WOE
        Age45to50.SCORE = p*as.numeric(coe[2])*Age45to50.WOE
        Age50to55.SCORE = p*as.numeric(coe[2])*Age50to55.WOE
        Age55to60.SCORE = p*as.numeric(coe[2])*Age55to60.WOE
        Age60to65.SCORE = p*as.numeric(coe[2])*Age60to65.WOE
        Age65to75.SCORE = p*as.numeric(coe[2])*Age65to75.WOE
        Agemorethan.SCORE=p*as.numeric(coe[2])*Agemorethan.WOE
        Age.SCORE =c(Age30to35.SCORE,Age35to40.SCORE,Age40to45.SCORE,Age45to50.SCORE,Age50to55.SCORE,Age55to60.SCORE,Age60to65.SCORE,Age65to75.SCORE,Agemorethan.SCORE)
        Age.SCORE
    ## [1]  10.498828   6.913546   4.890389   4.444393   1.450770  -5.171176
    ## [7] -11.266096 -18.984767 -25.996338

    NumberOfTime30-59DaysPastDueNotWorse变量(x3)

    ## [1] -10.29843  17.61112  34.12614  47.25344  49.66985

    MonthlyIncome变量(x5)

    ##  [1] -24.92797904   9.91412083   6.89904854   7.74753565   5.47162546
    ##  [6]   2.52660461  -0.03992731  -5.23847393  -8.59355669 -10.21175106

    NumberOfTimes90DaysLate变量(x7)

    ## [1] -5.19482 27.28299 38.38333 46.53344 47.60632 33.02445

    NumberRealEstateLoansOrLine变量(x8)

    ## [1]  4.022310 -4.564396 -2.913860  0.544066  7.802025 20.998590

    NumberOfTime60-89DaysPastDueNotWorse变量(x9)

    ## [1] -4.820833 31.732126 48.085927 61.987533 59.675778

    NumberOfDependents变量(x10)

    ## [1] -1.5734012  0.8786638  1.9882112  3.3608775  4.1014453  7.7453871

    构造计算分值函数:

       getscore<-function(i,x){
       score = round(p*as.numeric(coe[i])*x,0)
       return(score)
    }

    2、计算各变量分箱得分:

    age变量(x2)

        Agelessthan30.SCORE = getscore(2,Agelessthan30.WOE)
        Age30to35.SCORE = getscore(2,Age30to35.WOE)
        Age35to40.SCORE = getscore(2,Age35to40.WOE)
        Age40to45.SCORE = getscore(2,Age40to45.WOE)
        Age45to50.SCORE = getscore(2,Age45to50.WOE)
        Age50to55.SCORE = getscore(2,Age50to55.WOE)
        Age55to60.SCORE = getscore(2,Age55to60.WOE)
        Age60to65.SCORE = getscore(2,Age60to65.WOE)
        Age65to75.SCORE = getscore(2,Age65to75.WOE)
        Agemorethan.SCORE = getscore(2,Agemorethan.WOE)
        Age.SCORE = c(Agelessthan30.SCORE,Age30to35.SCORE,Age35to40.SCORE,Age40to45.SCORE,Age45to50.SCORE,Age50to55.SCORE,Age55to60.SCORE,Age60to65.SCORE,Age65to75.SCORE,Agemorethan.SCORE)
        Age.SCORE
    ##  [1]  12  10   7   5   4   1  -5 -11 -19 -26

    NumberOfTime30-59DaysPastDueNotWorse变量(x3)

    ## [1] -10  18  34  47  50

    MonthlyIncome变量(x5)

    ##  [1] -25  10   7   8   5   3   0   0  -9 -10

    NumberOfTimes90DaysLate变量(x7)

    ## [1] -5 27 38 47 48 33

    NumberRealEstateLoansOrLine变量(x8)

    ## [1]  4 -5 -3  1  8 21

    NumberOfTime60-89DaysPastDueNotWorse变量(x9)

    ## [1] -5 32 48 62 60

    NumberOfDependents变量(x10)

    ## [1] -2  1  2  3  4  8

     

    3、最终生成的评分卡如下:

     

    age X2 <=30 (30,35] (35,40] (40,45] (45,50] (50,55] (55,60] (60,65] (65,75] (75,100]
    Score 12 10 7 5 4 1 -5 -11 -19 -26
    NumberOfTime30-59DaysPastDueNotWorse X3 <=0 (0,1] (1,3] (3,5] >5
    Score -10 18 34 47 50
    MonthlyIncome X5 <=1000 (1000,2000] (2000,3000] (3000,4000] (4000,5000] (5000,6000] (6000,7500] (7500,9500] (9500,12000] >12000
    Score -25 10 7 8 6 3 0 0 -9 -10
    NumberOfTimes90DaysLate X7 <=0 (0,1] (1,3] (3,5] (5,10] >10
    Score -5 27 38 47 48 33
    NumberRealEstateLoansOrLines X8 <=0 (0,1] (1,2] (2,3] (3,5] >5
    Score 4 -5 -3 1 8 21
    NumberOfTime60-89DaysPastDueNotWorse X9 <=0 (0,1] (1,3] (3,5] >5
    Score -5 32 48 62 60
    NumberOfDependents X10 <=0 (0,1] (1,2] (2,3] (3,5] >5
    Score -2 1 2 3 4 8

     个人评分计算案例:

     

    特征 数据 分数
    Age 38 7
    NumberOfTime30-59DaysPastDueNotWorse 4 47
    MonthlyIncome 1500 10
    NumberOfTimes90DaysLate 2 38
    NumberRealEstateLoansOrLines 1.5 -3
    NumberOfTime60-89DaysPastDueNotWorse 4 62
    NumberOfDependents 1.5 2

    所以这个人的总评分=基础分(base)+各特征分数

    总评分=446.2841+7+47+10+38-3+62+2=609.2841

     

     

     

    展开全文
  • 如题,介绍个人信用评分模型知识的电子书,详细讲述了个人信用评分模型建立所需的数据预处理、模型建立方法、模型检验方法等。正文部分总计181页。
  • 基于数据挖掘的信用卡信用评分模型,数据挖掘系列。。。
  • 信用评分模型技术与应用》理论联系实际,深入浅出地阐述了信用评分模型的概念、种类、优越性及其在各种金融管理活动中的重要应用,对信用评分模型的数据基础、数据挖掘的技术方法、信用评分模型的发展流程等进行了...
  • 信用评级模型There are various widely known ways to boost your credit score, from making loan repayments on time to not exceeding your limit on any credit cards you may have. Most people also know that...

    信用评级模型

    There are various widely known ways to boost your credit score, from making loan repayments on time to not exceeding your limit on any credit cards you may have. Most people also know that having a little debt can be good for your score, as it allows you to show that you can handle it (though I’ve written before about how some people need to stop using their credit score as an excuse to take on more debt). Here are a few other things you can do to increase your credit score, that you may not have considered.

    有多种提高信用评分的方法,从按时还贷到不超过您可能拥有的任何信用卡的限额。 多数人还知道,欠债对您的得分有好处,因为它可以让您证明自己可以应付(尽管我之前写过一些人如何停止以信用评分作为借口的借口)。欠更多债务 )。 您可能没有考虑过其他一些增加信用评分的方法。

    要求增加您的信用额度 (Ask for an Increase on Your Credit Limit)

    This may seem counter-intuitive and probably isn’t advisable if you can’t manage your credit and always max out your cards. However, part of how your credit score is calculated involves looking at your credit utilization rate. That basically means how much of your available credit you’re actually using. Therefore, having cards with a high credit limit, but always staying well within it, can boost your score. One way to do this is to just spend less on credit cards. But another, perfectly legitimate, way is to get your limit increased, but continue to spend the same amount. If you’ve had a particular credit card for a while and always made your payments, asking for your limit to be increased can often pay off.

    这似乎违反直觉,如果您无法管理信用并始终将卡最大化,则不建议这样做。 但是,您的信用评分的部分计算方式涉及查看信用利用率。 这基本上意味着您实际使用了多少可用信用。 因此,拥有高信用额度但始终保持在信用额度内的卡可以提高您的分数。 一种方法是减少信用卡消费。 但是另一种完全合法的方法是提高您的限额,但继续花费相同的金额。 如果您使用特定的信用卡已有一段时间,并且始终付款,则要求增加限额通常可以得到回报。

    不要取消不使用的卡 (Don’t Cancel Cards You’re Not Using)

    It can actually be helpful to have unused credit and store cards as long as they’re not costing you anything. This is also about credit utilization. If you have cards with available credit on them that you don’t use, your utilization rate will be better. Maybe you’re trying to be super disciplined and only use one card so you can track your spending, or maybe you just paid off all your cards and don’t want to run them up again. If that’s the case, you may be tempted to cancel all your cards, but you might be better off locking them away somewhere and simply never using them.

    实际上,拥有未使用的信用卡和储值卡会有所帮助,只要它们不会花费您任何钱。 这也与信贷利用有关。 如果您有不使用的可用信用卡充值的信用卡,则您的利用率会更高。 也许您正在尝试纪律严明,只使用一张卡就可以跟踪您的支出,或者您只是还清了所有卡而又不想再次使用它们。 如果是这种情况,您可能会想取消所有卡,但最好将它们锁定在某个地方并且根本不使用它们。

    Remember, this is only worth doing if your cards are costing you nothing or next to nothing. Read through terms and conditions to check if the card has annual fees. If it does and they’re moderate to high, it might be a good idea to cancel it. If there is no annual fee or it’s a very low one, you might consider it worth paying as the cost of having a better credit utilization rate and slightly better credit score. While you’re checking those terms and conditions, check that you won’t find your account is closed (or charged) for inactivity. You might want to consider calling your card provider and letting them know that this is not your primary card and won’t be used regularly, but you’d like to keep the account open. Ask them if they can waive or reduce any annual fees you do have on the card. It never hurts to ask.

    请记住,这仅在您的卡不花钱或几乎不花钱的情况下才值得这样做。 通读条款和条件,检查卡是否有年费。 如果是这样,并且它们从中到高,则取消它可能是一个好主意。 如果没有年费或年费很低,您可能会认为值得支付,因为它具有更高的信贷利用率和稍高的信用评分的成本。 在检查这些条款和条件时,请确保您不会因为帐户闲置而被关闭(或收费)。 您可能需要考虑致电您的卡提供商,并告知他们这不是您的主卡,并且不会经常使用,但是您想保持该帐户的开放状态。 询问他们是否可以免除或减少您的信用卡年费。 问一问总无妨。

    主动 (Be Proactive)

    If you know you’re going to miss a payment, pay late, or not make a full payment, admit it ahead of time. Contact your credit card company or loan provider and explain the situation. Some lenders will waive any penalties if you talk to them ahead of time, including reporting you to credit agencies. You’ll only be able to do this occasionally, so if you’re constantly having problems making payments, try to re-negotiate your monthly payment amount. Remember that credit agencies aren’t really interested in the fine print of your loan arrangements. They just want to see that you’re paying whatever you’ve agreed to.

    如果您知道您将错过付款,延迟付款或未全额付款,请提前接受。 请与您的信用卡公司或贷款提供商联系,并说明情况。 如果您提前与他们联系,包括向信用机构报告您,一些贷方将免除任何罚款。 您只能偶尔执行此操作,因此,如果您在付款方面经常遇到问题,请尝试重新协商您的每月付款金额。 请记住,信贷机构对您的贷款安排的细则并不真正感兴趣。 他们只是想看看您要支付的价格是您所同意的。

    The same goes for going overdrawn at the bank. An unauthorized overdraft could harm your credit score, but a quick call to the bank could result in an authorized overdraft. That’s just credit, like any other kind of credit, which means, as long as you pay it off according to whatever arrangements you make with your bank, you won’t damage your credit score, and may even improve it.

    在银行透支也是如此。 未经授权的透支可能会损害您的信用评分,但是快速致电银行可能会导致授权的透支。 就像任何其他种类的信用一样,这只是信用,这意味着,只要您根据与银行进行的任何安排还清该信用,就不会损害您的信用评分,甚至可能会提高信用评分。

    分散您的信用 (Diversify Your Credit)

    This doesn’t simply mean ‘get more credit’. It means to get more variety in your credit profile. Having a credit card, a phone contract, and an auto loan, for example, can be better for your credit score than having three credit cards, if all other things are equal. Do remember to do this in a way that makes sense for you though. There is no advantage to taking out an interest-bearing loan you don’t need. It might, however, make sense to have a credit card you don’t need, especially if it has no annual fee and you never pay interest on it. Remember the only way to never pay interest is to pay off your card each month and not carry any debt over at the end of the payment due period.

    这不仅仅意味着“获得更多信用”。 这意味着在您的信用资料中获得更多选择。 例如,如果所有其他条件都相同,那么拥有信用卡, 电话合同和汽车贷款可能比拥有三张信用卡对您的信用评分更好。 请记住,以一种对您有意义的方式进行此操作。 拿出不需要的计息贷款没有好处。 但是,拥有不需要的信用卡可能是有道理的,特别是如果它没有年费并且您从不支付利息的话。 请记住,永远不付利息的唯一方法是每月还清您的卡,并且在到期付款期结束时不承担任何债务。

    检查您的信用报告 (Check Your Credit Report)

    Most people never do this unless they think there’s a problem, but mistakes on credit reports are surprisingly common. You can check your score once a year for free by simply requesting your credit report from each of the three main credit companies. Make it part of your annual financial plan, maybe at the end of the year or when you file your taxes, so you don’t forget.

    除非他们认为有问题,否则大多数人从不这样做,但是信用报告中的错误出奇地普遍 。 您只需向三个主要信贷公司中的每一个索取信用报告,就可以每年免费检查一次分数。 使其成为年度财务计划的一部分,也许是在年底或您提交税款时,这样您就不会忘记。

    Disclaimer: The information in this article is not intended to encourage any lifestyle changes without careful consideration and consultation with a qualified professional. This article is for reference purposes only, is generic in nature, is not intended as individual advice and is not financial or legal advice.

    免责声明: 本文中的信息并非旨在鼓励任何生活方式的改变,除非仔细考虑并咨询合格的专业人员。 本文仅供参考,性质一般,不作为个人建议,也不是财务或法律建议。

    Originally published on Wealthtender.com.

    最初发布于 Wealthtender.com

    翻译自: https://medium.com/makingofamillionaire/unusual-ways-to-boost-your-credit-score-89655d7fffcf

    信用评级模型

    展开全文
  • 基于数据挖掘的信用卡信用评分模型.pdf
  • 信用评分模型中的拒绝推断,介绍了拒绝推断的方法和常用的场景
  • 陈建老师的信用评分模型技术与应用陈建老师的信用评分模型技术与应用陈建老师的信用评分模型技术与应用陈建老师的信用评分模型技术与应用陈建老师的信用评分模型技术与应用陈建老师的信用评分模型技术与应用
  • 信用评分模型python实践——简介

    千次阅读 2018-12-20 00:01:03
    由于之前进行过信用评分模型的学习,并且接触并实践了一小段时间,虽然已经过了一年了,但是为了让这一段经历能够保留,在这里记录下点滴。本次将分多篇文章对信用评分模型的python实践进行阐述,包括简介,概念以及...

    由于之前进行过信用评分模型的学习,并且接触并实践了一小段时间,虽然已经过了一年了,但是为了让这一段经历能够保留,在这里记录下点滴。本次将分多篇文章对信用评分模型的python实践进行阐述,包括简介,概念以及最后的代码实现。最后很高兴看这一系列的朋友们,也希望能帮到你,大家一起学习。

    信用评分模型简介

    信用评分模型运用数据挖掘技术和统计分析方法,通过对客户的人口特征、信用历史记录、行为记录、交易记录等大量数据进行系统的分析,挖掘出数据中蕴涵的行为模式、捕捉历史信息和未来信用表现之间的关系,发展出预测性的模型,以一个信用评分(credit score)来综合评估客户未来的信用表现。 

    通过信用评分模型,银行计算出用户的信用评分,而此信用评分表示该用户的风险程度,评分的高低按照风险概率的大小进行排列,分数越高,风险越低;分数越低,风险越高。

    模型类型

    如今在银行,P2P等各种贷款业务机构,普遍使用信用评分,信用评分卡大致可以分A,B,C卡三类。

    • A卡(Application score card)申请评分卡

    • B卡(Behavior score card)行为评分卡

    • C卡(Collection score card)催收评分卡

    三种卡的介绍,请直接看这篇文章:比较全面的说了三种打分机制。梁世栋博士的《行为评分和贷后风险管理研究》http://www.docin.com/p-516772778.html

    本文中将三个阶段进行了进一步的细化,分成以下模型

     第三方征信

    除了人行老大征信,以及各大银行自己的征信策略,随着互联网的如火如荼,各大互联网大佬们也推出了各自的征信系统,大家最熟悉的蚂蚁金服的芝麻征信,已经渗透到生活的方方面面,比如最近背负举债人人喊打的小黄车ofo,当年可以是推出了信用免押金模式(我的押金还在一千多万排名呢?),还有京东的小白信用等。

    芝麻信用

    通过云计算、机器学习等技术客观呈现个人的信用状况,已经在信用卡、消费金融、酒店、租房、出行、婚恋、分类信息、学生服务、公共事业服务等上百个场景为用户、商户提供信用服务。

    京东信用

    主要从身份(社会属性、居住环境、教育情况和稳定性),资产(金融投资、信用能力和收支情况),偏好(登录、浏览、下单等维度),履约(金融产品、电商平台和社会行为中表现出来的履约和违约情况)和关系(社会关系和购物行为)来考量。

    腾讯信用

    是腾讯征信推出的个人征信管理平台,腾讯信用主要基于历史行为信息,通过采集不同维度的信息,运用大数据,机器学习以及传统统计方法相结合的技术手段来客观的反映用户的信用水平,从而得出用户的守信指数,用信用分来反映用户的信用水平,分数的多少是通过专业、先进的信用评分模型评估得出的,分数越高代表信用水平越高。

    模型时间线

    和其他模型非常大不同,信用评分模型是一个漫长的过程,这就需要企业舍得花时间和精力去做了,目前也就是只有银行和互联网大佬有时间精力能力以及数据去做这件事情。我们通常分为观察期和表现期

    • 观察期:收集信用历史信息和行为特征等,可以认为就是特征
    • 表现期:即这次信用评分模型等目标,收集信用表现的信息,比如是否在这几个月内有拖欠,收益高低,卡是否被强停,是否有违约

     具体观察期和表现期的时间要根据模型而定,比如申请风险评分模型时间就较短,其实也很好理解,申请嘛,还没成为你的客户,而且现在正是获客,占领市场的关键时期,所以相对严格度会低一点。但是行为评分模型时间就更长一点,路遥知马力,日久见人心,好好观察后,才能对你进行评判,想想我们办事,处对象也是如此,?。

    模型特征

    这里我就举行为模型常用的客户特征,如下表所示,不同模型的侧重点也不一样。

    消费行为:最近3个月消费金额、消费笔数,最近3期境外消费金额占比,最近3期网银消费笔数 等

    还款行为:最近3个月最大逾期天数、还款率、逾期还款期数,最近6个期账户逾期月数,最近12个月未欠款账单数 等

    账户属性:信用额度,开卡时间,收益率、发卡机构 等

    客户属性:年龄,收入,性别,户籍状态 等

     

    信用评分模型的介绍先到这,可能说的比较简单,先让大家感受感受一下这类模型的特点,从下一节开始,我们将阐述信用模型涉及到的一些数学理论概念等,并进行python实践,大家一起加油吧,?。

     

    对了,推荐一本信用评分模型等入门书籍《信用评分模型技术与应用》。

    展开全文
  • 基于数据仓库的银行信用 评级模型的构建 摘要基于数据仓库,利用 RBF 神经网络,建立了银行信用 内部评级系 ,提出了企业信用主题数据模型和风险评估模型 的训练过程实证结果表明,该模型对银行信用评估可取得较好 的...
  • 我眼中的信用评分模型

    千次阅读 2019-06-21 15:57:24
    关于信用风险 之前工作中涉及到信用风险,接下来几天就分享些我在... 推荐一本比较好的资料书-《信用风险评分卡研究-基于SAS的开发与实施》,书的核心内容为以逻辑回归为基础构建信用评分模型,如果将这本书的内...

                                                                           关于信用风险

          之前工作中涉及到信用风险,接下来几天就分享些我在信用风险建模领域的一些经验吧~

          推荐一本比较好的资料书-《信用风险评分卡研究-基于SAS的开发与实施》,书的核心内容为以逻辑回归为基础构建信用评分模型,如果将这本书的内容理解透彻,即使不从事信用评分卡相关的开发工作,也能对逻辑回归模型有一个更为深刻透彻的理解。

                                                                   数据分析中的风险管理

           风险管理是数据分析中较为重要的领域,任何企业中,风险都会占有一席之地,银行界数据分析工作会涉及四个领域,即风险、营销、运营与财务,风险首当其中。

           风险管理的核心有两方面,一是度量不确定性,一是度量不确定性发生后带来的损失,所以任何核心机构都会将风险度量当做整个业务的核心。

           风险可以这样理解,一件事情,这次是3下次还是3,状态稳定,则几乎没有风险,如果一件事情这次是3下次是5,则存在风险。事件中的不确定性越强则风险越高,衡量风险一般会用分布的方差方差越大代表风险越大,业务中信用评级越高则风险程度越低信誉越好则利率越低

                                                                         风险管理流程

           实际的风险管理一般有四个基本流程,即:

           风险识别、风险衡量、风险策略与风险处置

                                                                   信用风险评估的三个层级

           整个世界经济体系中负责做信用风险评估的有三个层级:

    • 专注于资本市场信用风险或大企业主权信用风险:代表为标普、穆迪与惠誉
    • 专注于一般企业信用评级:代表为邓白氏
    • 专注于个人征信评级:代表为美国三大征信公司:亿百利,爱克非、全联

                                                                  标普表公司大企业评级示例

     

           如下为标普为某大型企业所做的信用评级示例:

     

                                                                            个人层面征信

           经典的二八原则中,80%的利润是由20%的优质客户创造的,即20%的优质客户充当了利润贡献者的角色,剩下的80%的客户即是资源的消耗者。

           如下为企业利润与用户分布区间图,左侧区域为资源消耗者,中间区域为资源弥补者,最右边区域为资源贡献者。企业要做的事情是试着放弃资源消耗者、维系资源弥补者、培养利润贡献者

                                                                        风险评分模型的种类

           风险评分模型一般可以分为如下三种:

    • 申请评分:通过客户申请时的信息去预测将来发生逾期或违约的概率;
    • 行为评分:通过客户以往行为表现,预测将来发生逾期或违约的概率;
    • 催收评分:通过客户以往行为表现,预测已逾期账户清偿欠款、逾期恶化的概率。

    我的公众号:Data Analyst

    个人网站:https://www.datanalyst.net/

    展开全文
  • 金融行业研究方法-中国建筑施工企业信用评级模型.pdf
  • 信用评分模型是消费信贷管理中先进的技术手段,是现在金融行业常用的信用风险评估方法,本文从宏观上介绍评分模型的建模开发流程。 1. 明确问题 明确业务要解决的问题,确定标签的定义规则,以及模型的评价指标和...
  • 金融行业研究方法-中债资信中国煤炭企业信用评级模型.pdf
  • 金融行业研究方法-中债资信中国火电企业信用评级模型.pdf
  • 针对运用信用评分模型提升银行决策能力进行了研究。将支持向量回归模型应用于企业信用评分问题,并提出基于随机子集的支持向量回归集成模型。首先使用随机子集抽样模型获得大量训练数据集,然后使用不同的训练集子集...
  • 提出了一种基于遗传算法改进的神经网络企业信用评级模型.利用BP神经网络自适应和自学习的特点,通过遗传算法实现对神经网络连接权重和阈值的修正与优化,在一定程度上解决了BP神经网络存在收敛速度较慢和可能落入...
  • 某网贷行业贷款,包括信用违约标签(因变量)、建模所需的基础与加工字段(自变量)、相关用户的网络行为原始数据,关于信用评分模型的应用以及实现,进行信用评分卡构建,以此来对客户贷款进行风险预警。
  • 基于数据挖掘的中小企业客户信用评级模型的设计与实现.pdf
  • 信用评分模型概述

    2018-11-06 15:40:04
    评分模型开发 确定评分目的 建模指标的基本定义 资料准备 变量分析 变量的形态分为连续变量和间断变量; 单因子分析,将变量分组,分组原则为组间差异大,组内差异小。分组占率不低于5%,各组必须同时拥有好坏...
  • 金融行业研究方法-中债资信中国造纸企业主体信用评级模型.pdf
  • 金融行业研究方法-中债资信中国水泥企业主体信用评级模型.pdf
  • 金融行业研究方法-中债资信中国水电企业主体信用评级模型.pdf
  • 金融行业研究方法-中债资信中国航空企业主体信用评级模型.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,959
精华内容 2,783
关键字:

信用评分模型