exponenta event banner

Ожидаемая оценка дефицита и обратное тестирование

В этом примере показано, как выполнять оценку и обратную проверку моделей ожидаемого дефицита.

Оценка стоимости риска (VaR) и ожидаемого дефицита (ES) должна оцениваться вместе, поскольку оценка ES зависит от оценки VaR. Используя исторические данные, этот пример оценивает VaR и ES через тестовое окно, используя исторические и параметрические подходы VaR. Параметрический VaR вычисляется в предположении о нормальном и t распределениях.

В этом примере выполняются обратные тесты ES, поддерживаемые в esbacktest, esbacktestbysim, и esbacktestbyde функциональные возможности для оценки производительности моделей ES в окне тестирования.

esbacktest не требует информации о распределении. Как и varbacktest объект, esbacktest объект принимает только тестовые данные в качестве входных данных. Входные данные для esbacktest включают портфельные данные, данные VaR и соответствующий уровень VaR, а также данные ES, поскольку это то, что протестировано обратно. Как varbacktest, esbacktest запускает тесты для одного портфеля, но может тестировать несколько моделей и несколько уровней VaR одновременно. esbacktest объект использует предварительно вычисленные таблицы критических значений для определения необходимости отклонения моделей. Эти табличные тесты могут применяться в качестве приближенных тестов для любой модели VaR. В этом примере они применяются к историческим и параметрическим моделям VaR. Они могут использоваться для других подходов VaR, таких как модели Монте-Карло или Extreme-Value.

Напротив, esbacktestbysim и esbacktestbyde объекты требуют информацию о распределении, а именно имя распределения (normal или t) и параметры распределения для каждого дня в окне теста. esbacktestbysim и esbacktestbyde может тестировать только одну модель за один раз, поскольку они связаны с определенным распределением, хотя можно по-прежнему тестировать несколько уровней VaR одновременно. esbacktestbysim объект реализует тесты на основе моделирования и использует предоставленную информацию о распределении для выполнения моделирования для определения критических значений. esbacktestbyde объект реализует тесты, в которых критические значения получаются либо из аппроксимации большой выборки, либо из моделирования (конечная выборка). conditionalDE тест в esbacktestbyde объектные тесты на независимость с течением времени, для оценки наличия признаков автокорреляции в ряду потерь хвоста. Все остальные тесты являются тестами серьезности, чтобы оценить, согласуется ли величина потерь хвоста с прогнозами модели. Оба esbacktestbysim и esbacktestbyde объекты поддерживают нормальное распределение и распределение t. Эти тесты могут использоваться для любой модели, где основное распределение результатов портфеля является нормальным или t, такой как экспоненциально взвешенные скользящие средние (EWMA), дельта-гамма или обобщенные модели авторегрессивной условной гетероскедастичности (GARCH).

Для получения дополнительной информации о методологии тестирования ES см. esbacktest, esbacktestbysim, и esbacktestbyde, также см. [1], [2], [3] и [5] в ссылках.

Оценка VaR и ES

Набор данных, использованный в этом примере, содержит исторические данные для индекса S&P, охватывающего приблизительно 10 лет, с середины 1993 года по середину 2003 года. Размер окна оценки определяется как 250 дней, так что полный год данных используется для оценки как исторического VaR, так и волатильности. Тестовое окно в этом примере работает с начала 1995 года по конец 2002 года.

Во всем этом примере используется уровень достоверности VaR 97,5%, как это требуется в соответствии с регламентом «Фундаментальный обзор торговой книги» (FRTB); см. [4].

load VaRExampleData.mat
Returns = tick2ret(sp);
DateReturns = dates(2:end);
SampleSize = length(Returns);

TestWindowStart = find(year(DateReturns)==1995,1);
TestWindowEnd = find(year(DateReturns)==2002,1,'last');
TestWindow = TestWindowStart:TestWindowEnd;
EstimationWindowSize = 250;

DatesTest = DateReturns(TestWindow);
ReturnsTest = Returns(TestWindow);

VaRLevel = 0.975;

Исторический VaR является непараметрическим подходом для оценки VaR и ES по историческим данным через окно оценки. VaR является процентилем, и существуют альтернативные способы оценки процентиля распределения на основе конечной выборки. Одним из общих подходов является использование prctile функция. Альтернативный подход заключается в сортировке данных и определении точки отсечения на основе размера выборки и доверительного уровня VaR. Аналогичным образом, существуют альтернативные подходы для оценки ES на основе конечной выборки.

hHistoricalVaRES локальная функция в нижней части этого примера использует метод конечной выборки для оценки VaR и ES в соответствии с методикой, описанной в [7]. В конечной выборке количество наблюдений ниже VaR может не совпадать с общей вероятностью хвоста, соответствующей уровню VaR. Например, для 100 наблюдений и уровня VaR 97,5%, хвостовые наблюдения составляют 2, что составляет 2% от выборки, однако желаемая вероятность хвоста составляет 2,5%. Это может быть еще хуже для образцов с повторными наблюдаемыми значениями, например, если второе и третье отсортированные значения будут одинаковыми, оба равны VaR, то только наименьшее наблюдаемое значение в образце будет иметь значение меньше, чем VaR, и это составляет 1% образца, а не желаемые 2,5%. Метод, реализованный в hHistoricalVaRES делает поправку так, чтобы вероятность хвоста всегда соответствовала уровню VaR; для получения подробной информации см. [7].

VaR_Hist = zeros(length(TestWindow),1);
ES_Hist = zeros(length(TestWindow),1);

for t = TestWindow
   
   i = t - TestWindowStart + 1;
   EstimationWindow = t-EstimationWindowSize:t-1;
   
   [VaR_Hist(i),ES_Hist(i)] = hHistoricalVaRES(Returns(EstimationWindow),VaRLevel);
   
end

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

figure;
plot(DatesTest,ReturnsTest,DatesTest,-VaR_Hist,DatesTest,-ES_Hist)
legend('Returns','VaR','ES','Location','southeast')
title('Historical VaR and ES')
grid on

Figure contains an axes. The axes with title Historical VaR and ES contains 3 objects of type line. These objects represent Returns, VaR, ES.

Для параметрических моделей должна быть вычислена волатильность возвратов. Учитывая волатильность, VaR и ES могут быть вычислены аналитически.

В этом примере предполагается нулевое среднее, но может быть оценено аналогичным образом.

Для нормального распределения расчетная волатильность используется непосредственно для получения VaR и ES. Для распределения по шкале местоположения t параметр масштаба вычисляется из оцененной волатильности и степеней свободы.

hNormalVaRES и hTVaRES локальные функции принимают за входные данные параметры распределения (которые могут передаваться как массивы) и возвращают VaR и ES. Эти локальные функции используют аналитические выражения для VaR и ES для нормального и t распределения по масштабу местоположения соответственно; для получения подробной информации см. [6].

% Estimate volatility over the test window
Volatility = zeros(length(TestWindow),1);

for t = TestWindow
   
   i = t - TestWindowStart + 1;
   EstimationWindow = t-EstimationWindowSize:t-1;
   
   Volatility(i) = std(Returns(EstimationWindow));
   
end

% Mu=0 in this example
Mu = 0;

% Sigma (standard deviation parameter) for normal distribution = Volatility
SigmaNormal = Volatility;
% Sigma (scale parameter) for t distribution = Volatility * sqrt((DoF-2)/DoF)
SigmaT10 = Volatility*sqrt((10-2)/10);
SigmaT5 = Volatility*sqrt((5-2)/5);

% Estimate VaR and ES, normal
[VaR_Normal,ES_Normal] = hNormalVaRES(Mu,SigmaNormal,VaRLevel);
% Estimate VaR and ES, t with 10 and 5 degrees of freedom
[VaR_T10,ES_T10] = hTVaRES(10,Mu,SigmaT10,VaRLevel);
[VaR_T5,ES_T5] = hTVaRES(5,Mu,SigmaT5,VaRLevel);

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

figure;
plot(DatesTest,ReturnsTest,DatesTest,-VaR_Normal,DatesTest,-ES_Normal)
legend('Returns','VaR','ES','Location','southeast')
title('Normal VaR and ES')
grid on

Figure contains an axes. The axes with title Normal VaR and ES contains 3 objects of type line. These objects represent Returns, VaR, ES.

Для параметрического подхода одни и те же шаги могут использоваться для оценки VaR и ES для альтернативных подходов, таких как EWMA, дельта-гамма аппроксимации и модели GARCH. Во всех этих параметрических подходах волатильность оценивается каждый день либо из обновления EWMA, либо из дельта-гамма-аппроксимации, либо как условная волатильность модели GARCH. Затем волатильность может быть использована, как описано выше, для получения оценок VaR и ES для нормального или t распределения по масштабу местоположения.

Обратный тест ES без информации о распределении

esbacktest объект предлагает два обратных теста для моделей ES. Оба теста используют безусловную статистику тестов, предложенную Acerbi и Szekely в [1], приведенную

Zuncond=1NpVaR∑t=1NXtItESt+1

где

  • N - количество периодов времени в окне тестирования.

  • Xt - результат портфеля, то есть доходность портфеля или прибыль и убыток портфеля за период t.

  • pVaR - вероятность отказа VaR, определяемая как уровень 1-VaR.

  • Est - это предполагаемый дефицит за период t.

  • Это индикатор отказа VaR в периоде t со значением 1, если Xt < -VaRt, и 0 в противном случае.

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

Статистика безусловного теста оказывается стабильной в диапазоне допущений распределения для Xt, от тонкохвостых распределений, таких как нормальные, до тяжелохвостых распределений, таких как t с низкими степенями свободы (высокие одинарные цифры). Только самые тяжелые распределения t (низкие одинарные цифры) приводят к более заметным различиям в критических значениях. Для получения дополнительной информации см. [1].

esbacktest объект использует преимущества стабильности критических значений статистики безусловного теста и использует таблицы предварительно вычисленных критических значений для выполнения обратных тестов ES. esbacktest имеет два набора таблиц критических значений. Первый набор критических значений предполагает, что результаты портфеля Xt следуют стандартному нормальному распределению; это unconditionalNormal тест. Второй набор критических значений использует максимально тяжелые хвосты, он предполагает, что результаты портфеля Xt следуют за распределением с 3 степенями свободы; это unconditionalT тест.

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

esbacktest объект принимает в качестве входных тестовые данные, но информация о распределении не предоставляется esbacktest. При необходимости можно указать идентификаторы для портфеля и для каждой из моделей VaR и ES, подвергающихся тестированию. Хотя идентификаторы модели в этом примере имеют ссылки на распределение (например, "normal" или "t 10"), это только метки, используемые для целей отчетности. В тестах не используется тот факт, что первая модель является историческим методом VaR или что другие модели являются альтернативными параметрическими моделями VaR. Параметры распределения, использованные для оценки VaR и ES в предыдущем разделе, не передаются в esbacktest, и никоим образом не используются в этом разделе. Эти параметры, однако, должны быть предоставлены для тестов на основе моделирования, поддерживаемых в esbacktestbysim в разделе «Тесты на основе моделирования» и для тестов, поддерживаемых в esbacktestbyde объект, описанный в разделе «Испытания больших образцов и моделирования».

ebt = esbacktest(ReturnsTest,[VaR_Hist VaR_Normal VaR_T10 VaR_T5],...
   [ES_Hist ES_Normal ES_T10 ES_T5],'PortfolioID',"S&P, 1995-2002",...
   'VaRID',["Historical" "Normal","T 10","T 5"],'VaRLevel',VaRLevel);
disp(ebt)
  esbacktest with properties:

    PortfolioData: [2087x1 double]
          VaRData: [2087x4 double]
           ESData: [2087x4 double]
      PortfolioID: "S&P, 1995-2002"
            VaRID: ["Historical"    "Normal"    "T 10"    "T 5"]
         VaRLevel: [0.9750 0.9750 0.9750 0.9750]

Запустите анализ, запустив summary функция.

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

    "S&P, 1995-2002"    "Historical"     0.975         0.96694            1.3711              1.4039             2087           69        52.175     1.3225       0   
    "S&P, 1995-2002"    "Normal"         0.975         0.97077            1.1928               1.416             2087           61        52.175     1.1691       0   
    "S&P, 1995-2002"    "T 10"           0.975         0.97173            1.2652              1.4063             2087           59        52.175     1.1308       0   
    "S&P, 1995-2002"    "T 5"            0.975         0.97173              1.37              1.4075             2087           59        52.175     1.1308       0   

ObservedSeverity в столбце показано среднее отношение потерь к VaR в периоды нарушения VaR. ExpectedSeverity в столбце используется среднее отношение ES к VaR для периодов нарушения VaR. Для "Historical" и "T 5" модели, наблюдаемая и ожидаемая серьезность сопоставимы. Тем не менее, для "Historical" метод, наблюдаемое количество отказов (Failures столбец) значительно выше ожидаемого количества отказов (Expected колонка), примерно на 32% выше (см. Ratio столбец). Оба "Normal" и "T 10" модели наблюдали степень серьезности намного выше ожидаемой степени серьезности.

figure;

subplot(2,1,1)
bar(categorical(s.VaRID),[s.ExpectedSeverity,s.ObservedSeverity])
ylim([1 1.5])
legend('Expected','Observed','Location','southeast')
title('Average Severity Ratio')

subplot(2,1,2)
bar(categorical(s.VaRID),[s.Expected,s.Failures])
ylim([40 70])
legend('Expected','Observed','Location','southeast')
title('Number of VaR Failures')

Figure contains 2 axes. Axes 1 with title Average Severity Ratio contains 2 objects of type bar. These objects represent Expected, Observed. Axes 2 with title Number of VaR Failures contains 2 objects of type bar. These objects represent Expected, Observed.

runtests запускает все тесты и сообщает только результат принятия или отклонения. Безусловный нормальный тест более строг. Для 8-летнего тестового окна здесь две модели не проходят оба теста ("Historical" и "Normal"), одна модель не проходит безусловный нормальный тест, но проходит безусловный t-тест ("T 10"), и одна модель проходит оба теста ("T 5").

t = runtests(ebt);
disp(t)
      PortfolioID          VaRID        VaRLevel    UnconditionalNormal    UnconditionalT
    ________________    ____________    ________    ___________________    ______________

    "S&P, 1995-2002"    "Historical"     0.975            reject               reject    
    "S&P, 1995-2002"    "Normal"         0.975            reject               reject    
    "S&P, 1995-2002"    "T 10"           0.975            reject               accept    
    "S&P, 1995-2002"    "T 5"            0.975            accept               accept    

Дополнительные сведения о тестах можно получить, вызвав отдельные функции тестирования. Вот подробности для unconditionalNormal тест.

t = unconditionalNormal(ebt);
disp(t)
      PortfolioID          VaRID        VaRLevel    UnconditionalNormal     PValue      TestStatistic    CriticalValue    Observations    TestLevel
    ________________    ____________    ________    ___________________    _________    _____________    _____________    ____________    _________

    "S&P, 1995-2002"    "Historical"     0.975            reject           0.0047612      -0.37917         -0.23338           2087          0.95   
    "S&P, 1995-2002"    "Normal"         0.975            reject           0.0043287      -0.38798         -0.23338           2087          0.95   
    "S&P, 1995-2002"    "T 10"           0.975            reject            0.037528       -0.2569         -0.23338           2087          0.95   
    "S&P, 1995-2002"    "T 5"            0.975            accept             0.13069      -0.16179         -0.23338           2087          0.95   

Вот подробности для unconditionalT тест.

t = unconditionalT(ebt);
disp(t)
      PortfolioID          VaRID        VaRLevel    UnconditionalT     PValue     TestStatistic    CriticalValue    Observations    TestLevel
    ________________    ____________    ________    ______________    ________    _____________    _____________    ____________    _________

    "S&P, 1995-2002"    "Historical"     0.975          reject        0.017032      -0.37917         -0.27415           2087          0.95   
    "S&P, 1995-2002"    "Normal"         0.975          reject        0.015375      -0.38798         -0.27415           2087          0.95   
    "S&P, 1995-2002"    "T 10"           0.975          accept        0.062835       -0.2569         -0.27415           2087          0.95   
    "S&P, 1995-2002"    "T 5"            0.975          accept         0.16414      -0.16179         -0.27415           2087          0.95   

Использование тестов для более расширенного анализа

В этом разделе показано, как использовать esbacktest объект для выполнения определяемых пользователем тестов светофора, а также для запуска тестов по скользящим тестовым окнам.

Одним из способов определения теста светофора является объединение результатов безусловного нормального и безусловного t тестов. Поскольку безусловное нормальное состояние является более строгим, можно определить тест светофора со следующими уровнями:

  • Зеленый: Модель проходит как безусловный нормальный, так и безусловный t-тесты.

  • Желтый: Модель не проходит безусловный обычный тест, но проходит безусловный t-тест.

  • Красный: Модель отвергается как безусловным нормальным, так и безусловным t тестами.

t = runtests(ebt);
TLValue = (t.UnconditionalNormal=='reject')+(t.UnconditionalT=='reject');
t.TrafficLight = categorical(TLValue,0:2,{'green','yellow','red'},'Ordinal',true);
disp(t)
      PortfolioID          VaRID        VaRLevel    UnconditionalNormal    UnconditionalT    TrafficLight
    ________________    ____________    ________    ___________________    ______________    ____________

    "S&P, 1995-2002"    "Historical"     0.975            reject               reject           red      
    "S&P, 1995-2002"    "Normal"         0.975            reject               reject           red      
    "S&P, 1995-2002"    "T 10"           0.975            reject               accept           yellow   
    "S&P, 1995-2002"    "T 5"            0.975            accept               accept           green    

Альтернативный пользовательский тест светофора может использовать один тест, но с различными уровнями достоверности теста:

  • Зеленый: Результат: 'accept'с уровнем теста 95%.

  • Желтый: Результат: 'reject' на уровне 95% теста, но 'accept'на 99%.

  • Красный: Результат: 'reject' на уровне 99% теста.

Аналогичный тест предлагается в [1] с высоким уровнем тестирования 99,99%.

t95 = runtests(ebt); % 95% is the default test level value
t99 = runtests(ebt,'TestLevel',0.99);
TLValue = (t95.UnconditionalNormal=='reject')+(t99.UnconditionalNormal=='reject');
tRolling = t95(:,1:3);
tRolling.UnconditionalNormal95 = t95.UnconditionalNormal;
tRolling.UnconditionalNormal99 = t99.UnconditionalNormal;
tRolling.TrafficLight = categorical(TLValue,0:2,{'green','yellow','red'},'Ordinal',true);
disp(tRolling)
      PortfolioID          VaRID        VaRLevel    UnconditionalNormal95    UnconditionalNormal99    TrafficLight
    ________________    ____________    ________    _____________________    _____________________    ____________

    "S&P, 1995-2002"    "Historical"     0.975             reject                   reject               red      
    "S&P, 1995-2002"    "Normal"         0.975             reject                   reject               red      
    "S&P, 1995-2002"    "T 10"           0.975             reject                   accept               yellow   
    "S&P, 1995-2002"    "T 5"            0.975             accept                   accept               green    

Результаты теста могут отличаться в различных окнах теста. В этом случае годичное скользящее окно используется для выполнения обратных тестов ES в течение восьми отдельных лет, охватываемых исходным тестовым окном. Первый пользовательский светофор, описанный выше, добавляется в таблицу результатов тестирования. summary функция также вызывается для каждого отдельного года для просмотра истории серьезности и количества отказов VaR.

sRolling = table;
tRolling = table;
for Year = 1995:2002
   Ind = year(DatesTest)==Year;
   PortID = ['S&P, ' num2str(Year)];
   PortfolioData = ReturnsTest(Ind);
   VaRData = [VaR_Hist(Ind) VaR_Normal(Ind) VaR_T10(Ind) VaR_T5(Ind)];
   ESData = [ES_Hist(Ind) ES_Normal(Ind) ES_T10(Ind) ES_T5(Ind)];
   ebt = esbacktest(PortfolioData,VaRData,ESData,...
      'PortfolioID',PortID,'VaRID',["Historical" "Normal" "T 10" "T 5"],...
      'VaRLevel',VaRLevel);
   if Year == 1995
      sRolling = summary(ebt);
      tRolling = runtests(ebt);
   else
      sRolling = [sRolling;summary(ebt)]; %#ok<AGROW> 
      tRolling = [tRolling;runtests(ebt)]; %#ok<AGROW> 
   end
end

% Optional: Add the first user-defined traffic light test described above
TLValue = (tRolling.UnconditionalNormal=='reject')+(tRolling.UnconditionalT=='reject');
tRolling.TrafficLight = categorical(TLValue,0:2,{'green','yellow','red'},'Ordinal',true);

Отображение результатов по одной модели за раз. "T 5" модель имеет наилучшую производительность в этих тестах (два "yellow") и "Normal" модель наихудшего (три "red"и один "yellow").

disp(tRolling(tRolling.VaRID=="Historical",:))
    PortfolioID       VaRID        VaRLevel    UnconditionalNormal    UnconditionalT    TrafficLight
    ___________    ____________    ________    ___________________    ______________    ____________

    "S&P, 1995"    "Historical"     0.975            accept               accept           green    
    "S&P, 1996"    "Historical"     0.975            reject               accept           yellow   
    "S&P, 1997"    "Historical"     0.975            reject               reject           red      
    "S&P, 1998"    "Historical"     0.975            accept               accept           green    
    "S&P, 1999"    "Historical"     0.975            accept               accept           green    
    "S&P, 2000"    "Historical"     0.975            accept               accept           green    
    "S&P, 2001"    "Historical"     0.975            accept               accept           green    
    "S&P, 2002"    "Historical"     0.975            reject               reject           red      
disp(tRolling(tRolling.VaRID=="Normal",:))
    PortfolioID     VaRID      VaRLevel    UnconditionalNormal    UnconditionalT    TrafficLight
    ___________    ________    ________    ___________________    ______________    ____________

    "S&P, 1995"    "Normal"     0.975            accept               accept           green    
    "S&P, 1996"    "Normal"     0.975            reject               reject           red      
    "S&P, 1997"    "Normal"     0.975            reject               reject           red      
    "S&P, 1998"    "Normal"     0.975            reject               accept           yellow   
    "S&P, 1999"    "Normal"     0.975            accept               accept           green    
    "S&P, 2000"    "Normal"     0.975            accept               accept           green    
    "S&P, 2001"    "Normal"     0.975            accept               accept           green    
    "S&P, 2002"    "Normal"     0.975            reject               reject           red      
disp(tRolling(tRolling.VaRID=="T 10",:))
    PortfolioID    VaRID     VaRLevel    UnconditionalNormal    UnconditionalT    TrafficLight
    ___________    ______    ________    ___________________    ______________    ____________

    "S&P, 1995"    "T 10"     0.975            accept               accept           green    
    "S&P, 1996"    "T 10"     0.975            reject               reject           red      
    "S&P, 1997"    "T 10"     0.975            reject               accept           yellow   
    "S&P, 1998"    "T 10"     0.975            accept               accept           green    
    "S&P, 1999"    "T 10"     0.975            accept               accept           green    
    "S&P, 2000"    "T 10"     0.975            accept               accept           green    
    "S&P, 2001"    "T 10"     0.975            accept               accept           green    
    "S&P, 2002"    "T 10"     0.975            reject               reject           red      
disp(tRolling(tRolling.VaRID=="T 5",:))
    PortfolioID    VaRID    VaRLevel    UnconditionalNormal    UnconditionalT    TrafficLight
    ___________    _____    ________    ___________________    ______________    ____________

    "S&P, 1995"    "T 5"     0.975            accept               accept           green    
    "S&P, 1996"    "T 5"     0.975            reject               accept           yellow   
    "S&P, 1997"    "T 5"     0.975            accept               accept           green    
    "S&P, 1998"    "T 5"     0.975            accept               accept           green    
    "S&P, 1999"    "T 5"     0.975            accept               accept           green    
    "S&P, 2000"    "T 5"     0.975            accept               accept           green    
    "S&P, 2001"    "T 5"     0.975            accept               accept           green    
    "S&P, 2002"    "T 5"     0.975            reject               accept           yellow   

2002 год является примером года с относительно небольшой степенью серьезности, но при этом многие сбои VaR. Все модели работают плохо в 2002 году, хотя наблюдаемые степени серьезности низки. Однако количество отказов VaR для некоторых моделей более чем в два раза превышает ожидаемое количество отказов VaR.

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

    "S&P, 2002"    "Historical"     0.975         0.94636            1.2022                 1.2             261            14        6.525      2.1456       0   
    "S&P, 2002"    "Normal"         0.975         0.94636            1.1928              1.2111             261            14        6.525      2.1456       0   
    "S&P, 2002"    "T 10"           0.975         0.95019            1.2652              1.2066             261            13        6.525      1.9923       0   
    "S&P, 2002"    "T 5"            0.975         0.95019              1.37              1.2077             261            13        6.525      1.9923       0   

На следующем рисунке показаны данные по всему 8-летнему окну и коэффициент серьезности год к году (ожидаемый и наблюдаемый) для "Historical" модель. Абсолютный размер потерь не так важен, как относительный размер по сравнению с ES (или эквивалентно, по сравнению с VaR). И в 1997, и в 1998 годах имели место большие потери, сопоставимые по своим масштабам. Однако ожидаемая степень серьезности в 1998 году гораздо выше (более крупные оценки ES). В целом, "Historical" метод, по-видимому, хорошо работает в отношении коэффициентов серьезности.

sH = sRolling(sRolling.VaRID=="Historical",:);

figure;

subplot(2,1,1)
FailureInd = ReturnsTest<-VaR_Hist;
plot(DatesTest,ReturnsTest,DatesTest,-VaR_Hist,DatesTest,-ES_Hist)
hold on
plot(DatesTest(FailureInd),ReturnsTest(FailureInd),'.')
hold off
legend('Returns','VaR','ES','Location','best')
title('Historical VaR and ES')
grid on

subplot(2,1,2)
bar(1995:2002,[sH.ExpectedSeverity,sH.ObservedSeverity])
ylim([1 1.8])
legend('Expected','Observed','Location','best')
title('Yearly Average Severity Ratio, Historical VaR')

Figure contains 2 axes. Axes 1 with title Historical VaR and ES contains 4 objects of type line. These objects represent Returns, VaR, ES. Axes 2 with title Yearly Average Severity Ratio, Historical VaR contains 2 objects of type bar. These objects represent Expected, Observed.

Однако аналогичная визуализация с ожидаемым против наблюдаемого количеством отказов VaR показывает, что "Historical" способ имеет тенденцию нарушаться гораздо больше раз, чем ожидалось. Например, хотя в 2002 году ожидаемый средний коэффициент серьезности очень близок к наблюдаемому, количество отказов VaR более чем в два раза превысило ожидаемое число. Это приводит к ошибкам тестирования как для безусловного нормального, так и для безусловного t тестов.

figure;

subplot(2,1,1)
plot(DatesTest,ReturnsTest,DatesTest,-VaR_Hist,DatesTest,-ES_Hist)
hold on
plot(DatesTest(FailureInd),ReturnsTest(FailureInd),'.')
hold off
legend('Returns','VaR','ES','Location','best')
title('Historical VaR and ES')
grid on

subplot(2,1,2)
bar(1995:2002,[sH.Expected,sH.Failures])
legend('Expected','Observed','Location','best')
title('Yearly VaR Failures, Historical VaR')

Figure contains 2 axes. Axes 1 with title Historical VaR and ES contains 4 objects of type line. These objects represent Returns, VaR, ES. Axes 2 with title Yearly VaR Failures, Historical VaR contains 2 objects of type bar. These objects represent Expected, Observed.

Тесты на основе моделирования

esbacktestbysim объект поддерживает пять обратных тестов ES на основе моделирования. esbacktestbysim требуется информация о распределении для результатов портфеля, а именно имя распределения ("normal" или "t") и параметры распределения для каждого дня в окне тестирования. esbacktestbysim использует предоставленную информацию о распределении для выполнения моделирования для определения критических значений. Тесты, поддерживаемые в esbacktestbysim являются conditional, unconditional, quantile, minBiasAbsolute, и minBiasRelative. Это реализации тестов, предложенных Acerbi и Szekely в [1], и [2], [3] на 2017 и 2019 годы.

esbacktestbysim объект поддерживает нормальное распределение и распределение t. Эти тесты могут использоваться для любой модели, где основное распределение результатов портфеля является нормальным или t, такой как экспоненциально взвешенные скользящие средние (EWMA), дельта-гамма или обобщенные модели авторегрессивной условной гетероскедастичности (GARCH).

Обратные тесты ES обязательно аппроксимируются тем, что они чувствительны к ошибкам в прогнозируемом VaR. Однако минимально смещенный тест имеет лишь небольшую чувствительность к ошибкам VaR, и чувствительность является пруденциальной, в том смысле, что ошибки VaR приводят к более карательному тесту ES. Подробности см. в Acerbi-Szekely ([2], [3] за 2017 и 2019 годы). При наличии информации о распределении рекомендуется тест с минимальным смещением (см. minBiasAbsolute, minBiasRelative).

"Normal", "T 10", и "T 5" модели могут быть подвергнуты обратному тестированию с помощью тестов на основе моделирования в esbacktestbysim. Только в целях иллюстрации "T 5" отбрасывается. Название дистрибутива ("t") и параметры (степени свободы, местоположение и масштаб) предоставляются при esbacktestbysim создается объект.

rng('default'); % for reproducibility; the esbacktestbysim constructor runs a simulation
ebts = esbacktestbysim(ReturnsTest,VaR_T5,ES_T5,"t",'DegreesOfFreedom',5,...
   'Location',Mu,'Scale',SigmaT5,...
   'PortfolioID',"S&P",'VaRID',"T 5",'VaRLevel',VaRLevel);

Рекомендуемый рабочий процесс тот же: сначала запустите summary , затем запустите runtests и затем выполните отдельные тестовые функции.

summary функция предоставляет точно ту же информацию, что и summary функция из esbacktest.

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

       "S&P"       "T 5"     0.975         0.97173             1.37               1.4075             2087           59        52.175     1.1308       0   

runtests функция показывает окончательный результат принятия или отклонения.

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

       "S&P"       "T 5"     0.975        accept          accept         accept         accept             accept     

Дополнительные сведения о результатах теста можно получить путем вызова отдельных функций теста. Например, вызовите minBiasAbsolute тест. Первый выход, t, содержит результаты теста и дополнительные сведения, такие как p-значение, статистика теста и так далее. Второй выход, s, содержит смоделированные значения статистики теста в предположении, что допущения распределения верны. Например, esbacktestbysim сгенерировано 1000 сценариев результатов портфеля в этом случае, где каждый сценарий представляет собой серию из 2087 наблюдений, смоделированных из t случайных величин с 5 степенями свободы и заданными параметрами местоположения и масштаба. Смоделированные значения, возвращенные в необязательном s вывод показывает типичные значения статистики теста, если допущения распределения верны. Это смоделированная статистика, используемая для определения значимости тестов, то есть сообщенных критических значений и значений p.

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

       "S&P"       "T 5"     0.975          accept         0.299      -0.00080059      -0.0030373          2087          1000         0.95   
whos s
  Name      Size              Bytes  Class     Attributes

  s         1x1000             8000  double              

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

ESTestChoice = "MinBiasAbsolute";

switch ESTestChoice
   case 'MinBiasAbsolute'
      [t,s] = minBiasAbsolute(ebts);
   case 'MinBiasRelative'
      [t,s] = minBiasRelative(ebts);
   case 'Conditional'
      [t,s] = conditional(ebts);
   case 'Unconditional'
      [t,s] = unconditional(ebts);
   case 'Quantile'
      [t,s] = quantile(ebts);
end

disp(t)
    PortfolioID    VaRID    VaRLevel    MinBiasAbsolute    PValue    TestStatistic    CriticalValue    Observations    Scenarios    TestLevel
    ___________    _____    ________    _______________    ______    _____________    _____________    ____________    _________    _________

       "S&P"       "T 5"     0.975          accept         0.299      -0.00080059      -0.0030373          2087          1000         0.95   
figure;
histogram(s);
hold on;
plot(t.TestStatistic,0,'*');
hold off;
Title = sprintf('%s: %s, p-value: %4.3f',ESTestChoice,t.VaRID,t.PValue);
title(Title)

Figure contains an axes. The axes with title MinBiasAbsolute: T 5, p-value: 0.299 contains 2 objects of type histogram, line.

Безусловная статистика теста, представленная esbacktestbysim точно такой же, как безусловная статистика теста, сообщенная esbacktest. Однако критические значения, сообщенные esbacktestbysim основаны на моделировании с использованием распределения t с 5 степенями свободы и заданными параметрами местоположения и масштаба. esbacktest объект дает приблизительные результаты тестирования для "T 5" модель, тогда как результаты здесь специфичны для предоставленной информации о распределении. Кроме того, для conditional тест, это визуализация автономного условного теста (ConditionalOnly результат приведен в таблице выше). Окончательный результат условного теста (Conditional столбец) также зависит от предварительного теста VaR (VaRTestResult столбец).

"T 5" модель принимается пятью испытаниями.

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

esbacktestbysim тесты могут выполняться через скользящее окно, следуя тому же подходу, что описан выше для esbacktest. Пользовательские тесты светофора также могут быть определены, например, с использованием двух различных уровней достоверности теста, аналогичных тому, что было сделано выше для esbacktest.

Испытания больших образцов и моделирования

esbacktestbyde объект поддерживает два обратных теста ES с критическими значениями, определенными либо с приближением большой выборки, либо с моделированием (конечная выборка). esbacktestbyde требуется информация о распределении для результатов портфеля, а именно имя распределения ("normal" или "t") и параметры распределения для каждого дня в окне тестирования. Для этого не требуется VaR данных ES. esbacktestbyde использует предоставленную информацию о распределении для отображения результатов портфеля в «ранги», то есть для применения кумулятивной функции распределения для отображения результатов в значения в единичном интервале, где определена тестовая статистика. esbacktestbyde может определить критические значения с помощью аппроксимации большой выборки или моделирования конечной выборки.

Тесты, поддерживаемые в esbacktestbyde являются conditionalDE и unconditionalDE. Это реализации тестов, предложенных Du и Escanciano в [3]. unconditionalDE тесты и все тесты, ранее рассмотренные в этом примере, являются тестами серьезности, которые оценивают, согласуется ли величина потерь хвоста с прогнозами модели. conditionalDE тест, однако, является тестом на независимость с течением времени, который оценивает, есть ли доказательства автокорреляции в серии потерь хвоста.

esbacktestbyde объект поддерживает нормальное распределение и распределение t. Эти тесты могут использоваться для любой модели, где основное распределение результатов портфеля является нормальным или t, такой как экспоненциально взвешенные скользящие средние (EWMA), дельта-гамма или обобщенные модели авторегрессивной условной гетероскедастичности (GARCH).

"Normal", "T 10", и "T 5" модели могут быть подвергнуты обратному тестированию с помощью тестов в esbacktestbyde. Только в целях иллюстрации "T 5" отбрасывается. Название дистрибутива ("t") и параметры (DegreesOfFreedom, Location, и Scale) предоставляются, когда esbacktestbyde создается объект.

rng('default'); % for reproducibility; the esbacktestbyde constructor runs a simulation
ebtde = esbacktestbyde(ReturnsTest,"t",'DegreesOfFreedom',5,...
   'Location',Mu,'Scale',SigmaT5,...
   'PortfolioID',"S&P",'VaRID',"T 5",'VaRLevel',VaRLevel);

Рекомендуемый рабочий процесс тот же: сначала запустите summary , затем запустите runtests и затем выполните отдельные тестовые функции. summary функция предоставляет точно ту же информацию, что и summary функция из esbacktest.

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

       "S&P"       "T 5"     0.975         0.97173             1.37               1.4075             2087           59        52.175     1.1308       0   

runtests функция показывает окончательный результат принятия или отклонения.

t = runtests(ebtde);
disp(t)
    PortfolioID    VaRID    VaRLevel    ConditionalDE    UnconditionalDE
    ___________    _____    ________    _____________    _______________

       "S&P"       "T 5"     0.975         reject            accept     

Дополнительные сведения о результатах теста можно получить путем вызова отдельных функций теста.

t = conditionalDE(ebtde);
disp(t)
    PortfolioID    VaRID    VaRLevel    ConditionalDE      PValue      TestStatistic    CriticalValue    AutoCorrelation    Observations    CriticalValueMethod    NumLags    Scenarios    TestLevel
    ___________    _____    ________    _____________    __________    _____________    _____________    _______________    ____________    ___________________    _______    _________    _________

       "S&P"       "T 5"     0.975         reject        0.00034769       12.794           3.8415           0.078297            2087          "large-sample"          1          NaN         0.95   

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

[t,s] = conditionalDE(ebtde,'CriticalValueMethod','simulation');
disp(t)
    PortfolioID    VaRID    VaRLevel    ConditionalDE    PValue    TestStatistic    CriticalValue    AutoCorrelation    Observations    CriticalValueMethod    NumLags    Scenarios    TestLevel
    ___________    _____    ________    _____________    ______    _____________    _____________    _______________    ____________    ___________________    _______    _________    _________

       "S&P"       "T 5"     0.975         reject         0.01        12.794           3.7961           0.078297            2087           "simulation"           1         1000         0.95   

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

xLS = 0:0.05:30;
pdfLS = chi2pdf(xLS,t.NumLags);
histogram(s,'Normalization',"pdf")
hold on
plot(xLS,pdfLS)
hold off
ylim([0 0.1])
legend({'Simulation','Large-Sample'})
Title = sprintf('Conditional Test Distribution\nVaR Level: %g%%, Sample Size = %d',VaRLevel*100,t.Observations);
title(Title)

Figure contains an axes. The axes with title Conditional Test Distribution VaR Level: 97.5%, Sample Size = 2087 contains 2 objects of type histogram, line. These objects represent Simulation, Large-Sample.

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

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

Если тесты аппроксимации больших выборок являются единственными необходимыми тестами, поскольку они надежны для определенного размера выборки и уровня VaR, можно отключить моделирование при создании esbacktestbyde с помощью 'Simulate' необязательный ввод.

esbacktestbyde тесты могут выполняться через скользящее окно, следуя тому же подходу, что описан выше для esbacktest. Можно также определить тесты светофора, например, можно использовать два различных уровня достоверности теста, аналогично тому, что было сделано выше для esbacktest.

Заключения

Для сравнения трех объектов обратного тестирования ES:

  • esbacktest объект используется для широкого спектра распределительных предположений: исторических VaR, параметрических VaR, Monte-Carlo VaR или моделей экстремальных значений. Однако esbacktest предлагает приблизительные результаты тестов, основанные на двух вариациях одного и того же теста: безусловная статистика тестов с двумя различными наборами предварительно вычисленных критических значений (unconditionalNormal и unconditionalT).

  • esbacktestbysim объект используется для параметрических методов с нормальным и t распределениями (которые включают в себя EWMA, GARCH и дельта-гамма) и требует параметров распределения в качестве входных данных. esbacktestbysim предлагает пять различных тестов (conditional, unconditional, quantile, minBiasAbsolute, и minBiasRelative и критические значения для этих тестов моделируются с использованием предоставленной вами информации о распределении и, следовательно, являются более точными. Хотя все обратные тесты ES чувствительны к ошибкам оценки VaR, минимально смещенный тест имеет лишь небольшую чувствительность и рекомендуется (подробности см. в Acerbi-Szekely 2017 и 2019 [2], [3]).

  • esbacktestbyde объект также используется для параметрических методов с нормальным и t-распределением (которое включает в себя EWMA, GARCH и дельта-гамма) и требует параметров распределения в качестве входных данных. esbacktestbyde содержит степень серьезности (unconditionalDE) и независимость от времени (conditionalDE) тесты и он имеет удобство большого образца, быстрая версия тестов. conditionalDE тест является единственным тестом на независимость с течением времени для моделей ES среди всех тестов, поддерживаемых в этих трех классах.

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

Ссылки

[1] Ацерби, С. и Б. Секели. «Ожидаемый дефицит при тестировании». MSCI Inc., Декабрь 2014 года.

[2] Ацерби, С. и Б. Секели. "Общие свойства статистики с возможностью обратного тестирования. Электронный журнал SSRN. Январь 2017 года.

[3] Ацерби, С. и Б. Секели. «Минимально смещенный обратный тест для ES». Риск. Сентябрь 2019 года.

[4] Базельский комитет по банковскому надзору. «Минимальные требования к капиталу для рыночного риска». Январь 2016, https://www.bis.org/bcbs/publ/d352.htm

[5] Du, Z. и Х. К. Эскансиано. «Ожидаемый дефицит при тестировании: учет остаточного риска». Наука об управлении. Том 63, выпуск 4, апрель 2017 года.

[6] Макнил, А., Р. Фрей и П. Эмбрехтс. Количественное управление рисками: концепции, методы и инструменты. Принстонский университет Пресс. 2005.

[7] Рокафеллар, Р. Т. и С. Урясев. «Условная величина риска для общих распределений убытков». Журнал банковских и финансовых операций. Т. 26, 2002, стр. 1443-1471.

Локальные функции

function [VaR,ES] = hHistoricalVaRES(Sample,VaRLevel)
    % Compute historical VaR and ES
    % See [7] for technical details

    % Convert to losses
    Sample = -Sample;
    
    N = length(Sample);
    k = ceil(N*VaRLevel);
    
    z = sort(Sample);
    
    VaR = z(k);
    
    if k < N
       ES = ((k - N*VaRLevel)*z(k) + sum(z(k+1:N)))/(N*(1 - VaRLevel));
    else
       ES = z(k);
    end
end

function [VaR,ES] = hNormalVaRES(Mu,Sigma,VaRLevel)
    % Compute VaR and ES for normal distribution
    % See [6] for technical details
    
    VaR = -1*(Mu-Sigma*norminv(VaRLevel));
    ES = -1*(Mu-Sigma*normpdf(norminv(VaRLevel))./(1-VaRLevel));

end

function [VaR,ES] = hTVaRES(DoF,Mu,Sigma,VaRLevel)
    % Compute VaR and ES for t location-scale distribution
    % See [6] for technical details

    VaR = -1*(Mu-Sigma*tinv(VaRLevel,DoF));
    ES_StandardT = (tpdf(tinv(VaRLevel,DoF),DoF).*(DoF+tinv(VaRLevel,DoF).^2)./((1-VaRLevel).*(DoF-1)));
    ES = -1*(Mu-Sigma*ES_StandardT);

end

Связанные примеры

Подробнее