Визуализируйте данные о переходах для transprob

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

Выборочные данные

Настройте фиктивные выборочные данные в целях рисунка.

data = {'ABC',datetime('17-Feb-2015','Locale','en_US'),'AA';
    'ABC',datetime('6-Jul-2017','Locale','en_US'),'A';
    'LMN',datetime('12-Aug-2014','Locale','en_US'),'B';
    'LMN',datetime('9-Nov-2015','Locale','en_US'),'CCC';
    'LMN',datetime('7-Sep-2016','Locale','en_US'),'D';
    'XYZ',datetime('14-May-2013','Locale','en_US'),'BB';
    'XYZ',datetime('21-Jun-2016','Locale','en_US'),'BBB'};
data = cell2table(data,'VariableNames',{'ID','Date','Rating'});
disp(data)
     ID         Date        Rating
    _____    ___________    ______

    'ABC'    17-Feb-2015    'AA'  
    'ABC'    06-Jul-2017    'A'   
    'LMN'    12-Aug-2014    'B'   
    'LMN'    09-Nov-2015    'CCC' 
    'LMN'    07-Sep-2016    'D'   
    'XYZ'    14-May-2013    'BB'  
    'XYZ'    21-Jun-2016    'BBB' 

Функция transprob понимает, что этот формат данных панели указывает на даты, когда новая оценка присвоена данной компании. transprob принимает, что такие оценки остаются неизменными, если последующая строка явным образом не указывает на изменение оценки. Например, для компании 'ABC', transprob понимает, что оценка 'A' неизменна для любой даты после '6-Jul-2017' (неопределенно).

Вычислите количества матрицы и перехода перехода

Функция transprob возвращает матрицу вероятности перехода как первичный вывод. Существуют также дополнительные выходные параметры, которые содержат дополнительную информацию для того, сколько переходов произошло. Для получения дополнительной информации смотрите transprob для получения информации о дополнительных выходных параметрах и для 'cohort' и для методов 'duration'.

В целях рисунка этот пример позволяет вам выбирать год Запуска (ограниченный 2014 или 2015 для этого примера) и год Конца (2016 или 2017). Этот пример также использует функцию помощника hDisplayTransitions (см. раздел "Local Functions") отформатировать информацию о переходах для простоты чтения.

StartYear = 2014;
EndYear = 2017;
startDate = datetime(StartYear,12,31);
endDate = datetime(EndYear,12,31);
RatingLabels = ["AAA","AA","A","BBB","BB","B","CCC","D"];

[tm,st,it] = transprob(data,'startDate',startDate,'endDate',endDate,'algorithm','cohort','labels',RatingLabels);

Вероятности перехода TransMat вывод указывают на вероятность миграции между оценками. Вероятности выражаются в %, то есть, они умножаются на 100.

hDisplayTransitions(tm,RatingLabels,"Transition Matrix")
Transition Matrix

           AAA    AA     A     BBB    BB    B    CCC     D 
           ___    __    ___    ___    __    _    ___    ___

    AAA    100     0      0      0     0    0      0      0
    AA       0    50     50      0     0    0      0      0
    A        0     0    100      0     0    0      0      0
    BBB      0     0      0    100     0    0      0      0
    BB       0     0      0     50    50    0      0      0
    B        0     0      0      0     0    0    100      0
    CCC      0     0      0      0     0    0      0    100
    D        0     0      0      0     0    0      0    100

Количества перехода хранятся в sampleTotals дополнительный вывод и указывают, сколько переходов произошло между оценками для целой выборки (то есть, все компании).

hDisplayTransitions(st.totalsMat,RatingLabels,"Transition counts, all companies")
Transition counts, all companies

           AAA    AA    A    BBB    BB    B    CCC    D
           ___    __    _    ___    __    _    ___    _

    AAA     0     0     0     0     0     0     0     0
    AA      0     1     1     0     0     0     0     0
    A       0     0     0     0     0     0     0     0
    BBB     0     0     0     1     0     0     0     0
    BB      0     0     0     1     1     0     0     0
    B       0     0     0     0     0     0     1     0
    CCC     0     0     0     0     0     0     0     1
    D       0     0     0     0     0     0     0     1

Третьим выводом transprob является idTotals, который содержит информацию о переходах на уровне ID, компании компанией (в том же порядке, что компании появляются во входных данных).

Выберите компанию, чтобы отобразить количества перехода и соответствующую визуализацию переходов. Функция помощника hPlotTransitions (см. раздел "Local Functions") показывает историю переходов для компании.

CompanyID = "ABC";
UniqueIDs = unique(data.ID,'stable');
[~,CompanyIndex] = ismember(CompanyID,UniqueIDs);
hDisplayTransitions(it(CompanyIndex).totalsMat,RatingLabels,strcat("Transition counts, company ID: ",CompanyID))
Transition counts, company ID: ABC

           AAA    AA    A    BBB    BB    B    CCC    D
           ___    __    _    ___    __    _    ___    _

    AAA     0     0     0     0     0     0     0     0
    AA      0     1     1     0     0     0     0     0
    A       0     0     0     0     0     0     0     0
    BBB     0     0     0     0     0     0     0     0
    BB      0     0     0     0     0     0     0     0
    B       0     0     0     0     0     0     0     0
    CCC     0     0     0     0     0     0     0     0
    D       0     0     0     0     0     0     0     0
hPlotTransitions(CompanyID,startDate,endDate,data,RatingLabels)

Чтобы понять, как transprob обрабатывает данные, когда первая наблюдаемая дата после даты начала анализа, или чей в последний раз наблюдаемая дата происходит перед датой окончания анализа, рассмотрите следующий пример. Поскольку компания 'ABC' предполагает, что анализ имеет дату начала 31-Dec-2014 и дата окончания 31-Dec-2017. Существует только два перехода, о которых сообщают для этой компании для того аналитического окна времени. Первое наблюдение для 'ABC' произошло на 17-Feb-2015. Таким образом, снимок состояния 31-Dec-2015 является первым разом, когда компания наблюдается. 31-Dec-2016 компания осталась в исходной оценке 'AA'. 31-Dec-2017 снижение к 'A' зарегистрировано. В соответствии с этим, количества перехода показывают 1 переход от 'AA' до 'AA' (от конца 2 015 в конец 2 016) и один переход от 'AA' до 'A' (от конца 2 016 в конец 2 017). График показывает последнюю оценку точечной красной линией, чтобы подчеркнуть, что последняя оценка в данных экстраполируется неопределенно в будущее. Нет никакой экстраполяции в прошлое; история компании проигнорирована, пока оценка компании не известна целым переходным периодом (31-Dec-2015 через 31-Dec-2016 в случае 'ABC').

Localfunctions

function hDisplayTransitions(TransitionsData,RatingLabels,Title)
% Helper function to format transition information outputs

TransitionsAsTable = array2table(TransitionsData,...
   'VariableNames',RatingLabels,'RowNames',RatingLabels);

fprintf('\n%s\n\n',Title)
disp(TransitionsAsTable)

end

function hPlotTransitions(CompanyID,startDate,endDate,data,RatingLabels)
% Helper function to visualize transitions between ratings

   Ind = string(data.ID)==CompanyID;
   DatesOriginal = datetime(data.Date(Ind));
   RatingsOriginal = categorical(data.Rating(Ind),flipud(RatingLabels(:)),flipud(RatingLabels(:)));
   
   stairs(DatesOriginal,RatingsOriginal,'LineWidth',2)
   hold on;

   % Indicate rating extrapolated into the future (arbitrarily select 91
   % days after endDate as the last date on the plot)
   endDateExtrap = endDate+91;
   if endDateExtrap>DatesOriginal(end)
      DatesExtrap = [DatesOriginal(end); endDateExtrap];
      RatingsExtrap = [RatingsOriginal(end); RatingsOriginal(end)];
      stairs(DatesExtrap,RatingsExtrap,'LineWidth',2,'LineStyle',':')
   end
   hold off;

   % Add lines to indicate the snapshot dates
   % |transprob| uses 1 as the default for 'snapsPerYear', hardcoded here for simplicity
   % The call to |cfdates| here generates the exact same snapshot dates that |transprob| uses
   snapsPerYear = 1;
   snapDates = cfdates(startDate-1,endDate,snapsPerYear)';
   yLimits = ylim;
   for ii=1:length(snapDates)
      line([snapDates(ii) snapDates(ii)],yLimits,'Color','m')
   end
   title(strcat("Company ID: ",CompanyID))
end
Для просмотра документации необходимо авторизоваться на сайте