Кредитный рейтинг путем укладывания в мешки деревьев решений

В этом примере показано, как создать автоматизированный инструмент кредитного рейтинга.

Одна из основных задач в управлении кредитным риском состоит в том, чтобы присвоить класс кредита заемщику. Классы используются, чтобы оценить клиентов согласно их воспринятой кредитоспособности: лучшие классы означают менее опасных клиентов; подобные классы означают подобный уровень риска. Классы существуют двух категорий: кредитные рейтинги и кредитные рейтинги. Кредитные рейтинги являются небольшим количеством дискретных классов, обычно помечаемых буквами, такими как 'AAA', 'BB -', и так далее. Кредитные рейтинги являются числовыми классами такой как '640' или '720'. Классы кредита являются одним из основных элементов в нормативных базах, таких как Базель II (см. Базельский Комитет по Банковскому надзору [3]).

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

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

В этом примере показано, как MATLAB® может помочь с автоматизированным этапом процесса кредитного рейтинга. В частности, этот пример использует в своих интересах одно из статистических средств обучения, легко доступных в Statistics and Machine Learning Toolbox™, алгоритм классификации, известный как сложенное в мешок дерево решений.

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

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

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

Загрузка существующих данных о кредитном рейтинге

Загрузите исторические данные от разделенного текстового файла запятой CreditRating_Historical.dat. Этот пример работает с текстовыми файлами, но если у вас есть доступ к Database Toolbox™, можно загрузить эту информацию непосредственно от базы данных.

Набор данных содержит финансовые отношения, отрасль промышленности и кредитные рейтинги для списка корпоративных клиентов. Это симулировано, не действительные данные. Первый столбец является идентификатором клиента. Затем существует пять столбцов финансовых отношений. Это те же отношения, используемые в z-счете Олтмена (см. Олтмена [1]; см. также Loeffler и Posch [4] для связанного анализа).

  • Оборотный капитал / Общая стоимость имущества (WC_TA)

  • Нераспределенная прибыль / Общая стоимость имущества (RE_TA)

  • Доход Перед Интересами и Налогами / Общая стоимость имущества (EBIT_TA)

  • Рыночная стоимость Акции / Балансовая стоимость Общей суммы долга (MVE_BVTD)

  • Продажи / Общая стоимость имущества (S_TA)

Затем существует метка отрасли промышленности, целочисленное значение в пределах от 1 к 12. Последнему столбцу присвоили кредитный рейтинг клиенту.

Загрузите данные в table массив.

creditDS = readtable('CreditRating_Historical.dat');

Скопируйте функции в матричный X, и соответствующие классы, оценки, в векторный Y. Это не необходимый шаг, поскольку вы могли получить доступ к этой информации непосредственно от dataset или table массив, но этот пример делает это здесь, чтобы упростить некоторые повторные вызовы функции ниже.

Функции, чтобы храниться в матричном X пять финансовых отношений и промышленная метка. Industry категориальная переменная, номинал на самом деле, потому что нет никакого упорядоченного расположения в отраслях промышленности. Переменная отклика, кредитные рейтинги, является также категориальной, хотя это - порядковая переменная, потому что по определению оценки подразумевают рейтинг кредитоспособности. Этот пример использует эту переменную как есть, "" чтобы обучить классификатор. Эта переменная копируется в порядковый массив, потому что этот путь выходные параметры выходят в естественном порядке оценок и легче читать. Упорядоченное расположение оценок устанавливается массивом ячеек, который передается в качестве третьего аргумента в определении Y. Кредитные рейтинги могут также быть сопоставлены в числовые значения, которые могут быть полезными, чтобы попробовать альтернативные методы, чтобы анализировать данные (например, регрессия). Всегда рекомендуется попробовать различные методы на практике.

X = [creditDS.WC_TA creditDS.RE_TA creditDS.EBIT_TA creditDS.MVE_BVTD...
     creditDS.S_TA creditDS.Industry];
Y = ordinal(creditDS.Rating);

Используйте предикторы X и ответ Y соответствовать конкретному типу ансамбля классификации вызвало сложенное в мешок дерево решений. "Укладывание в мешки", в этом контексте, обозначает "агрегацию начальной загрузки". Методология состоит в генерации многих подвыборок или копий начальной загрузки, от набора данных. Эти подвыборки случайным образом сгенерированы, произведя с заменой из списка клиентов в наборе данных. Для каждой копии выращено дерево решений. Каждое дерево решений является обученным классификатором самостоятельно и могло использоваться в изоляции, чтобы классифицировать новых клиентов. Предсказания двух деревьев, выращенных от двух различных копий начальной загрузки, могут отличаться, все же. Ансамбль агрегировал предсказания всех деревьев решений, которые выращены для всех копий начальной загрузки. Если большинство деревьев предсказывает один конкретный класс для нового клиента, разумно полагать что предсказание быть более устойчивым, чем предсказание одного только любого одного дерева. Кроме того, если различный класс предсказан меньшим набором деревьев, та информация полезна, также. На самом деле пропорция деревьев, которые предсказывают различные классы, является базисом для классификационных оценок, о которых сообщает ансамбль при классификации новых данных.

Построение древовидного мешконасыпателя

Первый шаг, чтобы создать ансамбль классификации должен будет найти хороший листовой размер для отдельных деревьев; здесь пример пробует размеры 1, 5, и 10. (См. документацию Statistics and Machine Learning Toolbox для больше на TreeBagger.) Запускаются с небольшого количества деревьев, 25 только, потому что вы в основном хотите сравнить начальный тренд по ошибке классификации для различных листовых размеров. Для воспроизводимости и справедливых сравнений, повторно инициализируйте генератор случайных чисел, который используется к выборке с заменой из данных, каждый раз, когда вы создаете классификатор.

leaf = [1 5 10];
nTrees = 25;
rng(9876,'twister');
savedRng = rng; % Save the current RNG settings

color = 'bgr';
for ii = 1:length(leaf)
   % Reinitialize the random number generator, so that the
   % random samples are the same for each leaf size
   rng(savedRng)
   % Create a bagged decision tree for each leaf size and plot out-of-bag
   % error 'oobError'
   b = TreeBagger(nTrees,X,Y,'OOBPrediction','on',...
                             'CategoricalPredictors',6,...
                             'MinLeafSize',leaf(ii));
   plot(oobError(b),color(ii))
   hold on
end
xlabel('Number of grown trees')
ylabel('Out-of-bag classification error')
legend({'1', '5', '10'},'Location','NorthEast')
title('Classification Error for Different Leaf Sizes')
hold off

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

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

Затем узнайте, важны ли все функции для точности классификатора. Сделайте это путем включения меры по важности функции (OOBPredictorImportance), и график результаты визуально найти самые важные функции. Теперь попробуйте большее число деревьев и сохраните ошибку классификации для дальнейших сравнений ниже.

nTrees = 50;
leaf = 10;
rng(savedRng);
b = TreeBagger(nTrees,X,Y,'OOBPredictorImportance','on',...
                          'CategoricalPredictors',6,...
                          'MinLeafSize',leaf);

bar(b.OOBPermutedPredictorDeltaError)
xlabel('Feature number')
ylabel('Out-of-bag feature importance')
title('Feature importance results')

oobErrorFullX = oobError(b);

Функции 2, 4 и 6 выделитесь от остальных. Покажите 4, рыночная стоимость акции / балансовая стоимость общей суммы долга (MVE_BVTD), самый важный предиктор для этого набора данных. Это отношение тесно связано с предикторами кредитоспособности в структурных моделях, таково как модель [5] Мертона, где значение акции фирмы сравнивается со своим неуплаченным долгом, чтобы определить вероятность по умолчанию.

Информация об отрасли промышленности, покажите 6 (Industry), также относительно более важно, чем другие переменные, чтобы оценить кредитоспособность фирмы для этого набора данных.

Несмотря на то, что не столь важный как MVE_BVTD, покажите 2, нераспределенная прибыль / общая стоимость имущества (RE_TA), выделяется от остальных. Существует корреляция между нераспределенной прибылью и возрастом фирмы (чем дольше фирма существовала, тем больше дохода это может накопить, в целом), и в свою очередь возраст фирмы коррелируется к ее кредитоспособности (более старые фирмы склонны, более вероятно, выживать в трудные времена).

Соответствуйте новому ансамблю классификации, использующему только предикторы RE_TA, MVE_BVTD, и Industry. Сравните его ошибку классификации с предыдущим классификатором, который использует все функции.

X = [creditDS.RE_TA creditDS.MVE_BVTD creditDS.Industry];

rng(savedRng)
b = TreeBagger(nTrees,X,Y,'OOBPrediction','on',...
                          'CategoricalPredictors',3,...
                          'MinLeafSize',leaf);

oobErrorX246 = oobError(b);

plot(oobErrorFullX,'b')
hold on
plot(oobErrorX246,'r')
xlabel('Number of grown trees')
ylabel('Out-of-bag classification error')
legend({'All features', 'Features 2, 4, 6'},'Location','NorthEast')
title('Classification Error for Different Sets of Predictors')
hold off

Точность классификации не ухудшается значительно, когда вы удаляете функции с относительно низкой важностью (1, 3, и 5), таким образом, вы будете использовать более экономный ансамбль классификации для предсказаний.

Этот пример, начатый с набора только шести функций и используемый мера по важности функции классификатора и ошибка классификации из сумки как критерии, чтобы отфильтровать три из переменных. Выбор признаков может быть трудоемким процессом, когда начальный набор потенциальных предикторов содержит десятки переменных. Помимо инструментов, используемых здесь (переменная важность и "визуальное" сравнение ошибок из сумки), другие инструменты выбора переменной в Statistics and Machine Learning Toolbox могут быть полезными для этих типов исследований. Однако в конце, успешный процесс выбора признаков требует комбинации количественных инструментов и решения аналитика.

Например, переменной мерой по важности, используемой здесь, является занимающий место механизм, который оценивает относительный удар функции путем измерения, сколько ухудшает прогнозирующая точность классификатора, когда значения этой функции случайным образом переставлены. Идея состоит в том, что, когда рассматриваемая функция добавляет мало в предсказательную силу классификатора, с помощью измененный (в этом случае переставленный) значения не должны влиять на результаты классификации. Релевантная информация, с другой стороны, не может быть случайным образом подкачана, не ухудшая предсказания. Теперь, если две очень коррелированых функции будут важны, они оба займут место высоко в этом анализе. В этом случае хранение одной из этих функций должно быть достаточным для точных классификаций, но вы не знали бы это от одних только занимающих место результатов. Необходимо было бы проверять корреляции отдельно или использовать решение эксперта. То есть инструменты как переменная важность или sequentialfs может значительно помочь для выбора признаков, но суждение аналитика является основной частью в этом процессе.

На данном этапе классификатор мог быть сохранен (например, save classifier.mat b), чтобы загрузиться на будущем сеансе (load classifier) классифицировать новых клиентов. Для КПД рекомендуется сохранить компактную версию классификатора, если учебный процесс закончен.

b = compact(b);

Классификация новых данных

Используйте ранее созданный ансамбль классификации, чтобы присвоить кредитные рейтинги новым клиентам. Поскольку оценки существующих клиентов должны быть рассмотрены также регулярно, особенно когда их финансовая информация существенно изменилась, набор данных мог также содержать список существующих рассматривающихся клиентов. Запустите путем загрузки новых данных.

newDS = readtable('CreditRating_NewCompanies.dat');

Чтобы предсказать кредитный рейтинг для этих новых данных, вызовите predict метод на классификаторе. Метод возвращает два аргумента, предсказанный класс и классификационную оценку. Вы, конечно, хотите получить оба выходных аргумента, поскольку классификационные оценки содержат информацию о том, как бесспорный предсказанные оценки, кажется. Вы могли скопировать переменные RE_TA, MVE_BVTD и Industry в матричный X, как прежде, но поскольку вы выполните только один вызов к predict, можно пропустить этот шаг и использовать newDS непосредственно.

[predClass,classifScore] = predict(b,[newDS.RE_TA newDS.MVE_BVTD newDS.Industry]);

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

for i = 1:3
   fprintf('Customer %d:\n',newDS.ID(i));
   fprintf('   RE/TA    = %5.2f\n',newDS.RE_TA(i));
   fprintf('   MVE/BVTD = %5.2f\n',newDS.MVE_BVTD(i));
   fprintf('   Industry = %2d\n',newDS.Industry(i));
   fprintf('   Predicted Rating : %s\n',predClass{i});
   fprintf('   Classification score : \n');
   for j = 1:length(b.ClassNames)
      if (classifScore(i,j)>0)
         fprintf('      %s : %5.4f \n',b.ClassNames{j},classifScore(i,j));
      end
   end
end
Customer 60644:
   RE/TA    =  0.22
   MVE/BVTD =  2.40
   Industry =  6
   Predicted Rating : AA
   Classification score : 
      A : 0.2349 
      AA : 0.7519 
      AAA : 0.0011 
      BBB : 0.0121 
Customer 33083:
   RE/TA    =  0.24
   MVE/BVTD =  1.51
   Industry =  4
   Predicted Rating : BBB
   Classification score : 
      A : 0.1060 
      BBB : 0.8940 
Customer 63830:
   RE/TA    =  0.18
   MVE/BVTD =  1.69
   Industry =  7
   Predicted Rating : A
   Classification score : 
      A : 0.6305 
      AA : 0.0172 
      AAA : 0.0010 
      BBB : 0.3513 

Ведение учета предсказанных оценок и соответствующих баллов может быть полезно для периодических оценок качества классификатора. Можно хранить эту информацию в table массив predDS.

classnames = b.ClassNames;
predDS = [table(newDS.ID,predClass),array2table(classifScore)];
predDS.Properties.VariableNames = {'ID','PredRating',classnames{:}};

Эта информация могла быть сохранена, например, к разделенному текстовому файлу запятой PredictedRatings.dat использование команды

  writetable(predDS,'PredictedRatings.dat');

или записанный непосредственно в базу данных с помощью Database Toolbox.

Обратное тестирование: профилирование процесса классификации

Валидация или тестирование спины являются процессом профилирования или оценки качества кредитных рейтингов. Существует много различных мер и тестов, связанных с этой задачей (см., например, Базельский Комитет по Банковскому надзору [2]). Здесь, этот пример фокусируется на следующих двух вопросах:

  • Насколько точный предсказанные оценки, по сравнению с фактическими оценками? Здесь "предсказанные оценки" относится к полученным из автоматизированного процесса классификации, и "фактических оценок" к присвоенным кредитным комитетом, который соединяет предсказанные оценки и их классификационные оценки и другие данные, такие как новости и состояние экономики, чтобы определить итоговую оценку.

  • Как хорошо фактические оценки оценивают клиентов согласно своей кредитоспособности? Это сделано в фактическом выполняемом анализе, например, один год спустя, когда он известен, какие компании приняли значение по умолчанию в течение года.

Файл CreditRating_ExPost.dat содержит "развивают" данные по тем же компаниям, рассмотренным в предыдущем разделе. Это содержит фактические оценки, которые комитет присвоил этим компаниям, а также "флагу по умолчанию", который указывает, приняла ли соответствующая компания значение по умолчанию в течение одного года после процесса оценки (если 1) или не (если 0).

exPostDS = readtable('CreditRating_ExPost.dat');

Сравнение предсказанных оценок по сравнению с фактическими оценками. Объяснение, чтобы обучить автоматизированный классификатор должно ускорить работу кредитного комитета. Чем более точны предсказанные оценки, тем меньше времени комитет имеет, чтобы потратить рассмотрение предсказанных оценок. Таким образом, возможно, что комитет хочет иметь регулярные проверки о том, как тесно предсказанные оценки совпадают с итоговыми оценками, которые они присваивают, и рекомендовать переобучить автоматизированный классификатор (и возможно включать новые возможности, например), если несоответствие кажется касающимся.

Первый инструмент, который можно использовать, чтобы выдержать сравнение предсказанный по сравнению с фактическими оценками, является матрицей беспорядка, легко доступной в Statistics and Machine Learning Toolbox:

C = confusionchart(exPostDS.Rating,predDS.PredRating);
sortClasses(C,{'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'})

Строки соответствуют фактическим оценкам и столбцам к предсказанным оценкам. Сумма в положении (i,j) в беспорядке матрица указывает, сколько клиентов получило фактическую оценку i и были предсказаны как оценка j. Например, положение (3,2) говорит нам, сколько клиентов получило оценку кредитным комитетом, но было предсказано как 'AA' с автоматизированным классификатором. Можно также представить эту матрицу в проценте. Нормируйте каждое значение на количество наблюдений, которое имеет ту же истинную оценку.

C.Normalization = 'row-normalized';

Хорошее соглашение между предсказанным и фактическими оценками привело бы к значениям в основной диагонали, которые доминируют над остальной частью значений подряд, идеально значения близко к 1. В этом случае можно на самом деле видеть важное разногласие для 'B', приблизительно начиная с половины клиентов, которые были оценены, когда 'B' кредитным комитетом был предсказан как 'BB' автоматизированным классификатором. С другой стороны, хорошо видеть, что оценки отличаются по самое большее одной метке в большинстве случаев за единственным исключением 'BBB'.

Матрица беспорядка могла также использоваться, чтобы сравнить внутренние оценки, присвоенные учреждением против сторонних оценок; это часто делается на практике.

Для каждой определенной оценки можно вычислить еще одну меру соглашения между предсказанными и фактическими оценками. Можно создать кривую Рабочей характеристики приемника (ROC) с помощью perfcurve функция из Statistics and Machine Learning Toolbox и проверка область под кривой (AUC). perfcurve функционируйте берет в качестве аргумента для фактических оценок, который является сравнительным тестом, стандарт, который вы сравниваете с, и классификационные оценки 'BBB', определенные автоматизированным процессом. Создайте ROC и вычислите AUC для оценки 'BBB' в этом примере.

[xVal,yVal,~,auc] = perfcurve(exPostDS.Rating,predDS.BBB,'BBB');
plot(xVal,yVal)
xlabel('False positive rate')
ylabel('True positive rate')
text(0.5,0.25,strcat('AUC=',num2str(auc)),'EdgeColor','k')
title('ROC curve BBB, predicted vs. actual rating')

Вот объяснение того, как ROC создается. Вспомните, что для каждого клиента автоматизированный классификатор возвращает классификационную оценку для каждого из кредитных рейтингов, в частности, для 'BBB', который может быть интерпретирован как, с какой вероятностью случается так, что этот конкретный клиент должен быть оценен 'BBB'. Для того, чтобы создать кривую ROC, необходимо варьироваться порог классификации. Таким образом, минимальный счет, чтобы классифицировать клиента как 'BBB'. Другими словами, если порогом является t, вы только классифицируете клиентов как 'BBB', если их счет 'BBB' больше или равен t. Например, предположите, что компания XYZ имела счет 'BBB' 0,87. Если фактическая оценка XYZ (информация в exPostDS.Rating) 'BBB', затем XYZ был бы правильно классифицирован как 'BBB' для любого порога до 0,87. Это было бы положительной истиной, и она увеличит то, что называется чувствительностью классификатора. Для любого порога, больше, чем 0,87, эта компания не получила бы оценку 'BBB', и у вас будет ложный отрицательный случай. Чтобы завершить описание, предположите теперь, когда фактическая оценка XYZ является 'BB'. Затем это было бы правильно отклонено как 'BBB' для порогов больше чем 0,87, став истинным отрицанием, и таким образом увеличив так называемую специфику классификатора. Однако для порогов до 0,87, это стало бы положительной ложью (это будет классифицировано как 'BBB', когда это на самом деле будет 'BB'). Кривая ROC создается путем графического вывода пропорции истинных положительных сторон (чувствительность), по сравнению с ложными положительными сторонами (1 специфика), когда порог варьируется от 0 к 1.

AUC, как его имя указывает, является областью под кривой ROC. Ближе AUC к 1, более точное классификатор (совершенный классификатор имел бы AUC 1). В этом примере AUC кажется достаточно высоким, но это было бы до комитета, чтобы решить, какой уровень AUC для оценок должен инициировать рекомендацию улучшить автоматизированный классификатор.

Сравнение фактических оценок по сравнению со значениями по умолчанию в следующем году. Общий инструмент, используемый, чтобы оценить рейтинг клиентов, неявных в кредитных рейтингах, является Совокупным профилем точности (CAP) и связанной мерой по отношению точности. Идея состоит в том, чтобы измерить отношение между присвоенными кредитными рейтингами и количество значений по умолчанию, наблюдаемых в следующем году. Можно было бы ожидать, что меньше значений по умолчанию наблюдается для лучших классов оценки. Если бы уровень по умолчанию был тем же самым для всех оценок, система оценки не отличалась бы от наивного (и бесполезный) система классификации, в которой клиенты были случайным образом присвоены оценка, независимо от их кредитоспособности.

Не трудно видеть что perfcurve функция может также использоваться, чтобы создать ДНО. Стандарт, сравненный с, не является оценкой, как прежде, но флаг по умолчанию, который загружается от CreditRating_ExPost.dat файл. Счет, который вы используете, является "фиктивным счетом", который указывает на рейтинг в кредитоспособности, неявной в списке оценок. Фиктивный счет только должен удовлетворить этому, лучшие оценки получают более низкие фиктивные баллы (у них, "менее вероятно, будет флаг по умолчанию 1"), и что любые два клиента с той же оценкой получают тот же фиктивный счет. Вероятность по умолчанию могла быть передана как счет, конечно, но у вас нет вероятностей по умолчанию здесь, и на самом деле у вас не должно быть оценок вероятностей по умолчанию, чтобы создать ДНО, потому что вы не подтверждаете вероятности по умолчанию. Все, что этот пример оценивает с этим инструментом, - то, как хорошо оценки оценивают клиентов согласно своей кредитоспособности.

Обычно, ДНО системы оценки на рассмотрении построено вместе с ДНОМ "совершенной системы оценки". Последний является гипотетической системой кредитного рейтинга, для которой самая низкая оценка включает всех нарушителей и никаких других клиентов. Областью под этой совершенной кривой является максимальный возможный AUC, достижимый системой оценки. Условно, AUC настроен для ЗАГЛАВНЫХ БУКВ, чтобы вычесть область под ДНОМ наивной системы, то есть, ДНОМ системы, которая случайным образом присваивает оценки клиентам. ДНО наивной системы является просто прямой линией от источника до (1,1), с AUC 0.5. Отношение точности для системы оценки затем задано как отношение настроенного AUC (AUC системы в факторе минус AUC наивной системы) с максимальной точностью (AUC совершенной системы минус AUC наивной системы).

ratingsList = {'AAA' 'AA' 'A' 'BBB' 'BB' 'B' 'CCC'};
Nratings = length(ratingsList);
dummyDelta = 1/(Nratings+1);
dummyRank = linspace(dummyDelta,1-dummyDelta,Nratings)';

D = exPostDS.Def_tplus1;
fracTotDef = sum(D)/length(D);
maxAcc = 0.5 - 0.5 * fracTotDef;

R = double(ordinal(exPostDS.Rating,[],ratingsList));
S = dummyRank(R);
[xVal,yVal,~,auc] = perfcurve(D,S,1);

accRatio = (auc-0.5)/maxAcc;
fprintf('Accuracy ratio for actual ratings: %5.3f\n',accRatio);
Accuracy ratio for actual ratings: 0.850
xPerfect(1) = 0; xPerfect(2) = fracTotDef; xPerfect(3) = 1;
yPerfect(1) = 0; yPerfect(2) = 1; yPerfect(3) = 1;
xNaive(1) = 0; xNaive(2) = 1;
yNaive(1) = 0; yNaive(2) = 1;

plot(xPerfect,yPerfect,'--k',xVal,yVal,'b',xNaive,yNaive,'-.k')
xlabel('Fraction of all companies')
ylabel('Fraction of defaulted companies')
title('Cumulative Accuracy Profile')
legend({'Perfect','Actual','Naive'},'Location','SouthEast')
text(xVal(2)+0.01,yVal(2)-0.01,'CCC')
text(xVal(3)+0.01,yVal(3)-0.02,'B')
text(xVal(4)+0.01,yVal(4)-0.03,'BB')

Ключ к чтению информации ДНА находится в "петлях", помеченных в графике для оценок 'CCC', 'B' и 'BB'. Например, вторая петля сопоставлена со второй самой низкой оценкой, 'B', и это расположено в (0.097, 0.714). Это означает, что 9,7% клиентов оценивался 'B' или ниже, и они составляют 71,4% наблюдаемых значений по умолчанию.

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

Rpred = double(ordinal(predDS.PredRating,[],ratingsList));
Spred = dummyRank(Rpred);
[xValPred,yValPred,~,aucPred] = perfcurve(D,Spred,1);

accRatioPred = (aucPred-0.5)/maxAcc;
fprintf('Accuracy ratio for predicted ratings: %5.3f\n',accRatioPred);
Accuracy ratio for predicted ratings: 0.811
plot(xPerfect,yPerfect,'--k',xVal,yVal,'b',xNaive,yNaive,'-.k',...
   xValPred,yValPred,':r')
xlabel('Fraction of all companies')
ylabel('Fraction of defaulted companies')
title('Cumulative Accuracy Profile')
legend({'Perfect','Actual','Naive','Predicted'},'Location','SouthEast')

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

Итоговые комментарии

MATLAB предлагает широкий спектр инструментов машинного обучения помимо сложенных в мешок деревьев решений, которые могут использоваться в контексте кредитного рейтинга. В Statistics and Machine Learning Toolbox можно найти инструменты классификации, такие как дискриминантный анализ и наивные классификаторы Байеса. MATLAB также предлагает Deep Learning Toolbox™. Кроме того, Database Toolbox и Deployment Tool MATLAB могут предоставить вам больше гибкости, чтобы адаптировать рабочий процесс, представленный здесь вашим собственным настройкам и потребностям.

Никакие вероятности значения по умолчанию не были вычислены здесь. Для кредитных рейтингов вероятности значения по умолчанию обычно вычисляются на основе истории миграции кредитного рейтинга. Смотрите transprob (Financial Toolbox) страница с описанием в Financial Toolbox™ для получения дополнительной информации.

Библиография

[1] Олтмен, E. "Финансовые Отношения, Дискриминантный анализ и Предсказание Корпоративного Банкротства". Журнал Финансов. Издание 23, № 4, (сентябрь 1968), стр 589-609.

[2] Базельский Комитет по Банковскому надзору. "Исследования Валидации Внутренних систем оценки". Банк международных расчетов (BIS), Рабочие документы № 14, исправленная версия, май 2005. Доступный в: https://www.bis.org/publ/bcbs_wp14.htm.

[3] Базельский Комитет по Банковскому надзору. "Международная Сходимость Измерения капитала и Стандартов капитала: Пересмотренная Среда". Банк международных расчетов (BIS), всесторонняя версия, июнь 2006. Доступный в: https://www.bis.org/publ/bcbsca.htm.

[4] Loeffler, G. и П. Н. Пош. Credit Risk Modeling Using Excel и VBA. Западный Сассекс, Англия: финансы Вайли, 2007.

[5] Мертон, R. "На Оценке Корпоративного Долга: Структура Риска Процентных ставок". Журнал Финансов. Издание 29, № 2, (май 1974), стр 449-70.