Этот пример показывает, как выполнить оценку и обратную проверку моделей Ожидаемого дефицита.
Значения риска (VaR) и ожидаемый дефицит (ES) должны быть оценены вместе, потому что оценка ES зависит от оценки VaR. Используя исторические данные, этот пример оценивает VaR и ES в тестовом окне, используя исторические и параметрические подходы VaR. Параметрический VaR вычисляется в предположении нормального и t распределений.
Этот пример запускает обратные тесты ES, поддерживаемые в esbacktest
, esbacktestbysim
, и esbacktestbyde
функциональность для оценки эффективности моделей ES в тестовом окне.
The esbacktest
объект не требует никакой информации о распределении. Как и varbacktest
объект, esbacktest
объект принимает только тестовые данные как входные. Входы для esbacktest
включать портфельные данные, данные VaR и соответствующий уровень VaR, а также данные ES, поскольку это то, что проверено назад. Как varbacktest
, esbacktest
запускает тесты для одного портфолио, но может вернуть несколько моделей и несколько уровней VaR сразу. The esbacktest
объект использует предварительно вычисленные таблицы критических значений, чтобы определить, должны ли модели быть отклонены. Эти табличные тесты могут быть применены в качестве приблизительных тестов для любой модели VaR. В этом примере они применяются к обратным тестовым историческим и параметрическим моделям VaR. Они могут использоваться для других подходов VaR, таких как модели Монте-Карло или Extreme-Value.
Напротив, esbacktestbysim
и esbacktestbyde
объектам требуется информация о распределении, а именно имя распределения (normal
или t) и параметры распределения для каждого дня в тестовом окне. esbacktestbysim
и esbacktestbyde
можно вернуть только одну модель за раз, потому что они связаны с определенным распределением, хотя вы все еще можете вернуть несколько уровней VaR сразу. The esbacktestbysim
объект реализует основанные на симуляции тесты и использует предоставленную информацию о распределении для запуска симуляций для определения критических значений. The esbacktestbyde
объект реализует тесты, где критические значения получают либо из приближения с большой выборкой, либо из симуляции (конечная выборка). The 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 на основе конечной выборки.
The 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 параметр шкалы вычисляется из предполагаемой волатильности и степеней свободы.
The 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 распределений шкалы местоположения.
The esbacktest
объект предлагает два обратных теста для моделей ES. Оба теста используют безусловную статистику тестов, предложенную Acerbi и Szekely в [1], представленную
где
- количество временных периодов в тестовом окне.
- результат портфеля, то есть возврат портфеля или прибыль и убыток портфеля за период t.
- вероятность отказа VaR, заданная как 1-VaR уровень.
- предполагаемый дефицит на период t.
- индикатор отказа VaR на период t со значением 1, если , и 0 в противном случае.
Ожидаемое значение для этой статистики теста 0, и это отрицательно, когда есть доказательства недооценки риска. Чтобы определить, насколько отрицательно должно быть отклонение модели, необходимы критические значения и для определения критических значений, необходимы распределительные допущения для результатов портфеля .
Безусловная тестовая статистика оказывается стабильной в области значений распределительных допущений для от тонкохвостых распределений, таких как normal, до тяжелохвостых распределений, таких как t с низкими степенями свободы (высокие одинарные цифры). Только самые тяжелые распределения t (низкие одинарные цифры) приводят к более заметным различиям в критических значениях. Для получения дополнительной информации см. раздел [1].
The esbacktest
объект использует в своих интересах стабильность критических значений безусловной тестовой статистики и использует таблицы предварительно вычисленных критических значений для запуска обратных тестов ES. esbacktest
имеет два набора таблиц критических значений. Первый набор критических значений принимает, что результаты портфеля следовать стандартному нормальному распределению; это значение unconditionalNormal
тест. Второй набор критических значений использует самые тяжелые хвосты, он принимает, что результаты портфеля следовать распределению t с 3 степенями свободы; это значение unconditionalT
тест.
Безусловная тестовая статистика чувствительна как к серьезности отказов VaR относительно оценки ES, так и к количеству отказов VaR (сколько раз нарушается VaR). Поэтому один, но очень большой отказ VaR относительно ES (или только очень мало больших потерь) может вызвать отказ модели в конкретном временном окне. Большие потери в день, когда оценка ES также велика, могут не повлиять на результаты теста так сильно, как большие потери, когда ES меньше. И модель также может быть отклонена в периоды со многими отказами VaR, даже если все нарушения VaR относительно малы и лишь немного выше VaR. Обе ситуации проиллюстрированы в этом примере.
The esbacktest
объект принимает в качестве входов тестовые данные, но никакая информация о распределении не предоставляется esbacktest
. Опционально можно задать идентификаторы для портфеля и для каждой из моделей VaR и ES, проверяемых назад. Хотя идентификаторы модели в этом примере действительно имеют ссылки на распределение (например "normal"
или "t 10"
), это только метки, используемые в целях отчетности. Тесты не используют тот факт, что первая модель является историческим методом VaR или что другие модели являются альтернативными параметрическими моделями VaR. Параметры распределения, используемые для оценки VaR и ES в предыдущем разделе, не передаются esbacktest
, и никоим образом не используются в этом разделе. Эти параметры, однако, должны быть предусмотрены для основанных на симуляции тестов, поддерживаемых в esbacktestbysim
объект, обсуждаемый в разделе Simulation-Based Tests, и для тестов, поддерживаемых в esbacktestbyde
объект, обсуждаемый в разделе Large-Sample и Simulation Test.
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
The ObservedSeverity
столбец показывает среднее отношение потерь к VaR за периоды, когда VaR был нарушен. The 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')
The 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 в течение восьми отдельных лет, охватываемых исходным тестовым окном. Первый пользовательский светофор, описанный выше, добавляется к таблице результатов тестирования. The 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);
Отобразите результаты, по одной модели за раз. The "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')
The esbacktestbysim
объект поддерживает пять основанных на симуляции ES обратных тестов. esbacktestbysim
требуется информация о распределении для результатов портфеля, а именно имя распределения ("normal"
или "t"
) и параметры распределения для каждого дня в тестовом окне. esbacktestbysim
использует предоставленную информацию о распределении для выполнения симуляций для определения критических значений. Тесты, поддерживаемые в esbacktestbysim
являются conditional
, unconditional
, quantile
, minBiasAbsolute
, и minBiasRelative
. Это реализации тестов, предложенных Acerbi и Szekely в [1] и [2], [3] на 2017 и 2019 годы.
The esbacktestbysim
объект поддерживает нормальные и t распределения. Эти тесты могут использоваться для любой модели, где базовое распределение результатов портфеля является нормальным или t, таких как экспоненциально взвешенное скользящее среднее значение (EWMA), дельта-гамма или обобщенные модели авторегрессивной условной гетероскедастичности (GARCH).
Бэктесты ES обязательно аппроксимируются в том, что они чувствительны к ошибкам в предсказанном VaR. Однако минимально смещенный тест имеет лишь небольшую чувствительность к ошибкам VaR и чувствительность пруденциальна, в том смысле, что ошибки VaR приводят к более карательному тесту ES. Для получения дополнительной информации см. Acerbi-Szekely ([2], [3] за 2017 и 2019 годы). Когда информация о распределении доступна, рекомендуется минимально смещенный тест (см minBiasAbsolute
, minBiasRelative
).
The "Normal"
, "T 10"
, и "T 5"
модели могут быть проверены с помощью основанных на симуляции тестов в esbacktestbysim
. В рисунок только "T 5"
проверено назад. The распределения имени ("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
, а затем запустите отдельные тестовые функции.
The 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
The 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] = условный (ebts); case 'Unconditional' [t, s] = безоговорочно (ebts); case 'Quantile' [t, s] = квантиль (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 степенями свободы и заданными параметрами местоположения и шкалы. The esbacktest
объект дает приблизительные результаты тестирования для "T 5"
модель, в то время как результаты здесь специфичны для предоставляемой информации о распределении. Кроме того, для conditional
тест, это визуализация автономного условного теста (ConditionalOnly
результат в таблице выше). Конечный условный результат теста (Conditional
столбец) также зависит от предварительного обратного теста VaR (VaRTestResult
столбец).
The "T 5"
модель принята пятью тестами.
The esbacktestbysim
объект предоставляет simulate
функция для запуска новой симуляции. Например, если существует результат пограничного теста, где тестовая статистика близка к критическому значению, можно использовать simulate
функция для симуляции новых сценариев. В случаях, когда требуется большая точность, можно запустить большую симуляцию.
The esbacktestbysim
тесты могут быть проведены над скользящим окном, следуя тому же подходу, который описан выше для esbacktest
. Пользовательские тесты светофора также могут быть определены, например, с помощью двух различных уровней доверия теста, аналогичных тому, что было сделано выше для esbacktest
.
The esbacktestbyde
объект поддерживает два обратных теста ES с критическими значениями, определенными либо с большой выборкой приближения, либо с симуляцией (конечная выборка). esbacktestbyde
требуется информация о распределении для результатов портфеля, а именно имя распределения ("normal"
или "t"
) и параметры распределения для каждого дня в тестовом окне. Это не требует VaR данных ES. esbacktestbyde
использует предоставленную информацию о распределении для отображения результатов портфеля в «ранги», то есть для применения кумулятивной функции распределения для отображения возвратов на значения в модуль интервале, где задана тестовая статистика. esbacktestbyde
может определять критические значения при помощи приближения с большой выборкой или симуляции с конечной выборкой.
Тесты, поддерживаемые в esbacktestbyde
являются conditionalDE
и unconditionalDE
. Это реализации тестов, предложенных Du и Escanciano в [3]. The unconditionalDE
тесты и все тесты, ранее обсуждавшиеся в этом примере, являются тестами серьезности, которые оценивают, соответствует ли величина потерь хвоста предсказаниям модели. The conditionalDE
тест, однако, является тестом на независимость с течением времени, который оценивает, есть ли доказательства автокорреляции в серии потерь хвоста.
The esbacktestbyde
объект поддерживает нормальные и t распределения. Эти тесты могут использоваться для любой модели, где базовое распределение результатов портфеля является нормальным или t, таких как экспоненциально взвешенное скользящее среднее значение (EWMA), дельта-гамма или обобщенные модели авторегрессивной условной гетероскедастичности (GARCH).
The "Normal"
, "T 10"
, и "T 5"
модели могут быть проверены с тестами в esbacktestbyde
. В рисунок только "T 5"
проверено назад. The распределения имени ("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
, а затем запустите отдельные тестовые функции. The 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
The 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
тест, и сравнить результаты большой выборки и основанные на симуляции.
The esbacktestbyde
объект предоставляет simulate
функция для запуска новой симуляции. Например, если существует результат пограничного теста, где тестовая статистика близка к критическому значению, можно использовать simulate
функция для симуляции новых сценариев. Кроме того, по умолчанию в симуляции сохраняются результаты до 5 лагов для условного теста, поэтому, если необходимы основанные на симуляции результаты для большего количества лагов, необходимо использовать simulate
функция.
Если тесты приближения с большой выборкой являются единственными тестами, которые вам нужны, потому что они надежны для определенного размера выборки и уровня VaR, можно отключить симуляцию при создании esbacktestbyde
объект при помощи 'Simulate'
необязательный вход.
The esbacktestbyde
тесты могут быть проведены над скользящим окном, следуя тому же подходу, который описан выше для esbacktest
. Можно также задать тесты светофора, для примера можно использовать два различных уровня тестового доверия, аналогичных тому, что было сделано выше для esbacktest
.
Чтобы противопоставить три объекта обратного тестирования ES:
The esbacktest
объект используется для широкой области значений распределительных допущений: исторических VaR, параметрических VaR, Monte-Carlo VaR или экстремально-ценностных моделей. Однако esbacktest
предлагает приблизительные результаты тестирования, основанные на двух изменениях одного и того же теста: безусловная статистика теста с двумя различными наборами предварительно вычисленных критических значений (unconditionalNormal
и unconditionalT
).
The esbacktestbysim
объект используется для параметрических методов с нормальным и t распределениями (который включает EWMA, GARCH и дельта-гамма) и требует параметров распределения в качестве входов. esbacktestbysim
предлагает пять различных тестов (conditional
, unconditional
, quantile
, minBiasAbsolute
, и minBiasRelative
и критические значения для этих тестов моделируются с помощью предоставляемой вами информации о распределении, и, следовательно, являются более точными. Хотя все бэктесты ES чувствительны к ошибкам расчета VaR, минимально смещенный тест имеет только небольшую чувствительность и рекомендуется (см. Acerbi-Szekely 2017 и 2019 для получения дополнительной информации [2], [3]).
The esbacktestbyde
объект также используется для параметрических методов с нормальным и t распределениями (которые включают EWMA, GARCH и дельта-гамма) и требует параметров распределения в качестве входов. esbacktestbyde
содержит серьезность (unconditionalDE
) и независимость от времени (conditionalDE
) тесты и он имеет удобство большой-образец, быстрая версия тестов. The conditionalDE
тест является единственным тестом на независимость с течением времени для моделей ES среди всех тестов, поддерживаемых в этих трех классах.
Как показано в этом примере, все три объекта обратного тестирования ES обеспечивают функциональность для создания отчетов о серьезностях, отказах VaR и информации о результатах тестирования. Три объекта ES backtest обеспечивают гибкость при построении на них. Для примера можно создать пользовательские тесты светофора и запустить анализ обратного тестирования ES в окнах качения.
[1] Acerbi, C. и B. Szekely. «Ожидаемый дефицит после тестирования». MSCI Inc., Декабрь 2014 года.
[2] Acerbi, C. и B. Szekely. "Общие свойства тестируемой статистики. Электронный журнал SSRN. Январь 2017 года.
[3] Acerbi, C. и B. Szekely. «Минимально предвзятый бэктест для ES». Риск. Сентябрь 2019 года.
[4] Базельский комитет по банковскому надзору. «Минимальные требования к капиталу для рыночного риска». Январь 2016, https://www.bis.org/bcbs/publ/d352.htm
[5] Du, Z., and J. C. Escanciano. «Ожидаемая нехватка тестов: учет хвостового риска». Наука менеджмента. Том 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