В этом примере показано, как сравнить модели потери, данной значение по умолчанию (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
Гистограмма значений LGD для этого набора данных показывает значительное количество значений в или около 0
(полное восстановление) и только относительно небольшая часть значений в или около 1
(общая сумма убытков).
histogram(data.LGD) xlabel('LGD') ylabel('Frequency') title('LGD Histogram')
Сравните три Tobit
Модели LGD путем варьирования выбора стороны цензурирования между тремя поддерживаемыми опциями ("both"
, "left"
, и "right"
). Для получения дополнительной информации смотрите 'CensoringSide'
аргумент значения имени для Tobit
объект.
Используйте cvpartition
функция, чтобы сгенерировать случайные разделы на данных для перекрестной проверки k-сгиба. Для каждого раздела соответствуйте Tobit
модель на обучающих данных с каждой из опций стороны цензурирования и затем получает две метрики валидации с помощью тестовых данных. Этот пример использует метрики валидации для области под кривой рабочей характеристики приемника (AUROC) и метрику R-squared. Для получения дополнительной информации смотрите modelDiscrimination
и modelAccuracy
.
NumFolds = 10; rng('default'); % For reproducibility c = cvpartition(height(data),'KFold',NumFolds); ModelCensoringSide = ["both" "left" "right"]; NumModels = length(ModelCensoringSide); AUROC = zeros(NumFolds,NumModels); RSquared = zeros(NumFolds,NumModels); for ii=1:NumFolds fprintf('Fitting models, fold %d\n',ii); % Get the partition indices. TrainInd = training(c,ii); TestInd = test(c,ii); % For each model, fit with training data, measure with test data. for jj=1:NumModels % Fit the model with training data. lgdModel = fitLGDModel(data(TrainInd,:),'Tobit','CensoringSide',ModelCensoringSide(jj)); % Measure the model discrimination on test data. DiscMeasure = modelDiscrimination(lgdModel,data(TestInd,:)); AUROC(ii,jj) = DiscMeasure.AUROC; % Measure the model accuracy on test data. AccMeasure = modelAccuracy(lgdModel,data(TestInd,:)); RSquared(ii,jj) = AccMeasure.RSquared; end end
Fitting models, fold 1 Fitting models, fold 2 Fitting models, fold 3 Fitting models, fold 4 Fitting models, fold 5 Fitting models, fold 6 Fitting models, fold 7 Fitting models, fold 8 Fitting models, fold 9 Fitting models, fold 10
Визуализируйте результаты для выбранной метрики для этих трех моделей рядом друг с другом.
SelectedMetric = "R-squared"; if SelectedMetric =="AUROC" PlotData = AUROC; else PlotData = RSquared; end панель (1:NumFolds, PlotData) xlabel'Fold') ylabel (SelectedMetric) заголовок'Validation Metric by Fold') легенда (ModelCensoringSide,'Location','southeast') сетка on
Значения AUROC для этих трех моделей сопоставимы через сгибы, указывая, что три версии модели эффективно разделяют низкий LGD и высокие случаи LGD.
Относительно точности метрика R-squared является низкой для этих трех моделей. Однако "right"
подвергнутая цензуре модель показывает более низкую метрику R-squared, чем другие две модели через сгибы. Наблюдаемые данные LGD имеют много наблюдений в или около 0
(общее восстановление). Чтобы улучшить точность моделей, включайте явный предел в 0
при цензурировании на "left"
и на "both"
стороны.
fitLGDModel
| predict
| modelDiscrimination
| modelDiscriminationPlot
| modelAccuracy
| modelAccuracyPlot
| Regression
| Tobit