exponenta event banner

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

Введение

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

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

Примечание

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

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

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' необязательный входной аргумент имя-значение для transprob.

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

В оценке вероятностей перехода 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

Оценка доверительных интервалов начальной загрузки

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

Вы можете использовать idTotals структурный массив для оценки доверительных интервалов для вероятностей перехода с помощью процедуры начальной загрузки, как показано в следующем примере. Для этого звоните transprob и сохранить третий выходной аргумент, idTotals. 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 из статистики и Toolbox™ машинного обучения с transprobbytotals в качестве функции начальной загрузки и idTotals в качестве данных для выборки из. Каждая выборка начальной загрузки соответствует набору данных, составленному из компаний, отобранных с заменой исходных данных. Тем не менее, вам не придется черпать компании из исходных данных, потому что bootstrap idTotals образец содержит всю информацию, необходимую для вычисления вероятностей перехода. transprobbytotals агрегирует все структуры в каждой начальной загрузке 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около-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эта функция группирует каждую структуру в массиве по отдельности и сохраняет разреженность, если поля во входных структурах являются разреженными. Одним из способов использования этой функции является вычисление доверительных интервалов для ставки по умолчанию инвестиционного уровня и ставки по умолчанию спекулятивного уровня (см. также Оценка доверительных интервалов начальной загрузки).

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. totalsMat в данном случае поле является некварным массивом.

% 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

Удаление отклонений

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

См. также

| | | | | |

Связанные темы

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