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