modelAccuracy

Вычислите RMSE предсказанных и наблюдаемых ФУНТОВ на сгруппированных данных

Описание

пример

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

пример

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

Примеры

свернуть все

В этом примере показано, как использовать fitLifetimePDModel соответствовать данным Logistic модель и затем использует modelAccuracy вычислить среднеквадратическую ошибку (RMSE) наблюдаемых вероятностей значения по умолчанию (ФУНТЫ) относительно предсказанных ФУНТОВ.

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

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

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% фунтов для группы, группа заканчивает тем, что показала аппроксимированный 10%-й уровень по умолчанию или является возможным уровнем намного выше или ниже? В то время как дискриминация модели измеряет риск, занимающий место только, точность модели измеряет точность предсказанных уровней риска.

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

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

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

    Logistic, grouped by YOB, Training    0.0004142
disp(AccData) 
     ModelID      YOB       PD    
    __________    ___    _________

    "Observed"     1      0.017421
    "Observed"     2      0.012305
    "Observed"     3      0.011382
    "Observed"     4      0.010741
    "Observed"     5       0.00809
    "Observed"     6     0.0066747
    "Observed"     7     0.0032198
    "Observed"     8     0.0018757
    "Logistic"     1      0.017185
    "Logistic"     2      0.012791
    "Logistic"     3       0.01131
    "Logistic"     4      0.010615
    "Logistic"     5     0.0083982
    "Logistic"     6     0.0058744
    "Logistic"     7     0.0035872
    "Logistic"     8     0.0023689

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

AccDataUnstacked = unstack(AccData,"PD","ModelID");
plot(AccDataUnstacked.(GroupingVar),AccDataUnstacked.(pdModel.ModelID),'-o')
hold on
plot(AccDataUnstacked.(GroupingVar),AccDataUnstacked.Observed,'*')
hold off
title(strcat(AccMeasure.Properties.RowNames,", RMSE = ",num2str(AccMeasure.RMSE)))
xlabel(GroupingVar)
ylabel('PD')
legend(pdModel.ModelID,"Observed")
grid on

Можно использовать больше чем одну переменную для группировки. В данном примере группа переменными YOB и ScoreGroup.

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

    Logistic, grouped by YOB, ScoreGroup, Training    0.00066239
disp(tail(AccData))
     ModelID      YOB    ScoreGroup        PD    
    __________    ___    ___________    _________

    "Logistic"     6     Medium Risk    0.0050296
    "Logistic"     6     Low Risk       0.0028847
    "Logistic"     7     High Risk      0.0061491
    "Logistic"     7     Medium Risk    0.0030905
    "Logistic"     7     Low Risk       0.0017571
    "Logistic"     8     High Risk      0.0040759
    "Logistic"     8     Medium Risk    0.0020492
    "Logistic"     8     Low Risk       0.0011611

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

AccDataUnstacked = unstack(AccData,"PD","ModelID");
ScoreGroupLevels = categories(AccDataUnstacked.ScoreGroup);
c = cell(3,1);
figure;
hold on
for ii=1:length(ScoreGroupLevels)
   IndScore = AccDataUnstacked.ScoreGroup==ScoreGroupLevels{ii};
   h = plot(AccDataUnstacked.YOB(IndScore),AccDataUnstacked.(pdModel.ModelID)(IndScore),'-o');
   c{ii} = h.Color;
end
Legend1 = strcat(ScoreGroupLevels,", predicted");
for ii=1:length(ScoreGroupLevels)
   IndScore = AccDataUnstacked.ScoreGroup==ScoreGroupLevels{ii};
   plot(AccDataUnstacked.YOB(IndScore),AccDataUnstacked.Observed(IndScore),'*','Color',c{ii})
end
Legend2 = strcat(ScoreGroupLevels,", observed");
hold off

title(strcat(AccMeasure.Properties.RowNames,", RMSE = ",num2str(AccMeasure.RMSE)))
xlabel('YOB')
ylabel('PD')
legend([Legend1;Legend2])
grid on

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

свернуть все

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

Примечание

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

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

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

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

Имя столбца в data введите используемый, чтобы сгруппировать данные в виде строки или вектора символов. GroupBy не должно быть имя переменной модели. Для каждой группы, назначенной GroupBy, modelAccuracy функция вычисляет наблюдаемые уровни по умолчанию, и средние предсказанные ФУНТЫ вычисляются, чтобы измерить 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 возразите и образец модели.

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

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

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

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

свернуть все

Мера по точности, возвращенная как таблица.

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

Примечание

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

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

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

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

Больше о

свернуть все

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

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

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

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

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

DRi=DiNi

где:

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

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

Средняя предсказанная вероятность PD по умолчанию i для группы G i

PDi=1NijGiPD(j)

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

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

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

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

Ссылки

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

[2] Беллини, Тициано. МСФО 9 и моделирование кредитного риска CECL и валидация: практическое руководство с примерами работало в R и SAS. Сан-Диего, CA: Elsevier, 2019.

[3] Breeden, Джозеф. Проживание с CECL: словарь моделирования. Санта-Фе, NM: наделенный даром предвидения LLC моделей, 2018.

Введенный в R2020b
Для просмотра документации необходимо авторизоваться на сайте