精华内容
下载资源
问答
  • WOE全称为 Weight Of Evidence,即证据权重,就是自变量取某个值时对目标变量的影响good_i和bad_i是该变量在各属性上对应的好客户数和坏客户数,good和bad是样本总体好客户数和坏客户数;WOE值越高,代表着该组对应...

    WOE全称为 Weight Of Evidence,即证据权重,就是自变量取某个值时对目标变量的影响

    good_i和bad_i是该变量在各属性上对应的好客户数和坏客户数,good和bad是样本总体好客户数和坏客户数;WOE值越高,代表着该组对应的变量属性是坏客户的风险越低;

    IV信息值,IV仅仅针对二元分类的目标值和名义变量,当应用于顺序变量时,顺序将会被忽略,该变量会当做名义变量来使用;

    (k为变量的类别数)

    从公式可以看出,IV值是基于WOE计算的,相当于WOE的加权求和。其值的大小决定了自变量对目标变量的影响程度。

    通常情况下,IV0.3时,预测能力强。

    WOE和IV值和其他筛选变量方法相比有以下两点优势:

    它可以对所有分类变量,顺序变量以及连续变量(需分箱)统一进行预测能力的计量。

    可以对缺失值进行处理,将其看作一类即可分析信息缺失对于风险是否有影响

    示例Python实现:

    将逾期天数>90的客户定义为坏客户1,其余为0;取学历和逾期天数,观测学历的信息值

    计算学历各分类对应的总数和坏客户数

    合并数据集,计算好客户数,和学历各分类对应的坏客户比例和好客户比例

    计算WOE和IV

    IV值等于0.155,对是否是坏客户有一定的预测能力。

    展开全文
  • 风控-评分卡之woe转换

    2020-02-15 11:18:51
    WOE(Weight of Evidence)即证据权重,可以将logistic回归模型转化为标准评分卡格式,WOE是对原始自变量的一种编码形式,要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱)。WOE的公式...

    WOE(Weight of Evidence)即证据权重,可以将logistic回归模型转化为标准评分卡格式,WOE是对原始自变量的一种编码形式,要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱)。
    WOE的公式就是:WOE=ln(好客户占比/坏客户占比)×100%=优势比
    下面举例说明:

    woe计算


    我们把这个变量离散化为了4个分段:<100元,[100,200),[200,500),>=500元,并分别计算了每组的woe值,重计算数据可知:

     

    • 当前分组中,响应的比例越大,WOE值越大
    • 当前分组WOE的正负,由当前分组响应和未响应的比例,与样本整体响应和未响应的比例的大小关系决定,当前分组的比例小于样本整体比例时,WOE为负,当前分组的比例大于整体比例时,WOE为正,当前分组的比例和整体比例相等时,WOE为0。

    为什么做woe转换

    首先明确woe转换并不一定能显著提高模型质量,建立评分卡也可以不采用woe,这种情况下logistic回归需要处理更大数量的自变量,尽管这样会增加建模的复杂性,但最终得到的评分卡都是一样的。即便如此,woe转换依旧有很多的优势:

    1. woe能反映自变量的贡献情况
      自变量内部WOE值的变异(波动)情况,结合模型拟合出的系数,构造出各个自变量的贡献率及相对重要性。一般地,系数越大,woe的方差越大,则自变量的贡献率越大。
    2. 标准化功能
      WOE编码之后,自变量其实具备了某种标准化的性质,也就是说,自变量内部的各个取值之间都可以直接进行比较(WOE之间的比较),而不同自变量之间的各种取值也可以通过WOE进行直接的比较。
    3. 对异常值不敏感
      很多极值变量通过WOE可以变为非异常值,很多频次较少的变量也可以通过woe转换进行合并。

    通过woe转化,极大的提高了数据的可理解性,这对评分卡模型很重要。WOE其实描述了变量当前这个分组,对判断个体是否会响应(或者说属于哪个类)所起到影响方向和大小,当WOE为正时,变量当前取值对判断个体是否会响应起到的正向的影响,当WOE为负时,起到了负向影响。而WOE值的大小,则是这个影响的大小的体现。



    作者:数据小黑升值记
    链接:https://www.jianshu.com/p/fd8b0bef8ea5
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 评分卡介绍评分卡的种类——ABC卡FICO信用分1、FICO信用分简介2、FICO信用分的评判因素数据准备1、需要排除异常行为2、解释指标的选择3、目标变量的确立变量分箱——WOE转换评分的计算与分值分配模型的评价——模型...

    评分卡的种类——ABC卡

    • A卡(Application score card)申请评分卡,贷前,一般可做贷款0-1年的信用分析

    • B卡(Behavior score card)行为评分卡, 贷中,在申请人有了一定行为后,有了较大数据进行的分析,一般为3-5年

    • C卡(Collection score card)催收评分卡,贷后,需加入催收后客户反应等属性数据

    FICO信用分

    1、FICO信用分简介

    FICO信用分是最常用的一种普通信用分。由于美国三大信用局都使用FICO信用分,每一份信用报告上都附有FICO信用分,以致FICO信用分成为信用分的代名词。该分数是一个[300,850]区间的分数段。
    信用评分达到680分以上,贷款方就可以认为借款人的信用卓著,可以毫不迟疑地同意发放款;信用评分低于620分,贷款方或者要求借款人增加担保,或者干脆寻找各种理由拒绝贷款;如果借款人的信用评分介于620-680分之间,贷款方就要作进一步的调查核实,采用其它的信用分析工具,作个案处理。

    2、FICO信用分的评判因素

    部分评判标准和影响因素(变量):

    (1)信用偿还历史(占总影响因素的35%):
    各种信用账户的还款记录(信用卡、零售账户 、分期偿还贷款、金融公司账户、抵押贷款)、公开记录及支票存款记录(破产记录、丧失抵押品赎回权记录、法律诉讼事件、留置权记录及判决)、逾期偿还的具体情况(逾期的天数、未偿还的金额、逾期还款的次数和逾期发生时距现在的时间长度等)

    (2)信用账户数(占总影响因素的30%):
    分析对于一个客户, 究竟多少个信用账户是足够多的, 从而能够准确反应出客户的还款能力

    (3)信用账龄(占总因素的15%):
    该用户信用历史越长,FICO信用分越高。该项因素主要指信用账户的账龄,也包括新开立的信用账户的账龄, 以及平均信用账户账龄。

    (4)新开立的账户(占总因素的10%):
    在很短时间内开立多个信用账户的客户具有更高的信用风险, 尤其是那些信用历史不长的人。该类因素包括:新开立的信用账户数、新开立的信用账户账龄、目前的信用申请数量。

    (5)在使用的信用类型(占总因素的10%):
    主要分析客户的信用卡账户、零售账户、分期付款账户、金融公司账户和抵押贷款账户的混合使用情况, 具体包括: 持有的信用账户类型和每种类型的信用账户数。

    数据准备

    1、需要排除异常行为

    销户、按条例拒绝、特殊账户(卡丢失、死亡、未成年、出国、员工账户、VIP账户);

    2、解释指标的选择

    (1)申请评分所需指标:参考上述FICO信用分的 评判标准
    (2)行为评分所需指标:
    在这里插入图片描述

    3、目标变量的确立

    目标变量为坏客户/好客户
    坏客户:观察窗口内,逾期60/90/120天的用户

    因此在此之前还需要确定观察窗口和违约时间的长短。

    变量分箱——WOE转换

    WOE为优势比,将各个连续变量细分为若干组后,每组的WOE为:
    W O E = l n 该 组 好 客 户 占 比 该 组 坏 客 户 占 比 ∗ 100 % WOE = ln \frac{该组好客户占比}{该组坏客户占比}*100\% WOE=ln100%
    *注意:”该组好客户占比“指的是该组好用户数/所有的好用户数

    1、如果计算得到的WOE与违约概率具有某种线性关系,或者WOE与目标变量之间的有U型或者倒U型的非线性关系,说明该种分组方式合理,否则需要调整分组方式,如果无论怎么分组均无法达到上述两种情况,说明该变量对目标变量的解释性较弱。

    2、模型拟合出来的自变量系数应该都是正数,如果结果中出现了负数,应当考虑是否是来自自变量多重共线性的影响——可以计算各个变量的VIF值,删去那些具有明显多重共线性的变量。

    3、WOE编码之后,自变量其实具备了某种标准化的性质,也就是说,自变量内部的各个取值之间都可以直接进行比较(WOE之间的比较),而不同自变量之间的各种取值也可以通过WOE进行直接的比较。

    4、如果遇到分箱后某组的坏客户数量为0,则需要合并分箱,保证每个分箱中必须同时包含好用户和坏用户

    此外,IV值(information value)衡量的是某一个变量的信息量,可用来表示一个变量的预测能力。公式如下(假设该变量经过变量分箱后被分为m组):
    I V = ∑ i = 1 m ( 好 用 户 占 比 − 坏 用 户 占 比 ) ∗ W O E i IV = \sum^{m}_{i = 1}(好用户占比-坏用户占比)*WOE_{i} IV=i=1m()WOEi
    不同IV值表示的变量的预测能力大小如下表:
    在这里插入图片描述

    举个例子:
    在这里插入图片描述
    此例中IV值较小,预测能力低,建议重新调整分箱。

    评分的计算与分值分配

    首先定义 o d d s = 好 客 户 占 比 坏 客 户 占 比 = p 1 − p odds = \frac{好客户占比}{坏客户占比} = \frac{p}{1-p} odds==1pp
    总分 s c o r e 总 = a + b ∗ l n ( o d d s ) score_{总} = a + b*ln(odds) score=a+bln(odds)
    接下来需要求解a,b的值,假设当odds= θ 0 \theta_0 θ0时,得分为 p 0 p_0 p0,假设刻度为 δ p \delta_p δp,那么当odds= 2 θ 0 2\theta_0 2θ0时,得分应为 p 0 p_0 p0+ δ p \delta_p δp,由此可以列出下式:
    p 0 = a + b ∗ l n ( θ 0 ) p_0 = a + b*ln(\theta_0) p0=a+bln(θ0)
    p 0 + δ p = a + b ∗ l n ( 2 θ 0 ) p_0+\delta_p =a + b*ln(2\theta_0) p0+δp=a+bln(2θ0)
    其中, p 0 p_0 p0 δ p \delta_p δp可以人为设定,联立上面两式求得a,b的值,带入score公式,得到不同 θ 0 \theta_0 θ0下的评分卡的分值——此处的 θ 0 \theta_0 θ0就是odds,也就是逻辑回归模型预测得到的结果 p p p。至此,各个样本的计算结果已经得到。

    模型的评价——模型区分度

    1、KS值

    KS的计算步骤如下:

    1. 计算每个评分区间的好坏用户数。
    2. 计算每个评分区间的累计好用户数占总好用户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。
    3. 计算每个评分区间累计坏账户占比与累计好账户占比差的绝对值(累计good%-累计bad%),然后对这些绝对值取最大值即得此评分卡的K-S值。
      在这里插入图片描述
      KS用于模型风险区分能力进行评估,好坏样本累计差异越大,KS指标越大,那么模型的风险区分能力越强。

    2、GINI指数

    GINI系数的计算步骤如下:

    1. 计算每个评分区间的好坏账户数。
    2. 计算每个评分区间的累计好账户数占总好账户数比率(累计good%)和累计坏账户数占总坏账户数比率(累计bad%)。
    3. 按照累计好账户占比和累计坏账户占比得出下图所示曲线ADC。
    4. 计算出图中阴影部分面积,阴影面积占直角三角形ABC面积的百分比,即为GINI系数。
      在这里插入图片描述

    【注】本文引用了以下文章:
    https://blog.csdn.net/sinat_26917383/article/details/51721107
    https://blog.csdn.net/sscc_learning/article/details/78591210
    https://blog.csdn.net/u013421629/article/details/78217498

    展开全文
  • 第三步:分别计算名义变量和数值变量的woe值,对取值较少的数值变量也用名义变量woe计算方法实现,其余数值变量均5等分 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

    以德国信用数据为例,用logistict regression算法做信用评分卡原理性实现,因此并未考虑feature selection.


    第一步:导入必要的库

    1
    2
    3
    import  pandas as pd
    import  numpy as np
    from  sklearn.cross_validation  import  train_test_split


    第二步:导入数据

    1
    2
    3
    4
    5
    german  =  pd.read_csv( 'D:/CreditDatasets/german.data' , sep = ' ' , header = None )
    german.columns  =  [ 'Status_of_existing_checking_account' 'Duration_in_month' 'Credit_history' , 'Purpose' 'Credit_amount' 'Savings_account' 'Present_employment_since' , 'Installment_rate' 'Personal_status_and_sex' 'Other_debtors' 'Present_residence_since' , 'Property' 'Age' 'Other_installment_plans' 'Housing' 'Number_of_existing_credits' , 'Job' 'Number_of_people' 'Telephone' 'foreign_worker' 'default' ]
    Grp  =  german.groupby( 'default' )
    total_good  =  Grp.size()[ 1 ]
    total_bad  =  Grp.size()[ 2 ]


    第三步:分别计算名义变量和数值变量的woe值,对取值较少的数值变量也用名义变量woe计算方法实现,其余数值变量均5等分

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    def  CalcWOE(VarName):
         WOE_Map  =  pd.DataFrame()
         Vars  =  np.unique(german[VarName])
         for  in  Vars :
             tmp  =  german[VarName]  = =  v
             grp  =  german[tmp].groupby( 'default' )
             Good  =  grp.size()[ 1 ]
             Bad  =  grp.size()[ 2 ]
             good_ratio  =  float (Good) / total_good
             bad_ratio  =  float (Bad) / total_bad
             WOE  =  np.log(bad_ratio / good_ratio)
             IV  =  (bad_ratio  -  good_ratio) * WOE
             result  =  pd.DataFrame([[VarName, v, WOE, IV]], index = None , columns = [ 'variable' 'class' 'woe' 'iv' ])
             WOE_Map  =  WOE_Map.append(result, ignore_index = True )
         return  WOE_Map
     
    # nominal variable woe
    status_checking_account_woe  =  CalcWOE( 'Status_of_existing_checking_account' )
    Credit_history_woe           =  CalcWOE( 'Credit_history' )
    Purpose_woe                  =  CalcWOE( 'Purpose' )
    Savings_account_woe          =  CalcWOE( 'Savings_account' )
    Present_employment_since_woe =  CalcWOE( 'Present_employment_since' )
    Personal_status_and_sex_woe  =  CalcWOE( 'Personal_status_and_sex' )
    Other_debtors_woe            =  CalcWOE( 'Other_debtors' )
    Property_woe                 =  CalcWOE( 'Property' )
    Other_installment_plans_woe  =  CalcWOE( 'Other_installment_plans' )
    Housing_woe                  =  CalcWOE( 'Housing' )
    Job_woe                      =  CalcWOE( 'Job' )
    Telephone_woe                =  CalcWOE( 'Telephone' )
    foreign_worker_woe           =  CalcWOE( 'foreign_worker' )
     
    # numeric variable woe, no binning
    Installment_rate_woe         =  CalcWOE( 'Installment_rate' )
    Present_residence_since_woe  =  CalcWOE( 'Present_residence_since' )
    Number_of_existing_credits_woe  =  CalcWOE( 'Number_of_existing_credits' )
    Number_of_people_woe         =  CalcWOE( 'Number_of_people' )
     
     
    def  CalcWOE_bin(VarName,N):
         WOE_Map  =  pd.DataFrame()
         max_value  =  max (german[VarName])
         min_value  =  min (german[VarName])
         bin  =  float (max_value  -  min_value) / N
         for  in  range (N):
             bin_U  =  min_value  +  (i + 1 ) * bin
             bin_L  =  bin_U  -  bin
             if  = =  1 :
                 tmp  =  (german[VarName] > =  bin_L) & (german[VarName] < =  bin_U)
                 grp  =  german[tmp].groupby( 'default' )
             else :
                 tmp  =  (german[VarName] > bin_L) & (german[VarName] < =  bin_U)
                 grp  =  german[tmp].groupby( 'default' )
             Good  =  grp.size()[ 1 ]
             Bad  =  grp.size()[ 2 ]
             good_ratio  =  float (Good) / total_good
             bad_ratio  =  float (Bad) / total_bad
             WOE  =  np.log(bad_ratio / good_ratio)
             IV  =  (bad_ratio  -  good_ratio) * WOE
             result  =  pd.DataFrame([[VarName, [bin_L, bin_U, WOE], WOE, IV]],
                                   index = None , columns = [ 'variable' 'class+woe' 'woe' 'iv' ])
             WOE_Map  =  WOE_Map.append(result, ignore_index = True )
         return  WOE_Map
     
    Duration_in_month_woe  =  CalcWOE_bin( 'Duration_in_month' 5 )
    Credit_amount_woe      =  CalcWOE_bin( 'Credit_amount' 5 )
    Age_woe                =  CalcWOE_bin( 'Age' 5 )




    第四步:用woe值替代原来的值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    def  ReplaceWOE(VarName, SourceDF, VarWOE):
         dict1  =  dict .fromkeys(VarWOE[ 'class' ])
         =  0
         for  key  in  dict1:
             dict1[key]  =  VarWOE[ 'woe' ][j]
             =  +  1
         SourceDF[VarName]  =  SourceDF[VarName]. map (dict1)
         return  SourceDF
     
    german_woe  =  german
    temp  =  ReplaceWOE( 'Status_of_existing_checking_account' , german_woe, status_checking_account_woe)
    temp1  =  ReplaceWOE( 'Credit_history' , temp, Credit_history_woe)
    temp  =  ReplaceWOE( 'Purpose' , temp1, Purpose_woe)
    temp1  =  ReplaceWOE( 'Savings_account' , temp, Savings_account_woe)
    temp  =  ReplaceWOE( 'Present_employment_since' , temp1, Present_employment_since_woe)
    temp1  =  ReplaceWOE( 'Personal_status_and_sex' , temp, Personal_status_and_sex_woe)
    temp  =  ReplaceWOE( 'Other_debtors' , temp1, Other_debtors_woe)
    temp1  =  ReplaceWOE( 'Property' , temp, Property_woe)
    temp  =  ReplaceWOE( 'Other_installment_plans' , temp1, Other_installment_plans_woe)
    temp1  =  ReplaceWOE( 'Housing' , temp, Housing_woe)
    temp  =  ReplaceWOE( 'Job' , temp1, Job_woe)
    temp1  =  ReplaceWOE( 'Telephone' , temp, Telephone_woe)
    temp  =  ReplaceWOE( 'foreign_worker' , temp1, foreign_worker_woe)
     
    temp1  =  ReplaceWOE( 'Installment_rate' , temp, Installment_rate_woe)
    temp  =  ReplaceWOE( 'Present_residence_since' , temp1, Present_residence_since_woe)
    temp1  =  ReplaceWOE( 'Number_of_existing_credits' , temp, Number_of_existing_credits_woe)
    temp  =  ReplaceWOE( 'Number_of_people' , temp1, Number_of_people_woe)
     
    def  ReplaceWOE_bin(VarName, SourceDF, VarWOE):
         items  =  np.unique(SourceDF[VarName])
         =  min (SourceDF[VarName])
         dict2  =  {}
         for  it  in  items:
             if  it  = =  m:
                 dict2[it]  =  VarWOE[ 'class+woe' ][ 0 ][ 2 ]
             else :
                 for  l, u, w  in  VarWOE[ 'class+woe' ]:
                     if  (it > l) & (it < =  u):
                         dict2[it]  =  w
         SourceDF[VarName]  =  SourceDF[VarName]. map (dict2)
         return  SourceDF
     
    temp1  =  ReplaceWOE_bin( 'Duration_in_month' , temp, Duration_in_month_woe)
    temp  =  ReplaceWOE_bin( 'Credit_amount' , temp1, Credit_amount_woe)
    temp1  =  ReplaceWOE_bin( 'Age' , temp, Age_woe)



    第五步:将数据集拆分为训练集和测试集

    1
    2
    3
    =  temp1[ list (temp1.columns)[: - 1 ]]
    =  temp1[ 'default' -  1
    X_train, X_test, y_train, y_test  =  train_test_split(X, y, test_size = 0.1 , random_state = 0 )


    第六步:在训练集上应用logistic regression算法

    1
    2
    3
    4
    from  sklearn.linear_model.logistic  import  LogisticRegression
    classifier  =  LogisticRegression()
    classifier.fit(X_train, y_train)
    predictions  =  classifier.predict(X_test)


    第七步:评估模型分类精度

    1
    2
    3
    4
    5
    6
    from  sklearn.metrics  import  accuracy_score
    # print 'Accuracy:', accuracy_score(y_test, predictions)
     
    from  sklearn.cross_validation  import  cross_val_score
    scores  =  cross_val_score(classifier, X_train, y_train, cv = 5 )
    # print np.mean(scores), scores


    第八步:创建评分卡

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # score = A - B*log(theta)
    # P0 = A - B*log(theta0), P0 + PDO = A - B*log(2*theta0)
    P0  =  600
    PDO  =  20
    theta0  =  1.0 / 60
    =  PDO / np.log( 2 )
    =  P0  +  B * np.log(theta0)
    coef  =  classifier.coef_
    beta0  =  classifier.intercept_
     
    status_checking_account_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 0 ] * status_checking_account_woe[ 'woe' ]
    Duration_in_month_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 1 ] * Duration_in_month_woe[ 'woe' ]
    Credit_history_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 2 ] * Credit_history_woe[ 'woe' ]
    Purpose_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 3 ] * Purpose_woe[ 'woe' ]
    Credit_amount_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 4 ] * Credit_amount_woe[ 'woe' ]
    Savings_account_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 5 ] * Savings_account_woe[ 'woe' ]
    Present_employment_since_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 6 ] * Present_employment_since_woe[ 'woe' ]
    Installment_rate_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 7 ] * Installment_rate_woe[ 'woe' ]
    Personal_status_and_sex_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 8 ] * Personal_status_and_sex_woe[ 'woe' ]
    Other_debtors_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 9 ] * Other_debtors_woe[ 'woe' ]
    Present_residence_since_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 10 ] * Present_residence_since_woe[ 'woe' ]
    Property_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 11 ] * Property_woe[ 'woe' ]
    Age_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 12 ] * Age_woe[ 'woe' ]
    Other_installment_plans_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 13 ] * Other_installment_plans_woe[ 'woe' ]
    Housing_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 14 ] * Housing_woe[ 'woe' ]
    Number_of_existing_credits_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 15 ] * Number_of_existing_credits_woe[ 'woe' ]
    Job_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 16 ] * Job_woe[ 'woe' ]
    Number_of_people_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 17 ] * Number_of_people_woe[ 'woe' ]
    Telephone_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 18 ] * Telephone_woe[ 'woe' ]
    foreign_worker_woe[ 'score' =  (A  -  B * beta0) / 20  -  B * coef[ 0 ][ 19 ] * foreign_worker_woe[ 'woe' ]


    展开全文
  • 信用评分卡模型在国外是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使用,其原理是将模型变量WOE编码方式离散化之后运用logistic回归模型进行的一种二分类变量的广义线性模型...
  • **WOE:**证据权重(Weight of Evidence),WOE编码是评分卡里面重要的特征转换方法,可以将非线性变量线性化处理,提高业务解释性,同时能够消除异常值的影响,减少小概率事件对最终评分影响的权重。 WOE的主要作用...
  • 其原理是将模型变量WOE编码方式离散化之后运用Logistic回归模型进行的一种二分类变量的广义线性回归模型。本文重点介绍模型变量WOE以及IV原理,为表述方便,讲模型目标标量1记为“违约用户”,对于目标变量为0记为...
  • 信用评分卡模型在国外是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使用,其原理是将模型变量WOE编码方式离散化之后运用logistic回归模型进行的一种二分类变量的广义线性模型...
  • 评分卡模型开发(六)--WOE值计算

    千次阅读 2018-11-23 10:43:57
    对入模的定量和定性指标,分别进行连续变量分段(对定量指标进行分段),以便于计算定量指标的WOE和对离散变量进行必要的降维。对连续变量的分段方法通常分为等距分段和最优分段两种方法。等距分段是指将连续变量...
  • 评分卡模型剖析之一(woe、I…

    千次阅读 2016-08-29 12:51:41
    评分卡模型剖析之一(woe、IV、ROC、信息熵)作者:数据挖掘工人信用评分卡模型在国外是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使用,其原理是将模型变量WOE编码方式离散...
  • 数据挖掘模型中的IV和WOE详解

    千次阅读 2018-06-29 15:25:31
     当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这...
  • 比如我们有200个候选自变量,通常情况下,不会直接把200个变量直接放到模型中去进行拟合训练,而是会用一些方法,从这200个自变量中挑选一些出来,放进模型,形成入模变量列表。那么我们怎么去挑选入模变量呢? ...
  • 信用风险ABC模型有进件申请评分、行为评分、催收评分。 一、数据准备 1、排除一些特定的建模客户 用于建模的客户或者申请者必须是日常审批过程中接触到的,需要排除以下两类人: 异常行为:销户、按条例拒绝、...
  • WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老、中、青三组,一般的做法是ROC或者X-tile等等。今天介绍一种在信用卡...
  • 通常xgb或lgb模型通过pmml上线都比较简单,但是逻辑回归模型因为涉及到woe转换,就要通过自定义转换函数的方式来实现。 1、常规转换-模型训练好之后立即转换 import joblib from sklearn2pmml import PMMLPipeline...
  • cal_woe_iv.py

    2019-09-12 10:13:44
    本工具主要是在建模时,对原始变量的值做woe转换,以减小模型训练时的过拟合
  • woe转换工具主要用于信用评级的记分卡模型。在woe中,对变量进行分箱的原理类似于二叉决策树,其中决定如何划分的目标函数是iv值。特点如下: 基于IV准则的分裂树 丰富的模型评价方法 格式统一,输出方便 IV树的...
  • WOE评分卡--WOE理论

    万次阅读 多人点赞 2017-03-28 10:33:53
    最常见的用于信用评分的模型就是logistic回归,这是一种处理二分类因变量的广义线性模型。这种模型的理论基础比较扎实,但是对于不同的问题当然也存在一些特殊的处理方式. 由于制作评分卡的某些需要,通常会在建立...
  • WOE IV值

    千次阅读 2018-02-23 16:24:42
     在开发信用评分卡模型时,连续变量的离散化是特征工程的重要步骤之一,主要是将连续变量转换为离散变量,同时根据不同分段对目标变量的影响力作数值转换。  在将连续变量离散化的过程中,如果仅仅按照分段的顺序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 842
精华内容 336
关键字:

woe转换模型