В этом примере показано, как соответствовать различным типам моделей к данным о потере, данной значение по умолчанию (LGD). Этот пример демонстрирует следующие подходы:
Для всех этих подходов этот пример показывает:
Как подбирать модель с помощью обучающих данных, где LGD является функцией других переменных или предикторов.
Как предсказать при тестировании данных.
Раздел Model Comparison содержит подробное сравнение, которое включает визуализацию и несколько ошибочных метрик предсказания для всех моделей в этом примере.
LGD является одним из основных параметров для анализа кредитного риска. Несмотря на то, что существуют разные подходы, чтобы оценить резервы кредита потерь и капитал кредита, общие методологии требуют оценки вероятностей значения по умолчанию (PD), потеря, данная значение по умолчанию (LGD) и воздействие в значении по умолчанию (EAD). Резервы и потребности в капитале вычисляются с помощью формул или симуляций, которые используют эти параметры. Например, резервы потерь обычно оцениваются как ожидаемая потеря (EL), данная следующей формулой:
.
У практиков есть десятилетия опыта моделирующие и предсказывающие ФУНТЫ. Однако моделирование LGD (и также EAD) запустилось намного позже. Одной причиной является относительный дефицит данных LGD по сравнению с данными о PD. Данные о значении по умолчанию кредита (например, пропущенные платежи) легче собрать и более доступный, чем убытки, которые в конечном счете потерпели в случае значения по умолчанию. Когда учетная запись перемещена в этап восстановления, информация может быть передана различной системе, кредиты могут быть консолидированы, процесс восстановления может занять много времени, и несколько затрат понесены во время процесса, некоторые, которых трудно отследить подробно. Однако банки нарастили свои усилия, чтобы собрать данные, которые могут использоваться для моделирования LGD, частично из-за инструкций, которые требуют оценки этих параметров риска, и моделирование LGD (и EAD) теперь широко распространено в промышленности.
Это использование в качестве примера симулировало данные LGD, но рабочий процесс был применен к действительным наборам данных, чтобы подбирать модели LGD, предсказать значения LGD и сравнить модели. Особое внимание этого примера не должно предлагать конкретный подход, но показать, как эти различные модели могут быть подходящими, как модели используются, чтобы предсказать значения LGD, и как сравнить модели. Этим примером является также начальная точка для изменений и расширений этих моделей; например, можно хотеть использовать более усовершенствованную классификацию и инструменты регрессии как часть модели 2D этапа.
Эти три предиктора в этом примере являются конкретной ссудой. Однако можно использовать подходы, описанные в этом примере с наборами данных, которые включают несколько предикторов и даже макроэкономических переменных. Кроме того, можно использовать модели, которые включают макроэкономические предикторы для стресс-тестирования или пожизненного LGD, моделирующего, чтобы поддержать нормативные требования, такие как CCAR, IFRS 9 и CECL.
Набор данных в этом примере является симулированными данными, которые получают типичные функции данных LGD. Например, типичная функция является распределением значений LGD, которое имеет высокие частоты в 0 (полное восстановление), и также много наблюдений в 1 (никакое восстановление вообще). Другая характеристика данных LGD является существенным количеством "шумовых" или "необъясненных" данных. Можно визуализировать этот "шум" в графиках рассеивания ответа против предикторов, где точки, кажется, не следуют за ясным трендом, и все же могут быть обнаружены некоторые базовые отношения. Кроме того, распространено получить значительные ошибки предсказания для моделей LGD. Эмпирические исследования показывают, что модели LGD имеют высокие ошибки предсказания в целом. Например, в [4] авторы сообщают о значениях R-squared в пределах от 4% к 43% для области значений моделей через различные портфели. В этом примере все подходы получают значения R-squared чуть менее чем 10%. Кроме того, нахождение полезных предикторов на практике может потребовать важного понимания среды кредитования определенного портфеля, например, знания правовых рамок и процесса набора [2]. Симулированный набор данных включает только три предиктора, и это переменные, часто находимые в моделях LGD, а именно, соотношении стоимости актива к сумме кредита, возрасте ссуды, и живет ли заемщик в свойстве или если заемщик купил его в инвестиционных целях.
Подготовка данных для моделирования 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, поправка (дважды (данные. (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. Плотность точек иногда отличается в различных областях графика, предлагая отношения. Наклон линейной подгонки и корреляции Копьеносца дает больше информации об отношении между выбранным предиктором и ответом.
Визуально оценка плотности точек в графике рассеивания не может быть надежным подходом, чтобы изучить распределение данных. Чтобы лучше изучить распределение значений LGD для разных уровней выбранного предиктора, создайте диаграмму.
% Choose the number of discretization levels for numeric predictors NumLevels =3; if isnumeric (данные. (SelectedPredictor)) PredictorEdges = linspace (min (данные. (SelectedPredictor)), макс. (данные. (SelectedPredictor)), NumLevels+1); PredictorDiscretized = дискретизируют (данные. (SelectedPredictor), PredictorEdges,'Categorical', строка (PredictorEdges (2:end))); коробчатая диаграмма (data.LGD, PredictorDiscretized) xlabel ([SelectedPredictor ' Discretized']) yLabel 'LGD') else коробчатая диаграмма (data.LGD, данные. (SelectedPredictor)) xlabel (SelectedPredictor) yLabel 'LGD') end
Для категориальных данных диаграмма является прямой, поскольку небольшое количество уровней уже дано. Для числовых данных можно дискретизировать данные сначала и затем сгенерировать диаграмму. Различные размеры поля и высоты показывают, что распределение значений LGD изменяется для различных уровней предиктора. Монотонный тренд в медиане (красная горизонтальная линия в центре полей) показывает потенциальное линейное соотношение между предиктором и LGD (хотя возможно умеренное отношение, из-за широких распределений).
Основной подход, чтобы предсказать 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 должно отличаться по рецессиям по сравнению с подъемами экономики.
Вычислите средний 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
Для предсказания тестовые данные сопоставлены в эти 8 групп, и затем соответствующее среднее значение группы установлено как предсказанное значение LGD.
LGDGroupTest = (data.LTVDiscretized(TestInd)=='high')*4 +... (data.AgeDiscretized(TestInd)=='old')*2 +... (data.Type(TestInd)=='investment') + 1; 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 могут быть преобразованы. Общее преобразование является функцией логита, которая приводит к следующей модели регрессии:
Значения LGD 0
или 1
заставьте функцию логита принимать бесконечные значения, таким образом, данные 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, которые используют функцию логита. Область значений значений охватывает положительные и отрицательные величины, который сопоставим с требованиями линейной регрессии. Распределение все еще показывает значительные массовые точки вероятности в концах распределения.
histogram(data.LGDLogit)
title('Logit Transformation of Truncated LGD Data')
Другие преобразования предлагаются в литературе [1]. Например, вместо функции логита, усеченные значения LGD могут быть сопоставлены с обратным стандартным нормальным распределением (похожий на нелинейную модель вероятности с нормальным распределением).
Подбирайте модель с помощью обучающих данных.
mdlRegression = fitlm(data(TrainingInd,:),'LGDLogit ~ 1 + LTV + Age + Type');
disp(mdlRegression)
Linear regression model: LGDLogit ~ 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
переменная.
Предсказания модели находятся на преобразованном пробеле, поэтому обратное преобразование логита (также известный как логистическую, или сигмоидальную функцию) должно быть применено к предсказанию модели, чтобы получить итоговое ожидаемое значение для LGD.
LogitLGDPredicted = predict(mdlRegression,data(TestInd,:)); dataLGDPredicted.Regression = 1./(1+exp(-LogitLGDPredicted)); 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 модель непосредственно не предсказывает одного значения LGD, это предсказывает целое распределение LGDs (учитывая значения предиктора). От того распределения значение должно быть полно решимости предсказать одно значение LGD для ссуды, обычно среднее значение того распределения.
Технически, учитывая значения предиктора и коэффициенты модели и , вы можете:
Вычислите значения для параметров (среднее значение) и (иногда названный "объемом выборки") бета распределения со следующими формулами:
Вычислите значения для и , типичные параметры бета распределения, с этими формулами:
Оцените функцию плотности соответствующего бета распределения для данного уровня , где гамма функция; см. [1] для деталей:
Для того, чтобы подбирать модель, когда-то функция плотности оценена, можно обновить функцию правдоподобия и найти оптимальные коэффициенты подходом вероятности имеющим. Смотрите раздел Local Functions, где наибольшее правдоподобие функционирует 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.701e-05 0.30699 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.0953e-07 0.28682 0.62058 Nu_Intercept -0.16338 0.12591 2093 -1.2975 0.19459 -0.41016 0.083414 Nu_LTV 0.055898 0.14719 2093 0.37977 0.70416 -0.23259 0.34439 Nu_Age 0.22887 0.040335 2093 5.6743 1.5862e-08 0.14982 0.30793 Nu_Type -0.14101 0.078155 2093 -1.8042 0.07134 -0.29419 0.012175
Для предсказания вспомните, что бета регрессия соединяет предикторы с целым бета распределением. Например, предположите, что ссуда имеет 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. Однако, даже если форма распределения выглядела правильной, случайная ничья от распределения не работает хорошо на цели предсказания. Две точки с теми же значениями предиктора имели бы два отличающихся предсказанных LGDs, который парадоксален. Кроме того, ошибка предсказания на уровне наблюдения могла быть большой, поскольку много кредитов с маленьким заметили, что LGDs мог получить случайные предсказания большого LGDs, и наоборот.
Чтобы уменьшать ошибку предсказания на индивидуальном уровне, ожидаемое значение бета распределения обычно используется, чтобы предсказать. Распределение ожидаемых значений с этим подходом не имеет ожидаемого U-образного шаблона, потому что среднее значение имеет тенденцию быть вдали от контуров единичного интервала. Однако при помощи среднего значения бета распределения, все наблюдения с теми же значениями предиктора добираются, то же самое предсказало LGDs. Кроме того, среднее значение не может быть близко к значениям, которые находятся на концах распределения, но средняя погрешность может быть меньшей по сравнению со случайными ничьими от предыдущего подхода.
Предскажите использование среднего значения бета распределения. Помните, что ожидаемое значение распределения параметр, таким образом, предсказание среднего значения является прямым.
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 Beta _________ __________ __________ ________ 0.0064766 0.066068 0.00091169 0.093695 0.007947 0.12166 0.0036758 0.14915 0.063182 0.25977 0.18774 0.35262 0 0.066068 0.0010877 0.096434 0.10904 0.16489 0.011213 0.18858 0 0.16489 0.041992 0.2595 0.89463 0.16489 0.052947 0.26767 0 0.021776 3.7188e-06 0.021315
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и ошибочные метрики предсказания. В частности, гистограмма предсказанных значений LGD показывает, что бета подход регрессии не производит U-образное распределение. Однако этот подход действительно имеет хорошую эффективность под другими метриками сообщаемой.
Товит или подвергнутая цензуре регрессия спроектированы для моделей, где ответ ограничен. Идея состоит в том, что существует базовая (скрытая) линейная модель, но что наблюдаемые значения отклика, в этом случае значения LGD, являются усеченными. В данном примере смоделируйте 0
нижняя граница (оставленный подвергнутый цензуре) использование формулы модели
с:
Параметры модели весь s и стандартное отклонение ошибки . Параметры оцениваются с помощью наибольшего правдоподобия. Смотрите раздел Local Functions, где наибольшее правдоподобие функционирует hLogLikelihoodTobitLeftCensored
задан. Формулы для левой и правой подвергнутой цензуре версии модели также включены в конце раздела Local Functions.
Подбирайте модель регрессии Товита, использующую обучающие данные и наибольшее правдоподобие. Минимизация hLogLikelihoodTobitLeftCensored
функция выполняется с ограниченным решателем fmincon
от Optimization Toolbox™. Единственное ограничение находится на параметре стандартного отклонения, таким образом что .
x0 = 0.1*ones(NumCols+1,1);
lb = -Inf*ones(NumCols+1,1);
lb(end) = 1e-6; % Sigma must be positive
objFunctionTobit = @(x)(-hLogLikelihoodTobitLeftCensored(x,XTrain,data.LGD(TrainingInd)));
[Estimate,~,~,~,~,~,Hessian] = fmincon(objFunctionTobit,x0,[],[],[],[],lb);
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
Estimate = Estimate(:); ModelParametersTobit = array2table(Estimate,... "RowNames",[ColumnNames {'Sigma'}],"VariableNames",{'Estimate'}); ModelParametersTobit.StdError = sqrt(diag(inv(Hessian))); ModelParametersTobit.DF = size(XTrain,1)*ones(length(Estimate),1); ModelParametersTobit.T = Estimate./ModelParametersTobit.StdError; ModelParametersTobit.PValue = 2*(1-tcdf(abs(ModelParametersTobit.T),ModelParametersTobit.DF)); ModelParametersTobit.ConfidenceInterval = Estimate+ModelParametersTobit.StdError*[-1.96 1.96]; disp(ModelParametersTobit)
Estimate StdError DF T PValue ConfidenceInterval _________ _________ ____ _______ __________ _____________________ Intercept 0.057338 0.016935 2093 3.3857 0.00072298 0.024145 0.09053 LTV 0.20031 0.020679 2093 9.687 0 0.15978 0.24085 Age -0.094065 0.0084168 2093 -11.176 0 -0.11056 -0.077568 Type 0.10072 0.016953 2093 5.9412 3.3044e-09 0.067492 0.13395 Sigma 0.28835 0.006901 2093 41.783 0 0.27482 0.30187
Выполните предсказание с тестовыми данными. Для предсказания можно было думать о применении формулы Товита непосредственно, устанавливая шумовые сроки . Однако, потому что шумовой термин в макс. операторе, это не совпадало бы с фактическим ожидаемым значением LGD в соответствии с этой моделью: . Когда ожидание взято, различная формула закрытой формы получена. На самом деле существует две возможности для ожидаемых значений, обычно раньше предсказывал модели Товита, каждый - условное выражение, и каждый является безусловным. hPredictTobitLeftCensored
функция реализовывает приложение прямой формулы , а также, условные и безусловные ожидания (использующий дополнительный третий вход). По умолчанию функция выполняет предсказание с безусловным ожиданием. Смотрите раздел Local Functions для деталей.
dataLGDPredicted.Tobit = hPredictTobitLeftCensored(Estimate,XTest); disp(head(dataLGDPredicted))
Observed GroupMeans Regression Beta Tobit _________ __________ __________ ________ ________ 0.0064766 0.066068 0.00091169 0.093695 0.087026 0.007947 0.12166 0.0036758 0.14915 0.12275 0.063182 0.25977 0.18774 0.35262 0.31806 0 0.066068 0.0010877 0.096434 0.092504 0.10904 0.16489 0.011213 0.18858 0.16539 0 0.16489 0.041992 0.2595 0.22152 0.89463 0.16489 0.052947 0.26767 0.23471 0 0.021776 3.7188e-06 0.021315 0.010055
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и ошибку предсказания с различными метриками. Как с бета регрессией, гистограмма предсказанных значений LGD для модели Товита не имеет U-образного распределения, но это занимает место хорошо по сравнению с другими моделями.
2D подготовьте модели LGD, отдельные случай без потерь (LGD, равный 0
) от случаев с фактическими потерями (LGD, больше, чем 0
) и создайте две модели. Модель этапа 1 является моделью классификации, чтобы предсказать, будет ли ссуда иметь положительный LGD. Этап 2 моделирует модель типа регрессии, чтобы предсказать фактический LGD, когда LGD, как ожидают, будет положителен. Предсказание является ожидаемым значением двух объединенных моделей, которое является продуктом вероятности наличия потери (предсказание этапа 1) времена ожидаемое значение LGD (предсказание этапа 2).
В этом примере модель логистической регрессии используется для этапа 1. Подготовьте два, регрессия на преобразовании логита положительных данных LGD. Более сложные модели могут использоваться для этапа 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 обычно сообщают с помощью тестовых данных.
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 использование только обучающих данных с положительным LGD. Это - тот же тип модели, используемой ранее в разделе Regression, однако, на этот раз это адаптировано с помощью только наблюдения от обучающих данных с положительным LGDs.
dataLGDPositive = data(TrainingInd&IndLGDPositive,{'LTV','Age','Type','LGDTruncated'}); dataLGDPositive.LGDTransform = log(dataLGDPositive.LGDTruncated./(1-dataLGDPositive.LGDTruncated)); mdl2 = fitlm(dataLGDPositive,"LGDTransform ~ 1 + LTV + Age + Type"); disp(mdl2)
Linear regression model: LGDTransform ~ 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.
% Predict in the transformed space and apply inverse logit to recover the % LGD prediction for stage 2 PredictedLGDPositive = predict(mdl2,data(TestInd,:)); PredictedLGDPositive = 1./(1+exp(-PredictedLGDPositive)); % 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 Beta Tobit TwoStage _________ __________ __________ ________ ________ _________ 0.0064766 0.066068 0.00091169 0.093695 0.087026 0.020038 0.007947 0.12166 0.0036758 0.14915 0.12275 0.034025 0.063182 0.25977 0.18774 0.35262 0.31806 0.2388 0 0.066068 0.0010877 0.096434 0.092504 0.022818 0.10904 0.16489 0.011213 0.18858 0.16539 0.060072 0 0.16489 0.041992 0.2595 0.22152 0.097685 0.89463 0.16489 0.052947 0.26767 0.23471 0.11142 0 0.021776 3.7188e-06 0.021315 0.010055 0.0003689
Раздел Model Comparison в конце этого примера имеет более подробное сравнение всех моделей, которое включает визуализацию и ошибочные метрики предсказания. Этот подход также занимает место хорошо по сравнению с другими моделями, и гистограмма предсказанных значений LGD показывает высокие частоты около 0
.
Чтобы оценить эффективность моделей LGD, различные метрики обычно используются. Одна метрика является R-squared линейной подгонки, регрессирующей наблюдаемые значения LGD на ожидаемых значениях. Вторая метрика является некоторой корреляцией или статистической величиной рангового порядка; этот пример использует корреляцию Копьеносца. Для ошибки предсказания среднеквадратическая ошибка (RMSE) является общей метрикой. Кроме того, простая метрика, о которой иногда сообщают, является различием между средним значением LGD в обучающих данных и средним значением LGD предсказаний. Об этих четырех метриках сообщают ниже, сортируют путем уменьшения значений R-squared.
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) = mean(dataLGDPredicted.(ModelNames{ii}))-meanLGDTest; 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.085498 0.42224 0.23685 0.032766 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
Для конкретного обучения по сравнению с тестовым разделом, используемым в этом примере, модель 2D этапа имеет самый высокий R-squared, несмотря на то, что для других разделов, у Товита есть самое высокое значение R-squared. Даже при том, что средний подход группы не имеет высокого значения R-squared, он обычно имеет самую маленькую демонстрационную среднюю погрешность (среднее значение предсказанных значений LGD минус средний LGD в тестовых данных). Средние значения группы также конкурентоспособны для метрики RMSE.
Сообщите о производительности модели один подход за один раз, включая визуализацию. Отобразите метрики для выбранной модели.
ModelSelected = "TwoStage";
disp (PerformanceMetrics (ModelSelected, :))
RSquared Spearman RMSE SampleMeanError ________ ________ _______ _______________ TwoStage 0.090814 0.41987 0.24197 -0.060619
Постройте подгонку регрессии (наблюдал LGD по сравнению с предсказанным LGD), который является общим визуальным инструментом, чтобы оценить производительность модели. R-squared, о котором сообщают выше, является R-squared этой регрессии. График показывает существенное количество ошибки для всех моделей. Хорошей прогнозной модели определили бы местоположение точек в основном по диагонали и не была бы рассеяна на всем протяжении модульного квадрата. Однако метрики выше действительно показывают некоторые различия в прогнозирующей эффективности для различных моделей, которые могут быть важными на практике.
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 и предсказания. Рабочий процесс в этом примере может быть адаптирован, чтобы далее анализировать модели, обсужденные здесь или реализовать и подтвердить другие подходы моделирования. Этот пример может быть расширен, чтобы выполнить более полное сравнение моделей LGD (см., например [3] и [4]).
Пример может также быть расширен, чтобы выполнить анализ перекрестной проверки, чтобы или протестировать альтернативных моделей в сравнении с эталоном или подстроить гиперпараметры. Например, лучшие пороговые значения для средних значений группы могли быть выбраны с помощью перекрестной проверки, или альтернативные преобразования значений отклика LGD (логит, пробит) могли быть протестированы в сравнении с эталоном, чтобы выбрать тот с лучшей эффективностью. Этим примером может также быть начальная точка, чтобы выполнить backtesting анализ с помощью несвоевременных данных; смотрите, например [5].
[1] Baesens, B., Д. Рош и Х. Шеул. Аналитика кредитного риска. Вайли, 2016.
[2] Джонстон Росс, E. и Л. Шибут. "Что управляет потерей, данной значение по умолчанию? Доказательство от кредитов коммерческой недвижимости в банках-банкротах". Федеральная корпорация страхования депозитов, сосредоточьтесь для финансового исследования, рабочего документа 2015-03, март 2015.
[3] Литий, P., С. Чжан и С. Чжао. "Моделируя потерю, данную значение по умолчанию. "Федеральная корпорация страхования депозитов, центр финансового исследования, рабочего документа 2018-03, июль 2018.
[4] Лотермен, G. i. Браун, D. Куницы, К. Муес и Б. Бэезенс. "Тестируя Алгоритмов Регрессии в сравнении с эталоном за Потерю, Данную Моделирование Значения по умолчанию". Международный журнал Прогнозирования. Издание 28, № 1, стр 161–170, 2012.
[5] Лотермен, G., М. Дебруин, К. Вэнден Брэнден, Т. ван Джестель и К. Муес. "Предложенная Среда за Потерю Backtesting, Данную Модели По умолчанию". Журнал Проверки допустимости модели Риска. Издание 8, № 1, стр 69-90, март 2014.
[6] Tanoue, Y. и С. Ямасита. "Потеря, Данная Оценку По умолчанию: Модель 2D Этапа с Классификацией Основанная на дереве Логистическая регрессия Вектора Повышения и Поддержки". Журнал Риска. Издание 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
Логарифмическая вероятность Товита
Функция логарифмической правдоподобности задана как
где:
Другими словами, для неподвергнутых цензуре случаев (LGD> 0), нормальная функция плотности (normpdf
) дает вероятность, тогда как для подвергнутых цензуре случаев (LGD = 0, или в более общем плане LGD <= 0), это - кумулятивная функция распределения (normcdf
) это задает вероятность. Для получения дополнительной информации смотрите, например [1].
function llf = hLogLikelihoodTobitLeftCensored(Params,X,LGD) Params = Params(:); beta = Params(1:end-1); sigma = Params(end); Y = X*beta; LeftCensored = LGD==0; lf = zeros(size(Y)); lf(~LeftCensored) = normpdf(LGD(~LeftCensored),Y(~LeftCensored),sigma); lf(LeftCensored) = normcdf(0,Y(LeftCensored),sigma); llf = sum(log(lf)); end
Предсказание Товита
Определение модели Товита имеет два случая: когда LGD является нулем, и когда это положительно. Безусловное ожидаемое значение затем
Ожидание в первом сроке является нулем. Используя предположение нормальности на остаточном члене, вторым сроком можно управлять, чтобы показать, что безусловным ожидаемым значением LGD дают
Иногда, условное ожидаемое значение (условное выражение на LGD> 0) используется. Формула является почти тем же самым, за исключением фактора вероятности.
Функция помощника hPredictTobitLeftCensored
позволяет вам выбирать между безусловными или условными ожидаемыми значениями. Это также поддерживает расчет значения LGD с помощью основной формулы Товита .
function lgdPredicted = hPredictTobitLeftCensored(Params,X,Type) if nargin < 3 Type = 'unconditional'; end Params = Params(:); beta = Params(1:end-1); if strcmpi(Type,'formula') lgdPredicted = max(0,X*beta); else sigma = Params(end); YStd = X*beta/sigma; phiYStd = normpdf(YStd); PhiYStd = normcdf(YStd); if strcmpi(Type,'unconditional') lgdPredicted = PhiYStd.*(X*beta+sigma*(phiYStd./PhiYStd)); elseif strcmpi(Type,'conditional') lgdPredicted = X*beta+sigma*(phiYStd./PhiYStd); end end end
Модель Товита с обоими левые и правые контуры
Функция правдоподобия имеет третий случай. В общем случае, если левое граничное значение является L (0
в этом примере), и правильное граничное значение является R (1
в этом примере), функцией правдоподобия дают:
Для предсказания деривации ожидаемого значения LGD должны рассмотреть возможность, что LGD находится на правильном контуре. Можно показать, что безусловное ожидаемое значение может быть вычислено можно следующим образом:
где:
Условное ожидание .