Моделирование карты показателей кредита с отсутствующими значениями

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

Создайте кредитную карту показателей с явными интервалами для отсутствующих значений

Когда вы создаете creditscorecard объект, данные могут содержать отсутствующие значения. При использовании creditscorecard для создания creditscorecard объект, можно задать аргумент пары "имя-значение" для 'BinMissingData' установлено на true. В этом случае отсутствующие данные для числовых предикторов (NaN значения) и для категориальных предикторов (<undefined> значения) привязывается в отдельном интервале, помеченном <missing> который появляется в конце интервалов. Предикторы без отсутствующих значений в обучающих данных не имеют <missing> Интервал. Если вы не задаете 'BinMissingData' аргумент или если вы задаете 'BinMissingData' на false, а creditscorecard функция отбрасывает отсутствующие наблюдения при вычислении частот Хорошего и Плохого, и ни bininfoни plotbins функции сообщают о таких наблюдениях.

The <missing> интервал остается на месте в течение процесса моделирования карты показателей. Итоговая таблица показателей явно указывает точки, которые будут назначены отсутствующим значениям для предикторов, которые имеют <missing> Интервал. Эти точки определяются из значения веса доказательств (ГОРЕ) <missing> интервал и коэффициент предиктора в логистической модели. Для предикторов без явного <missing> интервал назначить точки отсутствующим значениям с помощью аргумента пары "имя-значение" 'Missing' в formatpoints, как описано в этом примере, или при помощи одного из четырех различных способов «обработки» недостающих данных.

The dataMissing таблица в CreditCardData.mat файл имеет два предиктора с отсутствующими значениями - CustAge и ResStatus, .

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   

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

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

Информация о интервале и интервале графики для предикторов, которые имеют отсутствующие данные, показывают <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')

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

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

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

Обучающие данные для 'CustAge' и 'ResStatus' предикторы имеют отсутствующие данные (NaNs и <undefined>). Процесс раскладывания оценивает значения ГОРЕ -0.15787 и 0.026469, соответственно, для недостающих данных в этих предикторах.

Обучающие данные для EmpStatus и CustIncome не имеет явного интервала для <missing> значения, потому что нет отсутствующих значений для этих предикторов.

bi = bininfo(sc,'EmpStatus');
disp(bi)
        Bin         Good    Bad     Odds       WOE       InfoValue
    ____________    ____    ___    ______    ________    _________

    {'Unknown' }    396     239    1.6569    -0.19947    0.021715 
    {'Employed'}    407     158    2.5759      0.2418    0.026323 
    {'Totals'  }    803     397    2.0227         NaN    0.048038 
bi = bininfo(sc,'CustIncome');
disp(bi)
           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

Использование fitmodel для соответствия логистической регрессионной модели с использованием значений ГОРЕ. fitmodel внутренне преобразует все переменные предиктора в значения WOE, используя интервалы, найденные в процессе автоматического раскладывания. По умолчанию fitmodel затем подходит для логистической регрессионной модели с помощью пошагового метода. Для предикторов, которые имеют отсутствующие данные, существует явное <missing> интервал с соответствующим значением WOE, вычисленным из данных. Когда вы используете fitmodel, соответствующее значение ГОРЕ для <missing> интервал применяется, когда функция выполняет преобразование ГОРЕ.

[sc,mdl] = fitmodel(sc,'display','off');

Масштабируйте точки карты показателей методом «баллы - двойные шансы» (PDO) с помощью 'PointsOddsAndPDO' аргумент formatpoints. Предположим, что вы хотите, чтобы счет 500 точек имел шансы 2 (вдвое больше вероятности быть хорошим, чем быть плохим) и что шансы удваиваются каждые 50 точки (так что 550 точки будут иметь шансы 4).

Отобразите карту показателей, показывающую масштабированные точки для предикторов, сохраненных в модели аппроксимации.

sc = formatpoints(sc,'PointsOddsAndPDO',[500 2 50]);
PointsInfo = displaypoints(sc)
PointsInfo=38×3 table
     Predictors           Bin          Points
    _____________    ______________    ______

    {'CustAge'  }    {'[-Inf,33)' }    54.062
    {'CustAge'  }    {'[33,37)'   }    56.282
    {'CustAge'  }    {'[37,40)'   }    60.012
    {'CustAge'  }    {'[40,46)'   }    69.636
    {'CustAge'  }    {'[46,48)'   }    77.912
    {'CustAge'  }    {'[48,51)'   }     78.86
    {'CustAge'  }    {'[51,58)'   }     80.83
    {'CustAge'  }    {'[58,Inf]'  }     96.76
    {'CustAge'  }    {'<missing>' }    64.984
    {'ResStatus'}    {'Tenant'    }    62.138
    {'ResStatus'}    {'Home Owner'}    73.248
    {'ResStatus'}    {'Other'     }    90.828
    {'ResStatus'}    {'<missing>' }    74.125
    {'EmpStatus'}    {'Unknown'   }    58.807
    {'EmpStatus'}    {'Employed'  }    86.937
    {'EmpStatus'}    {'<missing>' }       NaN
      ⋮

Заметьте, что точки для <missing> интервалы для CustAge и ResStatus показаны явно (как 64.9836 и 74.1250, соответственно). Эти точки вычисляются из значения ГОРЕ для <missing> интервал и коэффициенты логистической модели.

Точки для предикторов, которые не имеют отсутствующих данных в набор обучающих данных, по умолчанию заданы как NaN и они приводят к счету NaN когда вы бегаете score. Это может быть изменено путем обновления аргумента пары "имя-значение" 'Missing' в formatpoints чтобы указать, как обработать отсутствующие данные в целях оценки.

Карта показателей готова для подсчета новых наборов данных. Можно также использовать карту показателей для вычисления вероятностей по умолчанию или выполнить валидацию модели. Для получения дополнительной информации смотрите score, probdefault, и validatemodel. Чтобы дополнительно изучить обработку недостающих данных, берите несколько строк из исходных данных в качестве тестовых данных и вводите некоторые недостающие данные.

tdata = dataMissing(11:14,mdl.PredictorNames); % Keep only the predictors retained in the model
% Set some missing values
tdata.CustAge(1) = NaN;
tdata.ResStatus(2) = '<undefined>';
tdata.EmpStatus(3) = '<undefined>';
tdata.CustIncome(4) = NaN;
disp(tdata)
    CustAge     ResStatus      EmpStatus     CustIncome    TmWBank    OtherCC    AMBalance
    _______    ___________    ___________    __________    _______    _______    _________

      NaN      Tenant         Unknown          34000         44         Yes        119.8  
       48      <undefined>    Unknown          44000         14         Yes       403.62  
       65      Home Owner     <undefined>      48000          6         No        111.88  
       44      Other          Unknown            NaN         35         No        436.41  

Оцените новые данные и посмотрите, как точки за отсутствующие данные по-разному присваиваются CustAge и ResStatus и для EmpStatus и CustIncome. CustAge и ResStatus иметь явное <missing> интервал для отсутствующих данных. Однако для EmpStatus и CustIncome, а score функция устанавливает точки равными NaN.

[Scores,Points] = score(sc,tdata);
disp(Scores)
  481.2231
  520.8353
       NaN
       NaN
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    64.984      62.138       58.807        67.893      61.858     75.622      89.922  
     78.86      74.125       58.807        82.439      61.061     75.622      89.922  
     96.76      73.248          NaN        96.969      51.132     50.914      89.922  
    69.636      90.828       58.807           NaN      61.858     50.914      89.922  

Используйте аргумент пары "имя-значение" 'Missing' в formatpoints чтобы выбрать, как назначить точки отсутствующим значениям для предикторов, которые не имеют явного <missing> Интервал. В данном примере используйте 'MinPoints' опция для 'Missing' аргумент. Для EmpStatus и CustIncomeминимальное количество точек в карте показателей 58.8072 и 29.3753, соответственно. Можно также обработать отсутствующие значения, используя один из четырех различных способов «обработать» отсутствующие данные.

sc = formatpoints(sc,'Missing','MinPoints');
[Scores,Points] = score(sc,tdata);
disp(Scores)
  481.2231
  520.8353
  517.7532
  451.3405
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    64.984      62.138       58.807        67.893      61.858     75.622      89.922  
     78.86      74.125       58.807        82.439      61.061     75.622      89.922  
     96.76      73.248       58.807        96.969      51.132     50.914      89.922  
    69.636      90.828       58.807        29.375      61.858     50.914      89.922  

Четыре подхода к лечению недостающих данных и разработке новой карты показателей кредита

Существует четыре различных подхода к лечению недостающих данных.

Подход 1: Заполните отсутствующие данные с помощью fillmissing функция creditscorecard объект

The creditscorecard объект поддерживает fillmissing функция. Когда вы вызываете функцию на предикторе или группе предикторов, fillmissing функция заполняет отсутствующие данные пользовательской статистикой. fillmissing поддерживает значения заливки 'mean', 'median', 'mode', и 'constant', а также опция переключения назад на исходные данные.

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

Для получения дополнительной информации о подходе 1 смотрите fillmissing.

Подход 2: Заполните отсутствующие данные с помощью fillmissing MATLAB ®функция

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

Для получения дополнительной информации о Подходе 2 смотрите Обработать отсутствующие данные в рабочем процессе Карты показателей кредита с использованием заполнения MATLAB ®.

Подход 3: Ввод отсутствующих данных с помощью алгоритма k-ближайших соседей (KNN)

Этот подход KNN рассматривает несколько предикторов по сравнению с Подходом 1 и Подходом 2. Как и Подход 2, подход KNN осуществляется за пределами creditscoreacrd рабочий процесс, и, следовательно, вам нужно выполнить вменение как для данных обучения, так и для данных валидации.

Для получения дополнительной информации о Подходе 3, см. «Ввод отсутствующих данных в рабочий процесс Карты показателей кредита» С помощью алгоритма k-ближайших соседей.

Подход 4: Впишите отсутствующие данные с помощью случайного алгоритма леса

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

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

См. также

| | |

Похожие темы