setmodel

Установите образцовые предикторы и коэффициенты

Синтаксис

sc = setmodel(sc,ModelPredictors,ModelCoefficients)

Описание

пример

sc = setmodel(sc,ModelPredictors,ModelCoefficients) устанавливает предикторы и коэффициенты линейной модели логистической регрессии, адаптированной вне объекта creditscorecard, и возвращает обновленный объект creditscorecard. Предикторы и коэффициенты используются для вычисления точек протокола результатов. Используйте setmodel вместо fitmodel, который соответствует линейной модели логистической регрессии, потому что setmodel предлагает увеличенную гибкость. Например, когда модель, снабженная fitmodel, должна быть изменена, можно использовать setmodel. Для получения дополнительной информации смотрите Рабочие процессы для Использования setmodel.

Примечание

При использовании setmodel применяются следующие предположения:

  • Коэффициенты модели соответствуют линейной модели логистической регрессии (где только линейные члены включены в модель и нет никаких взаимодействий или любых других условий высшего порядка).

  • Модель была ранее адаптирована с помощью данных о Весе доказательства (WOE) с ответом, сопоставленным так, чтобы 'Хороший' был 1 и 'Плохо' был 0.

Примеры

свернуть все

Этот пример показывает, как использовать setmodel, чтобы сделать модификации к модели логистической регрессии, первоначально соответствовал использованию функции fitmodel, и затем установил новые предикторы модели логистической регрессии и коэффициенты назад в объект creditscorecard.

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

load 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]

Выполните автоматическое раскладывание.

sc = autobinning(sc);

Стандартный рабочий процесс должен использовать функцию fitmodel, чтобы соответствовать модели логистической регрессии использование пошагового метода. Однако fitmodel только поддерживает ограниченные опции относительно пошаговой процедуры. Можно использовать дополнительный выходной аргумент mdl от fitmodel, чтобы получить копию подходящего объекта GeneralizedLinearModel, позже изменить.

[sc,mdl] = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

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

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


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

Предположим, что вы хотите включать, или "обеспечить", предиктор 'UtilRate' в модели логистической регрессии, даже при том, что пошаговый метод не включал его в подобранную модель. Можно добавить 'UtilRate' в модель логистической регрессии использование объекта GeneralizedLinearModel mdl непосредственно.

mdl = mdl.addTerms('UtilRate')
mdl = 
Generalized linear regression model:
    status ~ [Linear formula with 9 terms in 8 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE        tStat        pValue  
                   ________    ________    ________    __________

    (Intercept)     0.70239    0.064001      10.975    5.0538e-28
    CustAge         0.60843     0.24936        2.44      0.014687
    ResStatus        1.3773      0.6529      2.1096      0.034896
    EmpStatus       0.88556     0.29303      3.0221     0.0025103
    CustIncome      0.70146      0.2186      3.2089     0.0013324
    TmWBank          1.1071     0.23307      4.7503    2.0316e-06
    OtherCC          1.0882     0.52918      2.0563       0.03975
    AMBalance        1.0413     0.36557      2.8483      0.004395
    UtilRate       0.013157     0.60864    0.021618       0.98275


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

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

ModelPredictors = mdl.PredictorNames
ModelPredictors = 8x1 cell array
    {'CustAge'   }
    {'ResStatus' }
    {'EmpStatus' }
    {'CustIncome'}
    {'TmWBank'   }
    {'OtherCC'   }
    {'AMBalance' }
    {'UtilRate'  }

ModelCoefficients = mdl.Coefficients.Estimate
ModelCoefficients = 9×1

    0.7024
    0.6084
    1.3773
    0.8856
    0.7015
    1.1071
    1.0882
    1.0413
    0.0132

sc = setmodel(sc,ModelPredictors,ModelCoefficients);

Проверьте, что 'UtilRate' является частью предикторов протокола результатов путем отображения точек протокола результатов.

pi = displaypoints(sc)
pi=33×3 table
     Predictors           Bin           Points  
    ____________    _______________    _________

    'CustAge'       '[-Inf,33)'         -0.17152
    'CustAge'       '[33,37)'           -0.15295
    'CustAge'       '[37,40)'          -0.072892
    'CustAge'       '[40,46)'           0.033856
    'CustAge'       '[46,48)'            0.20193
    'CustAge'       '[48,58)'            0.21787
    'CustAge'       '[58,Inf]'           0.46652
    'ResStatus'     'Tenant'           -0.043826
    'ResStatus'     'Home Owner'         0.11442
    'ResStatus'     'Other'              0.36394
    'EmpStatus'     'Unknown'          -0.088843
    'EmpStatus'     'Employed'           0.30193
    'CustIncome'    '[-Inf,29000)'      -0.46956
    'CustIncome'    '[29000,33000)'     -0.11715
    'CustIncome'    '[33000,35000)'     0.039798
    'CustIncome'    '[35000,40000)'     0.069073
      ⋮

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

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

load 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]

Выполните автоматическое раскладывание.

sc = autobinning(sc);

Модель логистической регрессии должна быть подходящей с данными о Весе доказательства (WOE). Преобразование WOE является особым случаем раскладывания, поскольку данные сначала должны быть сгруппированы, и затем сгруппированная информация сопоставлена с соответствующими значениями WOE. Это преобразование сделано с помощью функции bindata. bindata имеет аргумент, который готовит данные к модели, соответствующей шагу. Путем установки аргумента пары "имя-значение" bindata для 'OutputType' к WOEModelInput':

  • Все предикторы преобразованы в значения WOE.

  • Вывод содержит только предикторы и ответ (никакой 'IDVar' или любые неиспользуемые переменные).

  • Предикторы с бесконечным или неопределенным (NaN) WOE значения отбрасываются.

  • Значения ответа сопоставлены так, чтобы "Хороший" был 1 и "Плохо" был 0 (это подразумевает, что выше немасштабированные очки соответствуют лучше, менее опасные клиенты).

bd = bindata(sc,'OutputType','WOEModelInput');

Например, первые десять строк в исходных данных для переменных 'CustAge', 'ResStatus', 'CustIncome' и 'status' (переменная отклика) выглядят так:

data(1:10,{'CustAge' 'ResStatus' 'CustIncome' 'status'})
ans=10×4 table
    CustAge    ResStatus     CustIncome    status
    _______    __________    __________    ______

      53       Tenant          50000         0   
      61       Home Owner      52000         0   
      47       Tenant          37000         0   
      50       Home Owner      53000         0   
      68       Home Owner      53000         0   
      65       Home Owner      48000         0   
      34       Home Owner      32000         1   
      50       Other           51000         0   
      50       Tenant          52000         1   
      49       Home Owner      53000         1   

Вот то, как те же десять строк заботятся о вызове bindata с набором аргумента пары "имя-значение" 'OutputType' к 'WOEModelInput':

bd(1:10,{'CustAge' 'ResStatus' 'CustIncome' 'status'})
ans=10×4 table
    CustAge     ResStatus    CustIncome    status
    ________    _________    __________    ______

     0.21378    -0.095564      0.47972       1   
     0.62245     0.019329      0.47972       1   
     0.18758    -0.095564    -0.026696       1   
     0.21378     0.019329      0.47972       1   
     0.62245     0.019329      0.47972       1   
     0.62245     0.019329      0.47972       1   
    -0.39568     0.019329     -0.29217       0   
     0.21378      0.20049      0.47972       1   
     0.21378    -0.095564      0.47972       0   
     0.21378     0.019329      0.47972       0   

Соответствуйте логистической модели линейной регрессии использование пошагового метода с функцией Statistics and Machine Learning Toolbox™ stepwiseglm, но используйте значение не по умолчанию для дополнительных аргументов 'PRemove' и 'PEnter'. Предикторы 'ResStatus' и 'OtherCC' обычно включались бы в логистическую модель линейной регрессии, использующую опции по умолчанию для пошаговой процедуры.

mdl = stepwiseglm(bd,'constant','Distribution','binomial',...
'Upper','linear','PEnter',0.025,'PRemove',0.05)
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
mdl = 
Generalized linear regression model:
    logit(status) ~ 1 + CustAge + EmpStatus + CustIncome + TmWBank + AMBalance
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70263     0.063759     11.02    3.0544e-28
    CustAge        0.57265       0.2482    2.3072      0.021043
    EmpStatus      0.88356      0.29193    3.0266      0.002473
    CustIncome     0.70399      0.21781    3.2321      0.001229
    TmWBank            1.1      0.23185    4.7443    2.0924e-06
    AMBalance       1.0313      0.32007    3.2221     0.0012724


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

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

ModelPredictors = mdl.PredictorNames
ModelPredictors = 5x1 cell array
    {'CustAge'   }
    {'EmpStatus' }
    {'CustIncome'}
    {'TmWBank'   }
    {'AMBalance' }

ModelCoefficients = mdl.Coefficients.Estimate
ModelCoefficients = 6×1

    0.7026
    0.5726
    0.8836
    0.7040
    1.1000
    1.0313

sc = setmodel(sc,ModelPredictors,ModelCoefficients);

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

pi = displaypoints(sc)
pi=25×3 table
     Predictors           Bin           Points  
    ____________    _______________    _________

    'CustAge'       '[-Inf,33)'         -0.10354
    'CustAge'       '[33,37)'          -0.086059
    'CustAge'       '[37,40)'          -0.010713
    'CustAge'       '[40,46)'           0.089757
    'CustAge'       '[46,48)'            0.24794
    'CustAge'       '[48,58)'            0.26294
    'CustAge'       '[58,Inf]'           0.49697
    'EmpStatus'     'Unknown'          -0.035716
    'EmpStatus'     'Employed'           0.35417
    'CustIncome'    '[-Inf,29000)'      -0.41884
    'CustIncome'    '[29000,33000)'    -0.065161
    'CustIncome'    '[33000,35000)'     0.092353
    'CustIncome'    '[35000,40000)'      0.12173
    'CustIncome'    '[40000,42000)'      0.13259
    'CustIncome'    '[42000,47000)'       0.2854
    'CustIncome'    '[47000,Inf]'        0.47824
      ⋮

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

свернуть все

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

Имена предиктора включены в подобранную модель, заданную как массив ячеек из символьных векторов как {'PredictorName1','PredictorName2',...}. Имена предиктора должны совпадать с именами переменной прогноза в объекте creditscorecard.

Примечание

Не включайте вектор символов для постоянного термина в ModelPredictors, setmodel внутренне обрабатывает термин '(Intercept)' на основе количества коэффициентов модели (см. ModelCoefficients).

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

Коэффициенты модели, соответствующие образцовым предикторам, заданным как числовой массив коэффициентов модели, [coeff1,coeff2,..]. Если N является количеством имен предиктора, обеспеченных в ModelPredictors, размером ModelCoefficients может быть N или N +1. Если ModelCoefficients имеет N +1 элемент, то первый коэффициент используется в качестве '(Intercept)' подобранной модели. В противном случае '(Intercept)' установлен в 0.

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

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

свернуть все

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

Больше о

свернуть все

Рабочие процессы для Использования setmodel

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

Первый рабочий процесс:

  • Используйте fitmodel, чтобы получить дополнительный выходной аргумент mdl. Это - объект GeneralizedLinearModel, и можно добавить и удалить условия или изменить параметры пошаговой процедуры. Только линейные члены могут быть в модели (никакие взаимодействия или любые другие условия высшего порядка).

  • Если объект GeneralizedLinearModel является удовлетворительным, установите итоговые образцовые предикторы и коэффициенты модели в объект creditscorecard с помощью входных параметров setmodel для ModelPredictors и ModelCoefficients.

Альтернативный рабочий процесс:

  • Получите данные о Весе доказательства (WOE) с помощью bindata. Используйте опцию 'WOEModelInput' для аргумента пары "имя-значение" 'OutputType' в bindata, чтобы гарантировать что:

    • Данные о предикторах преобразовываются к WOE.

    • Только предикторы, интервалы которых имеют конечные значения WOE, включены.

    • Переменная отклика помещается в последний столбец.

    • Переменная отклика сопоставлена (“Хороший”, 1 и “Плохо” 0).

  • Используйте данные из предыдущего шага, чтобы соответствовать линейной модели логистической регрессии (только линейные члены в модели, никаких взаимодействиях или любых других условиях высшего порядка). Смотрите, например, stepwiseglm.

  • Если объект GeneralizedLinearModel является удовлетворительным, установите итоговые образцовые предикторы и коэффициенты модели в объект creditscorecard с помощью входных параметров setmodel для ModelPredictors и ModelCoefficients.

Ссылки

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

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

Введенный в R2014b