В этом примере показано, как выполнять оценку и обратную проверку моделей ожидаемого дефицита.
Оценка стоимости риска (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] в ссылках.
Набор данных, использованный в этом примере, содержит исторические данные для индекса 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

Для параметрических моделей должна быть вычислена волатильность возвратов. Учитывая волатильность, 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

Для параметрического подхода одни и те же шаги могут использоваться для оценки VaR и ES для альтернативных подходов, таких как EWMA, дельта-гамма аппроксимации и модели GARCH. Во всех этих параметрических подходах волатильность оценивается каждый день либо из обновления EWMA, либо из дельта-гамма-аппроксимации, либо как условная волатильность модели GARCH. Затем волатильность может быть использована, как описано выше, для получения оценок VaR и ES для нормального или t распределения по масштабу местоположения.
esbacktest объект предлагает два обратных теста для моделей ES. Оба теста используют безусловную статистику тестов, предложенную Acerbi и Szekely в [1], приведенную
где
- количество периодов времени в окне тестирования.
- результат портфеля, то есть доходность портфеля или прибыль и убыток портфеля за период t.
- вероятность отказа VaR, определяемая как уровень 1-VaR.
- это предполагаемый дефицит за период t.
индикатор отказа VaR в периоде t со значением 1, если VaRt, и 0 в противном случае.
Ожидаемое значение для этой статистики теста равно 0, и оно является отрицательным при наличии признаков недооценки риска. Для определения того, насколько отрицательным должно быть отклонение модели, необходимы критические значения и для определения критических значений необходимы допущения распределения для результатов портфеля .
Статистика безусловного теста оказывается стабильной в диапазоне допущений распределения для , от тонкохвостых распределений, таких как нормальные, до тяжелохвостых распределений, таких как t с низкими степенями свободы (высокие одинарные цифры). Только самые тяжелые распределения t (низкие одинарные цифры) приводят к более заметным различиям в критических значениях. Для получения дополнительной информации см. [1].
esbacktest объект использует преимущества стабильности критических значений статистики безусловного теста и использует таблицы предварительно вычисленных критических значений для выполнения обратных тестов ES. esbacktest имеет два набора таблиц критических значений. Первый набор критических значений предполагает, что результаты портфеля следуют стандартному нормальному распределению; это unconditionalNormal тест. Второй набор критических значений использует максимально тяжелые хвосты, он предполагает, что результаты портфеля следуют за распределением с 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')

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

Однако аналогичная визуализация с ожидаемым против наблюдаемого количеством отказов 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')

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 sName 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)

Безусловная статистика теста, представленная 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)

Аналогичные шаги можно использовать для просмотра подробной информации о 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