Этот пример показывает, как сравнить модель Tobit для потерь по умолчанию (LGD) с эталонной моделью.
Загрузите данные 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
Разделите данные на обучающие и тестовые наборы.
NumObs = height(data); rng('default'); % For reproducibility c = cvpartition(NumObs,'HoldOut',0.4); TrainingInd = training(c); TestInd = test(c);
Подбор Tobit
LGD- модели с обучающими данными. По умолчанию последний столбец данных используется как переменная отклика, а все другие столбцы используются как переменные предиктора.
lgdModel = fitLGDModel(data(TrainingInd,:),'tobit');
disp(lgdModel)
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(lgdModel.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
Теперь можно использовать эту модель для предсказания или валидации. Для примера используйте predict
чтобы предсказать LGD на тестовых данных и визуализировать предсказания с помощью гистограммы.
lgdPredTobit = predict(lgdModel,data(TestInd,:)); histogram(lgdPredTobit) title('Predicted LGD, Tobit Model') xlabel('Predicted LGD') ylabel('Frequency')
В этом примере эталонная модель является моделью интерполяционной таблицы, которая сегментирует данные в группы и присваивает среднее значение LGD группы всем представителям группы. На практике такой общий подход к бенчмаркингу легко понять и использовать.
Группы в этом примере определяются с помощью трех предикторов. LTV
дискретизируется на низкие и высокие уровни. Age
дискретизируется в молодые и старые кредиты. Type
уже имеет два уровня, а именно: жилой и инвестиционный. Все группы являются комбинациями этих значений (для примера, низкого LTV, молодого кредита, жилого и так далее). Количество уровней и определенные точки отсечения предназначены только для рисунка. Эталонная модель использует те же предикторы, что и Tobit
модель в этом примере, но для определения групп можно использовать другие переменные. Фактически, эталонная модель может быть моделью черного ящика, пока предсказанные значения LGD доступны для тех же клиентов, что и в этом наборе данных.
% Add the discretized variables as new colums in the table. % Discretize the LTV. LTVEdges = [0 0.5 max(data.LTV)]; data.LTVDiscretized = discretize(data.LTV,LTVEdges,'Categorical',{'low','high'}); % Discretize the Age. AgeEdges = [0 2 max(data.Age)]; data.AgeDiscretized = discretize(data.Age,AgeEdges,'Categorical',{'young','old'}); % Type is already a categorical variable with two levels.
Нахождение групповых средств на обучающих данных эффективно является подбором кривой модели. Обратите внимание, что счетчики группы малы для некоторых групп. Добавление многих групп происходит с уменьшенным количеством групп для некоторых групп и более нестабильными оценками.
% Find the 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 для нового наблюдения, необходимо найти его группу и затем назначить среднее значение группы в качестве предсказанного LGD. Используйте findgroups
функция, которая принимает дискретизированные переменные как вход. Для совершенно новой точки данных, LTV
и Age
сначала необходимо дискретизировать информацию при помощи discretize
функция перед использованием findgroups
функция.
LGDGroup = findgroups(data(TestInd,{'LTVDiscretized' 'AgeDiscretized' 'Type'})); lgdPredMeansTest = gs.mean_LGD(LGDGroup);
В предсказаниях, как и ожидалось, восемь уникальных значений по одному для каждой группы.
disp(unique(lgdPredMeansTest))
0.0218 0.0661 0.0873 0.1178 0.1217 0.1638 0.1649 0.2598
Гистограмма предсказаний также показывает дискретный характер модели.
histogram(lgdPredMeansTest) title('Predicted LGD, Tobit Model') xlabel('Predicted LGD') ylabel('Frequency')
Чтобы обеспечить доступность всех предсказаний как для обучения, так и для тестовых наборов для сравнения, добавьте столбец с предсказаниями LGD для всего набора данных.
LGDGroup = findgroups(data(:,{'LTVDiscretized' 'AgeDiscretized' 'Type'})); data.lgdPredMeans = gs.mean_LGD(LGDGroup);
Сравните эффективность модели Tobit и эталонной модели с помощью функций валидации в Tobit
модель.
Начните с области под кривым приемником рабочей характеристики (ROC) или метрикой AUROC, используя modelDiscrimination
.
DataSetChoice = "Testing"; if DataSetChoice = ="Training" Ind = TrainingInd; else Ind = TestInd; end DiscMeasure = modelDiscription (lgdModel, данные (Ind,:),'ReferenceLGD', data.lgdPredMeans (Ind),'ReferenceID','Group Means')
DiscMeasure=2×1 table
AUROC
_______
Tobit 0.67986
Group Means 0.61251
Использование modelDiscriminationPlot
для визуализации кривой ROC.
modelDiscriminationPlot(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means')
Использование modelAccuracy
для вычисления метрик точности.
AccMeasure = modelAccuracy(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means')
AccMeasure=2×4 table
RSquared RMSE Correlation SampleMeanError
________ _______ ___________ _______________
Tobit 0.08527 0.23712 0.29201 -0.034412
Group Means 0.041622 0.2406 0.20401 -0.0078124
Использование modelAccuracyPlot
визуализация графика поля точек наблюдаемых значений LGD по предсказанным значениям LGD.
modelAccuracyPlot(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means')
Тогда можно использовать modelAccuracyPlot
визуализация графика поля точек прогнозируемых значений LGD по значениям LTV.
modelAccuracyPlot(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means','XData','LTV','YData','predicted')
fitLGDModel
| modelAccuracy
| modelAccuracyPlot
| modelDiscrimination
| modelDiscriminationPlot
| predict
| Regression
| Tobit