Этот пример показывает аппроксимацию различных типов моделей к потерям данных по умолчанию (LGD). Этот пример демонстрирует следующие подходы:
Для всех этих подходов этот пример показывает:
Как подгонять модель с помощью обучающих данных, где LGD является функцией других переменных или предикторов.
Как предсказать при проверке данных.
Раздел Model Comparison содержит подробное сравнение, которое включает визуализацию и несколько метрик ошибки предсказания для всех моделей в этом примере.
Модели регрессии и Тобита устанавливаются с помощью fitLGDModel
функция из Risk Management Toolbox™. Для получения дополнительной информации смотрите Обзор потерь с учетом моделей по умолчанию. Другие модели установлены на основе существующих функциональных возможностей в Optimization Toolbox™ и Statistics and Machine Learning Toolbox™.
ЛГД является одним из основных параметров анализа кредитного риска. Хотя существуют различные подходы к оценке резервов кредитных потерь и кредитного капитала, общие методологии требуют оценки вероятностей дефолта (PD), убытков при дефолте (LGD) и риска при дефолте (EAD). Запасы и требования к капиталу вычисляются с помощью формул или симуляций, которые используют эти параметры. Для примера резервы потерь обычно оцениваются как ожидаемые потери (EL) по следующей формуле:
.
Практики имеют многолетний опыт моделирования и прогнозирования PD. Однако моделирование LGD (а также EAD) началось намного позже. Одной из причин является относительная нехватка данных LGD по сравнению с данными PD. Данные о дефолте по кредиту (для примера, пропущенных платежей) легче собрать и доступнее, чем убытки, в конечном счете понесенные в случае дефолта. Когда счет перемещается на стадию восстановления, информация может быть передана в другую систему, кредиты могут быть консолидированы, процесс восстановления может занять много времени, и в течение процесса происходит несколько затрат, некоторые из которых трудно детально отслеживать. Тем не менее, банки активизировали свои усилия по сбору данных, которые могут использоваться для моделирования LGD, отчасти из-за нормативных актов, которые требуют оценки этих параметров риска, и моделирование LGD (и EAD) в настоящее время широко распространено в промышленности.
Этот пример использует моделируемые данные LGD, но рабочий процесс был применен к реальным наборам данных, чтобы соответствовать LGD-моделям, предсказать значения LGD и сравнить модели. В особом внимании этого примера - не предлагать конкретный подход, а показать, как могут соответствовать эти различные модели, как модели используются для предсказания значений LGD и как сравнить модели. Этот пример также является начальной точкой для изменений и расширений этих моделей; для примера можно хотеть использовать более совершенные инструменты классификации и регрессии как часть двухэтапной модели.
Три предиктора в этом примере специфичны для кредита. Однако можно использовать подходы, описанные в этом примере, с наборами данных, которые включают несколько предикторов и даже макроэкономические переменные. Кроме того, можно использовать модели, которые включают макроэкономические предикторы для проверки стресса или пожизненного ЛГД-моделирования, для поддержки нормативных требований, таких как CCAR, IFRS 9 и CECL.
Набор данных в этом примере является моделируемыми данными, которые захватывают общие функции данных LGD. Например, общей функцией является распределение значений LGD, которое имеет высокие частоты на 0
(полное восстановление), а также множество наблюдений в 1
(восстановление вообще отсутствует). Другой характеристикой LGD-данных является значительный объем «шума» или «необъяснимых» данных. Можно визуализировать этот «шум» на графиках поля точек отклика против предикторов, где точки, кажется, не следуют четкому тренду, и, тем не менее, некоторые базовые отношения могут быть обнаружены. Кроме того, часто можно получить значительные ошибки предсказания для LGD- моделей. Эмпирические исследования показывают, что модели LGD имеют высокие ошибки предсказания в целом. Например, в [4] авторы сообщают о значениях R-квадрат в диапазоне от 4% до 43% для области значений моделей в различных портфелях. В этом примере все подходы получают значения R-квадрат чуть менее 10%. Кроме того, поиск полезных предикторов на практике может потребовать важного понимания окружений кредитования конкретного портфеля, например, знания правовой среды и процесса набора [2]. Моделируемый набор данных включает только три предиктора, и это переменные, часто встречающиеся в моделях LGD, а именно: отношение кредита к стоимости, возраст кредита, и живет ли заемщик в свойстве или если заемщик купил его в инвестиционных целях.
Подготовка данных для LGD- моделирования выходит за возможности этого примера. Этот пример предполагает, что данные были подготовлены ранее, поскольку особое внимание примера заключается в том, как соответствовать LGD- моделей и как использовать их для предсказания. Подготовка данных для моделирования ЛГД требует значительного объема работы на практике. Подготовка данных требует консолидации информации о счете, извлечения данных из нескольких источников данных, учета различных затрат и ставок дисконтирования и просмотра предикторов [1] [2].
Загрузите набор данных из LGDData.mat
файл. Набор данных хранится в data
таблица. Он содержит три предиктора и переменную LGD, которая является переменной отклика.
Вот предварительный просмотр данных и описаний набора данных и переменных.
load('LGDData.mat')
disp(head(data))
LTV Age Type LGD _______ _______ ___________ _________ 0.89101 0.39716 residential 0.032659 0.70176 2.0939 residential 0.43564 0.72078 2.7948 residential 0.0064766 0.37013 1.237 residential 0.007947 0.36492 2.5818 residential 0 0.796 1.5957 residential 0.14572 0.60203 1.1599 residential 0.025688 0.92005 0.50253 investment 0.063182
disp(data.Properties.Description)
Loss given default (LGD) data. This is a simulated data set.
disp([data.Properties.VariableNames' data.Properties.VariableDescriptions'])
{'LTV' } {'Loan-to-Value (LTV) ratio at...'} {'Age' } {'Age of the loan in years at ...'} {'Type'} {'Type of property, either res...'} {'LGD' } {'Loss given default' }
Данные LGD обычно имеют значения 0
(без потерь, полное восстановление) или 1
(восстановление вообще отсутствует). Распределение значений между 0
и 1
принимает различные формы в зависимости от типа портфеля и других характеристик.
histogram(data.LGD) title('LGD Distribution') ylabel('Frequency') xlabel('Observed LGD')
Исследуйте отношения между предикторами и ответом. Сначала отображается корреляция Спирмана между выбранным предиктором и LGD. Корреляция Спирмана является одной из статистических данных о ранге порядков, обычно используемых для моделирования LGD [5].
SelectedPredictor = 'LTV'; fprintf ('Spearman correlation between %s and LGD: %g', SelectedPredictor, corr (double (данные. (SelectedPredictor)), data.LGD,'Type','Spearman'))
Spearman correlation between LTV and LGD: 0.271204
if isnumeric(data.(SelectedPredictor)) scatter(data.(SelectedPredictor),data.LGD) X = [ones(height(data),1) data.(SelectedPredictor)]; b = X\data.LGD; y = X*b; hold on plot(data.(SelectedPredictor),y) ylim([0 1]) hold off xlabel(SelectedPredictor) ylabel('LGD') end
Для числовых предикторов существует график поля точек LGD против выбранных значений предиктора с наложенной линейной подгонки. В данных присутствует значительное количество шума, точки разбросаны по всему графику. Это распространенная ситуация для ЛГД- данных моделирования. Плотность точек иногда отличается в разных областях графика, предполагая отношения. Наклон линейной подгонки и корреляция Спирмана дают больше информации о связи между выбранным предиктором и ответом.
Визуальная оценка плотности точек на графике поля точек может не быть надежным подходом к пониманию распределения данных. Чтобы лучше изучить распределение значений LGD для различных уровней выбранного предиктора, создайте прямоугольный график.
% Choose the number of discretization levels for numeric predictors NumLevels =3; if isnumeric (данные. (SelectedPredictor)) PredictorEdges = linspace (min (данные. (SelectedPredictor)), max (данные. (SelectedPredictor)), NumLevels + 1); PredictorDiscretized = дискретизировать (данные. (SelectedPredictor), PredictorEdges,'Categorical', строка (PredictorEdges (2: end)); boxplot (data.LGD, PredictorDiscretized) xlabel ([ SelectedPredictor' Discretized']) ylabel ('LGD') else boxplot (data.LGD, данные. (SelectedPredictor)) xlabel (SelectedPredictor) ylabel ('LGD') end
Для категориальных данных прямолинейный график прост, поскольку уже задано небольшое количество уровней. Для числовых данных можно сначала дискретизировать данные, а затем сгенерировать прямоугольный график. Различные размеры и высоты коробки показывают, что распределение значений LGD изменяется для различных уровней предиктора. Монотонный тренд в медиане (красная горизонтальная линия в центре коробок) показывает потенциальную линейную связь между предиктором и ЛГД (хотя, возможно, и мягкую связь, из-за широких распределений).
Основной подход к прогнозированию LGD состоит в том, чтобы просто использовать среднее значение данных LGD. Хотя это простой в понимании и использовании подход, обратная сторона заключается в том, что среднее значение является постоянным, и этот подход не проливает света на чувствительность ЛГД к другим факторам риска. В частности, предикторы в наборе данных игнорируются.
Чтобы ввести чувствительность к предикторам, средние значения LGD могут быть оценены по различным группам или сегментам данных, где группы заданы с помощью областей значений значений предиктора. Этот подход все еще является относительно простым подходом, но может заметно уменьшить ошибку предсказания по сравнению с одним средним значением LGD для всех наблюдений.
Чтобы начать, разделите набор данных на обучающие и тестовые данные. Одни и те же наборы данных для обучения и проверки используются для всех подходов в этом примере.
NumObs = height(data); % Reset the random stream state, for reproducibility % Comment this line out to generate different data partitions each time the example is run rng('default'); c = cvpartition(NumObs,'HoldOut',0.4); TrainingInd = training(c); TestInd = test(c);
В этом примере группы определяются с помощью трех предикторов. LTV
дискретизируется на низкие и высокие уровни. Age
дискретизируется в молодые и старые кредиты. Type
уже имеет два уровня, а именно: жилой и инвестиционный. Все группы являются комбинациями этих значений (для примера, низкого LTV, молодого кредита, жилого и так далее).
Количество уровней и определенные точки отсечения предназначены только для рисунка целей, можно основывать другие дискретизации на различных критериях. Кроме того, использование всех предикторов для дискретизации может не быть идеальным, когда набор данных содержит много предикторов. В некоторых случаях, используя один предиктор, или пару предикторов, может быть достаточно, чтобы найти полезные группы с различными средними значениями LGD. Когда данные включают в себя макро-информацию, группировка может включать в себя макро- переменная; для примера средняя стоимость ЛГД должна отличаться по сравнению с рецессиями и экономическими расширениями.
Вычислите среднее значение LGD по восьми группам данных с помощью обучающих данных.
% Discretize LTV LTVEdges = [0 0.5 max(data.LTV)]; data.LTVDiscretized = discretize(data.LTV,LTVEdges,'Categorical',{'low','high'}); % Discretize Age AgeEdges = [0 2 max(data.Age)]; data.AgeDiscretized = discretize(data.Age,AgeEdges,'Categorical',{'young','old'}); % Find group means on training data gs = groupsummary(data(TrainingInd,:),{'LTVDiscretized','AgeDiscretized','Type'},'mean','LGD'); disp(gs)
LTVDiscretized AgeDiscretized Type GroupCount mean_LGD ______________ ______________ ___________ __________ ________ low young residential 163 0.12166 low young investment 26 0.087331 low old residential 175 0.021776 low old investment 23 0.16379 high young residential 1134 0.16489 high young investment 257 0.25977 high old residential 265 0.066068 high old investment 50 0.11779
Для предсказания тестовые данные отображаются в восемь групп, а затем соответствующее среднее значение группы устанавливается как предсказанное значение LGD.
LGDGroupTest = findgroups(data(TestInd,{'LTVDiscretized' 'AgeDiscretized' 'Type'})); LGDPredictedByGroupMeans = gs.mean_LGD(LGDGroupTest);
Сохраните наблюдаемые LGD и предсказанные LGD в новой таблице dataLGDPredicted
. Эта таблица хранит предсказанные значения LGD для всех других подходов в примере.
dataLGDPredicted = table; dataLGDPredicted.Observed = data.LGD(TestInd); dataLGDPredicted.GroupMeans = LGDPredictedByGroupMeans; disp(head(dataLGDPredicted))
Observed GroupMeans _________ __________ 0.0064766 0.066068 0.007947 0.12166 0.063182 0.25977 0 0.066068 0.10904 0.16489 0 0.16489 0.89463 0.16489 0 0.021776
Раздел Model Comparison имеет более подробное сравнение всех моделей, которое включает визуализацию и метрики ошибки предсказания.
Естественный подход состоит в том, чтобы использовать регрессионую модель, чтобы явно смоделировать связь между LGD и некоторыми предикторами. Данные LGD, однако, ограничены в модуль интервале, в то время как переменная отклика для линейных регрессионых моделей, в теории, неограниченна.
Чтобы применить простые подходы линейной регрессии, данные LGD могут быть преобразованы. Общим преобразованием является функция logit, которая приводит к следующей регрессионой модели:
Значения LGD 0
или 1
заставляет функцию logit принимать бесконечные значения, поэтому LGD- данных обычно усекается перед применением преобразования.
data.LGDTruncated = data.LGD; data.LGDTruncated(data.LGD==0) = 0.00001; data.LGDTruncated(data.LGD==1) = 0.99999; data.LGDLogit = log(data.LGDTruncated./(1-data.LGDTruncated));
Ниже представлена гистограмма преобразованного LGD- данных, который использует функцию logit. Область значений значений охватывает положительное и отрицательное значения, что соответствует линейным регрессионым требованиям. Распределение все еще показывает значительные точки вероятности массы в концах распределения.
histogram(data.LGDLogit)
title('Logit Transformation of Truncated LGD Data')
Другие преобразования предлагаются в литературе [1]. Например, вместо функции logit, усеченные значения LGD могут быть отображены с обратным стандартным нормальным распределением (подобным модели probit).
Подбор регрессионной модели с помощью fitLGDModel
функция из Risk Management Toolbox™ с использованием обучающих данных. По умолчанию преобразование logit применяется к данным LGD-отклика с контуром 1e-5
. Дополнительные сведения о поддерживаемых преобразованиях и необязательных аргументах см. в разделе Regression
.
mdlRegression = fitLGDModel(data(TrainingInd,:),'regression','PredictorVars',{'LTV' 'Age' 'Type'},'ResponseVar','LGD'); disp(mdlRegression)
Regression with properties: ResponseTransform: "logit" BoundaryTolerance: 1.0000e-05 ModelID: "Regression" Description: "" UnderlyingModel: [1x1 classreg.regr.CompactLinearModel] PredictorVars: ["LTV" "Age" "Type"] ResponseVar: "LGD"
disp(mdlRegression.UnderlyingModel)
Compact linear regression model: LGD_logit ~ 1 + LTV + Age + Type Estimated Coefficients: Estimate SE tStat pValue ________ ________ _______ __________ (Intercept) -4.7549 0.36041 -13.193 3.0997e-38 LTV 2.8565 0.41777 6.8377 1.0531e-11 Age -1.5397 0.085716 -17.963 3.3172e-67 Type_investment 1.4358 0.2475 5.8012 7.587e-09 Number of observations: 2093, Error degrees of freedom: 2089 Root Mean Squared Error: 4.24 R-squared: 0.206, Adjusted R-Squared: 0.205 F-statistic vs. constant model: 181, p-value = 2.42e-104
Коэффициенты модели совпадают с результатами исследовательского анализа данных с положительным коэффициентом для LTV
, отрицательный коэффициент для Age
, и положительный коэффициент для инвестиционных свойств в Type
переменная.
The Regression
Модели LGD поддерживают предсказание и применяют обратное преобразование, поэтому предсказанные значения LGD находятся в шкале LGD. Для примера для модели, установленной выше, которая использует преобразование logit, обратное преобразование logit (также известное как логистическая, или сигмоидная функция) применяется функцией предсказания, чтобы вернуть предсказанное значение LGD.
dataLGDPredicted.Regression = predict(mdlRegression,data(TestInd,:)); disp(head(dataLGDPredicted))
Observed GroupMeans Regression _________ __________ __________ 0.0064766 0.066068 0.00091169 0.007947 0.12166 0.0036758 0.063182 0.25977 0.18774 0 0.066068 0.0010877 0.10904 0.16489 0.011213 0 0.16489 0.041992 0.89463 0.16489 0.052947 0 0.021776 3.7188e-06
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и метрики ошибки предсказания. В частности, гистограмма предсказанных значений LGD показывает, что регрессионая модель предсказывает многие значения LGD около нуля, даже несмотря на то, что высокая вероятность около нуля не была явно смоделирована.
Тобит или цензурированная регрессия предназначены для моделей, где реакция ограничена. Идея в том, что существует базовая (латентная) линейная модель, но что наблюдаемые значения отклика, в этом случае значения LGD, усечены. В данном примере используйте модель, подвергнутую цензуре с обеих сторон, с левым пределом в 0
и правый предел в 1
, соответствующий следующей формуле модели
с:
Параметры модели все s и стандартное отклонение ошибки .
Подбор регрессионной модели Тобита к fitLGDModel
использование обучающих данных. По умолчанию модель, подвергнутая цензуре с обеих сторон, снабжена пределами в 0
и 1
. Для получения дополнительной информации о моделях Tobit см. Tobit
.
mdlTobit = fitLGDModel(data(TrainingInd,:),'tobit','CensoringSide','both','PredictorVars',{'LTV' 'Age' 'Type'},'ResponseVar','LGD'); disp(mdlTobit)
Tobit with properties: CensoringSide: "both" LeftLimit: 0 RightLimit: 1 ModelID: "Tobit" Description: "" UnderlyingModel: [1x1 risk.internal.credit.TobitModel] PredictorVars: ["LTV" "Age" "Type"] ResponseVar: "LGD"
disp(mdlTobit.UnderlyingModel)
Tobit regression model: LGD = max(0,min(Y*,1)) Y* ~ 1 + LTV + Age + Type Estimated coefficients: Estimate SE tStat pValue _________ _________ _______ __________ (Intercept) 0.058257 0.027276 2.1358 0.032809 LTV 0.20126 0.031373 6.415 1.7363e-10 Age -0.095407 0.0072543 -13.152 0 Type_investment 0.10208 0.018054 5.6542 1.7802e-08 (Sigma) 0.29288 0.005704 51.346 0 Number of observations: 2093 Number of left-censored observations: 547 Number of uncensored observations: 1521 Number of right-censored observations: 25 Log-likelihood: -698.383
Модели Тобита предсказывают использование безусловного ожидаемого значения отклика, учитывая значения предиктора. Для получения дополнительной информации см. «Потеря с учетом моделей тобита по умолчанию».
dataLGDPredicted.Tobit = predict(mdlTobit,data(TestInd,:)); disp(head(dataLGDPredicted))
Observed GroupMeans Regression Tobit _________ __________ __________ ________ 0.0064766 0.066068 0.00091169 0.087889 0.007947 0.12166 0.0036758 0.12432 0.063182 0.25977 0.18774 0.32043 0 0.066068 0.0010877 0.093354 0.10904 0.16489 0.011213 0.16718 0 0.16489 0.041992 0.22382 0.89463 0.16489 0.052947 0.23695 0 0.021776 3.7188e-06 0.010234
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и ошибку предсказания с различными метриками. Гистограмма предсказанных значений LGD для модели Тобита не имеет U-образного распределения, но она хорошо оценивается по сравнению с другими моделями.
В бета-регрессионной модели для LGD модель не предсказывает непосредственно одно значение LGD, она предсказывает целое распределение LGD (учитывая значения предиктора). Из этого распределения должно быть определено значение, чтобы предсказать одно значение LGD для кредита, обычно это среднее значение этого распределения.
Технически, учитывая значения предиктора и моделировать коэффициенты и , можно:
Вычислите значения для параметров (среднее) и (иногда называемый «размером выборки») бета-распределения со следующими формулами:
Вычислите значения для и типичные параметры бета- распределения с этими формулами:
Оцените функцию плотности соответствующего бета- распределения для заданного уровня , где - гамма-функция; для получения дополнительной информации см. [1]:
Для подбора кривой модели, после оценки функции плотности, можно обновить функцию правдоподобия и найти оптимальные коэффициенты с максимальным подходом правдоподобия. Смотрите раздел Локальные функции, где функция максимального правдоподобия hLogLikelihoodBeta
задан.
Для предсказания, когда коэффициенты модели подгоняются, может быть сделано предсказание, обычно используя среднее значение распределения, то есть параметр, как предсказанное значение LGD.
Подгонка модели бета-регрессии с помощью обучающих данных с максимальной вероятностью. Максимизация hLogLikelihoodBeta
функция выполняется без ограничений решателя fminunc
из Optimization Toolbox™.
% Convert Type to numeric binary TypeDummy = dummyvar(data.Type); data.Type01 = TypeDummy(:,2); ColumnNames = {'Intercept' 'LTV' 'Age' 'Type'}; NumCols = length(ColumnNames); % Initial guess x0 = 0.1*ones(2*NumCols,1); % Predictors Matrix and LGD, training % Use truncated LGD to avoid numerical issues at the boundaries XTrain = [ones(sum(TrainingInd),1) data.LTV(TrainingInd) data.Age(TrainingInd) data.Type01(TrainingInd)]; LGDTrain = data.LGDTruncated(TrainingInd); % Minimize negative likelihood objFunctionBeta = @(x)(-hLogLikelihoodBeta(x,XTrain,LGDTrain)); [Estimate,~,~,~,~,Hessian] = fminunc(objFunctionBeta,x0);
Computing finite-difference Hessian using objective function. Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
ParameterNamesBeta = [strcat('Mu_',ColumnNames) strcat('Nu_',ColumnNames)]; ModelParametersBeta = array2table(Estimate,'RowNames',ParameterNamesBeta); ModelParametersBeta.StdError = sqrt(diag(inv(Hessian))); ModelParametersBeta.DF = size(XTrain,1)*ones(length(Estimate),1); ModelParametersBeta.T = Estimate./ModelParametersBeta.StdError; ModelParametersBeta.PValue = 2*(1-tcdf(abs(ModelParametersBeta.T),ModelParametersBeta.DF)); ModelParametersBeta.ConfidenceInterval = Estimate+ModelParametersBeta.StdError*[-1.96 1.96]; disp(ModelParametersBeta)
Estimate StdError DF T PValue ConfidenceInterval ________ ________ ____ _______ __________ ____________________ Mu_Intercept -1.3772 0.13201 2093 -10.433 0 -1.636 -1.1185 Mu_LTV 0.6027 0.15087 2093 3.9947 6.7017e-05 0.30698 0.89841 Mu_Age -0.47464 0.040264 2093 -11.788 0 -0.55356 -0.39572 Mu_Type 0.4537 0.085143 2093 5.3287 1.0954e-07 0.28682 0.62058 Nu_Intercept -0.16338 0.12591 2093 -1.2976 0.19457 -0.41017 0.083406 Nu_LTV 0.055904 0.14719 2093 0.37981 0.70412 -0.23259 0.3444 Nu_Age 0.22888 0.040335 2093 5.6743 1.5858e-08 0.14982 0.30793 Nu_Type -0.14101 0.078154 2093 -1.8042 0.071342 -0.29419 0.012176
Для предсказания напомните, что бета-регрессия связывает предикторы с целым бета- распределением. Например, предположим, что кредит имеет LTV
от 0.7
и эпоха 1.1
лет, и это инвестиционное свойство. Модель бета-регрессии дает нам предсказание для и параметры для этого кредита и модель предсказывает, что для этого кредита области значений возможных значений LGD следуют соответствующему бета- распределению.
XExample = [1 0.7 1.1 1]; MuExample = 1/(1+exp(-XExample*Estimate(1:NumCols))); NuExample = exp(XExample*Estimate(NumCols+1:end)); AlphaExample = MuExample*NuExample; BetaExample = (1-MuExample)*NuExample; xDomain = 0.01:0.01:0.99; pBeta = betapdf(xDomain,AlphaExample,BetaExample); plot(xDomain,pBeta) title('Predicted Distribution, Single Loan') xlabel('Possible LGD') ylabel('Predicted Density')
Форма распределения имеет U-образный шаблон данных. Однако это прогнозируемое распределение значений LGD для одного кредита. Это распределение может быть очень полезным в целях симуляции. Однако, чтобы предсказать значение LGD для этого кредита, требуется метод, который переходит от всего распределения к одному значению.
Один из способов предсказания - случайным образом нарисовать значение из предыдущего распределения. Это имеет тенденцию давать предсказанные значения к концам единичного интервала, и общая форма распределения для набора данных будет совпадать с U-образным паттером наблюдаемых значений LGD. Однако, даже если форма распределения выглядела правильно, случайный рисунок из распределения не работает хорошо в целях предсказания. Две точки с одинаковыми значениями предиктора имели бы два разных предсказанных LGD, что контринтуитивно. Кроме того, ошибка предсказания на уровне наблюдений может быть большой, поскольку многие кредиты с маленькими наблюдаемыми LGD могут получить случайные предсказания больших LGD, и наоборот.
Чтобы уменьшить ошибку предсказания на индивидуальном уровне, ожидаемое значение бета- распределения обычно используется для предсказания. Распределение предсказанных значений при этом подходе не имеет ожидаемого U-образного шаблона, потому что среднее значение имеет тенденцию удаляться от контуров единичного интервала. Однако при использовании среднего значения бета- распределения все наблюдения с одинаковыми значениями предиктора получают одинаковые предсказанные LGD. Кроме того, среднее значение может быть не близко к значениям, которые находятся на концах распределения, но средняя ошибка может быть меньше по сравнению со случайными получениями от предыдущего подхода.
Предсказать используя среднее значение бета- распределения. Помните, что ожидаемое значение распределения является параметр, поэтому предсказание среднего значения просто.
XTest = [ones(sum(TestInd),1) data.LTV(TestInd) data.Age(TestInd) data.Type01(TestInd)]; MuTest = 1./(1+exp(-XTest*Estimate(1:NumCols))); dataLGDPredicted.Beta = MuTest; disp(head(dataLGDPredicted))
Observed GroupMeans Regression Tobit Beta _________ __________ __________ ________ ________ 0.0064766 0.066068 0.00091169 0.087889 0.093695 0.007947 0.12166 0.0036758 0.12432 0.14915 0.063182 0.25977 0.18774 0.32043 0.35262 0 0.066068 0.0010877 0.093354 0.096434 0.10904 0.16489 0.011213 0.16718 0.18858 0 0.16489 0.041992 0.22382 0.2595 0.89463 0.16489 0.052947 0.23695 0.26767 0 0.021776 3.7188e-06 0.010234 0.021315
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и метрики ошибки предсказания. В частности, гистограмма предсказанных значений LGD показывает, что подход бета-регрессии не дает U-образного распределения. Однако этот подход имеет хорошую эффективность при других сообщенных метриках.
Двухэтапные модели LGD разделяют корпус без потерь (LGD равно 0
) из случаев с фактическими потерями (ЛГД больше 0
) и создать две модели. Модель этапа 1 является классификационной моделью, чтобы предсказать, будет ли кредит иметь положительный LGD. Этап 2 моделирует модель регрессионного типа, чтобы предсказать фактический LGD, когда LGD, как ожидается, будет положительным. Предсказание является ожидаемым значением двух комбинированных моделей, что является продуктом вероятности потери (предсказание 1 этапа), умноженной на ожидаемое значение LGD (предсказание 2 этапа).
В этом примере для этапа 1 используется логистическая регрессионая модель. Второй этап является регрессией на логитном преобразовании положительных данных LGD, подогнанных с помощью fitLGDModel
. Более сложные модели могут использоваться для моделей этапа 1 и этапа 2, см., например, [4] или [6]. Кроме того, другое расширение должно явно обрабатывать LGD = 1
контур. Модель 1 этапа даст вероятности наблюдения LGD 0
, LGD 1
и значение LGD строго между 0
и 1
. Модель этапа 2 будет предсказывать значения LGD, когда ожидается, что LGD будет строго между 0
и 1
.
Подгонка модели этапа 1 с помощью обучающих данных. Переменная отклика является индикатором со значением 1
если наблюдаемый LGD положительный, и 0
если наблюдаемый LGD равен нулю.
IndLGDPositive = data.LGD>0; data.LGDPositive = IndLGDPositive; disp(head(data))
LTV Age Type LGD LTVDiscretized AgeDiscretized LGDTruncated LGDLogit Type01 LGDPositive _______ _______ ___________ _________ ______________ ______________ ____________ ________ ______ ___________ 0.89101 0.39716 residential 0.032659 high young 0.032659 -3.3884 0 true 0.70176 2.0939 residential 0.43564 high old 0.43564 -0.25887 0 true 0.72078 2.7948 residential 0.0064766 high old 0.0064766 -5.0331 0 true 0.37013 1.237 residential 0.007947 low young 0.007947 -4.827 0 true 0.36492 2.5818 residential 0 low old 1e-05 -11.513 0 false 0.796 1.5957 residential 0.14572 high young 0.14572 -1.7686 0 true 0.60203 1.1599 residential 0.025688 high young 0.025688 -3.6357 0 true 0.92005 0.50253 investment 0.063182 high young 0.063182 -2.6965 1 true
mdl1 = fitglm(data(TrainingInd,:),"LGDPositive ~ 1 + LTV + Age + Type",'Distribution',"binomial"); disp(mdl1)
Generalized linear regression model: logit(LGDPositive) ~ 1 + LTV + Age + Type Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue ________ ________ _______ __________ (Intercept) 1.3157 0.21193 6.2083 5.3551e-10 LTV 1.3159 0.25328 5.1954 2.0433e-07 Age -0.79597 0.053607 -14.848 7.1323e-50 Type_investment 0.66784 0.17019 3.9241 8.7051e-05 2093 observations, 2089 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 404, p-value = 2.68e-87
График рабочей характеристики приемника (ROC) для модели этапа 1 обычно сообщается с использованием тестовых данных, а также области под кривой ROC (AUROC или просто AUC).
PredictedProbLGDPositive = predict(mdl1,data(TestInd,:));
[x,y,~,AUC] = perfcurve(data.LGDPositive(TestInd),PredictedProbLGDPositive,1);
plot(x,y)
title(sprintf('ROC Stage 1 Model (AUROC: %g)',AUC))
Подбор модели этапа 2 к fitLGDModel
использование только обучающих данных с положительным LGD. Это тот же тип модели, что и ранее в разделе Regression, однако на этот раз она подгоняется с использованием только наблюдений из обучающих данных с положительными LGD.
dataLGDPositive = data(TrainingInd&IndLGDPositive,{'LTV','Age','Type','LGD'}); mdl2 = fitLGDModel(dataLGDPositive,'regression'); disp(mdl2.UnderlyingModel)
Compact linear regression model: LGD_logit ~ 1 + LTV + Age + Type Estimated Coefficients: Estimate SE tStat pValue ________ ________ _______ __________ (Intercept) -2.9083 0.27538 -10.561 3.2039e-25 LTV 1.3883 0.31838 4.3604 1.384e-05 Age -0.46116 0.081939 -5.6281 2.1608e-08 Type_investment 0.78223 0.18096 4.3226 1.6407e-05 Number of observations: 1546, Error degrees of freedom: 1542 Root Mean Squared Error: 2.8 R-squared: 0.0521, Adjusted R-Squared: 0.0503 F-statistic vs. constant model: 28.3, p-value = 8.73e-18
Выполните предсказание на тестовые данные, используя объединенные модели для этапа 1 и этапа 2. Предсказанный LGD является продуктом вероятности наблюдения положительного LGD от модели этапа 1, умноженной на ожидаемое значение LGD, предсказанное моделью этапа 2. Напомним, что регрессионые модели, установленные с использованием fitLGDModel
применить обратное преобразование во время предсказания, поэтому предсказанное значение является допустимым значением LGD.
PredictedLGDPositive = predict(mdl2,data(TestInd,:)); % PredictedProbLGDPositive is computed before the ROC curve above % Final LGD prediction is the product of stage 1 and stage 2 predictions dataLGDPredicted.TwoStage = PredictedProbLGDPositive.*PredictedLGDPositive; disp(head(dataLGDPredicted))
Observed GroupMeans Regression Tobit Beta TwoStage _________ __________ __________ ________ ________ _________ 0.0064766 0.066068 0.00091169 0.087889 0.093695 0.020038 0.007947 0.12166 0.0036758 0.12432 0.14915 0.034025 0.063182 0.25977 0.18774 0.32043 0.35262 0.2388 0 0.066068 0.0010877 0.093354 0.096434 0.022818 0.10904 0.16489 0.011213 0.16718 0.18858 0.060072 0 0.16489 0.041992 0.22382 0.2595 0.097685 0.89463 0.16489 0.052947 0.23695 0.26767 0.11142 0 0.021776 3.7188e-06 0.010234 0.021315 0.0003689
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и метрики ошибки предсказания. Этот подход также хорошо оценивается по сравнению с другими моделями, и гистограмма предсказанных значений LGD показывает высокие частоты вблизи 0
.
Для оценки эффективности LGD- моделей обычно используются различные метрики. Одна метрика является R-квадратом линейного подгонка, регрессируя наблюдаемые значения LGD по предсказанным значениям. Вторая метрика является некоторой корреляцией или статистикой рангового порядка; этот пример использует корреляцию Спирмана. Для ошибки предсказания корневая средняя квадратичная невязка (RMSE) является общей метрикой. Кроме того, иногда сообщаемой простой метрикой является различие между средним значением LGD в данных и средним значением LGD предсказаний.
Модели регрессии и Тобита непосредственно поддерживают эти метрики с modelAccuracy
функция, включая сравнение с образцом модели. Например, вот отчет об этих метриках для регрессионой модели, передающий предсказания простой непараметрической модели как ссылку.
AccMeasure = modelAccuracy(mdlRegression,data(TestInd,:),'DataID','Test','ReferenceLGD',dataLGDPredicted.GroupMeans,'ReferenceID','Group Means','CorrelationType','spearman'); disp(AccMeasure)
RSquared RMSE Correlation SampleMeanError ________ _______ ___________ _______________ Regression, Test 0.070867 0.25988 0.42152 0.10759 Group Means, Test 0.041622 0.2406 0.33807 -0.0078124
Визуализация также непосредственно поддерживается modelAccuracyPlot
.
modelAccuracyPlot(mdlRegression,data(TestInd,:),'DataID','Test','ReferenceLGD',dataLGDPredicted.GroupMeans,'ReferenceID','Group Means')
В сложение, Regression
и Tobit
модели поддерживают инструменты распознавания моделей, с modelDiscrimination
и modelDiscriminationPlot
функций. Для дискриминации модели данные LGD дискретизируются (высокий LGD по сравнению с низким LGD), и кривая ROC и соответствующий AUROC вычисляются стандартным способом. Для получения дополнительной информации смотрите modelDiscrimination
и modelDiscriminationPlot
. Например, вот кривая ROC для регрессионой модели с кривой ROC непараметрической модели в качестве опорной.
modelDiscriminationPlot(mdlRegression,data(TestInd,:),'DataID','Test','ReferenceLGD',dataLGDPredicted.GroupMeans,'ReferenceID','Group Means')
Остальная часть этого раздела валидации модели работает с предсказанными значениями LGD из всех моделей, чтобы вычислить метрики, упомянутые выше (R-квадрат, корреляция Спирмана, RMSE и средняя ошибка выборки). Он также показывает график поля точек, гистограмму и прямоугольный график для дальнейшего анализа эффективности моделей.
Четыре метрики сообщаются ниже, сортируются путем уменьшения значений R-квадрат.
ModelNames = dataLGDPredicted.Properties.VariableNames(2:end); % Remove 'Observed' NumModels = length(ModelNames); SampleMeanError = zeros(NumModels,1); RSquared = zeros(NumModels,1); Spearman = zeros(NumModels,1); RMSE = zeros(NumModels,1); lmAll = struct; meanLGDTest = mean(dataLGDPredicted.Observed); for ii=1:NumModels % R-squared, and store linear model fit for visualization section Formula = ['Observed ~ 1 + ' ModelNames{ii}]; lmAll.(ModelNames{ii}) = fitlm(dataLGDPredicted,Formula); RSquared(ii) = lmAll.(ModelNames{ii}).Rsquared.Ordinary; % Spearman correlation Spearman(ii) = corr(dataLGDPredicted.Observed,dataLGDPredicted.(ModelNames{ii}),'type','Spearman'); % Root mean square error RMSE(ii) = sqrt(mean((dataLGDPredicted.Observed-dataLGDPredicted.(ModelNames{ii})).^2)); % Sample mean error SampleMeanError(ii) = meanLGDTest-mean(dataLGDPredicted.(ModelNames{ii})); end PerformanceMetrics = table(RSquared,Spearman,RMSE,SampleMeanError,'RowNames',ModelNames); PerformanceMetrics = sortrows(PerformanceMetrics,'RSquared','descend'); disp(PerformanceMetrics)
RSquared Spearman RMSE SampleMeanError ________ ________ _______ _______________ TwoStage 0.090814 0.41987 0.24197 0.060619 Tobit 0.08527 0.42217 0.23712 -0.034412 Beta 0.080804 0.41557 0.24112 -0.052396 Regression 0.070867 0.42152 0.25988 0.10759 GroupMeans 0.041622 0.33807 0.2406 -0.0078124
Для конкретного обучения по сравнению с тестовым разбиением, используемым в этом примере, двухэтапная модель имеет самое высокое значение R-квадрат, хотя для других разбиений Tobit имеет самое высокое значение R-квадрат. Даже при том, что подход, означающий группу, не имеет высокого значения R-квадрат, он обычно имеет наименьшую среднюю ошибку выборки (среднее из предсказанных значений LGD минус среднее LGD в тестовых данных). Групповые средства также конкурентоспособны для метрики RMSE.
Сообщите о производительности модели по одному подходу за раз, включая визуализацию. Отобразите метрики для выбранной модели.
ModelSelected = "TwoStage";
disp (PerformanceMetrics (ModelSelected,:))
RSquared Spearman RMSE SampleMeanError ________ ________ _______ _______________ TwoStage 0.090814 0.41987 0.24197 0.060619
Постройте график регрессионной подгонки (наблюдаемый LGD по сравнению с предсказанным LGD), который является общим визуальным инструментом для оценки производительности модели. Это по существу та же визуализация, что и modelAccuracyPlot
функция, показанная выше, но использующая plot
функция установленных линейных моделей. R-квадрат, о котором сообщалось выше, является R-квадратом этой регрессии. График показывает значительное количество ошибок для всех моделей. Хорошая прогнозирующая модель будет иметь точки, расположенные в основном вдоль диагонали, а не рассеиваться по всему модулю квадрату. Однако вышеуказанные метрики показывают некоторые различия в прогнозирующей эффективности для различных моделей, которые могут быть важны на практике.
plot(lmAll.(ModelSelected)) xlim([0 1]) ylim([0 1])
Сравните гистограммы предсказанных и наблюдаемых значений LGD. Для некоторых моделей распределение предсказанных значений показывает высокие частоты около нуля, подобно U-форме наблюдаемого LGD-распределения. Однако соответствие формы распределения не означает высокую точность на уровне отдельных предсказаний; некоторые модели показывают лучшую ошибку предсказания, хотя их гистограмма не имеет U-образной формы.
LGDEdges = 0:0.1:1; % Ten bins to better show the distribution shape y1 = histcounts(dataLGDPredicted.(ModelSelected),LGDEdges); y2 = histcounts(dataLGDPredicted.Observed,LGDEdges); bar((LGDEdges(1:end-1)+LGDEdges(2:end))/2,[y1; y2]) title(strcat(ModelSelected,' Model')) ylabel('Frequency') xlabel('LGD') legend('Predicted','Observed') grid on
Отобразите прямоугольный график наблюдаемых значений LGD для различных областей значений предсказанных значений LGD. Более грубая дискретизация (только пять интервалов) сглаживает некоторый шум и лучше суммирует базовую зависимость. В идеале медиана (красная горизонтальная линия посередине) должна иметь монотонный тренд и явно отличаться от одного уровня к следующему. Высокие кубы также означают, что существует значительное количество ошибок вокруг предсказанных значений, что в некоторых случаях может быть связано с очень небольшим количеством наблюдений на этом уровне. Для хорошей прогнозирующей модели коробки должны быть короткими и располагаться около диагонали, когда вы перемещаетесь с одного уровня на следующий.
LGDEdges = linspace(min(dataLGDPredicted.(ModelSelected)),max(dataLGDPredicted.(ModelSelected)),6); % Five bins LGDDiscretized = discretize(dataLGDPredicted.(ModelSelected),LGDEdges,'Categorical',string(LGDEdges(2:end))); boxplot(dataLGDPredicted.Observed,LGDDiscretized) ylim([0 1]) title(strcat(ModelSelected,' Model')) xlabel('Predicted LGD, Discretized') ylabel('Observed LGD')
Этот пример показывает несколько подходов для LGD- моделирования и предсказания. Модели регрессии и Тобита (включая регрессионую модель второго этапа двухэтапной модели) подбираются с помощью fitLGDModel
функция из Risk Management Toolbox. Другие модели установлены на основе существующих функциональных возможностей в Optimization Toolbox и Statistics and Machine Learning Toolbox.
Рабочий процесс в этом примере может быть адаптирован для дальнейшего анализа моделей, обсуждаемых здесь, или для реализации и проверки других подходов к моделированию. Этот пример может быть расширен, чтобы выполнить более тщательное сравнение моделей LGD (см., Например, [3] и [4]).
Пример также может быть расширен, чтобы выполнить перекрестный анализ валидации либо для эталонных альтернативных моделей, либо для тонкой настройки гиперпараметров. Например, лучшие точки отсечения для групповых средств могут быть выбраны с помощью перекрестной валидации, или альтернативные преобразования значений отклика LGD-отклика (logit, probit) могут быть проверены на выбор с наилучшей эффективностью. Этот пример также может быть начальной точкой для выполнения обратного тестового анализа с использованием несвоевременных данных; см., например, [5].
[1] Baesens, B., D. Rosch, and H. Scheule. Аналитика кредитных рисков. Уайли, 2016.
[2] Джонстон Росс, Э. и Л. Шибут. "Что приводит к потере при дефолте? Доказательства по кредитам коммерческой недвижимости в несостоявшихся банках ". Федеральная корпорация по страхованию вкладов, Центр финансовых исследований, работа 2015-03, март 2015.
[3] Li, P., X. Zhang, and X. Zhao. "Моделирование потерь по умолчанию. "Федеральная корпорация по страхованию вкладов, Центр финансовых исследований, работа 2018-03, июль 2018.
[4] Loterman, G., I. Brown, D. Martens, C. Mues и B. Baesens. «Алгоритмы регрессии бенчмаркинга для моделирования потерь по умолчанию». Международный журнал прогнозирования. Том 28, No.1, стр. 161-170, 2012.
[5] Loterman, G., M. Debruyne, K. Vanden Branden, T. Van Gestel, and C. Mues. «Предлагаемая среда для обратных тестов потерь с учетом моделей по умолчанию». Журнал валидации модели риска. Том 8, № 1, стр. 69-90, март 2014.
[6] Таноуе, Я. и С. Ямасита. Оценка потерь по умолчанию: Двухэтапная модель с классификационным древовидным ускорением и Поддержкой Вектора логистической регрессией ". Журнал рисков. Том 21 № 4, с. 19-37, 2019.
Бета- Журнал вероятность
Функция логарифмической правдоподобности для бета-регрессионой модели является
,
где:
и
Матрица предиктора и вектор наблюдаемых значения получены из обучающих данных с наблюдения. Функция плотности для бета- распределения задается как ( - функция Гамма)
Учитывая данные, функция логарифмической правдоподобности является функцией от параметров коэффициента и хотя приведенные выше формулы не делают эту зависимость явным образом для упрощения обозначения. Функция логарифмической правдоподобности максимизируется путем изменения и параметры. Параметры распределения и > 0, и и являются промежуточными преобразованиями, необходимыми для оценки функции логарифмической правдоподобности. Для получения дополнительной информации см. раздел для примера [1].
function f = hLogLikelihoodBeta(Params, X, y) nCols = size(X,2); b = Params(1:nCols); c = Params(nCols+1:end); % Linear predictors yMu = X*b; yNu = X*c; mu = 1 ./ (1 + exp(-yMu)); nu = exp(yNu); % Transform to standard parameterization alpha = mu .* nu; beta = (1-mu) .* nu; % Negative log-likelihood likelihood = betapdf(y,alpha,beta); f = sum(log(likelihood)); end