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