Пример для анализа карты показателей кредита

В этом примере показано, как создать creditscorecard объект, данные интервала, отображение и график информации о привязанных данных. В этом примере также показано, как подогнать логистическую регрессионую модель, получить счет для модели карты показателей и определить вероятности дефолта и подтвердить модель карты показателей кредита с помощью трех различных метрик.

Шаг 1. Создайте объект creditscorecard.

Используйте CreditCardData.mat файл для загрузки data (использование набора данных из Refaat 2011). Если ваш data содержит много предикторов, можно сначала использовать screenpredictors (Risk Management Toolbox) из Risk Management Toolbox™ для анализа потенциально большого набора предикторов в подмножество, которое наиболее предсказывает переменную ответа карты показателей кредита. Затем можно использовать это подмножество предикторов при создании creditscorecard объект.

При создании creditscorecard объект, по умолчанию, 'ResponseVar' устанавливается в последний столбец данных ('status' в этом примере) и 'GoodLabel' на значение отклика с наивысшим количеством (0 в этом примере). Синтаксис для creditscorecard указывает, что 'CustID' является 'IDVar' удалить из списка предикторов. Также, хотя и не продемонстрирован в этом примере, при создании creditscorecard использование объекта creditscorecardможно использовать необязательный аргумент пары "имя-значение" 'WeightsVar' для определения весов или 'BinMissingData' наблюдений (выборки) для интервала отсутствующих данных.

load CreditCardData
head(data)
ans=8×11 table
    CustID    CustAge    TmAtAddress    ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    __________    _________    __________    _______    _______    _________    ________    ______

      1         53           62         Tenant        Unknown        50000         55         Yes       1055.9        0.22        0   
      2         61           22         Home Owner    Employed       52000         25         Yes       1161.6        0.24        0   
      3         47           30         Tenant        Employed       37000         61         No        877.23        0.29        0   
      4         50           75         Home Owner    Employed       53000         20         Yes       157.37        0.08        0   
      5         68           56         Home Owner    Employed       53000         14         Yes       561.84        0.11        0   
      6         65           13         Home Owner    Employed       48000         59         Yes       968.18        0.15        0   
      7         34           32         Home Owner    Unknown        32000         26         Yes       717.82        0.02        1   
      8         50           57         Other         Employed       51000         33         No        3041.2        0.13        0   

Переменные в CreditCardData идентификатор клиента, возраст клиента, время по текущему адресу, статус проживания, статус занятости, доход клиента, время в банке, другая кредитная карта, средний месячный остаток, коэффициент использования и статус по умолчанию (ответ).

sc = creditscorecard(data,'IDVar','CustID')
sc = 
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: ''
                 VarNames: {1x11 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 0
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}
                     Data: [1200x11 table]

Выполните некоторые начальные исследования данных. Запросите статистику предикторов для категориальной переменной 'ResStatus' и постройте график информации о интервале для 'ResStatus'.

bininfo(sc,'ResStatus')
ans=4×6 table
         Bin          Good    Bad     Odds        WOE       InfoValue
    ______________    ____    ___    ______    _________    _________

    {'Home Owner'}    365     177    2.0621     0.019329    0.0001682
    {'Tenant'    }    307     167    1.8383    -0.095564    0.0036638
    {'Other'     }    131      53    2.4717      0.20049    0.0059418
    {'Totals'    }    803     397    2.0227          NaN    0.0097738

plotbins(sc,'ResStatus')

Figure contains an axes. The axes with title ResStatus contains 3 objects of type bar, line. These objects represent Good, Bad.

Эта информация о интервале содержит частоты «Хорошо» и «Плохо» и статистику интервала. Избегайте наличия интервалов с частотами нуля, потому что они приводят к бесконечному или неопределенному (NaN) статистика. Используйте modifybins или autobinning функции для соответствующего интервала данных.

Для числовых данных общим первым шагом является «тонкая классификация». Это означает раскладывание данных на несколько интервалов, определенных регулярной сеткой. Чтобы проиллюстрировать эту точку, используйте предиктор 'CustIncome'.

cp = 20000:5000:60000;

sc = modifybins(sc,'CustIncome','CutPoints',cp);

bininfo(sc,'CustIncome')
ans=11×6 table
           Bin           Good    Bad     Odds         WOE       InfoValue 
    _________________    ____    ___    _______    _________    __________

    {'[-Inf,20000)' }      3       5        0.6      -1.2152      0.010765
    {'[20000,25000)'}     23      16     1.4375     -0.34151     0.0039819
    {'[25000,30000)'}     38      47    0.80851     -0.91698      0.065166
    {'[30000,35000)'}    131      75     1.7467     -0.14671      0.003782
    {'[35000,40000)'}    193      98     1.9694    -0.026696    0.00017359
    {'[40000,45000)'}    173      76     2.2763      0.11814     0.0028361
    {'[45000,50000)'}    131      47     2.7872      0.32063      0.014348
    {'[50000,55000)'}     82      24     3.4167      0.52425      0.021842
    {'[55000,60000)'}     21       8      2.625      0.26066     0.0015642
    {'[60000,Inf]'  }      8       1          8        1.375      0.010235
    {'Totals'       }    803     397     2.0227          NaN       0.13469

plotbins(sc,'CustIncome')

Figure contains an axes. The axes with title CustIncome contains 3 objects of type bar, line. These objects represent Good, Bad.

Этап 2а. Автоматический интервал данных.

Используйте autobinning функция для выполнения автоматического раскладывание для каждой переменной предиктора, используя 'Monotone' по умолчанию алгоритм с опциями алгоритма по умолчанию.

sc = autobinning(sc);

После шага автоматического раскладывание, каждое интервал предиктора должно быть рассмотрено с помощью bininfo и plotbins функции и подстройка. Монотонный, идеально линейный тренд в весе доказательств (ГОРЕ) желателен для кредитных карт результатов, потому что это переводится в линейные точки для заданного предиктора. Тренды ГОРЕ могут быть визуализированы с помощью plotbins.

Predictor = 'ResStatus';
plotbins (sc, Predictor)

Figure contains an axes. The axes with title ResStatus contains 3 objects of type bar, line. These objects represent Good, Bad.

В отличие от начального графика 'ResStatus' при создании карты показателей новый график для 'ResStatus' показывает растущий тренд ГОРЕ. Это потому, что autobinning функция по умолчанию сортирует порядок категорий, увеличивая шансы.

Эти графики показывают, что 'Monotone' алгоритм хорошо справляется с поиском монотонных трендов ГОРЕ для этого набора данных. Чтобы завершить процесс раскладывания, необходимо сделать только несколько ручных корректировок для некоторых предикторов, использующих modifybins функция.

Этап 2b. Отстройте интервалы с помощью ручного раскладывания.

Общие шаги для ручного изменения интервалов:

  • Используйте bininfo функция с двумя выходными аргументами, где второй аргумент содержит правила binning.

  • Вручную измените правила раскладывания, используя второй выходной аргумент от bininfo.

  • Установите обновленные правила binning с modifybins а затем использовать plotbins или bininfo для просмотра обновленных интервалов.

Для примера, на основе графика для 'CustAge' На этапе 2а интервалы с номерами 1 и 2 имеют те же интервалы ГОРЕ, что и интервалы с номерами 5 и 6. Чтобы объединить эти интервалы с помощью шагов, описанных выше:

Predictor = 'CustAge';
[bi, cp] = bininfo (sc, Predictor)
bi=8×6 table
         Bin         Good    Bad     Odds        WOE       InfoValue
    _____________    ____    ___    ______    _________    _________

    {'[-Inf,33)'}     70      53    1.3208     -0.42622     0.019746
    {'[33,37)'  }     64      47    1.3617     -0.39568     0.015308
    {'[37,40)'  }     73      47    1.5532     -0.26411    0.0072573
    {'[40,46)'  }    174      94    1.8511    -0.088658     0.001781
    {'[46,48)'  }     61      25      2.44      0.18758    0.0024372
    {'[48,58)'  }    263     105    2.5048      0.21378     0.013476
    {'[58,Inf]' }     98      26    3.7692      0.62245       0.0352
    {'Totals'   }    803     397    2.0227          NaN     0.095205

cp = 6×1

    33
    37
    40
    46
    48
    58

cp([1 5]) = []; % To merge bins 1 and 2, and bins 5 and 6
sc = modifybins(sc,'CustAge','CutPoints',cp);
plotbins(sc,'CustAge')

Figure contains an axes. The axes with title CustAge contains 3 objects of type bar, line. These objects represent Good, Bad.

Для 'CustIncome', исходя из приведенного выше графика, лучше всего объединить интервалы 3, 4 и 5, поскольку они имеют сходные значения ГОРЕ. Чтобы объединить эти интервалы:

Predictor = 'CustIncome';
[bi, cp] = bininfo (sc, Predictor)
bi=8×6 table
           Bin           Good    Bad     Odds         WOE       InfoValue 
    _________________    ____    ___    _______    _________    __________

    {'[-Inf,29000)' }     53      58    0.91379     -0.79457       0.06364
    {'[29000,33000)'}     74      49     1.5102     -0.29217     0.0091366
    {'[33000,35000)'}     68      36     1.8889     -0.06843    0.00041042
    {'[35000,40000)'}    193      98     1.9694    -0.026696    0.00017359
    {'[40000,42000)'}     68      34          2    -0.011271    1.0819e-05
    {'[42000,47000)'}    164      66     2.4848      0.20579     0.0078175
    {'[47000,Inf]'  }    183      56     3.2679      0.47972      0.041657
    {'Totals'       }    803     397     2.0227          NaN       0.12285

cp = 6×1

       29000
       33000
       35000
       40000
       42000
       47000

cp([3 4]) = []; % To merge bins 3, 4, and 5
sc = modifybins(sc,'CustIncome','CutPoints',cp);
plotbins(sc,'CustIncome')

Figure contains an axes. The axes with title CustIncome contains 3 objects of type bar, line. These objects represent Good, Bad.

Для 'TmWBank', исходя из приведенного выше графика, лучше всего объединить интервалы 2 и 3, поскольку они имеют сходные значения ГОРЕ. Чтобы объединить эти интервалы:

Predictor = 'TmWBank';
[bi, cp] = bininfo (sc, Predictor)
bi=6×6 table
         Bin         Good    Bad     Odds       WOE       InfoValue
    _____________    ____    ___    ______    ________    _________

    {'[-Inf,12)'}    141      90    1.5667    -0.25547     0.013057
    {'[12,23)'  }    165      93    1.7742    -0.13107    0.0037719
    {'[23,45)'  }    224     125     1.792    -0.12109    0.0043479
    {'[45,71)'  }    177      67    2.6418     0.26704     0.013795
    {'[71,Inf]' }     96      22    4.3636     0.76889     0.049313
    {'Totals'   }    803     397    2.0227         NaN     0.084284

cp = 4×1

    12
    23
    45
    71

cp(2) = []; % To merge bins 2 and 3
sc = modifybins(sc,'TmWBank','CutPoints',cp);
plotbins(sc,'TmWBank')

Figure contains an axes. The axes with title TmWBank contains 3 objects of type bar, line. These objects represent Good, Bad.

Для 'AMBalance', исходя из приведенного выше графика, лучше всего объединить интервалы 2 и 3, поскольку они имеют сходные значения ГОРЕ. Чтобы объединить эти интервалы:

Predictor = 'AMBalance';
[bi, cp] = bininfo (sc, Predictor)
bi=5×6 table
             Bin             Good    Bad     Odds       WOE       InfoValue
    _____________________    ____    ___    ______    ________    _________

    {'[-Inf,558.88)'    }    346     134    2.5821     0.24418     0.022795
    {'[558.88,1254.28)' }    309     171     1.807    -0.11274    0.0051774
    {'[1254.28,1597.44)'}     76      44    1.7273    -0.15787    0.0025554
    {'[1597.44,Inf]'    }     72      48       1.5    -0.29895    0.0093402
    {'Totals'           }    803     397    2.0227         NaN     0.039868

cp = 3×1
103 ×

    0.5589
    1.2543
    1.5974

cp(2) = []; % To merge bins 2 and 3
sc = modifybins(sc,'AMBalance','CutPoints',cp);
plotbins(sc,'AMBalance')

Figure contains an axes. The axes with title AMBalance contains 3 objects of type bar, line. These objects represent Good, Bad.

Теперь, когда раскладывание подстройка завершена, интервалы для всех предикторов имеют близкие к линейным тренды WOE.

Шаг 3. Подбор логистической регрессионной модели.

fitmodel функция соответствует логистической регрессионной модели к данным WOE. fitmodel внутренне блокирует обучающие данные, преобразует их в значения WOE, отображает переменную отклика так, что 'Good' является 1, и подходит для линейной логистической регрессионой модели. По умолчанию fitmodel использует пошаговую процедуру, чтобы определить, какие предикторы должны быть в модели.

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8954, Chi2Stat = 32.545914, PValue = 1.1640961e-08
2. Adding TmWBank, Deviance = 1467.3249, Chi2Stat = 23.570535, PValue = 1.2041739e-06
3. Adding AMBalance, Deviance = 1455.858, Chi2Stat = 11.466846, PValue = 0.00070848829
4. Adding EmpStatus, Deviance = 1447.6148, Chi2Stat = 8.2432677, PValue = 0.0040903428
5. Adding CustAge, Deviance = 1442.06, Chi2Stat = 5.5547849, PValue = 0.018430237
6. Adding ResStatus, Deviance = 1437.9435, Chi2Stat = 4.1164321, PValue = 0.042468555
7. Adding OtherCC, Deviance = 1433.7372, Chi2Stat = 4.2063597, PValue = 0.040272676

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate      SE       tStat       pValue  
                   ________    _______    ______    __________

    (Intercept)     0.7024       0.064    10.975    5.0407e-28
    CustAge        0.61562     0.24783    2.4841      0.012988
    ResStatus       1.3776     0.65266    2.1107      0.034799
    EmpStatus      0.88592     0.29296     3.024     0.0024946
    CustIncome     0.69836     0.21715     3.216     0.0013001
    TmWBank          1.106     0.23266    4.7538    1.9958e-06
    OtherCC         1.0933     0.52911    2.0662      0.038806
    AMBalance       1.0437     0.32292    3.2322     0.0012285


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.42e-16

Шаг 4. Просмотр и формат точек карты результатов.

После подбора кривой логистической модели, по умолчанию точки не масштабируются и исходят непосредственно из комбинации значений ГОРЕ и коэффициентов модели. displaypoints функция суммирует точки карты показателей.

p1 = displaypoints(sc);
disp(p1)
      Predictors              Bin              Points  
    ______________    ____________________    _________

    {'CustAge'   }    {'[-Inf,37)'       }     -0.15314
    {'CustAge'   }    {'[37,40)'         }    -0.062247
    {'CustAge'   }    {'[40,46)'         }     0.045763
    {'CustAge'   }    {'[46,58)'         }      0.22888
    {'CustAge'   }    {'[58,Inf]'        }      0.48354
    {'CustAge'   }    {'<missing>'       }          NaN
    {'ResStatus' }    {'Tenant'          }    -0.031302
    {'ResStatus' }    {'Home Owner'      }      0.12697
    {'ResStatus' }    {'Other'           }      0.37652
    {'ResStatus' }    {'<missing>'       }          NaN
    {'EmpStatus' }    {'Unknown'         }    -0.076369
    {'EmpStatus' }    {'Employed'        }      0.31456
    {'EmpStatus' }    {'<missing>'       }          NaN
    {'CustIncome'}    {'[-Inf,29000)'    }     -0.45455
    {'CustIncome'}    {'[29000,33000)'   }      -0.1037
    {'CustIncome'}    {'[33000,42000)'   }     0.077768
    {'CustIncome'}    {'[42000,47000)'   }      0.24406
    {'CustIncome'}    {'[47000,Inf]'     }      0.43536
    {'CustIncome'}    {'<missing>'       }          NaN
    {'TmWBank'   }    {'[-Inf,12)'       }     -0.18221
    {'TmWBank'   }    {'[12,45)'         }    -0.038279
    {'TmWBank'   }    {'[45,71)'         }      0.39569
    {'TmWBank'   }    {'[71,Inf]'        }      0.95074
    {'TmWBank'   }    {'<missing>'       }          NaN
    {'OtherCC'   }    {'No'              }       -0.193
    {'OtherCC'   }    {'Yes'             }      0.15868
    {'OtherCC'   }    {'<missing>'       }          NaN
    {'AMBalance' }    {'[-Inf,558.88)'   }       0.3552
    {'AMBalance' }    {'[558.88,1597.44)'}    -0.026797
    {'AMBalance' }    {'[1597.44,Inf]'   }     -0.21168
    {'AMBalance' }    {'<missing>'       }          NaN

Это хорошее время для изменения меток интервалов, если это что-то интересное по косметическим причинам. Для этого используйте modifybins для изменения меток интервала.

sc = modifybins(sc,'CustAge','BinLabels',...
{'Up to 36' '37 to 39' '40 to 45' '46 to 57' '58 and up'});

sc = modifybins(sc,'CustIncome','BinLabels',...
{'Up to 28999' '29000 to 32999' '33000 to 41999' '42000 to 46999' '47000 and up'});

sc = modifybins(sc,'TmWBank','BinLabels',...
{'Up to 11' '12 to 44' '45 to 70' '71 and up'});

sc = modifybins(sc,'AMBalance','BinLabels',...
{'Up to 558.87' '558.88 to 1597.43' '1597.44 and up'});

p1 = displaypoints(sc);
disp(p1)
      Predictors               Bin              Points  
    ______________    _____________________    _________

    {'CustAge'   }    {'Up to 36'         }     -0.15314
    {'CustAge'   }    {'37 to 39'         }    -0.062247
    {'CustAge'   }    {'40 to 45'         }     0.045763
    {'CustAge'   }    {'46 to 57'         }      0.22888
    {'CustAge'   }    {'58 and up'        }      0.48354
    {'CustAge'   }    {'<missing>'        }          NaN
    {'ResStatus' }    {'Tenant'           }    -0.031302
    {'ResStatus' }    {'Home Owner'       }      0.12697
    {'ResStatus' }    {'Other'            }      0.37652
    {'ResStatus' }    {'<missing>'        }          NaN
    {'EmpStatus' }    {'Unknown'          }    -0.076369
    {'EmpStatus' }    {'Employed'         }      0.31456
    {'EmpStatus' }    {'<missing>'        }          NaN
    {'CustIncome'}    {'Up to 28999'      }     -0.45455
    {'CustIncome'}    {'29000 to 32999'   }      -0.1037
    {'CustIncome'}    {'33000 to 41999'   }     0.077768
    {'CustIncome'}    {'42000 to 46999'   }      0.24406
    {'CustIncome'}    {'47000 and up'     }      0.43536
    {'CustIncome'}    {'<missing>'        }          NaN
    {'TmWBank'   }    {'Up to 11'         }     -0.18221
    {'TmWBank'   }    {'12 to 44'         }    -0.038279
    {'TmWBank'   }    {'45 to 70'         }      0.39569
    {'TmWBank'   }    {'71 and up'        }      0.95074
    {'TmWBank'   }    {'<missing>'        }          NaN
    {'OtherCC'   }    {'No'               }       -0.193
    {'OtherCC'   }    {'Yes'              }      0.15868
    {'OtherCC'   }    {'<missing>'        }          NaN
    {'AMBalance' }    {'Up to 558.87'     }       0.3552
    {'AMBalance' }    {'558.88 to 1597.43'}    -0.026797
    {'AMBalance' }    {'1597.44 and up'   }     -0.21168
    {'AMBalance' }    {'<missing>'        }          NaN

Точки обычно масштабируются, а также часто округляются. Для этого используйте formatpoints функция. Например, можно задать целевой уровень точек, соответствующий целевому уровню шансов, а также установить необходимые точки на значения double-the-ods (PDO).

TargetPoints = 500;
TargetOdds = 2;
PDO = 50; % Points to double the odds

sc = formatpoints(sc,'PointsOddsAndPDO',[TargetPoints TargetOdds PDO]);
p2 = displaypoints(sc);
disp(p2)
      Predictors               Bin             Points
    ______________    _____________________    ______

    {'CustAge'   }    {'Up to 36'         }    53.239
    {'CustAge'   }    {'37 to 39'         }    59.796
    {'CustAge'   }    {'40 to 45'         }    67.587
    {'CustAge'   }    {'46 to 57'         }    80.796
    {'CustAge'   }    {'58 and up'        }    99.166
    {'CustAge'   }    {'<missing>'        }       NaN
    {'ResStatus' }    {'Tenant'           }    62.028
    {'ResStatus' }    {'Home Owner'       }    73.445
    {'ResStatus' }    {'Other'            }    91.446
    {'ResStatus' }    {'<missing>'        }       NaN
    {'EmpStatus' }    {'Unknown'          }    58.777
    {'EmpStatus' }    {'Employed'         }    86.976
    {'EmpStatus' }    {'<missing>'        }       NaN
    {'CustIncome'}    {'Up to 28999'      }    31.497
    {'CustIncome'}    {'29000 to 32999'   }    56.805
    {'CustIncome'}    {'33000 to 41999'   }    69.896
    {'CustIncome'}    {'42000 to 46999'   }    81.891
    {'CustIncome'}    {'47000 and up'     }     95.69
    {'CustIncome'}    {'<missing>'        }       NaN
    {'TmWBank'   }    {'Up to 11'         }    51.142
    {'TmWBank'   }    {'12 to 44'         }    61.524
    {'TmWBank'   }    {'45 to 70'         }    92.829
    {'TmWBank'   }    {'71 and up'        }    132.87
    {'TmWBank'   }    {'<missing>'        }       NaN
    {'OtherCC'   }    {'No'               }    50.364
    {'OtherCC'   }    {'Yes'              }    75.732
    {'OtherCC'   }    {'<missing>'        }       NaN
    {'AMBalance' }    {'Up to 558.87'     }    89.908
    {'AMBalance' }    {'558.88 to 1597.43'}    62.353
    {'AMBalance' }    {'1597.44 and up'   }    49.016
    {'AMBalance' }    {'<missing>'        }       NaN

Шаг 5. Оцените данные.

score функция вычисляет счета для обучающих данных. Необязательный data вход также может быть передан в scoreдля примера, данные валидации. Точки на предиктор для каждого клиента предоставляются как необязательный выход.

[Scores,Points] = score(sc);
disp(Scores(1:10))
  528.2044
  554.8861
  505.2406
  564.0717
  554.8861
  586.1904
  441.8755
  515.8125
  524.4553
  508.3169
disp(Points(1:10,:))
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    80.796      62.028       58.777         95.69      92.829     75.732      62.353  
    99.166      73.445       86.976         95.69      61.524     75.732      62.353  
    80.796      62.028       86.976        69.896      92.829     50.364      62.353  
    80.796      73.445       86.976         95.69      61.524     75.732      89.908  
    99.166      73.445       86.976         95.69      61.524     75.732      62.353  
    99.166      73.445       86.976         95.69      92.829     75.732      62.353  
    53.239      73.445       58.777        56.805      61.524     75.732      62.353  
    80.796      91.446       86.976         95.69      61.524     50.364      49.016  
    80.796      62.028       58.777         95.69      61.524     75.732      89.908  
    80.796      73.445       58.777         95.69      61.524     75.732      62.353  

Шаг 6. Вычислим вероятность дефолта.

Чтобы вычислить вероятность дефолта, используйте probdefault функция.

pd = probdefault(sc);

Определите вероятность быть «Хорошим» и постройте график предсказанных шансов от форматированных счетов. Визуально анализируйте, что целевые точки и шансы цели совпадают и что отношение «очки к двойным коэффициентам» (PDO) имеет место.

ProbGood = 1-pd;
PredictedOdds = ProbGood./pd;

figure
scatter(Scores,PredictedOdds)
title('Predicted Odds vs. Score')
xlabel('Score')
ylabel('Predicted Odds')

hold on

xLimits = xlim;
yLimits = ylim;

% Target points and odds
plot([TargetPoints TargetPoints],[yLimits(1) TargetOdds],'k:')
plot([xLimits(1) TargetPoints],[TargetOdds TargetOdds],'k:')

% Target points plus PDO
plot([TargetPoints+PDO TargetPoints+PDO],[yLimits(1) 2*TargetOdds],'k:')
plot([xLimits(1) TargetPoints+PDO],[2*TargetOdds 2*TargetOdds],'k:')

% Target points minus PDO
plot([TargetPoints-PDO TargetPoints-PDO],[yLimits(1) TargetOdds/2],'k:')
plot([xLimits(1) TargetPoints-PDO],[TargetOdds/2 TargetOdds/2],'k:')

hold off

Figure contains an axes. The axes with title Predicted Odds vs. Score contains 7 objects of type scatter, line.

Шаг 7. Проверьте модель карты показателей кредита с помощью статистических данных CAP, ROC и Колмогоров-Смирнов

The creditscorecard класс поддерживает три метода валидации, профиль совокупной точности (CAP), рабочую характеристику приемника (ROC) и статистику Колмогорова-Смирнова (K-S). Для получения дополнительной информации о CAP, ROC и KS, смотрите Профиль кумулятивной точности (CAP), Операционная характеристика приемника (ROC) и Статистика Колмогорова-Смирнова (KS).

[Stats,T] = validatemodel(sc,'Plot',{'CAP','ROC','KS'});

Figure contains an axes. The axes with title Cumulative Accuracy Profile (CAP) curve contains 6 objects of type patch, line, text.

Figure contains an axes. The axes with title Receiver Operating Characteristic (ROC) curve contains 3 objects of type patch, line, text.

Figure contains an axes. The axes with title K-S Plot contains 6 objects of type line, text. These objects represent Cumulative Bads, Cumulative Goods.

disp(Stats)
            Measure              Value 
    ________________________    _______

    {'Accuracy Ratio'      }    0.32225
    {'Area under ROC curve'}    0.66113
    {'KS statistic'        }    0.22324
    {'KS score'            }     499.18
disp(T(1:15,:))
    Scores    ProbDefault    TrueBads    FalseBads    TrueGoods    FalseGoods    Sensitivity    FalseAlarm      PctObs  
    ______    ___________    ________    _________    _________    __________    ___________    __________    __________

     369.4       0.7535          0           1           802          397                 0     0.0012453     0.00083333
    377.86      0.73107          1           1           802          396         0.0025189     0.0012453      0.0016667
    379.78       0.7258          2           1           802          395         0.0050378     0.0012453         0.0025
    391.81      0.69139          3           1           802          394         0.0075567     0.0012453      0.0033333
    394.77      0.68259          3           2           801          394         0.0075567     0.0024907      0.0041667
    395.78      0.67954          4           2           801          393          0.010076     0.0024907          0.005
    396.95      0.67598          5           2           801          392          0.012594     0.0024907      0.0058333
    398.37      0.67167          6           2           801          391          0.015113     0.0024907      0.0066667
    401.26      0.66276          7           2           801          390          0.017632     0.0024907         0.0075
    403.23      0.65664          8           2           801          389          0.020151     0.0024907      0.0083333
    405.09      0.65081          8           3           800          389          0.020151      0.003736      0.0091667
    405.15      0.65062         11           5           798          386          0.027708     0.0062267       0.013333
    405.37      0.64991         11           6           797          386          0.027708      0.007472       0.014167
    406.18      0.64735         12           6           797          385          0.030227      0.007472          0.015
    407.14      0.64433         13           6           797          384          0.032746      0.007472       0.015833

См. также

| | | | | | | | | | | | | | |

Похожие примеры

Подробнее о

Внешние веб-сайты