transprobВ этом примере показано, как визуализировать переходы кредитного рейтинга, которые используются в качестве входа к transprob функция. Пример также описывает как transprob функционируйте обработки, оценивающие переходы, когда данные компании запускаются после даты начала анализа, или когда дата окончания анализа - после того, как последний переход наблюдал.
Настройте фиктивные выборочные данные в целях рисунка.
data = {'ABC','17-Feb-2015','AA';
'ABC','6-Jul-2017','A';
'LMN','12-Aug-2014','B';
'LMN','9-Nov-2015','CCC';
'LMN','7-Sep-2016','D';
'XYZ','14-May-2013','BB';
'XYZ','21-Jun-2016','BBB'};
data = cell2table(data,'VariableNames',{'ID','Date','Rating'});
disp(data) ID Date Rating
_______ _______________ _______
{'ABC'} {'17-Feb-2015'} {'AA' }
{'ABC'} {'6-Jul-2017' } {'A' }
{'LMN'} {'12-Aug-2014'} {'B' }
{'LMN'} {'9-Nov-2015' } {'CCC'}
{'LMN'} {'7-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' методы.
В целях рисунка этот пример позволяет вам выбирать StartYear (ограниченный 2014 или 2015 для этого примера) и EndYear(2016 или 2017). Этот пример также использует hDisplayTransitions функция помощника (см. раздел Local Functions) отформатировать информацию о переходах для простоты чтения.
StartYear =2014; EndYear =
2017; startDate = datetime (StartYear, 12,31,'Locale','en_US'); endDate = datetime (EndYear, 12,31,'Locale','en_US'); RatingLabels = ["AAA","AA","A","BBB","BB","B","CCC","D"]; [TM, Св., это] = transprob (данные,'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 = уникальный (data.ID,'stable'); [~, CompanyIndex] = ismember (CompanyID, UniqueIDs); hDisplayTransitions (это (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' зарегистрирован. В соответствии с этим, количества перехода показывают один переход от 'AA' к 'AA' (от конца 2 015 в конец 2 016), и один переход от 'AA' к 'A' (от конца 2 016 в конец 2 017). График показывает последнюю оценку точечной красной линией, чтобы подчеркнуть, что последняя оценка в данных экстраполируется неопределенно в будущее. Нет никакой экстраполяции в прошлое; история компании проигнорирована, пока оценка компании не известна целым переходным периодом (31-Dec-2015 через 31-Dec-2016 в случае 'ABC').
NR (Не расчетный) оценкаРассмотрите различные выборочные данные, содержащие только одну компанию 'DEF'. Данные содержат переходы компании 'DEF' от 'A' к 'NR' оценка и последующий переход от 'NR' к 'BBB'.
dataNR = {'DEF','17-Mar-2011','A';
'DEF','24-Mar-2014','NR';
'DEF','26-Sep-2016','BBB'};
dataNR = cell2table(dataNR,'VariableNames',{'ID','Date','Rating'});
disp(dataNR) ID Date Rating
_______ _______________ _______
{'DEF'} {'17-Mar-2011'} {'A' }
{'DEF'} {'24-Mar-2014'} {'NR' }
{'DEF'} {'26-Sep-2016'} {'BBB'}
transprob обработки 'NR' как другая оценка. Матрица перехода ниже показов предполагаемая вероятность перехода в и из 'NR'.
StartYearNR = 2010; EndYearNR = 2018; startDateNR = datetime(StartYearNR,12,31,'Locale','en_US'); endDateNR = datetime(EndYearNR,12,31,'Locale','en_US'); CompanyID_NR = "DEF"; RatingLabelsNR = ["AAA","AA","A","BBB","BB","B","CCC","D","NR"]; [tmNR,~,itNR] = transprob(dataNR,'startDate',startDateNR,'endDate',endDateNR,'algorithm','cohort','labels',RatingLabelsNR); hDisplayTransitions(tmNR,RatingLabelsNR,"Transition Matrix")
Transition Matrix
AAA AA A BBB BB B CCC D NR
___ ___ ______ ___ ___ ___ ___ ___ ______
AAA 100 0 0 0 0 0 0 0 0
AA 0 100 0 0 0 0 0 0 0
A 0 0 66.667 0 0 0 0 0 33.333
BBB 0 0 0 100 0 0 0 0 0
BB 0 0 0 0 100 0 0 0 0
B 0 0 0 0 0 100 0 0 0
CCC 0 0 0 0 0 0 100 0 0
D 0 0 0 0 0 0 0 100 0
NR 0 0 0 50 0 0 0 0 50
Отобразите количества перехода и соответствующую визуализацию переходов.
hDisplayTransitions(itNR.totalsMat,RatingLabelsNR,strcat("Transition counts, company ID: ",CompanyID_NR))Transition counts, company ID: DEF
AAA AA A BBB BB B CCC D NR
___ __ _ ___ __ _ ___ _ __
AAA 0 0 0 0 0 0 0 0 0
AA 0 0 0 0 0 0 0 0 0
A 0 0 2 0 0 0 0 0 1
BBB 0 0 0 2 0 0 0 0 0
BB 0 0 0 0 0 0 0 0 0
B 0 0 0 0 0 0 0 0 0
CCC 0 0 0 0 0 0 0 0 0
D 0 0 0 0 0 0 0 0 0
NR 0 0 0 1 0 0 0 0 1
hPlotTransitions(CompanyID_NR,startDateNR,endDateNR,dataNR,RatingLabelsNR)

Удалить 'NR' из матрицы перехода используйте 'excludeLabels' входной параметр значения имени в transprob. Список меток, чтобы исключить может или не может быть задан в аргументе пары "имя-значение" labels. Например, оба RatingLabels и RatingLabelsNR сгенерируйте тот же выход от transprob.
[tmNR,stNR,itNR] = transprob(dataNR,'startDate',startDateNR,'endDate',endDateNR,'algorithm','cohort','labels',RatingLabelsNR,'excludeLabels','NR'); hDisplayTransitions(tmNR,RatingLabels,"Transition Matrix")
Transition Matrix
AAA AA A BBB BB B CCC D
___ ___ ___ ___ ___ ___ ___ ___
AAA 100 0 0 0 0 0 0 0
AA 0 100 0 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 0 100 0 0 0
B 0 0 0 0 0 100 0 0
CCC 0 0 0 0 0 0 100 0
D 0 0 0 0 0 0 0 100
Отобразите количества перехода и соответствующую визуализацию переходов.
hDisplayTransitions(itNR.totalsMat,RatingLabels,strcat("Transition counts, company ID: ",CompanyID_NR))Transition counts, company ID: DEF
AAA AA A BBB BB B CCC D
___ __ _ ___ __ _ ___ _
AAA 0 0 0 0 0 0 0 0
AA 0 0 0 0 0 0 0 0
A 0 0 2 0 0 0 0 0
BBB 0 0 0 2 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_NR,startDateNR,endDateNR,dataNR,RatingLabels)

В соответствии с предыдущим графиком, количества перехода все еще показывают два перехода от 'A' к 'A' (от конца 2 012 в конец 2 014), и два перехода от 'BBB' к 'BBB' (от конца 2 017 в конец 2 019).
Однако отличающийся от предыдущего графика, задавая 'NR' использование 'excludeLabels' входной параметр значения имени transprob удаляет любые переходы в и из 'NR' оценка.
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),'Locale','en_US'); 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 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