В этом примере показано, как сравнить модель Товита для потери, данной значение по умолчанию (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
модель.
Начните с области под кривой рабочей характеристики приемника (ROC) или метрики AUROC, с помощью modelDiscrimination
.
DataSetChoice = "Testing"; if DataSetChoice =="Training" Ind = TrainingInd; else Ind = TestInd; end DiscMeasure = modelDiscrimination (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