В этом примере показано, как сравнить модель Тобита для потерь по умолчанию (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 = modelDiscrimination(lgdModel,data(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