В этом примере показано, как сравнивать модели потерь, заданные по умолчанию (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-квадратичной метрики. Дополнительные сведения см. в разделе 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 bar(1:NumFolds,PlotData) xlabel('Fold') ylabel(SelectedMetric) title('Validation Metric by Fold') legend(ModelCensoringSide,'Location','southeast') grid on

Значения AUROC для трех моделей сопоставимы по складкам, что указывает на то, что три версии модели эффективно разделяют случаи низкого LGD и высокого LGD.
Что касается точности, R-квадрат метрики является низким для трех моделей. Однако "right" цензурированная модель показывает более низкую R-квадратную метрику, чем две другие модели по складкам. Наблюдаемые данные LGD имеют много наблюдений на или вблизи 0 (общее восстановление). Чтобы повысить точность моделей, включите явный предел в 0 при цензуре на "left" и на "both" стороны.
fitLGDModel | modelAccuracy | modelAccuracyPlot | modelDiscrimination | modelDiscriminationPlot | predict | Regression | Tobit