bininfo

Возвратите информацию об интервале предиктора

Синтаксис

bi = bininfo(sc,PredictorName)
bi = bininfo(___,Name,Value)
[bi,bm] = bininfo(sc,PredictorName,Name,Value)
[bi,bm,mv] = bininfo(sc,PredictorName,Name,Value)

Описание

пример

bi = bininfo(sc,PredictorName) возвращает информацию на уровне интервала, таком как частоты “Хороших”, “Плохо”, и статистика интервала для предиктора, заданного в PredictorName.

пример

bi = bininfo(___,Name,Value) добавляют дополнительные аргументы значения имени.

пример

[bi,bm] = bininfo(sc,PredictorName,Name,Value) добавляют дополнительные аргументы значения имени. bininfo также опционально возвращает карту раскладывания (bm) или правила интервала в форме вектора точек разделения для числовых предикторов или таблица группировок категории для категориальных предикторов.

пример

[bi,bm,mv] = bininfo(sc,PredictorName,Name,Value) возвращает информацию на уровне интервала, таком как частоты “Хороших”, “Плохо", и статистика интервала для предиктора, заданного в PredictorName с помощью дополнительных аргументов пары "имя-значение". bininfo опционально возвращает карту раскладывания или правила интервала в форме вектора точек разделения для числовых предикторов или таблицу группировок категории для категориальных предикторов. Кроме того, дополнительные аргументы пары "имя-значение" mv возвращает числовой массив, содержащий минимальные и максимальные значения, как установлено (или заданный) пользователем. Выходной аргумент mv установлен в пустой массив для категориальных предикторов.

Примеры

свернуть все

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить data (использующий набор данных от Refaat 2011).

load CreditCardData 
sc = creditscorecard(data);

Отобразите информацию об интервале для категориального предиктора ResStatus.

bi = bininfo(sc,'ResStatus')
bi=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

Используйте файл CreditCardData.mat, чтобы загрузить данные (dataWeights), который содержит столбец (RowWeights) для весов (использующий набор данных от Refaat 2011).

load CreditCardData

Создайте объект creditscorecard с помощью дополнительного аргумента пары "имя-значение" для 'WeightsVar'.

sc = creditscorecard(dataWeights,'WeightsVar','RowWeights')
sc = 
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: 'RowWeights'
                 VarNames: {1x12 cell}
        NumericPredictors: {1x7 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 0
                    IDVar: ''
            PredictorVars: {1x10 cell}
                     Data: [1200x12 table]

Отобразите информацию об интервале для числового предиктора 'CustIncome'. Когда дополнительный аргумент пары "имя-значение" 'WeightsVar' используется, чтобы задать наблюдение (выборка) веса, таблица bi содержит взвешенные количества.

bi = bininfo(sc,'CustIncome');
bi(1:10,:)
ans=10×6 table
      Bin       Good        Bad       Odds        WOE       InfoValue 
    _______    _______    _______    _______    ________    __________

    '18000'    0.94515      1.496    0.63179     -1.1667     0.0059198
    '19000'    0.47588    0.80569    0.59065     -1.2341     0.0034716
    '20000'     2.1671     1.4636     1.4806    -0.31509    0.00061392
    '21000'     3.2522    0.88064      3.693     0.59889     0.0021303
    '22000'     1.5438     1.2714     1.2142    -0.51346     0.0012913
    '23000'      1.787     2.7529    0.64913     -1.1397      0.010509
    '24000'     3.4111     2.2538     1.5135    -0.29311    0.00082663
    '25000'     2.2333     6.1383    0.36383     -1.7186      0.042642
    '26000'     2.1246     4.4754    0.47474     -1.4525      0.024526
    '27000'     3.1058      3.528    0.88032    -0.83501     0.0082144

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить data (использующий набор данных от Refaat 2011).

load CreditCardData 
sc = creditscorecard(data);

Отобразите настроенную информацию об интервале для категориального предиктора ResStatus, сохранив только столбец WOE. Вес доказательства (WOE) является заданным интервалом интервалом, но нет никакой концепции "общего WOE", поэтому последний элемент в строке 'Totals' установлен в NaN.

bi = bininfo(sc,'ResStatus','Statistics','WOE');
disp(bi)
        Bin         Good    Bad       WOE   
    ____________    ____    ___    _________

    'Home Owner'    365     177     0.019329
    'Tenant'        307     167    -0.095564
    'Other'         131      53      0.20049
    'Totals'        803     397          NaN

Отобразите настроенную информацию об интервале для категориального предиктора ResStatus, сохранив только Odds и столбцы WOE, без строки Totals.

bi = bininfo(sc,'ResStatus','Statistics',{'Odds','WOE'},'Totals','Off');
disp(bi)
        Bin         Good    Bad     Odds        WOE   
    ____________    ____    ___    ______    _________

    'Home Owner'    365     177    2.0621     0.019329
    'Tenant'        307     167    1.8383    -0.095564
    'Other'         131      53    2.4717      0.20049

Отобразите информационное значение, энтропию, Gini и статистику хи-квадрата. Для получения дополнительной информации об этих статистических данных смотрите Статистику для Протокола результатов Кредита.

Для получения информации значение, энтропия и Gini, значение явилось в уровень интервала, вклад интервала к итоговому значению. Общее информационное значение, энтропия и меры Gini находятся в строке 'Totals'.

Для хи-квадрата, если существуют интервалы N, первые N-1 значения в столбце 'Chi2' сообщают о попарной статистике хи-квадрата для непрерывных интервалов. Например, эта попарная мера также используется алгоритмом 'Merge' в autobinning, чтобы определить, должны ли два непрерывных интервала быть объединены. В этом примере первое значение в столбце 'Chi2' (1.0331) является статистической величиной хи-квадрата интервалов 1 и 2 ('Home Owner' и 'Tenant'), и второе значение в столбце (2.5103) является статистической величиной хи-квадрата интервалов 2 и 3 ('Tenant' и 'Other'). Нет более попарных значений хи-квадрата, чтобы вычислить в этом примере, таким образом, третий элемент столбца 'Chi2' установлен в NaN. Значение хи-квадрата, о котором сообщают в строке 'Totals', является статистической величиной хи-квадрата, вычисленной по всем интервалам.

bi = bininfo(sc,'ResStatus','Statistics',{'InfoValue','Entropy','Gini','Chi2'});
disp(bi)
        Bin         Good    Bad    InfoValue    Entropy     Gini       Chi2 
    ____________    ____    ___    _________    _______    _______    ______

    'Home Owner'    365     177    0.0001682    0.91138    0.43984    1.0331
    'Tenant'        307     167    0.0036638    0.93612    0.45638    2.5103
    'Other'         131      53    0.0059418    0.86618    0.41015       NaN
    'Totals'        803     397    0.0097738    0.91422    0.44182    2.5549

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить data (использующий набор данных от Refaat 2011).

load CreditCardData 
sc = creditscorecard(data);

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

[bi,cg] = bininfo(sc,'ResStatus')
bi=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

cg=3×2 table
      Category      BinNumber
    ____________    _________

    'Home Owner'        1    
    'Tenant'            2    
    'Other'             3    

К категориям группы Tenant и Other, измените таблицу cg группировки категории так, чтобы номер интервала для Other совпал с номером интервала для Tenant. Затем используйте функцию modifybins, чтобы обновить протокол результатов.

cg.BinNumber(3) = 2;
sc = modifybins(sc,'ResStatus','CatGrouping',cg);

Отобразите обновленную информацию об интервале. Метки интервала были обновлены и что информация о членстве в интервале содержится в категории, группирующей cg.

[bi,cg] = bininfo(sc,'ResStatus')
bi=3×6 table
      Bin       Good    Bad     Odds        WOE       InfoValue 
    ________    ____    ___    ______    _________    __________

    'Group1'    365     177    2.0621     0.019329     0.0001682
    'Group2'    438     220    1.9909    -0.015827    0.00013772
    'Totals'    803     397    2.0227          NaN    0.00030592

cg=3×2 table
      Category      BinNumber
    ____________    _________

    'Home Owner'        1    
    'Tenant'            2    
    'Other'             2    

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить data (использующий набор данных от Refaat 2011).

load CreditCardData 
sc = creditscorecard(data);

Предиктор CustIncome является числовым. По умолчанию каждое значение предиктора помещается в отдельный интервал.

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

    '18000'      2      3     0.66667      -1.1099     0.0056227
    '19000'      1      2         0.5      -1.3976     0.0053002
    '20000'      4      2           2    -0.011271    6.3641e-07
    '21000'      6      3           2    -0.011271    9.5462e-07
    '22000'      4      2           2    -0.011271    6.3641e-07
    '23000'      4      4           1     -0.70442     0.0035885
    '24000'      5      5           1     -0.70442     0.0044856
    '25000'      4      9     0.44444      -1.5153      0.026805
    '26000'      4     11     0.36364       -1.716      0.038999
    '27000'      6      6           1     -0.70442     0.0053827
    '28000'     13     11      1.1818     -0.53736     0.0061896
    '29000'     11     10         1.1     -0.60911     0.0069988
    '30000'     18     16       1.125     -0.58664      0.010493
    '31000'     24      8           3      0.39419     0.0038382
    '32000'     21     15         1.4     -0.36795     0.0042797
    '33000'     35     19      1.8421    -0.093509    0.00039951
      ⋮

Сократите количество интервалов с помощью функции autobinning (функция modifybins может также использоваться).

sc = autobinning(sc,'CustIncome');

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

[bi,cp] = bininfo(sc,'CustIncome')
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

Вручную удалите вторую точку разделения (контур между вторыми и третьими интервалами), чтобы объединить интервалы два и три. Используйте функцию modifybins, чтобы обновить протокол результатов.

cp(2) = [];
sc = modifybins(sc,'CustIncome','CutPoints',cp,'MinValue',0);

Отобразите обновленную информацию об интервале.

[bi,cp,mv] = bininfo(sc,'CustIncome')
bi=7×6 table
          Bin          Good    Bad     Odds         WOE       InfoValue 
    _______________    ____    ___    _______    _________    __________

    '[0,29000)'         53      58    0.91379     -0.79457       0.06364
    '[29000,35000)'    142      85     1.6706     -0.19124     0.0071274
    '[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.12043

cp = 5×1

       29000
       35000
       40000
       42000
       47000

mv = 1×2

     0   Inf

Отметьте, рекомендуется постараться не иметь интервалы с частотами нуля, потому что они приводят к бесконечному или неопределенному (NaN) статистику. Используйте modifybins или функции autobinning, чтобы изменить интервалы.

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить dataMissing с отсутствующими значениями.

load CreditCardData.mat 
head(dataMissing,5)
ans=5×11 table
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________    ______

      1          53          62         <undefined>    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         NaN          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   

fprintf('Number of rows: %d\n',height(dataMissing))
Number of rows: 1200
fprintf('Number of missing values CustAge: %d\n',sum(ismissing(dataMissing.CustAge)))
Number of missing values CustAge: 30
fprintf('Number of missing values ResStatus: %d\n',sum(ismissing(dataMissing.ResStatus)))
Number of missing values ResStatus: 40

Используйте creditscorecard с набором аргумента 'BinMissingData' значения имени к true к интервалу недостающие данные в отдельном интервале.

sc = creditscorecard(dataMissing,'IDVar','CustID','BinMissingData',true);
sc = autobinning(sc);

disp(sc)
  creditscorecard with properties:

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

Отобразите информацию об интервале для числовых данных для 'CustAge', который включает недостающие данные в отдельный интервал, маркировал <missing>.

bi = bininfo(sc,'CustAge');
disp(bi)
        Bin        Good    Bad     Odds       WOE       InfoValue 
    ___________    ____    ___    ______    ________    __________

    '[-Inf,33)'     69      52    1.3269    -0.42156      0.018993
    '[33,37)'       63      45       1.4    -0.36795      0.012839
    '[37,40)'       72      47    1.5319     -0.2779     0.0079824
    '[40,46)'      172      89    1.9326    -0.04556     0.0004549
    '[46,48)'       59      25      2.36     0.15424     0.0016199
    '[48,51)'       99      41    2.4146     0.17713     0.0035449
    '[51,58)'      157      62    2.5323     0.22469     0.0088407
    '[58,Inf]'      93      25      3.72     0.60931      0.032198
    '<missing>'     19      11    1.7273    -0.15787    0.00063885
    'Totals'       803     397    2.0227         NaN      0.087112
plotbins(sc,'CustAge')

Отобразите информацию об интервале для категориальных данных для 'ResStatus', который включает недостающие данные в отдельный интервал, маркировал <missing>.

[bi,cg] = bininfo(sc,'ResStatus');
disp(bi)
        Bin         Good    Bad     Odds        WOE       InfoValue 
    ____________    ____    ___    ______    _________    __________

    'Tenant'        296     161    1.8385    -0.095463     0.0035249
    'Home Owner'    352     171    2.0585     0.017549    0.00013382
    'Other'         128      52    2.4615      0.19637     0.0055808
    '<missing>'      27      13    2.0769     0.026469    2.3248e-05
    'Totals'        803     397    2.0227          NaN     0.0092627
disp(cg)
      Category      BinNumber
    ____________    _________

    'Tenant'            1    
    'Home Owner'        2    
    'Other'             3    

Обратите внимание на то, что таблица группировки категории не включает <missing> , потому что это - зарезервированный интервал, и пользователи не могут взаимодействовать непосредственно с интервалом <missing> .

plotbins(sc,'ResStatus')

Входные параметры

свернуть все

Модель протокола результатов кредита, заданная как объект creditscorecard. Используйте creditscorecard, чтобы создать объект creditscorecard.

Имя предиктора, заданное использование вектора символов, содержащего имя предиктора. PredictorName является чувствительным к регистру.

Типы данных: char

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: bi = bininfo(sc, PredictorName,'Statistics','WOE','Totals','On')

Список статистики, чтобы включать в информацию интервала, указанную как пара, разделенная запятой, состоящая из 'Statistics' и вектора символов или массива ячеек из символьных векторов. Для получения дополнительной информации смотрите Статистику для Протокола результатов Кредита. Возможные значения:

  • 'Odds' — Информацией о разногласиях является отношение “Товаров” по “Bads”.

  • 'WOE' — Вес Доказательства. Статистическая величина WOE измеряет отклонение между распределением “Товаров” и “Bads”.

  • 'InfoValue' — Информационное значение. Тесно связанный к WOE, это - статистическая величина, используемая, чтобы определить, как сильный предиктор должен использовать в подходящей модели. Это измеряется, насколько сильный отклонение между дистрибутивами “Товаров” и “Bads”. Однако интервалы только с “Хорошими” или только “Плохими” наблюдениями действительно приводят к бесконечному информационному Значению. Рассмотрите изменение интервалов в тех случаях при помощи modifybins или autobinning.

  • 'Entropy' — Энтропия является мерой непредсказуемости, содержавшейся в интервалах. Чем больше количество “Товаров” и “Bads” отличаются в интервалах, тем ниже энтропия.

  • 'Gini' — Мера статистической дисперсии или неравенства в рамках выборки данных.

  • 'Chi2' — Мера статистической разницы и независимости между группами.

Примечание

Постарайтесь не иметь интервалы с частотами нуля, потому что они приводят к бесконечному или неопределенному (NaN) статистику. Используйте modifybins или autobinning, чтобы изменить интервалы.

Типы данных: char | cell

Индикатор, чтобы включать строку общих количеств в нижней части информационной таблицы, заданной как пара, разделенная запятой, состоящая из 'Totals' и вектора символов со значениями On или Off.

Типы данных: char

Выходные аргументы

свернуть все

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

Примечание

При создании объекта creditscorecard с creditscorecard, если дополнительный аргумент пары "имя-значение" WeightsVar использовался, чтобы задать наблюдение (выборка) веса, то таблица bi содержит взвешенные количества.

Карта раскладывания или правила, возвращенные как вектор точек разделения для числовых предикторов или таблица группировок категории для категориальных предикторов. Для получения дополнительной информации смотрите modifybins.

Раскладывание минимальные и максимальные значения (как установлено или задано пользователем), возвращенный как числовой массив. Выходной аргумент mv установлен в пустой массив для категориальных предикторов.

Больше о

свернуть все

Статистика для протокола результатов кредита

Вес доказательства (WOE) является мерой различия распределения “Товаров” и “Bads” в интервале.

Предположим, что данные предиктора берут M возможные значения b1..., bM. Для сгруппированных данных M является небольшим числом. Ответ берет два значения, “Хорошие” и “Плохие”. Таблицей частот данных дают:

 ХорошийПлохоОбщее количество
b1:n11n12n1
b2:n21n22n2
bM:nM1nM2nM
Общее количество:nGoodnBadnTotal

Вес доказательства (WOE) задан для каждого значения данных bi как

 WOE(i) = log((ni1/nGood)/(ni2/nBad)).

Если вы задаете

 pGood(i) = ni1/nGood, pBad(i) = ni2/nBad

затем pGood (i) является пропорцией “Хороших” наблюдений, которые берут значение bi, и так же для pBad (i). Другими словами, pGood (i) дает распределение хороших наблюдений по наблюдаемым величинам M предиктора, и так же для pBad (i). С этим эквивалентная формула для WOE

WOE(i) = log(pGood(i)/pBad(i)).
Используя ту же таблицу частот, разногласия для строки i заданы как
Odds(i) = ni1 / ni2,
и разногласия для выборки заданы как
OddsTotal = nGood / nBad.

Для каждой строки i можно также вычислить его вклад в общее информационное Значение, данное

InfoValue(i) = (pGood(i) - pBad(i)) * WOE(i),

и общее информационное Значение является просто суммой всего InfoValue l (i) условия. (nansum возвращен, чтобы отбросить вклады из строк без наблюдений вообще.)

Аналогично, для каждой строки i, мы можем вычислить его вклад в общую Энтропию, данную

 Entropy(i) = -1/log(2)*(ni1/ni*log(ni1/ni)+ni2/ni*log(ni2/ni),
и общая Энтропия является просто взвешенной суммой энтропий строки,
Entropy = sum(ni/nTotal * Entropy(i)), i = 1...M.

Chi2 вычисляется попарно для каждой пары интервалов и измеряет статистическую разницу между двумя группами при разделении или слиянии интервалов и задан как:

 Chi2 = sum(sum((Aij - Eij)^2/Eij , j=1..k), i=m,m+1).
Для получения дополнительной информации о разделении и слиянии интервалов, смотрите Разделение и Слияние.

Отношение Gini является мерой родительского узла, то есть, данных интервалов/категорий до разделения или слияния. Отношение Gini задано как:

Gr = 1-G_hat/Gp
G_hat является взвешенной мерой Gini для текущего разделения или слияния:
G_hat = Sum((nj/N) * Gj, j=1..m).
Для получения дополнительной информации о разделении и слиянии интервалов, смотрите Разделение и Слияние.

Используя bininfo с весами

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

“Частоты”, о которых сообщают, больше не являются основным “количеством” строк, но “совокупным весом” строк, которые хороши или плохи и падение конкретного интервала. Если эти “взвешенные частоты” известны, все другие соответствующие статистические данные (Good, Bad, Odds, WOE и InfoValue) вычисляются с обычными формулами. Для получения дополнительной информации см., что Протокол результатов Кредита Моделирует Используя Веса Наблюдения.

Ссылки

[1] Андерсон, R. Инструментарий рейтинга кредитоспособности. Издательство Оксфордского университета, 2007.

[2] Refaat, M. Протоколы результатов кредитного риска: разработка и реализация Используя SAS. lulu.com, 2011.

Введенный в R2014b