В этом примере показан ожидаемый поток операций обратного тестирования дефицита (ES) и использование инструментов обратного тестирования ES. esbacktest класс поддерживает два теста - безусловный нормальный и безусловный t - которые основаны на статистике безусловного теста Acerbi-Szekely (также известной как второй тест Acerbi-Szekely). В этих тестах используются предопределившиеся критические значения для безусловной статистики теста с допущением нормального распределения для нормального случая и t-распределения с 3 степенями свободы для t-случая.
Используйте ESBacktestData.mat для загрузки данных в рабочую область. Этот пример работает с Returns числовой массив. Этот массив представляет доходность собственного капитала, VaRModel1, VaRModel2, и VaRModel3и соответствующие данные VaR при уровнях достоверности 97,5%, сгенерированные с помощью трех различных моделей. Ожидаемые данные о дефиците содержатся в ESModel1, ESModel2, и ESModel3. Три распределения модели, используемые для генерации ожидаемых данных дефицита в этом примере, являются нормальными (модель 1), t с 10 степенями свободы (модель 2) и t с 5 степенями свободы (модель 3). Однако эта информация о распределении не нужна в этом примере, поскольку esbacktest объект его не требует.
load('ESBacktestData')
whosName Size Bytes Class Attributes Data 1966x13 223945 timetable Dates 1966x1 15728 datetime ESModel1 1966x1 15728 double ESModel2 1966x1 15728 double ESModel3 1966x1 15728 double Returns 1966x1 15728 double VaRLevel 1x1 8 double VaRModel1 1966x1 15728 double VaRModel2 1966x1 15728 double VaRModel3 1966x1 15728 double
Используйте plot функция для визуализации данных обратного тестирования ES. Этот тип визуализации является обычным первым шагом при выполнении анализа обратного тестирования ES. Только в целях иллюстрации визуализируйте результаты вместе с VaR и ES для конкретной модели.
Получившийся сюжет показывает некоторые крупные нарушения в 1997, 1998 и 2000 годах. Нарушения в 1996 году выглядят менее значительными в абсолютном выражении, однако по сравнению с волатильностью этого периода эти нарушения также являются существенными. Для безусловного теста величина нарушений и количество нарушений имеют значение, поскольку статистика теста усредняется по ожидаемому количеству отказов. Если ожидаемое число невелико, но есть несколько нарушений, эффективная тяжесть для теста больше. 2002 год - пример года с небольшими, но множеством отказов VaR.
figure; plot(Dates,Returns,Dates,-VaRModel1,Dates,-ESModel1) legend('Returns','VaR','ES') title('Test Data, Model 1, VaR level 95%') grid on

esbacktest объект.Создание esbacktest объект с использованием esbacktest.
load ESBacktestData ebt = esbacktest(Returns,[VaRModel1 VaRModel2 VaRModel3],[ESModel1 ESModel2 ESModel3],... 'PortfolioID',"S&P",'VaRID',["Model1","Model2","Model3"],'VaRLevel',VaRLevel)
ebt =
esbacktest with properties:
PortfolioData: [1966x1 double]
VaRData: [1966x3 double]
ESData: [1966x3 double]
PortfolioID: "S&P"
VaRID: ["Model1" "Model2" "Model3"]
VaRLevel: [0.9750 0.9750 0.9750]
Создайте сводный отчет ES. ObservedSeverity в столбце показано среднее отношение потерь к VaR в периоды нарушения VaR. ExpectedSeverity в столбце показано среднее отношение ES к VaR для периодов нарушения VaR.
S = summary(ebt); disp(S)
PortfolioID VaRID VaRLevel ObservedLevel ExpectedSeverity ObservedSeverity Observations Failures Expected Ratio Missing
___________ ________ ________ _____________ ________________ ________________ ____________ ________ ________ ______ _______
"S&P" "Model1" 0.975 0.97101 1.1928 1.4221 1966 57 49.15 1.1597 0
"S&P" "Model2" 0.975 0.97202 1.2652 1.4134 1966 55 49.15 1.119 0
"S&P" "Model3" 0.975 0.97202 1.37 1.4146 1966 55 49.15 1.119 0
Выполнение всех тестов и создание отчета только по результатам принятия или отклонения.
t = runtests(ebt); disp(t)
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT
___________ ________ ________ ___________________ ______________
"S&P" "Model1" 0.975 reject reject
"S&P" "Model2" 0.975 reject accept
"S&P" "Model3" 0.975 accept accept
Выполните индивидуальный тест для безусловного нормального теста.
t = unconditionalNormal(ebt); disp(t)
PortfolioID VaRID VaRLevel UnconditionalNormal PValue TestStatistic CriticalValue Observations TestLevel
___________ ________ ________ ___________________ _________ _____________ _____________ ____________ _________
"S&P" "Model1" 0.975 reject 0.0054099 -0.38265 -0.2403 1966 0.95
"S&P" "Model2" 0.975 reject 0.044967 -0.25011 -0.2403 1966 0.95
"S&P" "Model3" 0.975 accept 0.149 -0.15551 -0.2403 1966 0.95
Выполните индивидуальный тест для безусловного t-теста.
t = unconditionalT(ebt); disp(t)
PortfolioID VaRID VaRLevel UnconditionalT PValue TestStatistic CriticalValue Observations TestLevel
___________ ________ ________ ______________ ________ _____________ _____________ ____________ _________
"S&P" "Model1" 0.975 reject 0.018566 -0.38265 -0.28242 1966 0.95
"S&P" "Model2" 0.975 accept 0.073292 -0.25011 -0.28242 1966 0.95
"S&P" "Model3" 0.975 accept 0.17932 -0.15551 -0.28242 1966 0.95
Выберите определенный календарный год и выполните тесты для этого года, только создав esbacktest объект и передача только интересующих данных.
Year = 1996; Ind = year(Dates)==Year; PortID = ['S&P, ' num2str(Year)]; PortfolioData = Returns(Ind); VaRData = [VaRModel1(Ind) VaRModel2(Ind) VaRModel3(Ind)]; ESData = [ESModel1(Ind) ESModel2(Ind) ESModel3(Ind)]; ebt = esbacktest(PortfolioData,VaRData,ESData,... 'PortfolioID',PortID,'VaRID',["Model1","Model2","Model3"],'VaRLevel',VaRLevel); disp(ebt)
esbacktest with properties:
PortfolioData: [262x1 double]
VaRData: [262x3 double]
ESData: [262x3 double]
PortfolioID: "S&P, 1996"
VaRID: ["Model1" "Model2" "Model3"]
VaRLevel: [0.9750 0.9750 0.9750]
tt = runtests(ebt); disp(tt)
PortfolioID VaRID VaRLevel UnconditionalNormal UnconditionalT
___________ ________ ________ ___________________ ______________
"S&P, 1996" "Model1" 0.975 reject reject
"S&P, 1996" "Model2" 0.975 reject reject
"S&P, 1996" "Model3" 0.975 reject accept
esbacktest | runtests | summary | unconditionalNormal | unconditionalT