Рабочий процесс обратного тестирования ожидаемого дефицита (ES) с использованием симуляции

Этот пример показывает ожидаемый рабочий процесс тестирования дефицита (ES) с использованием esbacktestbysim объект. Тесты, поддерживаемые в esbacktestbysim объект требует в качестве входов не только тестовых данных (Portfolio, VaR, и ES данные), а также информация о распределении тестируемой модели.

The esbacktestbysim класс поддерживает пять тестов - условный, безусловный, квантиль, которые основаны на Acerbi-Szekely (2014) и minBiasAbsolute и minBiasRelative, которые основаны на Acerbi-Szekely (2017 ans 2019). Эти тесты используют распределительные допущения, чтобы симулировать сценарии возврата, предполагая, что распределительные допущения верны (нулевая гипотеза). Моделируемые сценарии находят распределение типичных значений для статистики теста и значимость тестов. esbacktestbysim поддерживает нормальные и t распределения шкалы местоположения (с фиксированным количеством степеней свободы во всем тестовом окне).

Шаг 1. Загрузите данные обратного тестирования ES.

Используйте ESBacktestBySimData.mat файл для загрузки данных в рабочую область. Этот пример работает с Returns числовой массив. Этот массив представляет возвраты капитала. Соответствующие данные VaR и доверительные уровни VaR находятся в VaR и VaRLevel. Ожидаемые данные о дефиците содержатся в ES.

load ESBacktestBySimData

Шаг 2. Сгенерируйте график обратного тестирования ES.

Используйте plot функция для визуализации данных обратного тестирования ES. Этот тип визуализации является общим первым шагом при выполнении обратного тестирования ES. Этот график отображает данные возвратов относительно данных VaR и ES.

VaRInd = 2;
figure;
plot(Dates,Returns,Dates,-VaR(:,VaRInd),Dates,-ES(:,VaRInd))
legend('Returns','VaR','ES')
title(['Test Data, ' num2str(VaRLevel(VaRInd)*100) '% Confidence'])
grid on

Figure contains an axes. The axes with title Test Data, 97.5% Confidence contains 3 objects of type line. These objects represent Returns, VaR, ES.

Шаг 3. Создайте esbacktestbysim объект.

Создайте esbacktestbysim объект, использующий esbacktestbysim. The Distribution информация используется для моделирования возвратов для оценки значимости тестов. Симуляция для оценки значимости запускается по умолчанию при создании esbacktestbysim объект. Поэтому результаты тестирования доступны при создании объекта. Можно задать дополнительный входной параметр пары "имя-значение" 'Simulate' на false чтобы избежать симуляции, в этом случае можно использовать simulate функция перед запросом результатов тестирования.

rng('default'); % for reproducibility
IDs = ["t(dof) 95%","t(dof) 97.5%","t(dof) 99%"];
IDs = strrep(IDs,"dof",num2str(DoF));
ebts = esbacktestbysim(Returns,VaR,ES,Distribution,...
   'DegreesOfFreedom',DoF,...
   'Location',Mu,...
   'Scale',Sigma,...
   'PortfolioID',"S&P",...
   'VaRID',IDs,...
   'VaRLevel',VaRLevel);
disp(ebts)
  esbacktestbysim with properties:

    PortfolioData: [1966x1 double]
          VaRData: [1966x3 double]
           ESData: [1966x3 double]
     Distribution: [1x1 struct]
      PortfolioID: "S&P"
            VaRID: ["t(10) 95%"    "t(10) 97.5%"    "t(10) 99%"]
         VaRLevel: [0.9500 0.9750 0.9900]
disp(ebts.Distribution) % distribution information stored in the 'Distribution' property
                Name: "t"
    DegreesOfFreedom: 10
            Location: 0
               Scale: [1966x1 double]

Шаг 4. Сгенерируйте сводный отчет ES.

Сводный отчет ES предоставляет информацию о тяжести нарушений, то есть о том, насколько большие потери сравниваются с VaR в дни, когда VaR был нарушен. The ObservedSeverity (или наблюдаемый средний коэффициент тяжести) столбец представляет собой отношение потерь к VaR в течение дней, когда VaR нарушен. The ExpectedSeverity (или ожидаемый средний коэффициент тяжести) показывает среднее отношение ES к VaR в дни, когда VaR нарушен.

S = summary(ebts);   
disp(S)
    PortfolioID        VaRID        VaRLevel    ObservedLevel    ExpectedSeverity    ObservedSeverity    Observations    Failures    Expected    Ratio     Missing
    ___________    _____________    ________    _____________    ________________    ________________    ____________    ________    ________    ______    _______

       "S&P"       "t(10) 95%"        0.95         0.94812            1.3288              1.4515             1966          102         98.3      1.0376       0   
       "S&P"       "t(10) 97.5%"     0.975         0.97202            1.2652              1.4134             1966           55        49.15       1.119       0   
       "S&P"       "t(10) 99%"        0.99         0.98627            1.2169              1.3947             1966           27        19.66      1.3733       0   

Шаг 5. Запустите отчет для всех тестов.

Запустите все тесты и сгенерируйте отчет только о принятии или отклонении результатов.

t = runtests(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Conditional    Unconditional    Quantile    MinBiasAbsolute    MinBiasRelative
    ___________    _____________    ________    ___________    _____________    ________    _______________    _______________

       "S&P"       "t(10) 95%"        0.95        reject          accept         reject         accept             reject     
       "S&P"       "t(10) 97.5%"     0.975        reject          reject         reject         reject             reject     
       "S&P"       "t(10) 99%"        0.99        reject          reject         reject         reject             reject     

Шаг 6. Запустите условный тест.

Запустите индивидуальный тест для условного теста (также известного как первый тест Acerbi-Szekely). Второй выход (s) содержит моделируемые статистические значения теста, принимая, что распределительные допущения верны. Каждая строка s выход соответствует VaRID в соответствующей строке t выход. Используйте эту моделируемую статистику, чтобы определить значимость тестов.

[t,s] = conditional(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Conditional    ConditionalOnly    PValue    TestStatistic    CriticalValue    VaRTest    VaRTestResult    VaRTestPValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    ___________    _______________    ______    _____________    _____________    _______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95        reject           reject             0       -0.092302        -0.043941       "pof"        accept           0.70347           1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975        reject           reject         0.001        -0.11714        -0.052575       "pof"        accept           0.40682           1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99        reject           reject         0.003        -0.14608        -0.085433       "pof"        accept           0.11536           1966          1000         0.95   
whos s
  Name      Size              Bytes  Class     Attributes

  s         3x1000            24000  double              

Шаг 7. Визуализируйте значимость условного теста.

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

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('Conditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Figure contains 3 axes. Axes 1 with title Conditional: t(10) 95%, p-value: 0.000 contains 2 objects of type histogram, line. Axes 2 with title Conditional: t(10) 97.5%, p-value: 0.001 contains 2 objects of type histogram, line. Axes 3 with title Conditional: t(10) 99%, p-value: 0.003 contains 2 objects of type histogram, line.

Шаг 8. Запустите безусловный тест.

Запустите индивидуальный тест для безусловного теста (также известного как второй тест Acerbi-Szekely).

[t,s] = unconditional(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Unconditional    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    _____________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95         accept        0.093       -0.13342         -0.16252           1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975         reject        0.031       -0.25011          -0.2268           1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99         reject        0.008       -0.57396         -0.38264           1966          1000         0.95   

Шаг 9. Визуализируйте значимость безусловного теста.

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

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('Unconditional: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Figure contains 3 axes. Axes 1 with title Unconditional: t(10) 95%, p-value: 0.093 contains 2 objects of type histogram, line. Axes 2 with title Unconditional: t(10) 97.5%, p-value: 0.031 contains 2 objects of type histogram, line. Axes 3 with title Unconditional: t(10) 99%, p-value: 0.008 contains 2 objects of type histogram, line.

Этап 10. Запустите тест квантиля.

Запустите отдельный тест для теста квантиля (также известный как третий тест Acerbi-Szekely).

[t,s] = quantile(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    Quantile    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    ________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95       reject     0.002       -0.10602         -0.055798          1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975       reject         0       -0.15697         -0.073513          1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99       reject         0       -0.26561          -0.10117          1966          1000         0.95   

Этап 11. Визуализируйте значимость теста квантиля.

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

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('Quantile: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Figure contains 3 axes. Axes 1 with title Quantile: t(10) 95%, p-value: 0.002 contains 2 objects of type histogram, line. Axes 2 with title Quantile: t(10) 97.5%, p-value: 0.000 contains 2 objects of type histogram, line. Axes 3 with title Quantile: t(10) 99%, p-value: 0.000 contains 2 objects of type histogram, line.

Этап 10. Запустите тест minBiasAbsolute.

Запустите отдельный тест для теста minBiasAbsolute.

[t,s] = minBiasAbsolute(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    MinBiasAbsolute    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    _______________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95          accept         0.062      -0.0014247       -0.0015578          1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975          reject         0.029      -0.0026674       -0.0023251          1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99          reject         0.005      -0.0060982       -0.0039004          1966          1000         0.95   

Этап 11. Визуализируйте значимость теста minBiasAbsolute.

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

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('minBiasAbsolute: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Figure contains 3 axes. Axes 1 with title minBiasAbsolute: t(10) 95%, p-value: 0.062 contains 2 objects of type histogram, line. Axes 2 with title minBiasAbsolute: t(10) 97.5%, p-value: 0.029 contains 2 objects of type histogram, line. Axes 3 with title minBiasAbsolute: t(10) 99%, p-value: 0.005 contains 2 objects of type histogram, line.

Этап 10. Запустите тест minBiasRelative.

Запустите отдельный тест для теста minBiasRelative.

[t,s] = minBiasRelative(ebts);
disp(t)
    PortfolioID        VaRID        VaRLevel    MinBiasRelative    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    _______________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95          reject         0.003       -0.10509         -0.056072          1966          1000         0.95   
       "S&P"       "t(10) 97.5%"     0.975          reject             0       -0.15603         -0.073324          1966          1000         0.95   
       "S&P"       "t(10) 99%"        0.99          reject             0       -0.26716            -0.104          1966          1000         0.95   

Этап 11. Визуализируйте значимость теста minBiasAbsolute.

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

NumVaRs = height(t);
figure;
for VaRInd = 1:NumVaRs
   subplot(NumVaRs,1,VaRInd)
   histogram(s(VaRInd,:));
   hold on;
   plot(t.TestStatistic(VaRInd),0,'*');
   hold off;
   Title = sprintf('minBiasRelative: %s, p-value: %4.3f',t.VaRID(VaRInd),t.PValue(VaRInd));
   title(Title)
end

Figure contains 3 axes. Axes 1 with title minBiasRelative: t(10) 95%, p-value: 0.003 contains 2 objects of type histogram, line. Axes 2 with title minBiasRelative: t(10) 97.5%, p-value: 0.000 contains 2 objects of type histogram, line. Axes 3 with title minBiasRelative: t(10) 99%, p-value: 0.000 contains 2 objects of type histogram, line.

Этап 12. Запустите новую симуляцию, чтобы оценить значимость тестов.

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

ebts = simulate(ebts,'NumScenarios',5000);
t = unconditional(ebts);  % new results for unconditional test
disp(t)
    PortfolioID        VaRID        VaRLevel    Unconditional    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____________    ________    _____________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "t(10) 95%"        0.95         accept        0.0984      -0.13342         -0.17216           1966          5000         0.95   
       "S&P"       "t(10) 97.5%"     0.975         reject        0.0456      -0.25011         -0.24251           1966          5000         0.95   
       "S&P"       "t(10) 99%"        0.99         reject        0.0104      -0.57396         -0.40089           1966          5000         0.95   

См. также

| | | | | | |

Похожие примеры

Подробнее о