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

Введение

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

Предложение Transition probabilities один способ охарактеризовать прошлые изменения в кредитоспособности должников (обычно фирмы), и является кардинальными входными параметрами ко многим приложениям управления рисками. Программное обеспечение Financial 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'    

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

В этом примере самый простой синтаксис вызова для transprob передает nRecord s-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

Обеспечьте явный запуск и даты окончания, в противном случае, окно оценки для двух различных наборов данных может отличаться, и оценки не могут быть сопоставимыми. От этой точки примите, что окно времени интереса является пятилетним периодом от конца 1 995 в конец 2 000. Для сравнений вычислите оценки для этого окна времени. Сначала используйте алгоритм 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. Например, чтобы получить вероятности перехода 2D года с помощью алгоритма 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 использует the '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' из матрицы перехода, необходимо работать с sampleTotals дополнительный вывод от transprob. Структура sampleTotals имеет информацию количеств перехода между оценками (поле totalsMat), и общие переходы из каждой оценки (totalsVec).

Чтобы удалить 'NR' из матрицы перехода, необходимо удалить переходы в и из оценки 'NR'. Это означает, удалите строку и столбец в totalsMat, которые соответствуют 'NR'.

Поскольку удаление этих переходов изменяет общее количество переходов из других оценок (любой переход оценки в 'NR' затронут), вектор totalsVec должен быть обновлен с новыми общими количествами, который исключает переходы в и из 'NR'. Настроенным количеством на оценку является totalsVec, вычисленный как сумма строками в новом totalsMat. Затем используйте transprobbytotals, чтобы получить матрицу перехода.

TotalsCohort = TotalsNRCohort;
TotalsCohort.totalsMat = TotalsCohort.totalsMat(1:end-1,1:end-1);
TotalsCohort.totalsVec = sum(TotalsCohort.totalsMat,2)';
TotalsCohort.algorithm = 'cohort';

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

MatrixCohort = transprobbytotals(TotalsCohort);

fprintf('Transition probability, cohort, after postprocessing to remove NR:\n')
disp(array2table(MatrixCohort,'VariableNames',RatingsLabels,...
   'RowNames',RatingsLabels))

fprintf('Total transitions out of given rating, AA and CCC have one less than before:\n')
disp(array2table(TotalsCohort.totalsVec,'VariableNames',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

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

Например, если вы удаляете строки 'NR' в этом примере, первая компания, кажется, остается в ее начальной оценке 'CCC' полностью с начальной даты в 1 984 к стандартному событию в 1 991. С предыдущим подходом оценка знает, что компания перешла из 'CCC' в какой-то момент, это знает, что не оставалось в 'CCC' все время.

Вторая компания, кажется, осталась в выборке как компания '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'  

Матрицы перехода будут отличаться. Вероятность пребывания в '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:
             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

Total transitions out of given rating, many more out of CCC and AA:
    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 для 1 993. Вспомните, что демонстрационный набор данных содержит моделируемые миграции кредита, таким образом, оценки 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 для 1 993 используется здесь. Общее время, проведенное на каждой оценке, хранится в поле 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-летнего окна времени от 1 996 до 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, который содержит, для каждого ID или компании, общее время, проведенное на каждой оценке и общие переходы из каждой оценки. Для получения дополнительной информации о структуре idTotals смотрите transprob. Структура idTotals подобна структурам sampleTotals (см. Оценочный Момент времени и Вероятности Через цикл), но idTotals имеет информацию на уровне ID. Поскольку большинство компаний только мигрирует между немногими оценками, числовые массивы в 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 от Statistics and Machine Learning Toolbox™ с transprobbytotals как функция начальной загрузки и idTotals как данные к выборке от. Каждая выборка начальной загрузки соответствует набору данных, сделанному из компаний, выбранных с заменой от исходных данных. Однако вы не должны чертить компании от исходных данных, потому что начальная загрузка выборка 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-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, этот функциональные группы каждая структура в массиве индивидуально и сохраняет разреженность, если поля во входных структурах разреженны. Один способ использовать эту функцию состоит в том, чтобы вычислить доверительные интервалы для уровня значения по умолчанию инвестиционного класса и спекулятивного уровня значения по умолчанию класса (см. также Оценочные Доверительные интервалы Начальной загрузки).

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

Смотрите также

| | | | | |

Похожие темы

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