exponenta event banner

transprob

Оценка вероятностей перехода на основе данных кредитных рейтингов

Описание

пример

[transMat,sampleTotals,idTotals] = transprob(data) создает матрицу перехода из исторических данных кредитных рейтингов.

пример

[transMat,sampleTotals,idTotals] = transprob(___,Name,Value) добавляет необязательные аргументы пары имя-значение.

Примеры

свернуть все

Использование таблицы исторических кредитных рейтингов в качестве входных данных из Data_TransProb.mat отобразите первые десять строк и вычислите матрицу перехода:

load Data_TransProb
data(1:10,:)
ans=10×3 table
         ID              Date          Rating 
    ____________    _______________    _______

    {'00010283'}    {'10-Nov-1984'}    {'CCC'}
    {'00010283'}    {'12-May-1986'}    {'B'  }
    {'00010283'}    {'29-Jun-1988'}    {'CCC'}
    {'00010283'}    {'12-Dec-1991'}    {'D'  }
    {'00013326'}    {'09-Feb-1985'}    {'A'  }
    {'00013326'}    {'24-Feb-1994'}    {'AA' }
    {'00013326'}    {'10-Nov-2000'}    {'BBB'}
    {'00014413'}    {'23-Dec-1982'}    {'B'  }
    {'00014413'}    {'20-Apr-1988'}    {'BB' }
    {'00014413'}    {'16-Jan-1998'}    {'B'  }

% Estimate transition probabilities with default settings
transMat = transprob(data)
transMat = 8×8

   93.1170    5.8428    0.8232    0.1763    0.0376    0.0012    0.0001    0.0017
    1.6166   93.1518    4.3632    0.6602    0.1626    0.0055    0.0004    0.0396
    0.1237    2.9003   92.2197    4.0756    0.5365    0.0661    0.0028    0.0753
    0.0236    0.2312    5.0059   90.1846    3.7979    0.4733    0.0642    0.2193
    0.0216    0.1134    0.6357    5.7960   88.9866    3.4497    0.2919    0.7050
    0.0010    0.0062    0.1081    0.8697    7.3366   86.7215    2.5169    2.4399
    0.0002    0.0011    0.0120    0.2582    1.4294    4.2898   81.2927   12.7167
         0         0         0         0         0         0         0  100.0000

Использование исторических данных таблицы кредитных рейтингов из Data_TransProb.mat, вычислить матрицу перехода с помощью cohort алгоритм:

%Estimate transition probabilities with 'cohort' algorithm
transMatCoh = transprob(data,'algorithm','cohort')
transMatCoh = 8×8

   93.1345    5.9335    0.7456    0.1553    0.0311         0         0         0
    1.7359   92.9198    4.5446    0.6046    0.1560         0         0    0.0390
    0.1268    2.9716   91.9913    4.3124    0.4711    0.0544         0    0.0725
    0.0210    0.3785    5.0683   89.7792    4.0379    0.4627    0.0421    0.2103
    0.0221    0.1105    0.6851    6.2320   88.3757    3.6464    0.2873    0.6409
         0         0    0.0761    0.7230    7.9909   86.1872    2.7397    2.2831
         0         0         0    0.3094    1.8561    4.5630   80.8971   12.3743
         0         0         0         0         0         0         0  100.0000

Использование исторических данных кредитного рейтинга с рейтингами инвестиционного уровня ('IG'), спекулятивная оценка ('SG') и по умолчанию ('D'), от Data_TransProb.mat отобразите первые десять строк и вычислите матрицу перехода:

dataIGSG(1:10,:)
ans=10×3 table
         ID              Date          Rating
    ____________    _______________    ______

    {'00011253'}    {'04-Apr-1983'}    {'IG'}
    {'00012751'}    {'17-Feb-1985'}    {'SG'}
    {'00012751'}    {'19-May-1986'}    {'D' }
    {'00014690'}    {'17-Jan-1983'}    {'IG'}
    {'00012144'}    {'21-Nov-1984'}    {'IG'}
    {'00012144'}    {'25-Mar-1992'}    {'SG'}
    {'00012144'}    {'07-May-1994'}    {'IG'}
    {'00012144'}    {'23-Jan-2000'}    {'SG'}
    {'00012144'}    {'20-Aug-2001'}    {'IG'}
    {'00012937'}    {'07-Feb-1984'}    {'IG'}

transMatIGSG = transprob(dataIGSG,'labels',{'IG','SG','D'})
transMatIGSG = 3×3

   98.6719    1.2020    0.1261
    3.5781   93.3318    3.0901
         0         0  100.0000

Использование исторических данных кредитного рейтинга с числовыми рейтингами для инвестиционного уровня (1), спекулятивная оценка (2) и по умолчанию (3), от Data_TransProb.mat отобразите первые десять строк и вычислите матрицу перехода:

dataIGSGnum(1:10,:)
ans=10×3 table
         ID              Date          Rating
    ____________    _______________    ______

    {'00011253'}    {'04-Apr-1983'}      1   
    {'00012751'}    {'17-Feb-1985'}      2   
    {'00012751'}    {'19-May-1986'}      3   
    {'00014690'}    {'17-Jan-1983'}      1   
    {'00012144'}    {'21-Nov-1984'}      1   
    {'00012144'}    {'25-Mar-1992'}      2   
    {'00012144'}    {'07-May-1994'}      1   
    {'00012144'}    {'23-Jan-2000'}      2   
    {'00012144'}    {'20-Aug-2001'}      1   
    {'00012937'}    {'07-Feb-1984'}      1   

transMatIGSGnum = transprob(dataIGSGnum,'labels',{1,2,3})
transMatIGSGnum = 3×3

   98.6719    1.2020    0.1261
    3.5781   93.3318    3.0901
         0         0  100.0000

Использование таблицы MATLAB ®, содержащей входные данные массива ячеек с историческим кредитным рейтингом (dataCellFormat) от Data_TransProb.matоцените вероятности перехода с настройками по умолчанию.

load Data_TransProb
transMat = transprob(dataCellFormat)
transMat = 8×8

   93.1170    5.8428    0.8232    0.1763    0.0376    0.0012    0.0001    0.0017
    1.6166   93.1518    4.3632    0.6602    0.1626    0.0055    0.0004    0.0396
    0.1237    2.9003   92.2197    4.0756    0.5365    0.0661    0.0028    0.0753
    0.0236    0.2312    5.0059   90.1846    3.7979    0.4733    0.0642    0.2193
    0.0216    0.1134    0.6357    5.7960   88.9866    3.4497    0.2919    0.7050
    0.0010    0.0062    0.1081    0.8697    7.3366   86.7215    2.5169    2.4399
    0.0002    0.0011    0.0120    0.2582    1.4294    4.2898   81.2927   12.7167
         0         0         0         0         0         0         0  100.0000

Использование входных данных массива ячеек с историческим кредитным рейтингом (dataCellFormat), вычислите матрицу перехода с помощью cohort алгоритм:

%Estimate transition probabilities with 'cohort' algorithm
transMatCoh = transprob(dataCellFormat,'algorithm','cohort')
transMatCoh = 8×8

   93.1345    5.9335    0.7456    0.1553    0.0311         0         0         0
    1.7359   92.9198    4.5446    0.6046    0.1560         0         0    0.0390
    0.1268    2.9716   91.9913    4.3124    0.4711    0.0544         0    0.0725
    0.0210    0.3785    5.0683   89.7792    4.0379    0.4627    0.0421    0.2103
    0.0221    0.1105    0.6851    6.2320   88.3757    3.6464    0.2873    0.6409
         0         0    0.0761    0.7230    7.9909   86.1872    2.7397    2.2831
         0         0         0    0.3094    1.8561    4.5630   80.8971   12.3743
         0         0         0         0         0         0         0  100.0000

В этом примере показано, как визуализировать переходы кредитного рейтинга, которые используются в качестве входных данных для 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 вспомогательная функция (см. раздел Локальные функции) для форматирования информации о переходах для удобства чтения.

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,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 содержит информацию о переходах на уровне идентификатора, компания за компанией (в том же порядке, в котором компании отображаются во входных данных).

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

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)

Figure contains an axes. The axes with title Company ID: ABC contains 6 objects of type stair, line.

Чтобы понять, как 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' (с конца 2015 года по конец 2016 года), и один переход с 'AA' кому 'A' (с конца 2016 по конец 2017). Сюжет показывает последний рейтинг как пунктирную красную линию, чтобы подчеркнуть, что последний рейтинг в данных экстраполирован бесконечно в будущее. Экстраполяция в прошлое отсутствует; история компании игнорируется до тех пор, пока рейтинг компании не станет известен за весь переходный период (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)

Figure contains an axes. The axes with title Company ID: DEF contains 11 objects of type stair, line.

Чтобы удалить '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)

Figure contains an axes. The axes with title Company ID: DEF contains 11 objects of type stair, line.

В соответствии с предыдущим графиком, количество переходов по-прежнему показывает два перехода от 'A' кому 'A' (с конца 2012 года по конец 2014 года), и два перехода от 'BBB' кому 'BBB' (с конца 2017 года по конец 2019 года).

Однако отличается от предыдущего графика, указывая '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

Входные аргументы

свернуть все

Используя transprob для оценки вероятностей перехода с учетом исторических данных кредитных рейтингов (то есть данных кредитной миграции), data ввод может быть одним из следующих:

  • Один nRecordsоколо-3 Таблица MATLAB ®, содержащая исторические данные кредитных рейтингов формы:

     ID          Date          Rating
    __________  _____________  ______
    '00010283'  '10-Nov-1984'  'CCC'
    '00010283'  '12-May-1986'  'B'
    '00010283'  '29-Jun-1988'  'CCC'
    '00010283'  '12-Dec-1991'  'D'
    '00013326'  '09-Feb-1985'  'A'
    '00013326'  '24-Feb-1994'  'AA'
    '00013326'  '10-Nov-2000'  'BBB'
    '00014413'  '23-Dec-1982'  'B'
    где каждая строка содержит идентификатор (столбец 1), дату (столбец 2) и кредитный рейтинг (столбец 3). Столбец 3 - это рейтинг, присвоенный соответствующему идентификатору на соответствующую дату. Вся информация, соответствующая одному идентификатору, должна храниться в смежных строках. Сортировка этой информации по дате не требуется, но рекомендуется для эффективности. При использовании ввода таблицы MATLAB имена столбцов не имеют значения, но предполагается, что идентификатор, дата и информация о рейтинге находятся в первом, втором и третьем столбцах соответственно. Кроме того, при использовании табличного ввода первый и третий столбцы могут быть категориальными массивами, а второй - массивом datetime. Ниже приводится сводка поддерживаемых типов данных для ввода таблицы:

    Тип ввода данныхИдентификатор (1-й столбец)Дата (2-й столбец)Оценка (3-й столбец)
    Стол

    • Числовой массив

    • Массив ячеек символьных векторов

    • Категориальный массив

    • Числовой массив

    • Массив ячеек символьных векторов

    • Массив Datetime

    • Числовой массив

    • Массив ячеек символьных векторов

    • Категориальный массив

  • Один nRecordsоколо-3 массив ячеек символьных векторов, содержащих исторические данные кредитных рейтингов вида:

    '00010283'  '10-Nov-1984'  'CCC'
    '00010283'  '12-May-1986'  'B'
    '00010283'  '29-Jun-1988'  'CCC'
    '00010283'  '12-Dec-1991'  'D'
    '00013326'  '09-Feb-1985'  'A'
    '00013326'  '24-Feb-1994'  'AA'
    '00013326'  '10-Nov-2000'  'BBB'
    '00014413'  '23-Dec-1982'  'B'
    где каждая строка содержит идентификатор (столбец 1), дату (столбец 2) и кредитный рейтинг (столбец 3). Столбец 3 - это рейтинг, присвоенный соответствующему идентификатору на соответствующую дату. Вся информация, соответствующая одному идентификатору, должна храниться в смежных строках. Сортировка этой информации по дате не требуется, но рекомендуется для эффективности. Идентификаторы, даты и рейтинги хранятся в формате символьного вектора, но также могут быть введены в числовом формате. Ниже приводится сводная информация о поддерживаемых типах данных для ввода в массив ячеек:

    Тип ввода данныхИдентификатор (1-й столбец)Дата (2-й столбец)Оценка (3-й столбец)
    Клетка

    • Числовые элементы

    • Элементы вектора символов

    • Числовые элементы

    • Элементы вектора символов

    • Числовые элементы

    • Элементы вектора символов

  • Предварительно обработанная структура данных, полученная с помощью transprobprep. Эта структура данных содержит поля'idStart', 'numericDates', 'numericRatings', и 'ratingsLabels'.

Типы данных: table | cell | struct

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: transMat = transprob(data,'algorithm','cohort')

Алгоритм оценки, определяемый как разделенная запятыми пара, состоящая из 'algorithm' и вектор символов со значением 'duration' или 'cohort'.

Типы данных: char

Дата окончания временного окна оценки, указанного как пара, разделенная запятыми, состоящая из 'endDate' и вектор символов даты, серийный номер даты или объект datetime. endDate не может быть датой до startDate.

Типы данных: char | double | datetime

Шкала кредитного рейтинга, указанная как пара, разделенная запятыми, состоящая из 'labels' и nRatingsоколо-1, или 1около-nRatings клеточный массив символьных векторов.

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

Примечание

Когда входной аргумент data является предварительно обработанной структурой данных, полученной из предыдущего вызова transprobprep, этот дополнительный вход для 'labels не используется, поскольку метки в 'ratingsLabels' поле transprobprep иметь приоритет.

Типы данных: cell

Количество снимков кредитного рейтинга в год, которые должны учитываться для оценки, указанное как пара, разделенная запятыми, состоящая из 'snapsPerYear' и числовое значение 1, 2, 3, 4, 6, или 12.

Примечание

Этот параметр используется только с 'cohort' algorithm.

Типы данных: double

Дата начала временного окна оценки, указанного как пара, разделенная запятыми, состоящая из 'startDate' и вектор символов даты, серийный номер даты или объект datetime.

Типы данных: char | double | datetime

Длина интервала перехода в годах, определяемая как разделенная запятыми пара, состоящая из 'transInterval' и числовое значение.

Типы данных: double

Метка, исключенная из вычисления вероятности перехода, указанная как разделенная запятыми пара, состоящая из 'excludeLabels' и вектор символов, строку или числовую оценку.

Если требуется исключить несколько меток, 'excludeLabels' должен быть массивом ячеек, содержащим все метки для исключения. Тип меток, указанных в 'excludeLabels' должны согласовываться с типом данных, указанным в labels вход.

Список меток для исключения может быть указан или не указан в labels.

Типы данных: double | char | string

Выходные аргументы

свернуть все

Матрица вероятностей перехода в процентах, возвращенная как nRatingsоколо-nRatings матрица перехода.

Структура с выборкой итогов, возвращенная с полями:

  • totalsVec - Вектор размера 1около-nRatings.

  • totalsMat - Матрица размера nRatingsоколо-nRatings.

  • algorithm - символьный вектор со значениями; 'duration' или 'cohort'.

Для 'duration' алгоритм, totalsMat(i, j) содержит суммарные переходы, наблюдаемые вне рейтинга i в ratingj (все диагональные элементы равны нулю). Общее время, затраченное на оценку i, хранится вtotalsVec(i). Например, если существует три категории рейтинга, инвестиционный класс (IG), Спекулятивный класс (SG) и по умолчанию (D) и следующую информацию:

Total time spent    IG       SG       D
in rating:       4859.09  1503.36  1162.05
 
Transitions             IG   SG    D
out of (row)       IG    0   89    7
into (column):     SG  202    0   32
                    D    0    0    0
Тогда
totals.totalsVec = [4859.09  1503.36  1162.05]
totals.totalsMat = [  0   89    7
                    202    0   32
                      0    0    0]
totals.algorithm = 'duration'

Для 'cohort' алгоритм, totalsMat(i, j) содержит общие переходы, наблюдаемые от рейтинга i к рейтингу j, иtotalsVeci) является первоначальным подсчетом в рейтинге I. Например, с учетом следующей информации:

Initial count       IG     SG     D
in rating:        4808   1572   1145
 
Transitions         IG     SG     D
from (row)    IG  4721     80      7
to (column):  SG   193   1347     32
               D     0      0   1145
Тогда

totals.totalsVec = [4808   1572   1145]
totals.totalsMat = [4721     80      7
                    193   1347     32
                      0      0   1145
totals.algorithm = 'cohort'

Итоговые значения идентификаторов, возвращаемые в виде массива структуры размера nIDsоколо-1, где nID - количество отдельных идентификаторов в столбце 1 data когда это таблица или массив ячеек или, эквивалентно, равна длине idStart поле минус 1, когда data является предварительно обработанной структурой данных из transprobprep. Для каждого идентификатора в образце, idTotals содержит одну структуру со следующими полями:

  • totalsVec - Разреженный вектор размера 1около-nRatings.

  • totalsMat - Разреженная матрица размера nRatingsоколо-nRatings.

  • algorithm - символьный вектор со значениями; 'duration' или 'cohort'.

В этих полях содержится та же информация, что и в выходных данных. sampleTotals, но на уровне идентификатора. Например, для 'duration', idTotals(k).totalsVec содержит общее время, которое k-я компания потратила на каждый рейтинг.

Подробнее

свернуть все

Когортная оценка

Когортный алгоритм оценивает вероятности перехода на основе последовательности снимков кредитных рейтингов в регулярно разнесенные моменты времени.

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

Оценка продолжительности

В отличие от когортного метода, алгоритм длительности оценивает вероятности перехода на основе полной истории кредитных рейтингов, просматривая точные даты, в которые происходят миграции кредитных рейтингов.

В этом методе нет концепции снимков, и все миграции кредитного рейтинга влияют на оценки, даже когда рейтинг компании меняется дважды в течение короткого времени.

Алгоритмы

свернуть все

Когортная оценка

Алгоритм сначала определяет t0,...,tK последовательности дат моментальных снимков. Прошедшее время в годах между двумя последовательными датами снимка tk-1 и tk равно 1 / ns, где ns - количество снимков в год. Эти K +1 даты определяют K переходных периодов.

Алгоритм вычисляет Nin, число переходных периодов, в которых обязывающий n начинает с рейтингом I. Они складываются по всем обязывающим, чтобы получить Ni, число должников в выборке, которые начинают период с рейтингом i. Количество периодов, в течение которых должник n начинается с рейтингом i и заканчивается рейтингом j, или мигрирует с i на j, обозначается как Nijn, также вычисляется. Они также добавляются, чтобы получить Nij, общее количество миграций от i до j в выборке.

Оценка вероятности перехода от i к j за один период, обозначаемая по Pij, равна

Пидж = НийНи

Эти вероятности расположены в однопериодической матрице перехода P0, где i, j запись в P0 является Pij.

Если количество снимков в год ns равно 4 (квартальные снимки), вероятности в P0 составляют 3-месячные (или 0,25-летние) вероятности перехода. Однако вы можете быть заинтересованы в вероятности перехода на один или два года. Последний временной интервал называется переходным интервалом Δt и используется для преобразования P0 в окончательную переходную матрицу P по формуле:

P=P0ns∗△t

Например, если ns = 4 и Δt = 2, P содержит вероятности двухлетнего перехода, оцененные по квартальным снимкам.

Примечание

Для когортного алгоритма необязательные выходные аргументы idTotals и sampleTotals от transprob содержат следующую информацию:

  • idTotals(n).totalsVec = (Nin) ∀i

  • idTotals(n).totalsMat = (Ni, jn) ∀ij

  • idTotals(n).algorithm = 'cohort'

  • sampleTotals.totalsVec = (Ni) ∀i

  • sampleTotals.totalsMat = (Ni, j) ∀ij

  • sampleTotals.algorithm = 'cohort'

Для эффективности векторы и матрицы в idTotals хранятся в виде разреженных массивов.

Когда оценки должны быть исключены (см. excludeLabels входной аргумент «имя-значение»), все переходы, включающие исключенные оценки, удаляются из выборки. Например, если ‘NR’ рейтинг должен быть исключен, любые переходы в ‘NR’ и вне ‘NR’ исключаются из выборки. Итоговые показатели для всех остальных оценок корректируются соответствующим образом. Дополнительные сведения см. в разделе Визуализация данных переходов для transprob.

Оценка продолжительности

Алгоритм вычисляет Tin, общее время, которое обязывающий n проводит в рейтинге i в пределах временного окна оценки. Эти количества суммируются по всем должникам, чтобы получить Ti, общее время, проведенное в рейтинге i, в совокупности всеми должниками в выборке. Алгоритм также вычисляет Tijn, число раз, которые обязывающий n переносит из рейтинга i в рейтинг j, с i, не равным j, в пределах временного окна оценки. А также складывает их, чтобы получить Tij, общее количество миграций, всеми обязанными в выборке, от рейтинга i до j, с i не равным j.

Чтобы оценить вероятности перехода, алгоритм длительности сначала вычисляет генераторную матрицу Λ. Каждый внедиагональный ввод этой матрицы является оценкой скорости перехода из рейтинга i в рейтинг j, и является

λij=TijTi,i≠j

Диагональные элементы вычисляются следующим образом:

λii=−∑j≠iλij

С генераторной матрицей и переходным интервалом Δt (например, Δt = 2 соответствует вероятности двухлетнего перехода), матрица перехода получается как P = exp (ΔtΛ), где exp обозначает возведение матрицы в степень (expm в MATLAB).

Примечание

Для алгоритма длительности необязательные выходные аргументы idTotals и sampleTotals от transprob содержат следующую информацию:

  • idTotals(n).totalsVec = (олово) ∀i

  • idTotals(n).totalsMat = (Ti, jn) ∀ij

  • idTotals(n).algorithm = 'duration'

  • sampleTotals.totalsVec = (Ti) ∀i

  • sampleTotals.totalsMat = (Ti, j) ∀ij

  • sampleTotals.algorithm = 'duration'

Для эффективности векторы и матрицы в idTotals хранятся в виде разреженных массивов.

Когда оценки должны быть исключены (см. excludeLabels входной аргумент «имя-значение»), все переходы, включающие оценки исключения, удаляются из выборки. Например, если ‘NR’ рейтинг должен быть исключен, любые переходы в ‘NR’ и вне ‘NR’ исключаются из выборки. Общее время, проведенное в ‘NR’ (или любой другой исключенный рейтинг) также удаляется.

Ссылки

[1] Хэнсон, С., Т. Шуэрман. «Доверительные интервалы для вероятностей дефолта». Журнал банковских и финансовых операций. Том 30 (8), Elsevier, август 2006, стр. 2281-2301.

[2] Лёффлер, Г., П. Н. Пош. Моделирование кредитных рисков с использованием Excel и VBA. Западный Сассекс, Англия: Wiley Finance, 2007.

[3] Шуэрманн, Т. «Матрицы кредитной миграции». в Э. Мельник, Б. Эверитт (ред.), Энциклопедия количественного анализа и оценки рисков. Уайли, 2008.

Представлен в R2010b