exponenta event banner

История успеха для анализа кредитных карт показателей

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

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

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

При создании creditscorecard object, по умолчанию, '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 функция для выполнения автоматического binning для каждой переменной предиктора, используя значение по умолчанию 'Monotone' с параметрами алгоритма по умолчанию.

sc = autobinning(sc);

После этапа автоматического смешивания все ячейки предиктора должны быть проверены с помощью bininfo и plotbins функции и отлаженные. Монотонная, в идеале линейная тенденция в весе доказательств (WOE) желательна для кредитных карт показателей, потому что это переводится в линейные точки для данного предиктора. Тенденции WOE можно визуализировать с помощью 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' показывает возрастающую тенденцию WOE. Это потому, что autobinning функция по умолчанию сортирует порядок категорий путем увеличения шансов.

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

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

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

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

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

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

Например, на основе графика для 'CustAge' на этапе 2а бункеры 1 и 2 имеют такие же WOE, как бункеры 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, потому что они имеют аналогичные WOE. Для объединения этих ячеек:

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, потому что они имеют аналогичные WOE. Для объединения этих ячеек:

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, потому что они имеют аналогичные WOE. Для объединения этих ячеек:

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. Просмотр и форматирование точек карты показателей.

После подгонки логистической модели точки по умолчанию не масштабируются и поступают непосредственно из комбинации значений WOE и коэффициентов модели. 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 функция. Например, можно задать целевой уровень точек, соответствующий целевому уровню шансов, а также задать требуемые точки для удвоения шансов (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 и Колмогорова-Смирнова

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

См. также

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

Связанные примеры

Подробнее

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