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