exponenta event banner

modelAccuracy

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

Описание

пример

AccMeasure = modelAccuracy(pdModel,data,GroupBy) вычисляет среднеквадратичную ошибку (RMSE) наблюдаемого по сравнению с предсказанными вероятностями дефолта (PD). GroupBy является обязательным и может быть любым столбцом в data входные данные (не обязательно переменная модели). 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. Необходима переменная группирования, и она может быть любым столбцом на входе данных (не обязательно переменной модели). modelAccuracy функция вычисляет наблюдаемый PD как скорость по умолчанию для каждой группы и прогнозируемый PD как средний PD для каждой группы.

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

GroupingVar = "YOB";
AccMeasure = modelAccuracy(pdModel,data(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.

Примечание

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

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

Данные, указанные как NumRowsоколо-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' и NumRowsоколо-1 числовой вектор. Функции сообщают modelAccuracy выводимая информация для обоих pdModel объект и ссылочная модель.

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

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

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

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

свернуть все

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

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

Примечание

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

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

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

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

Подробнее

свернуть все

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

Точность модели измеряет точность прогнозируемых значений вероятности дефолта (PD).

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

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

Предположим, что в наборе данных имеется N наблюдений, а G1,...,GM M групп. Ставка по умолчанию для группы Gi составляет

DRi = DiNi

где:

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

Ni - количество наблюдений в группе Gi.

Средняя прогнозируемая вероятность PDi по умолчанию для группы Gi равна

PDi=1Ni∑j∈GiPD (j)

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

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

RMSE​=∑i=1M (NiN) (DRi PDi) 2

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

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

Ссылки

[1] Бэзенс, Барт, Даниэль Рош и Харальд Шиле. Анализ кредитных рисков: методы измерения, приложения и примеры в SAS. Уайли, 2016.

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

[3] Бриден, Иосиф. Жизнь с CECL: The Modeling Dictionary. Santa Fe, NM: Prescient Models LLC, 2018.

Представлен в R2020b