exponenta event banner

Сравнение модели Tobit 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.027276     2.1358      0.032809
    LTV                  0.20126     0.031373      6.415    1.7363e-10
    Age                -0.095407    0.0072543    -13.152             0
    Type_investment      0.10208     0.018054     5.6542    1.7802e-08
    (Sigma)              0.29288     0.005704     51.346             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. The axes 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. The axes 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 и эталонной модели с помощью функций проверки в Tobit модель.

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

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

DiscMeasure = modelDiscrimination(lgdModel,data(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. The axes 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. The axes 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. The axes 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.

См. также

| | | | | | |

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

Подробнее