Сравните модель Товита LGD с эталонной моделью

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

Разделите данные в наборы обучающих данных и наборы тестов.

NumObs = height(data);

rng('default'); % For reproducibility
c = cvpartition(NumObs,'HoldOut',0.4);
TrainingInd = training(c);
TestInd = test(c);

Подбирайте модель Товита

Соответствуйте Tobit Модель LGD с обучающими данными. По умолчанию последний столбец данных используется в качестве переменной отклика, и все другие столбцы используются в качестве переменных предикторов.

lgdModel = fitLGDModel(data(TrainingInd,:),'tobit');
disp(lgdModel)
  Tobit with properties:

      CensoringSide: "both"
          LeftLimit: 0
         RightLimit: 1
            ModelID: "Tobit"
        Description: ""
    UnderlyingModel: [1x1 risk.internal.credit.TobitModel]
      PredictorVars: ["LTV"    "Age"    "Type"]
        ResponseVar: "LGD"
disp(lgdModel.UnderlyingModel)
Tobit regression model:
     LGD = max(0,min(Y*,1))
     Y* ~ 1 + LTV + Age + Type

Estimated coefficients:
                       Estimate        SE         tStat       pValue  
                       _________    _________    _______    __________

    (Intercept)         0.058257     0.027265     2.1367      0.032737
    LTV                  0.20126     0.031354     6.4189    1.6932e-10
    Age                -0.095407    0.0072653    -13.132             0
    Type_investment      0.10208     0.018058     5.6531    1.7915e-08
    (Sigma)              0.29288    0.0057036      51.35             0

Number of observations: 2093
Number of left-censored observations: 547
Number of uncensored observations: 1521
Number of right-censored observations: 25
Log-likelihood: -698.383

Можно теперь использовать эту модель для предсказания или валидации. Например, используйте predict предсказать LGD на тестовых данных и визуализировать предсказания с гистограммой.

lgdPredTobit = predict(lgdModel,data(TestInd,:));
histogram(lgdPredTobit)
title('Predicted LGD, Tobit Model')
xlabel('Predicted LGD')
ylabel('Frequency')

Figure contains an axes object. The axes object with title Predicted LGD, Tobit Model contains an object of type histogram.

Создайте эталонную модель

В этом примере эталонная модель является моделью интерполяционной таблицы, которая сегментирует данные на группы и присваивает средний LGD группы ко всем элементам группы. На практике этот общий подход сравнительного тестирования легко изучить и использовать.

Группы в этом примере заданы с помощью этих трех предикторов. LTV дискретизируется в низкие уровни и высокий уровень. Age дискретизируется в молодые и старые кредиты. Type уже имеет два уровня, а именно, жилой и инвестиции. Группы являются всеми комбинациями этих значений (например, низкий LTV, молодая ссуда, жилая, и так далее). Количество уровней и определенных пределов только в целях рисунка. Эталонная модель использует те же предикторы в качестве Tobit модель в этом примере, но можно использовать другие переменные, чтобы задать группы. На самом деле эталонная модель могла быть моделью черного ящика, пока предсказанные значения LGD доступны тем же клиентам как в этом наборе данных.

% Add the discretized variables as new colums in the table.
% Discretize the LTV.
LTVEdges = [0 0.5 max(data.LTV)];
data.LTVDiscretized = discretize(data.LTV,LTVEdges,'Categorical',{'low','high'});
% Discretize the Age.
AgeEdges = [0 2 max(data.Age)];
data.AgeDiscretized = discretize(data.Age,AgeEdges,'Categorical',{'young','old'});
% Type is already a categorical variable with two levels.

Нахождение средних значений группы на обучающих данных является эффективно подбором кривой модели. Обратите внимание на то, что количества группы малы для некоторых групп. Добавление многих групп идет с уменьшаемыми счетами группы для некоторых групп и более нестабильных оценок.

% Find the group means on training data.
gs = groupsummary(data(TrainingInd,:),{'LTVDiscretized','AgeDiscretized','Type'},'mean','LGD');
disp(gs)
    LTVDiscretized    AgeDiscretized       Type        GroupCount    mean_LGD
    ______________    ______________    ___________    __________    ________

         low              young         residential        163        0.12166
         low              young         investment          26       0.087331
         low              old           residential        175       0.021776
         low              old           investment          23        0.16379
         high             young         residential       1134        0.16489
         high             young         investment         257        0.25977
         high             old           residential        265       0.066068
         high             old           investment          50        0.11779

Чтобы предсказать LGD для нового наблюдения, необходимо найти его группу и затем присвоить среднее значение группы как предсказанный LGD. Используйте findgroups функция, которая берет дискретизированные переменные, как введено. Для абсолютно новой точки данных, LTV и Age информация должна быть дискретизирована сначала при помощи discretize функция, прежде чем вы будете использовать findgroups функция.

LGDGroup = findgroups(data(TestInd,{'LTVDiscretized' 'AgeDiscretized' 'Type'}));
lgdPredMeansTest = gs.mean_LGD(LGDGroup);

Существует восемь уникальных значений в предсказаниях, как ожидалось, один для каждой группы.

disp(unique(lgdPredMeansTest))
    0.0218
    0.0661
    0.0873
    0.1178
    0.1217
    0.1638
    0.1649
    0.2598

Гистограмма предсказаний также показывает дискретную природу модели.

histogram(lgdPredMeansTest)
title('Predicted LGD, Tobit Model')
xlabel('Predicted LGD')
ylabel('Frequency')

Figure contains an axes object. The axes object with title Predicted LGD, Tobit Model contains an object of type histogram.

Чтобы иметь все предсказания в наличии и для наборов обучающих данных и для наборов тестов, чтобы сделать сравнения, добавьте столбец с предсказаниями LGD для целого набора данных.

LGDGroup = findgroups(data(:,{'LTVDiscretized' 'AgeDiscretized' 'Type'}));
data.lgdPredMeans = gs.mean_LGD(LGDGroup);

Сравните эффективность

Сравните эффективность модели Товита и эталонной модели с помощью функций валидации в Tobit модель.

Начните с области под кривой рабочей характеристики приемника (ROC) или метрики AUROC, с помощью modelDiscrimination.

DataSetChoice = "Testing";
if DataSetChoice =="Training"
    Ind = TrainingInd;
else
    Ind = TestInd;
end

DiscMeasure = modelDiscrimination (lgdModel, данные (Ind, :),'ReferenceLGD', data.lgdPredMeans (Ind),'ReferenceID','Group Means')
DiscMeasure=2×1 table
                    AUROC 
                   _______

    Tobit          0.67986
    Group Means    0.61251

Используйте modelDiscriminationPlot визуализировать кривую ROC.

modelDiscriminationPlot(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means')

Figure contains an axes object. The axes object with title ROC Tobit, AUROC = 0.67986 Group Means, AUROC = 0.61251 contains 2 objects of type line. These objects represent Tobit, Group Means.

Используйте modelAccuracy вычислить метрики точности.

AccMeasure = modelAccuracy(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means')
AccMeasure=2×4 table
                   RSquared     RMSE      Correlation    SampleMeanError
                   ________    _______    ___________    _______________

    Tobit           0.08527    0.23712      0.29201         -0.034412   
    Group Means    0.041622     0.2406      0.20401        -0.0078124   

Используйте modelAccuracyPlot визуализировать график рассеивания наблюдаемых значений LGD против предсказанных значений LGD.

modelAccuracyPlot(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means')

Figure contains an axes object. The axes object with title Scatter Tobit, R-Squared: 0.08527 Group Means, R-Squared: 0.041622 contains 4 objects of type scatter, line. These objects represent Data, Tobit, Fit, Tobit, Data, Group Means, Fit, Group Means.

Затем можно использовать modelAccuracyPlot визуализировать график рассеивания предсказанных значений LGD против значений LTV.

modelAccuracyPlot(lgdModel,data(Ind,:),'ReferenceLGD',data.lgdPredMeans(Ind),'ReferenceID','Group Means','XData','LTV','YData','predicted')

Figure contains an axes object. The axes object with title Scatter Tobit, R-Squared: 0.33027 Group Means, R-Squared: 0.16852 contains 4 objects of type scatter, line. These objects represent Data, Tobit, Fit, Tobit, Data, Group Means, Fit, Group Means.

Смотрите также

| | | | | | |

Связанные примеры

Больше о