modelAccuracy

Вычисление RMSE прогнозируемых и наблюдаемых PD на сгруппированных данных

Описание

пример

AccMeasure = modelAccuracy(pdModel,data,GroupBy) вычисляет корневую среднюю квадратичную невязку (RMSE) наблюдаемого по сравнению с предсказанными вероятностями дефолта (PD). GroupBy требуется и может быть любым столбцом в data вход (не обязательно переменная модели). The modelAccuracy функция вычисляет наблюдаемую PD как скорость по умолчанию для каждой группы, и предсказанную PD как среднюю PD для каждой группы. modelAccuracy Поддержки сравнение с образцом модели.

пример

[AccMeasure,AccData] = modelAccuracy(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

В этом примере показано, как использовать fitLifetimePDModel для подгонки данных к Logistic моделировать и затем использовать modelAccuracy вычислить корневую среднюю квадратичную невязку (RMSE) наблюдаемых вероятностей дефолта (PD) относительно предсказанных PD.

Загрузка данных

Загрузите данные кредитного портфеля.

load RetailCreditPanelData.mat
disp(head(data))
    ID    ScoreGroup    YOB    Default    Year
    __    __________    ___    _______    ____

    1      Low Risk      1        0       1997
    1      Low Risk      2        0       1998
    1      Low Risk      3        0       1999
    1      Low Risk      4        0       2000
    1      Low Risk      5        0       2001
    1      Low Risk      6        0       2002
    1      Low Risk      7        0       2003
    1      Low Risk      8        0       2004
disp(head(dataMacro))
    Year     GDP     Market
    ____    _____    ______

    1997     2.72      7.61
    1998     3.57     26.24
    1999     2.86      18.1
    2000     2.43      3.19
    2001     1.26    -10.51
    2002    -0.59    -22.95
    2003     0.63      2.78
    2004     1.85      9.48

Объедините эти два компонента данных в один набор данных.

data = join(data,dataMacro);
disp(head(data))
    ID    ScoreGroup    YOB    Default    Year     GDP     Market
    __    __________    ___    _______    ____    _____    ______

    1      Low Risk      1        0       1997     2.72      7.61
    1      Low Risk      2        0       1998     3.57     26.24
    1      Low Risk      3        0       1999     2.86      18.1
    1      Low Risk      4        0       2000     2.43      3.19
    1      Low Risk      5        0       2001     1.26    -10.51
    1      Low Risk      6        0       2002    -0.59    -22.95
    1      Low Risk      7        0       2003     0.63      2.78
    1      Low Risk      8        0       2004     1.85      9.48

Данные о разделах

Разделите данные на обучающие и тестовые разделы.

nIDs = max(data.ID);
uniqueIDs = unique(data.ID);

rng('default'); % For reproducibility
c = cvpartition(nIDs,'HoldOut',0.4);

TrainIDInd = training(c);
TestIDInd = test(c);

TrainDataInd = ismember(data.ID,uniqueIDs(TrainIDInd));
TestDataInd = ismember(data.ID,uniqueIDs(TestIDInd));

Создание Logistic Жизненная модель PD

Использование fitLifetimePDModel для создания Logistic моделировать с использованием обучающих данных.

pdModel = fitLifetimePDModel(data(TrainDataInd,:),"Logistic",...
    'AgeVar','YOB',...
    'IDVar','ID',...
    'LoanVars','ScoreGroup',...
    'MacroVars',{'GDP','Market'},...
    'ResponseVar','Default');
 disp(pdModel)
  Logistic with properties:

        ModelID: "Logistic"
    Description: ""
          Model: [1x1 classreg.regr.CompactGeneralizedLinearModel]
          IDVar: "ID"
         AgeVar: "YOB"
       LoanVars: "ScoreGroup"
      MacroVars: ["GDP"    "Market"]
    ResponseVar: "Default"

Отобразите базовую модель.

disp(pdModel.Model)
Compact generalized linear regression model:
    logit(Default) ~ 1 + ScoreGroup + YOB + GDP + Market
    Distribution = Binomial

Estimated Coefficients:
                               Estimate        SE         tStat       pValue   
                              __________    _________    _______    ___________

    (Intercept)                  -2.7422      0.10136    -27.054     3.408e-161
    ScoreGroup_Medium Risk      -0.68968     0.037286    -18.497     2.1894e-76
    ScoreGroup_Low Risk          -1.2587     0.045451    -27.693    8.4736e-169
    YOB                         -0.30894     0.013587    -22.738    1.8738e-114
    GDP                         -0.11111     0.039673    -2.8006      0.0051008
    Market                    -0.0083659    0.0028358    -2.9502      0.0031761


388097 observations, 388091 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 1.85e+03, p-value = 0

Вычисление точности модели

Точность модели измеряет, насколько точны предсказанные вероятности по умолчанию. Например, если модель предсказывает 10% PD для группы, заканчивается ли группа показанием приблизительной 10% скорости по умолчанию или возможная скорость намного выше или ниже? В то время как модель дискриминации измеряет только рейтинг риска, модель точности измеряет точность предсказанных уровней риска.

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

DataSetChoice = "Training";
 if DataSetChoice = ="Training"
    Ind = TrainDataInd;
else
   Ind = TestDataInd;
 end

GroupVar = "YOB";
AccMeasure = modelAccuracy (pdModel, данные (Ind,:), GroupingVar,'DataID', DataSetChoice);
disp (AccMeasure )
                                            RMSE   
                                          _________

    Logistic, grouped by YOB, Training    0.0004142

Визуализируйте точность модели с помощью modelAccuracyPlot.

modelAccuracyPlot(pdModel,data(Ind,:),GroupingVar,'DataID',DataSetChoice);

Figure contains an axes. The axes with title Scatter Grouped by YOB Training Logistic, RMSE = 0.0004142 contains 2 objects of type line. These objects represent Observed, Logistic.

Для группировок можно использовать несколько переменных. В данном примере сгруппируйте по переменным YOB и ScoreGroup.

AccMeasure = modelAccuracy(pdModel,data(Ind,:),["YOB","ScoreGroup"],'DataID',DataSetChoice);
disp(AccMeasure)
                                                         RMSE   
                                                      __________

    Logistic, grouped by YOB, ScoreGroup, Training    0.00066239

Теперь визуализируйте две сгруппированные переменные с помощью modelAccuracyPlot.

modelAccuracyPlot(pdModel,data(Ind,:),["YOB","ScoreGroup"],'DataID',DataSetChoice);

Figure contains an axes. The axes with title Scatter Grouped by YOB and ScoreGroup Training Logistic, RMSE = 0.00066239 contains 6 objects of type line. These objects represent High Risk, Observed, Medium Risk, Observed, Low Risk, Observed, High Risk, Logistic, Medium Risk, Logistic, Low Risk, Logistic.

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

свернуть все

Вероятность модели по умолчанию, заданная как Logistic или Probit объект, ранее созданный с использованием fitLifetimePDModel.

Примечание

The 'ModelID' свойство pdModel объект используется в качестве идентификатора или тега для pdModel.

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

Данные, заданные как NumRows-by- NumCols таблица с проецируемыми значениями предиктора для создания пожизненных предсказаний. Имена предикторов и типы данных должны быть согласованы с базовой моделью.

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

Имя столбца в data вход, используемый для группировки данных, заданный как строковый или символьный вектор. GroupBy не обязательно быть именем переменной модели. Для каждой группы, обозначенной GroupBy, а modelAccuracy функция вычисляет наблюдаемые скорости по умолчанию, и средние предсказанные PD вычисляются для измерения RMSE.

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: [AccMeasure,AccData] = modelAccuracy(pdModel,data(Ind,:),'GroupBy',["YOB","ScoreGroup"],'DataID',DataSetChoice)

Идентификатор набора данных, заданный как разделенная разделенными запятой парами, состоящая из 'DataID' и вектор символов или строка. DataID включено в modelAccuracy выходы для целей отчетности.

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

Условные значения PD, предсказанные для data по образцу модели, заданной как разделенная запятой пара, состоящая из 'ReferencePD' и a NumRows-by- 1 числовой вектор. Функции сообщают о modelAccuracy выход информации для обоих pdModel объект и образец модели.

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

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

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

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

свернуть все

Измерение точности, возвращенное как таблица.

Значения RMSE, возвращенные как одноколоночные 'RMSE' таблица. Таблица имеет одну строку, если только pdModel измеряется точность, и она имеет две строки, если задана информация об образце модели. Имена строк AccMeasure сообщить идентификаторы модели, сгруппированные переменные и идентификаторы данных.

Примечание

Сообщенные значения RMSE зависят от сгруппированной переменной для необходимого GroupBy аргумент.

Данные точности, возвращенные как таблица.

Наблюдаемые и предсказанные значения PD для каждой группы, возвращенные как таблица. Сообщенные наблюдаемые значения PD соответствуют наблюдаемой скорости по умолчанию для каждой группы. Сообщенные предсказанные значения PD являются средними значениями PD, предсказанными pdModel объект для каждой группы и аналогично для образца модели. The modelAccuracy функция складывает данные PD, помещая сначала наблюдаемые значения для всех групп, затем предсказанные PD для pdModel, а затем предсказанные PD для образца модели, если даны.

Столбец 'ModelID' определяет, какие строки соответствуют наблюдаемому PD, pdModel, или образец модели. Таблица также имеет по одному столбцу для каждой сгруппированной переменной, показывающей уникальные комбинации значений группировки. Последний столбец AccData является 'PD' столбец с данными PD.

Подробнее о

свернуть все

Точность модели

Model accuracy измеряет точность предсказанной вероятности значений по умолчанию (PD).

Чтобы измерить точность модели, также называемую калибровкой модели, необходимо сравнить предсказанные значения PD с наблюдаемыми скоростями по умолчанию. Для примера, если группе клиентов прогнозируется среднее значение PD 5%, тогда наблюдаемая ставка по умолчанию для этой группы близка к 5%?

The modelAccuracy функция требует сгруппированной переменной, чтобы вычислить средние предсказанные значения PD в каждой группе и среднюю наблюдаемую скорость по умолчанию также в каждой группе. modelAccuracy использует корневую среднюю квадратичную невязку (RMSE), чтобы измерить отклонения между наблюдаемыми и предсказанными значениями по группам. Например, сгруппированной переменной может быть календарный год, так что строки, соответствующие тому же календарному году, сгруппированы вместе. Затем для каждого года программное обеспечение вычисляет наблюдаемую скорость по умолчанию и среднее прогнозируемое значение PD. The modelAccuracy затем функция применяет формулу RMSE, чтобы получить одну меру ошибки предсказания за все годы в выборке.

Предположим, что в наборе данных есть N наблюдений, и существует M группы G 1,..., G M. Скорость по умолчанию для группы G i

DRi=DiNi

где:

D i - это количество значений по умолчанию, наблюдаемых в группе G i.

N i - это количество наблюдений в группе G i.

Средняя предсказанная вероятность дефолта <reservedrangesplaceholder3> <reservedrangesplaceholder2> для группы <reservedrangesplaceholder1> <reservedrangesplaceholder0>

PDi=1NijGiPD(j)

где PD (j) - вероятность дефолта для j наблюдений. Другими словами, это среднее значение предсказанных PD в групповой G i.

Поэтому RMSE вычисляется как

RMSE=i=1M(NiN)(DRiPDi)2

RMSE, как определено, зависит от выбранной сгруппированной переменной. Например, группировка по календарному году и группировка по годам по книгам могут привести к различным значениям RSME.

Использовать modelAccuracyPlot визуализировать наблюдаемые скорости дефолта и предсказанные значения PD на сгруппированных данных.

Ссылки

[1] Baesens, Bart, Daniel Roesch, and Harald Scheule. Аналитика кредитных рисков: методы измерения, приложения и примеры в SAS. Уайли, 2016.

[2] Беллини, Тициано. МСФО (IFRS) 9 и CECL «Моделирование и валидация кредитных рисков: практическое руководство с примерами, используемыми в R и SAS». Сан-Диего, Калифорния: Elsevier, 2019.

[3] Бриден, Джозеф. Жизнь с CECL: Словарь моделирования. Santa Fe, NM: Prescient Models LLC, 2018.

Введенный в R2020b