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

Введение

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

Transition probabilities предлагаем один из способов охарактеризовать прошлые изменения в качестве кредита должников (как правило, фирм) и являются важнейшими входами для многих приложений по управлению рисками. Программное обеспечение Financial Toolbox™ поддерживает оценку вероятностей перехода, используя как когортные, так и длительные (также известные как темп опасности или интенсивность) подходы, используя transprob и смежные функции.

Примечание

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

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

The Data_TransProb.mat файл содержит образец данных кредитных рейтингов.

load Data_TransProb
data(1:10,:)  
ans = 

        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'    

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

В этом примере самый простой синтаксис вызова для transprob проходит nRecords-by- 3 массив ячеек как единственный входной параметр. Значение по умолчанию startDate и endDate являются самыми ранними и последними датами в данных. Алгоритм оценки по умолчанию является методом длительности, и оцениваются однолетние вероятности перехода:

transMat0 = transprob(data)
transMat0 =

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

Предоставьте явные даты начала и конца, в противном случае окно оценки для двух разных наборов данных может отличаться, и оценки могут быть несопоставимыми. С этой точки зрения предположим, что период интереса является пятилетним периодом с конца 1995 года по конец 2000 года. Для сравнения вычислите оценки для этого временного окна. Сначала используйте duration алгоритм (опция по умолчанию), а затем cohort явно заданный алгоритм.

startDate = '31-Dec-1995';
endDate = '31-Dec-2000';
transMat1 = transprob(data,'startDate',startDate,'endDate',endDate)
transMat2 = transprob(data,'startDate',startDate,'endDate',endDate,...
'algorithm','cohort')
transMat1 =

90.6236    7.9051    1.0314    0.4123    0.0210    0.0020    0.0003    0.0043
 4.4780   89.5558    4.5298    1.1225    0.2284    0.0094    0.0009    0.0754
 0.3983    6.1164   87.0641    5.4801    0.7637    0.0892    0.0050    0.0832
 0.1029    0.8572   10.7918   83.0204    3.9971    0.7001    0.1313    0.3992
 0.1043    0.3745    2.2962   14.0954   78.9840    3.0013    0.0463    1.0980
 0.0113    0.0544    0.7055    3.2925   15.4350   75.5988    1.8166    3.0860
 0.0044    0.0189    0.1903    1.9743    6.2320   10.2334   75.9983    5.3484
      0         0         0         0         0         0         0  100.0000

transMat2 =

90.1554    8.5492    0.9067    0.3886         0         0         0         0
 4.9512   88.5221    5.1763    1.0503    0.2251         0         0    0.0750
 0.2770    6.6482   86.2188    6.0942    0.6233    0.0693         0    0.0693
 0.0794    0.8737   11.6759   81.6521    4.3685    0.7943    0.1589    0.3971
 0.1002    0.4008    1.9038   15.4309   77.8557    3.4068         0    0.9018
      0         0    0.2262    2.4887   17.4208   74.2081    2.2624    3.3937
      0         0    0.7576    1.5152    6.0606   10.6061   75.0000    6.0606
      0         0         0         0         0         0         0  100.0000

По умолчанию в cohort алгоритм внутренне получает ежегодные снимки кредитных рейтингов, но количество снимков в год можно определить с помощью пары параметр/значение snapsPerYear. Чтобы получить оценки с помощью ежеквартальных снимков:

transMat3 = transprob(data,'startDate',startDate,'endDate',endDate,...
'algorithm','cohort','snapsPerYear',4)
transMat3 =

90.4765    8.0881    1.0072    0.4069    0.0164    0.0015    0.0002    0.0032
 4.5949   89.3216    4.6489    1.1239    0.2276    0.0074    0.0007    0.0751
 0.3747    6.3158   86.7380    5.6344    0.7675    0.0856    0.0040    0.0800
 0.0958    0.7967   11.0441   82.6138    4.1906    0.7230    0.1372    0.3987
 0.1028    0.3571    2.3312   14.4954   78.4276    3.1489    0.0383    1.0987
 0.0084    0.0399    0.6465    3.0962   16.0789   75.1300    1.9044    3.0956
 0.0031    0.0125    0.1445    1.8759    6.2613   10.7022   75.6300    5.3705
      0         0         0         0         0         0         0  100.0000

Оба duration и cohort вычислить однолетние вероятности перехода по умолчанию, но временной интервал для переходов можно определить с помощью пары параметр/значение transInterval. Для примера, чтобы получить двухлетние вероятности перехода с помощью cohort алгоритм с той же периодичностью снимка и окном оценки:

transMat4 = transprob(data,'startDate',startDate,'endDate',endDate,...
'algorithm','cohort','snapsPerYear',4,'transInterval',2)
transMat4 =

82.2358   14.6092    2.2062    0.8543    0.0711    0.0074    0.0011    0.0149
 8.2803   80.4584    8.3606    2.2462    0.4665    0.0316    0.0030    0.1533
 0.9604   11.1975   76.1729    9.7284    1.5322    0.2044    0.0162    0.1879
 0.2483    2.0903   18.8440   69.5145    6.9601    1.2966    0.2329    0.8133
 0.2129    0.8713    5.4893   23.5776   62.6438    4.9464    0.1390    2.1198
 0.0378    0.1895    1.7679    7.2875   24.9444   57.1783    2.8816    5.7132
 0.0154    0.0716    0.6576    4.2157   11.4465   16.3455   57.4078    9.8399
      0         0         0         0         0         0         0  100.0000

Оценка вероятностей перехода для различных шкал оценок

Набор данных data от Data_TransProb.mat содержит образец кредитных рейтингов по шкале рейтинга по умолчанию {'AAA', 'AA','A', 'BBB', 'BB', 'B', 'CCC', 'D'}. Он также содержит набор данных dataIGSG с рейтингами инвестиционного уровня ('IG'), спекулятивная степень ('SG'), и по умолчанию ('D'). Чтобы оценить матрицу перехода для этого набора данных, используйте labels аргумент.

load Data_TransProb
startDate = '31-Dec-1995';
endDate = '31-Dec-2000';
dataIGSG(1:10,:)
transMatIGSG = transprob(dataIGSG,'labels',{'IG','SG','D'},...
'startDate',startDate,'endDate',endDate)
ans = 

    '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 =

   98.1986    1.5179    0.2835
    8.5396   89.4891    1.9713
         0         0  100.0000

Существует другой набор данных, dataIGSGnum, с той же информацией, что и dataIGSG, кроме тех случаев, когда оценки отображаются в числовую шкалу, где 'IG'=1, 'SG'=2, и 'D'=3. Чтобы оценить матрицу перехода, используйте labels необязательный аргумент, задающий числовую шкалу как массив ячеек.

dataIGSGnum(1:10,:)
% Note {1,2,3} and num2cell(1:3) are equivalent; num2cell is convenient
% when the number of ratings is larger
transMatIGSGnum = transprob(dataIGSGnum,'labels',{1,2,3},...
'startDate',startDate,'endDate',endDate)
ans = 

    '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 =

   98.1986    1.5179    0.2835
    8.5396   89.4891    1.9713
         0         0  100.0000

Любой раз, когда входной набор данных содержит оценки, не включенные в шкалу рейтинга по умолчанию {'AAA', 'AA', 'A', 'BBB', 'BB', 'B', 'CCC', 'D'}, полная шкала рейтинга должна быть задана с помощью labels необязательный аргумент. Для примера, если набор данных содержит оценки 'AAA', ..., 'CCC, 'D', и 'NR' (не оценивается), используйте labels с этим массивом ячеек {'AAA', 'AA', 'A','BBB','BB','B','CCC','D','NR'}.

Работа с матрицей переходов, содержащей NR Рейтинг

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

Набор данных data от Data_TransProb.mat содержит образец кредитных рейтингов по шкале рейтинга по умолчанию {'AAA', 'AA','A', 'BBB', 'BB', 'B', 'CCC', 'D'}.

load Data_TransProb
head(data,12)
ans =

  12×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'   
    '00014413'    '25-Nov-1999'    'BB'  
    '00012126'    '17-Feb-1985'    'CCC' 

Замените переход на 'B' с переходом на 'NR' для первой компании. Обратите внимание, что происходит последующий переход от 'NR' на 'CCC'.

dataNR = data;
dataNR.Rating{2} = 'NR';
dataNR.Rating{7} = 'NR';

head(dataNR,12)
ans =

  12×3 table

        ID            Date         Rating
    __________    _____________    ______

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

'NR' рассматривается как другой рейтинг. Матрица перехода показывает предполагаемую вероятность перехода в и из 'NR'. В этом примере, transprob функция использует 'cohort' алгоритм и 'NR' рейтинг рассматривается как другой рейтинг. То же поведение существует и при использовании transprob функция со 'duration' алгоритм.

RatingsLabelsNR = {'AAA','AA','A','BBB','BB','B','CCC','D','NR'};
[MatrixNRCohort,TotalsNRCohort] = transprob(dataNR,...
   'Labels',RatingsLabelsNR,...
   'Algorithm','cohort');

fprintf('Transition probability, cohort, including NR:\n')
disp(array2table(MatrixNRCohort,'VariableNames',RatingsLabelsNR,...
   'RowNames',RatingsLabelsNR))

fprintf('Total transitions out of given rating, including 6 out of NR (5 NR->NR, 1 NR->CCC):\n')
disp(array2table(TotalsNRCohort.totalsVec,'VariableNames',RatingsLabelsNR))
Transition probability, cohort, including NR:
             AAA         AA          A          BBB         BB          B          CCC          D           NR   
           ________    _______    ________    _______    ________    ________    ________    ________    ________

    AAA      93.135     5.9335     0.74557    0.15533    0.031066           0           0           0           0
    AA       1.7359      92.92      4.5446    0.58514     0.15604           0           0    0.039009    0.019505
    A       0.12683     2.9716      91.991     4.3124      0.4711    0.054358           0    0.072477           0
    BBB    0.021048    0.37887      5.0726     89.771      4.0413     0.46306    0.042096     0.21048           0
    BB     0.022099     0.1105     0.68508      6.232      88.376      3.6464     0.28729     0.64088           0
    B             0          0    0.076161    0.72353       7.997      86.215      2.7037      2.2848           0
    CCC           0          0           0    0.30936      1.8561      4.4857      80.897      12.374     0.07734
    D             0          0           0          0           0           0           0         100           0
    NR            0          0           0          0           0           0      16.667           0      83.333

Total transitions out of given rating, including 6 out of NR (5 NR->NR, 1 NR->CCC):
    AAA      AA      A      BBB      BB      B      CCC      D      NR
    ____    ____    ____    ____    ____    ____    ____    ____    __

    3219    5127    5519    4751    4525    2626    1293    4050    6 

Чтобы удалить переходы к 'NR' из матрицы переходов необходимо использовать 'excludeLabels' необязательный входной параметр name-value, transprob.

The 'labels' вход в transprob может включать или не включать метку, которая должна быть исключена. В следующем примере NR рейтинг удаляется из меток в целях отображения, но передается RatingsLabelsNR кому transprob также сработает.

RatingsLabels = {'AAA','AA','A','BBB','BB','B','CCC','D'};

[MatrixCohort,TotalsCohort] = transprob(dataNR,'Labels',RatingsLabels,'ExcludeLabels','NR','Algorithm','cohort');

fprintf('Transition probability, cohort, after postprocessing to remove NR:\n')
Transition probability, cohort, after postprocessing to remove NR:
disp(array2table(MatrixCohort,'VariableNames',RatingsLabels,...
   'RowNames',RatingsLabels))
Transition probability, cohort, after postprocessing to remove NR:
             AAA         AA          A          BBB         BB          B          CCC          D    
           ________    _______    ________    _______    ________    ________    ________    ________

    AAA      93.135     5.9335     0.74557    0.15533    0.031066           0           0           0
    AA       1.7362     92.938      4.5455    0.58525     0.15607           0           0    0.039017
    A       0.12683     2.9716      91.991     4.3124      0.4711    0.054358           0    0.072477
    BBB    0.021048    0.37887      5.0726     89.771      4.0413     0.46306    0.042096     0.21048
    BB     0.022099     0.1105     0.68508      6.232      88.376      3.6464     0.28729     0.64088
    B             0          0    0.076161    0.72353       7.997      86.215      2.7037      2.2848
    CCC           0          0           0     0.3096      1.8576      4.4892       80.96      12.384
    D             0          0           0          0           0           0           0         100

Total transitions out of given rating, AA and CCC have one less than before:
    AAA      AA      A      BBB      BB      B      CCC      D  
    ____    ____    ____    ____    ____    ____    ____    ____

    3219    5126    5519    4751    4525    2626    1292    4050
fprintf('Total transitions out of given rating, AA and CCC have one less than before:\n')
Total transitions out of given rating, AA and CCC have one less than before
disp(array2table(TotalsCohort.totalsVec,'VariableNames',RatingsLabels))
    AAA      AA      A      BBB      BB      B      CCC      D  
    ____    ____    ____    ____    ____    ____    ____    ____

    3219    5126    5519    4751    4525    2626    1292    4050

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

Эта процедура отличается от удаления 'NR' строки из самих данных.

Для примера, если вы удаляете 'NR' строки в этом примере, первая компания, кажется, остается в своем первоначальном рейтинге 'CCC' начиная с начальной даты в 1984 году и заканчивая событием по умолчанию в 1991 году. При предыдущем подходе оценка знает, что компания перешла из 'CCC' в какой-то момент он знает, что он не остановился 'CCC' все время.

Если на 'NR' строка удалена для второй компании, эта компания, похоже, осталась в выборке как 'AA' компания до конца выборки. При предыдущем подходе оценка знает, что эта компания перестала быть 'AA' ранее.

dataNR2 = dataNR;
dataNR2([2 7],:) = [];

head(dataNR2,12)
ans =

  12×3 table

        ID            Date         Rating
    __________    _____________    ______

    '00010283'    '10-Nov-1984'    'CCC' 
    '00010283'    '29-Jun-1988'    'CCC' 
    '00010283'    '12-Dec-1991'    'D'   
    '00013326'    '09-Feb-1985'    'A'   
    '00013326'    '24-Feb-1994'    'AA'  
    '00014413'    '23-Dec-1982'    'B'   
    '00014413'    '20-Apr-1988'    'BB'  
    '00014413'    '16-Jan-1998'    'B'   
    '00014413'    '25-Nov-1999'    'BB'  
    '00012126'    '17-Feb-1985'    'CCC' 
    '00012126'    '08-Mar-1989'    'D'   
    '00011692'    '11-May-1984'    'BB'  

Если на 'NR' строки удаляются, матрицы переходов будут другими. Вероятность пребывания в 'CCC' немного повышается, и вероятность остаться на 'AA'.

Матрицы переходов будут различными. Вероятность пребывания в 'CCC' немного повышается, и вероятность остаться на 'AA'.

[MatrixCohort2,TotalsCohort2] = transprob(dataNR2,...
   'Labels',RatingsLabels,...
   'Algorithm','cohort');

fprintf('Transition probability, cohort, if NR rows are removed from data:\n')
disp(array2table(MatrixCohort2,'VariableNames',RatingsLabels,...
   'RowNames',RatingsLabels))

fprintf('Total transitions out of given rating, many more out of CCC and AA:\n')
disp(array2table(TotalsCohort2.totalsVec,'VariableNames',RatingsLabels))
Transition probability, cohort, if NR rows are removed from data:
disp(array2table(MatrixCohort2,'VariableNames',RatingsLabels,...
   'RowNames',RatingsLabels))
Transition probability, cohort, if NR rows are removed from data:
             AAA         AA          A          BBB         BB          B          CCC          D    
           ________    _______    ________    _______    ________    ________    ________    ________

    AAA      93.135     5.9335     0.74557    0.15533    0.031066           0           0           0
    AA       1.7346     92.945       4.541    0.58468     0.15592           0           0    0.038979
    A       0.12683     2.9716      91.991     4.3124      0.4711    0.054358           0    0.072477
    BBB    0.021048    0.37887      5.0726     89.771      4.0413     0.46306    0.042096     0.21048
    BB     0.022099     0.1105     0.68508      6.232      88.376      3.6464     0.28729     0.64088
    B             0          0    0.076161    0.72353       7.997      86.215      2.7037      2.2848
    CCC           0          0           0    0.30888      1.8533      4.4788      81.004      12.355
    D             0          0           0          0           0           0           0         100
fprintf('Total transitions out of given rating, many more out of CCC and AA:\n')
Total transitions out of given rating, many more out of CCC and AA:
disp(array2table(TotalsCohort2.totalsVec,'VariableNames',RatingsLabels))
    AAA      AA      A      BBB      BB      B      CCC      D  
    ____    ____    ____    ____    ____    ____    ____    ____

    3219    5131    5519    4751    4525    2626    1295    4050

Оценка вероятностей на момент времени и через цикл

Оценки вероятностей перехода чувствительны к длине окна оценки. Когда окно оценки мало, оценки захватывают только последние кредитные события, и они могут значительно измениться от одного года к следующему. Они называются оценками на определенный момент времени (PIT). Напротив, большое временное окно дает довольно стабильные оценки, что средние скорости перехода за более длительный период времени. Они называются сквозными оценками (TTC).

Оценка вероятностей PIT требует повторных вызовов transprob с окном оценки качения. Использовать transprobprep каждый раз повторяющиеся вызовы transprob требуются. transprobprep выполняет шаг предварительной обработки необработанного набора данных, который не зависит от окна оценки. Преимущества transprobprep больше, так как количество повторных вызовов transprob увеличивается. Кроме того, эффективность увеличивается transprobprep более значимы для cohort алгоритм.

load Data_TransProb
prepData = transprobprep(data);

Years = 1991:2000;
nYears = length(Years);
nRatings = length(prepData.ratingsLabels);
transMatPIT = zeros(nRatings,nRatings,nYears);
algorithm = 'duration';
sampleTotals(nYears,1) = struct('totalsVec',[],'totalsMat',[],...
'algorithm',algorithm);
for t = 1:nYears
   startDate = ['31-Dec-' num2str(Years(t)-1)];
   endDate = ['31-Dec-' num2str(Years(t))];
   [transMatPIT(:,:,t),sampleTotals(t)] = transprob(prepData,...
    'startDate',startDate,'endDate',endDate,'algorithm',algorithm);
end

Вот матрица перехода PIT для 1993. Напомним, что набор выборочных наборов данных содержит моделируемые кредитные миграции, поэтому оценки PIT в этом примере не совпадают с фактическими историческими скоростями перехода.

transMatPIT(:,:,Years==1993)
ans =

   95.3193    4.5999    0.0802    0.0004    0.0002    0.0000    0.0000    0.0000
    2.0631   94.5931    3.3057    0.0254    0.0126    0.0002    0.0000    0.0000
    0.0237    2.1748   95.5901    1.4700    0.7284    0.0131    0.0000    0.0000
    0.0003    0.0372    3.2585   95.2914    1.3876    0.0250    0.0001    0.0000
    0.0000    0.0005    0.0657    3.8292   92.7474    3.3459    0.0111    0.0001
    0.0000    0.0001    0.0128    0.7977    8.0926   90.4897    0.5958    0.0113
    0.0000    0.0000    0.0005    0.0459    0.5026   11.1621   84.9315    3.3574
         0         0         0         0         0         0         0  100.0000

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

Как пример, sampleTotals здесь используется структура для 1993 года. Общее время, потраченное на каждый рейтинг, хранится в totalsVec поле структуры. Общие переходы из каждого рейтинга хранятся в totalsMat поле. Третье поле, algorithm, указывает алгоритм, используемый для генерации структуры.

sampleTotals(Years==1993).totalsVec
sampleTotals(Years==1993).totalsMat
sampleTotals(Years==1993).algorithm
ans =

  144.4411  230.0356  262.2438  204.9671  246.1315  147.0767   54.9562  215.1479


ans =

     0     7     0     0     0     0     0     0
     5     0     8     0     0     0     0     0
     0     6     0     4     2     0     0     0
     0     0     7     0     3     0     0     0
     0     0     0    10     0     9     0     0
     0     0     0     1    13     0     1     0
     0     0     0     0     0     7     0     2
     0     0     0     0     0     0     0     0


ans =

duration

Чтобы получить матрицу перехода TTC, передайте sampleTotals массив структур в transprobbytotals. Внутренне, transprobbytotals агрегирует информацию в sampleTotals структуры, чтобы получить общее время, потраченное на каждый рейтинг за 10 лет, рассматриваемых в этом примере, и общее количество переходов из каждого рейтинга за тот же период. transprobbytotals использует агрегированную информацию, чтобы получить матрицу TTC или среднюю матрицу однолетнего перехода.

transMatTTC = transprobbytotals(sampleTotals)
transMatTTC =

   92.8544    6.1068    0.7463    0.2761    0.0123    0.0009    0.0001    0.0032
    2.9399   92.2329    3.8394    0.7349    0.1676    0.0050    0.0004    0.0799
    0.2410    4.5963   90.3468    3.9572    0.6909    0.0521    0.0025    0.1133
    0.0530    0.4729    7.9221   87.2751    3.5075    0.4650    0.0791    0.2254
    0.0460    0.1636    1.1873    9.3442   85.4305    2.9520    0.1150    0.7615
    0.0031    0.0152    0.2608    1.5563   10.4468   83.8525    1.9771    1.8882
    0.0009    0.0041    0.0542    0.8378    2.9996    7.3614   82.4758    6.2662
         0         0         0         0         0         0         0  100.0000

Та же матрица TTC может быть получена при прямом вызове transprob, установив окно оценки на 10 рассматриваемых лет. Но гораздо эффективнее использовать sampleTotals структуры, каждый раз, когда они доступны. (Обратите внимание, для duration алгоритм, эти альтернативные рабочие процессы могут привести к небольшим численным различиям в оценках, когда годы скачка являются частью выборки.)

В Estimate Transition Probabilities 1-летняя матрица перехода оценивается с использованием 5-летнего временного окна от 1996 до 2000. Это другой пример матрицы TTC, и это также может быть вычислено с помощью sampleTotals массив структур.

transprobbytotals(sampleTotals(Years>=1996&Years<=2000))
ans =

   90.6239    7.9048    1.0313    0.4123    0.0210    0.0020    0.0003    0.0043
    4.4776   89.5565    4.5294    1.1224    0.2283    0.0094    0.0009    0.0754
    0.3982    6.1159   87.0651    5.4797    0.7636    0.0892    0.0050    0.0832
    0.1029    0.8571   10.7909   83.0218    3.9968    0.7001    0.1313    0.3991
    0.1043    0.3744    2.2960   14.0947   78.9851    3.0012    0.0463    1.0980
    0.0113    0.0544    0.7054    3.2922   15.4341   75.6004    1.8165    3.0858
    0.0044    0.0189    0.1903    1.9742    6.2318   10.2332   75.9990    5.3482
         0         0         0         0         0         0         0  100.0000

Оценка вероятностей дефолта за t-летний период

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

Однако, когда t-летние вероятности перехода требуются для всей области значений значений t, например, 1-летние, 2-летние, 3-летние, 4-летние и 5-летние вероятности перехода, более эффективно вызыватьtransprob один раз, чтобы получить дополнительный выход sampleTotals. Можно использовать ту же sampleTotals структура может использоваться, чтобы получить t матрицу перехода для любого t интервала перехода. Учитывая sampleTotals структуру и интервал перехода, можно получить соответствующую матрицу переходов при помощи transprobbytotals.

load Data_TransProb
startDate = '31-Dec-1995';
endDate = '31-Dec-2000';

[~,sampleTotals] = transprob(data,'startDate', ...
startDate, 'endDate',endDate);

DefProb = zeros(7,5);
for t = 1:5
   transMatTemp = transprobbytotals(sampleTotals,'transInterval',t);
   DefProb(:,t) = transMatTemp(1:7,8);
end
DefProb
DefProb =

    0.0043    0.0169    0.0377    0.0666    0.1033
    0.0754    0.1542    0.2377    0.3265    0.4213
    0.0832    0.1936    0.3276    0.4819    0.6536
    0.3992    0.8127    1.2336    1.6566    2.0779
    1.0980    2.1189    3.0668    3.9468    4.7644
    3.0860    5.6994    7.9281    9.8418   11.4963
    5.3484    9.8053   13.5320   16.6599   19.2964

Оценка доверительных интервалов Bootstrap

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

Можно использовать idTotals массив структуры для оценки доверительных интервалов для вероятностей перехода с помощью процедуры начальной загрузки, как демонстрирует следующий пример. Для этого звоните transprob и сохраните третий выходной аргумент, idTotals. The idTotals отображаются поля для последней компании в выборке. В рамках расчетного окна эта компания проводит почти год как 'AA' и затем он обновляется до 'AAA'.

load Data_TransProb
startDate = '31-Dec-1995';
endDate = '31-Dec-2000';

[transMat,~,idTotals] = transprob(data,...
   'startDate',startDate,'endDate',endDate);

% Total time spent on each rating
full(idTotals(end).totalsVec)
% Total transitions out of each rating
full(idTotals(end).totalsMat)
% Algorithm
idTotals(end).algorithm
ans =

    4.0820    0.9180         0         0         0         0         0         0


ans =

     0     0     0     0     0     0     0     0
     1     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0


ans =

duration

Далее используйте bootstrp от Statistics and Machine Learning Toolbox™ с transprobbytotals как функцию bootstrap и idTotals в качестве данных для выборки из. Каждая выборка bootstrap соответствует набору данных, составленному из компаний, отобранных с заменой из исходных данных. Однако вам не придется черпать компании из исходных данных, потому что bootstrap idTotals выборка содержит всю информацию, необходимую для вычисления вероятностей перехода. transprobbytotals агрегирует все структуры в каждом bootstrap idTotals Выборка и находит соответствующую матрицу переходов.

Чтобы оценить 95% доверительные интервалы для матрицы перехода и отобразить вероятности дефолта вместе с его верхней и нижней доверительными границами:

PD = transMat(1:7,8);

bootstat = bootstrp(100,@(totals)transprobbytotals(totals),idTotals);
ci = prctile(bootstat,[2.5 97.5]); % 95% confidence
CIlower = reshape(ci(1,:),8,8);
CIupper = reshape(ci(2,:),8,8);
PD_LB = CIlower(1:7,8);
PD_UB = CIupper(1:7,8);

[PD_LB PD PD_UB]
ans =

    0.0004    0.0043    0.0106
    0.0028    0.0754    0.2192
    0.0126    0.0832    0.2180
    0.1659    0.3992    0.6617
    0.5703    1.0980    1.7260
    1.7264    3.0860    4.7602
    1.7678    5.3484    9.5055

Групповые кредитные рейтинги

Шкалы кредитного рейтинга могут быть более или менее зернистыми. Например, существуют рейтинги с квалификаторами (такими как, 'AA+', 'BB-'и так далее), целые рейтинги ('AA', 'BB', и так далее), и инвестиционный или спекулятивный класс ('IG', 'SG'Категории. Учитывая набор данных с кредитными рейтингами на более гранулярном уровне, вероятности перехода для менее гранулярных категорий могут представлять интерес. Например, вас может заинтересовать матрица переходов для инвестиционных и спекулятивных оценок, заданная набор данных с целыми рейтингами. Использовать transprobgrouptotals для этой оценки, как проиллюстрировано в следующих примерах. Выборка данных набора данных имеет целые кредитные рейтинги:

load Data_TransProb
startDate = '31-Dec-1995';
endDate = '31-Dec-2000';
data(1:5,:)
ans = 

    '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'  

Вызов на transprob возвращает матрицу переходов и итоговые структуры для восьми ('AAA' на 'D') целые кредитные рейтинги. Массив с количеством переходов вне каждого кредитного рейтинга отображается после вызова на transprob:

[transMat,sampleTotals,idTotals] = transprob(data,'startDate',startDate,...
'endDate',endDate);
sampleTotals.totalsMat
ans =

     0    67     7     3     0     0     0     0
    67     0    68    15     3     0     0     1
     4   101     0    93    11     1     0     1
     1     7   163     0    62    10     2     5
     1     3    16   168     0    37     0    11
     0     0     2    10    83     0    10    14
     0     0     0     2     8    16     0     7
     0     0     0     0     0     0     0     0

Далее используйте transprobgrouptotals группировать целые рейтинги в инвестиционные и спекулятивные оценки. Эта функция принимает итоговую структуру как первый аргумент. Второй аргумент указывает ребра между категориями рейтинга. В этом случае оценки с 1 по 4 ('AAA' через 'BBB') соответствуют первой категории ('IG'), оценки от 5 до 7 ('BB' через 'CCC') ко второй категории ('SG'), и рейтинг 8 ('D') - это своя категория. transprobgrouptotals суммирует общее время, потраченное на рейтинги, относящиеся к той же категории. Для примера общее время, потраченное на 'AAA' через 'BBB' складываются как общее время, потраченное на 'IG'. transprobgrouptotals также складывается общее количество переходов между любыми 'IG' рейтинг и любые 'SG' рейтинговая, например, кредитная миграция из 'BBB' на 'BB'.

Сгруппированные итоговые суммы могут затем быть переданы в transprobbytotals получить матрицу переходов для инвестиционных и спекулятивных оценок. Оба totalsMat и новая матрица перехода являются 3-by- 3, соответствующий сгруппированным категориям 'IG', 'SG', и 'D'.

sampleTotalsIGSG = transprobgrouptotals(sampleTotals,[4 7 8])
transMatIGSG = transprobbytotals(sampleTotalsIGSG)
sampleTotalsIGSG = 

    totalsVec: [4.8591e+003 1.5034e+003 1.1621e+003]
    totalsMat: [3x3 double]
    algorithm: 'duration'

transMatIGSG =

   98.1591    1.6798    0.1611
   12.3228   85.6961    1.9811
         0         0  100.0000

Когда итоговый массив структуры передается в transprobgrouptotalsэта функция группирует каждую структуру в массиве по отдельности и сохраняет разреженность, если поля в вход структурах разрежены. Один из способов использовать эту функцию - вычислить доверительные интервалы для ставки по умолчанию инвестиционного класса и спекулятивной ставки по умолчанию (см. Также. «Оценка доверительных интервалов Bootstrap»).

PDIGSG = transMatIGSG(1:2,3);

idTotalsIGSG = transprobgrouptotals(idTotals,[4 7 8]);
bootstat = bootstrp(100,@(totals)transprobbytotals(totals),idTotalsIGSG);
ci = prctile(bootstat,[2.5 97.5]); % 95% confidence
CIlower = reshape(ci(1,:),3,3);
CIupper = reshape(ci(2,:),3,3);
PDIGSG_LB = CIlower(1:2,3);
PDIGSG_UB = CIupper(1:2,3);

[PDIGSG_LB PDIGSG PDIGSG_UB]
ans =

    0.0603    0.1611    0.2538
    1.3470    1.9811    2.6195

Работа с нескважинными матрицами

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

     Initial  AAA   AA    A  BBB   BB    B  CCC    D
  AAA     98   88    9    1    0    0    0    0    0
   AA    389    0  368   19    2    0    0    0    0
    A   1165    1   21 1087   56    0    0    0    0
  BBB   1435    0    2   89 1289   45    8    0    2
   BB    915    0    0    1   60  776   73    2    3
    B    867    0    0    1    7   88  715   39   17
  CCC    112    0    0    0    1    3   34   61   13

Можно хранить информацию в этой таблице в структуре итогов, совместимой с cohort алгоритм. Для получения дополнительной информации о cohort алгоритм и итоговая структура, см. transprob. The totalsMat в этом случае поле представляет собой массив, не являющийся quare.

% Define totals structure
totals.totalsVec = [98 389 1165 1435 915 867 112];
totals.totalsMat = [
   88    9    1    0    0    0    0    0;
    0  368   19    2    0    0    0    0;
    1   21 1087   56    0    0    0    0;
    0    2   89 1289   45    8    0    2;
    0    0    1   60  776   73    2    3;
    0    0    1    7   88  715   39   17;
    0    0    0    1    3   34   61   13];
totals.algorithm = 'cohort';

transprobbytotals и transprobgrouptotals принимать суммарные входы с несквартальными totalsMat поля. Чтобы получить матрицу перехода, соответствующую предыдущей таблице, и сгруппировать рейтинги в инвестиционный и спекулятивный класс с соответствующей матрицей:

transMat = transprobbytotals(totals)

% Group into IG/SG and get IG/SG transition matrix
totalsIGSG = transprobgrouptotals(totals,[4 7]);
transMatIGSG = transprobbytotals(totalsIGSG)
transMat =

   89.7959    9.1837    1.0204         0         0         0         0         0
         0   94.6015    4.8843    0.5141         0         0         0         0
    0.0858    1.8026   93.3047    4.8069         0         0         0         0
         0    0.1394    6.2021   89.8258    3.1359    0.5575         0    0.1394
         0         0    0.1093    6.5574   84.8087    7.9781    0.2186    0.3279
         0         0    0.1153    0.8074   10.1499   82.4683    4.4983    1.9608
         0         0         0    0.8929    2.6786   30.3571   54.4643   11.6071


transMatIGSG =

   98.2183    1.7169    0.0648
    3.6959   94.5618    1.7423

Удаление выбросов

The idTotals выход из transprob может также использоваться, чтобы обновить оценки вероятности перехода после удаления некоторой информации о выбросах. Для получения дополнительной информации о idTotals, см. transprob. Например, если вы знаете, что информация о миграции кредитного рейтинга для 4-й и 27-й компаний в данных имеет проблемы, можно удалить эти компании и эффективно обновить вероятности перехода следующим образом:

load Data_TransProb
startDate = '31-Dec-1995';
endDate = '31-Dec-2000';
[transMat,~,idTotals] = transprob(data,'startDate', ...
startDate, 'endDate',endDate);
transMat
transMat =

90.6236    7.9051    1.0314    0.4123    0.0210    0.0020    0.0003    0.0043
 4.4780   89.5558    4.5298    1.1225    0.2284    0.0094    0.0009    0.0754
 0.3983    6.1164   87.0641    5.4801    0.7637    0.0892    0.0050    0.0832
 0.1029    0.8572   10.7918   83.0204    3.9971    0.7001    0.1313    0.3992
 0.1043    0.3745    2.2962   14.0954   78.9840    3.0013    0.0463    1.0980
 0.0113    0.0544    0.7055    3.2925   15.4350   75.5988    1.8166    3.0860
 0.0044    0.0189    0.1903    1.9743    6.2320   10.2334   75.9983    5.3484
      0         0         0         0         0         0         0  100.0000

nIDs = length(idTotals);
keepInd = setdiff(1:nIDs,[4 27]);
transMatNoOutlier = transprobbytotals(idTotals(keepInd))

transMatNoOutlier =

90.6241    7.9067    1.0290    0.4124    0.0211    0.0020    0.0003    0.0043
 4.4917   89.5918    4.4779    1.1240    0.2288    0.0094    0.0009    0.0756
 0.3990    6.1220   87.0530    5.4841    0.7643    0.0893    0.0050    0.0833
 0.1030    0.8576   10.7909   83.0207    3.9971    0.7001    0.1313    0.3992
 0.1043    0.3746    2.2960   14.0955   78.9840    3.0013    0.0463    1.0980
 0.0113    0.0544    0.7054    3.2925   15.4350   75.5988    1.8166    3.0860
 0.0044    0.0189    0.1903    1.9743    6.2320   10.2334   75.9983    5.3484
      0         0         0         0         0         0         0  100.0000

Решение о том, какие компании следует удалить, является индивидуальной ситуацией. Причины удаления компании могут включать опечатку в одну из историй рейтингов или необычную миграцию между рейтингами, влияние которых на оценки вероятностей перехода должно быть измерено. transprob никоим образом не переупорядочивает компании. Упорядоченное расположение компаний в входных данных совпадает с упорядоченным расположением в idTotals массив.

Оценка вероятностей для различных сегментов

Можно использовать idTotals эффективно получить оценки по различным сегментам выборки. Для получения дополнительной информации о idTotals, см. transprob. Например, предположим, что компании в примере сгруппированы в три географические области и что компании были сгруппированы по географическим областям ранее, так что первые 340 компаний соответствуют первой области, следующие 572 компании - второй области, а остальные - третьей области. Вы можете эффективно получить вероятности перехода для каждой области следующим образом:

load Data_TransProb
startDate = '31-Dec-1995';
endDate = '31-Dec-2000';
[~,~,idTotals] = transprob(data,'startDate', ...
startDate, 'endDate',endDate);

n1 = 340;
n2 = 572;
transMatG1 = transprobbytotals(idTotals(1:n1))
transMatG2 = transprobbytotals(idTotals(n1+1:n1+n2))
transMatG3 = transprobbytotals(idTotals(n1+n2+1:end))
transMatG1 =

90.8299    7.6501    0.3178    1.1700    0.0255    0.0044    0.0021    0.0002
 4.3572   89.0262    5.7838    0.8039    0.0245    0.0029    0.0013    0.0001
 0.7066    6.7567   86.6320    5.4950    0.3721    0.0252    0.0101    0.0023
 0.0626    1.3688   10.3895   83.5022    3.6823    0.6466    0.3084    0.0396
 0.0256    0.7884    2.6970   13.7857   78.8321    2.8310    0.0561    0.9842
 0.0026    0.1095    0.4280    3.5204   21.1437   72.9230    1.6456    0.2273
 0.0005    0.0216    0.0730    0.4574    4.9586    4.2821   80.3062    9.9006
      0         0         0         0         0         0         0  100.0000

transMatG2 =

90.5798    8.4877    0.8202    0.0884    0.0132    0.0011    0.0000    0.0096
 4.1999   90.0371    3.8657    1.4744    0.2144    0.0128    0.0001    0.1956
 0.3022    5.9869   86.7128    5.5526    1.0411    0.1902    0.0015    0.2127
 0.0204    0.5606   10.9342   82.9195    4.0123    0.7398    0.0059    0.8073
 0.0089    0.3338    2.1185   16.6496   76.2395    3.1241    0.0261    1.4995
 0.0013    0.0465    0.6710    2.4731   14.7281   76.7378    1.2993    4.0428
 0.0002    0.0080    0.0681    0.4598    4.1324    8.4380   80.9092    5.9843
      0         0         0         0         0         0         0  100.0000

transMatG3 =

90.5655    7.5408    1.5288    0.3369    0.0258    0.0015    0.0003    0.0004
 4.8073   89.3842    4.4865    0.9582    0.3509    0.0095    0.0009    0.0025
 0.3153    5.8771   87.6353    5.4101    0.7160    0.0322    0.0052    0.0088
 0.1995    0.8625   10.8682   82.8717    4.1423    0.6903    0.1565    0.2090
 0.2465    0.1091    2.1558   12.0289   81.5803    3.0057    0.0616    0.8122
 0.0227    0.0400    0.9380    4.3175   12.3632   75.9429    2.5766    3.7991
 0.0149    0.0180    0.3414    3.6918    8.1414   13.6010   70.7254    3.4661
      0         0         0         0         0         0         0  100.0000

Работа с большими наборами данных

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

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

load Data_TransProb

cutoff = 2099;
data(cutoff-5:cutoff,:)
data(cutoff+1:cutoff+6,:)
ans = 

    '00011166'    '24-Aug-1995'    'BBB'
    '00011166'    '25-Jan-1997'    'A'  
    '00011166'    '01-Feb-1998'    'AA' 
    '00014878'    '15-Mar-1983'    'B'  
    '00014878'    '21-Sep-1986'    'BB' 
    '00014878'    '17-Jan-1998'    'BBB'


ans = 

    '00012043'    '09-Feb-1985'    'BBB'
    '00012043'    '03-Jan-1988'    'A'  
    '00012043'    '15-Jan-1994'    'AAA'
    '00011157'    '24-Jun-1984'    'A'  
    '00011157'    '09-Dec-1999'    'BBB'
    '00011157'    '28-Mar-2001'    'A'  

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

startDate = '31-Dec-1995';
endDate = '31-Dec-2000';

На практике это точка, где можно прочитать в первом наборе данных. Теперь набор данных уже получен. Звонить transprob с первым набором данных и явными началами и концами. Храните только sampleTotals выход. Для получения дополнительной информации о sampleTotals, см. transprob.

[~,sampleTotals(1)] = transprob(data(1:cutoff,:),...
   'startDate',startDate,'endDate',endDate);

Повторите для остальных наборов данных. Обратите внимание на различные sampleTotals структуры хранятся в структурированном массиве.

[~,sampleTotals(2)] = transprob(data(cutoff+1:end,:),...
   'startDate',startDate,'endDate',endDate);

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

transMatAggr = transprobbytotals(sampleTotals)
transMatAggr =

   90.6236    7.9051    1.0314    0.4123    0.0210    0.0020    0.0003    0.0043
    4.4780   89.5558    4.5298    1.1225    0.2284    0.0094    0.0009    0.0754
    0.3983    6.1164   87.0641    5.4801    0.7637    0.0892    0.0050    0.0832
    0.1029    0.8572   10.7918   83.0204    3.9971    0.7001    0.1313    0.3992
    0.1043    0.3745    2.2962   14.0954   78.9840    3.0013    0.0463    1.0980
    0.0113    0.0544    0.7055    3.2925   15.4350   75.5988    1.8166    3.0860
    0.0044    0.0189    0.1903    1.9743    6.2320   10.2334   75.9983    5.3484
         0         0         0         0         0         0         0  100.0000

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

transMatWhole = transprob(data,'startDate',startDate,'endDate',endDate)
aggError = max(max(abs(transMatAggr - transMatWhole)))
transMatWhole =

   90.6236    7.9051    1.0314    0.4123    0.0210    0.0020    0.0003    0.0043
    4.4780   89.5558    4.5298    1.1225    0.2284    0.0094    0.0009    0.0754
    0.3983    6.1164   87.0641    5.4801    0.7637    0.0892    0.0050    0.0832
    0.1029    0.8572   10.7918   83.0204    3.9971    0.7001    0.1313    0.3992
    0.1043    0.3745    2.2962   14.0954   78.9840    3.0013    0.0463    1.0980
    0.0113    0.0544    0.7055    3.2925   15.4350   75.5988    1.8166    3.0860
    0.0044    0.0189    0.1903    1.9743    6.2320   10.2334   75.9983    5.3484
         0         0         0         0         0         0         0  100.0000

aggError =

  2.8422e-014

См. также

| | | | | |

Похожие темы

Внешние веб-сайты