Сравнение моделей потерь по умолчанию с использованием перекрестной валидации

В этом примере показано, как сравнить модели потерь по умолчанию (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')

Figure contains an axes. The axes with title LGD Histogram contains an object of type histogram.

Перекрестная валидация моделей

Сравните три Tobit Модели LGD путем изменения выбора стороны цензуры между тремя поддерживаемыми опциями ("both", "left", и "right"). Для получения дополнительной информации смотрите 'CensoringSide' аргумент имя-значение для Tobit объект.

Используйте cvpartition функция для генерации случайных разбиений на данные для перекрестной валидации k-fold. Для каждого раздела подбирайте Tobit модель на обучающих данных с каждой из сторон цензуры опций а затем получите две метрики валидации с помощью тестовых данных. Этот пример использует метрики валидации для области под приемником кривой рабочей характеристики (AUROC) и метрикой R-квадрат. Для получения дополнительной информации смотрите 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

Figure contains an axes. The axes with title Validation Metric by Fold contains 3 objects of type bar. These objects represent both, left, right.

Значения AUROC для трех моделей сопоставимы между складками, что указывает на то, что три версии модели эффективно разделяют случаи с низким LGD и высоким LGD.

Что касается точности, метрика R-квадрат низка для трех моделей. Однако "right" цензурированная модель показывает более низкую метрику R-квадрат, чем две другие модели через складки. Наблюдаемые данные LGD имеют много наблюдений на или вблизи 0 (полное восстановление). Чтобы улучшить точность моделей, включите явный предел на 0 при цензуре на "left" и на "both" стороны.

См. также

| | | | | | |

Похожие примеры

Подробнее о