Подверженный риску значения Estimation и Backtesting

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

  1. Нормальное распределение

  2. Историческая симуляция

  3. Экспоненциал взвесил скользящее среднее значение (EWMA)

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

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

Эти три метода оценки, используемые в этом примере, оценивают VaR в 95% и 99% доверительных уровней.

Загрузите данные и задайте тестовое окно

Загрузите данные. Данные, используемые в этом примере, от временных рядов возвратов на индексе S&P от 1 993 до 2003.

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

Задайте окно оценки как 250 торговых дней. Тестовое окно запускается в первый день в 1 996 и пробегает конец выборки.

TestWindowStart      = find(year(DateReturns)==1996,1);
TestWindow           = TestWindowStart : SampleSize;
EstimationWindowSize = 250;

Для доверительного уровня VaR 95% и 99%, набор дополнение уровня VaR.

pVaR = [0.05 0.01];

Эти значения означают, что существует самое большее 5%-я и 1%-я вероятность, соответственно, что понесенная потеря будет больше максимального порога (то есть, больше, чем VaR).

Вычислите VaR Используя метод нормального распределения

Для метода нормального распределения примите, что прибыль и потеря портфеля нормально распределены. Используя это предположение, вычислите VaR путем умножения z-счета на каждом доверительном уровне стандартным отклонением возвратов. Поскольку VaR backtesting смотрит ретроспективно на данные, VaR "сегодня" вычисляется на основе значений возвратов в последнем N = 250 дней, ведя к, но не включая, "сегодня".

Zscore   = norminv(pVaR);
Normal95 = zeros(length(TestWindow),1);
Normal99 = zeros(length(TestWindow),1);

for t = TestWindow
    i = t - TestWindowStart + 1;
    EstimationWindow = t-EstimationWindowSize:t-1;
    Sigma = std(Returns(EstimationWindow));
    Normal95(i) = -Zscore(1)*Sigma;
    Normal99(i) = -Zscore(2)*Sigma;
end

figure;
plot(DateReturns(TestWindow),[Normal95 Normal99])
xlabel('Date')
ylabel('VaR')
legend({'95% Confidence Level','99% Confidence Level'},'Location','Best')
title('VaR Estimation Using the Normal Distribution Method')

Метод нормального распределения также известен как параметрический VaR, потому что его оценка включает вычисление параметра для стандартного отклонения возвратов. Преимуществом метода нормального распределения является своя простота. Однако слабость метода нормального распределения является предположением, которое возвраты нормально распределены. Другое имя для метода нормального распределения является подходом ковариации отклонения.

Вычислите VaR Используя исторический метод симуляции

В отличие от метода нормального распределения, историческая симуляция (HS) является непараметрическим методом. Это не принимает, что конкретное распределение актива возвращается. Историческая симуляция предсказывает риск путем предположения, что прошлая прибыль и потери могут использоваться в качестве распределения прибыли и потерь в течение следующего периода возвратов. VaR "сегодня" вычисляется, когда p th-квантиль последнего N возвращается до "сегодня".

Historical95 = zeros(length(TestWindow),1);
Historical99 = zeros(length(TestWindow),1);

for t = TestWindow
    i = t - TestWindowStart + 1;
    EstimationWindow = t-EstimationWindowSize:t-1;
    X = Returns(EstimationWindow);
    Historical95(i) = -quantile(X,pVaR(1));
    Historical99(i) = -quantile(X,pVaR(2));
end

figure;
plot(DateReturns(TestWindow),[Historical95 Historical99])
ylabel('VaR')
xlabel('Date')
legend({'95% Confidence Level','99% Confidence Level'},'Location','Best')
title('VaR Estimation Using the Historical Simulation Method')

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

Вычислите VaR Используя экспоненциальный взвешенный метод скользящего среднего значения (EWMA)

Первые два метода VaR принимают, что все прошлое возвращается, несут тот же вес. Метод экспоненциала взвесил скользящее среднее значение (EWMA) присваивает неравные веса, особенно экспоненциально уменьшая веса. Новые возвраты имеют более высокие веса, потому что они влияют на "сегодняшний" возврат в большей степени, чем возвращается далее в прошлом. Формула для отклонения EWMA по окну оценки размера$W_E$:

$$\hat{\sigma}^2_t=\frac{1}{c}\sum_{i=1}^{W_E}\lambda^{i-1} y^2_{t-i}$$

где$c$ постоянная нормализация:

$$c=\sum_{i=1}^{W_E}\lambda^{i-1} = \frac{1-\lambda^{W_E}}{1-\lambda}\quad\rightarrow \frac{1}{1-\lambda} ~ as ~ W_E\rightarrow\infty$$

Для удобства мы принимаем бесконечно большое окно оценки, чтобы аппроксимировать отклонение:

$$\hat{\sigma}^2_t\approx(1-\lambda)(y^2_{t-1}+\sum^{\infty}_{i=2}\lambda^{i-1}y^2_{t-i})=(1-\lambda)y^2_{t-1}+\lambda\hat{\sigma}^2_{t-1}$$

Значение фактора затухания, часто используемого на практике, 0.94. Это - значение, используемое в этом примере. Для получения дополнительной информации смотрите Ссылки.

Инициируйте EWMA использование фазы прогрева, чтобы настроить стандартное отклонение.

Lambda = 0.94;
Sigma2     = zeros(length(Returns),1);
Sigma2(1)  = Returns(1)^2;

for i = 2 : (TestWindowStart-1)
    Sigma2(i) = (1-Lambda) * Returns(i-1)^2 + Lambda * Sigma2(i-1);
end

Используйте EWMA в тестовом окне, чтобы оценить VaR.

Zscore = norminv(pVaR);
EWMA95 = zeros(length(TestWindow),1);
EWMA99 = zeros(length(TestWindow),1);

for t = TestWindow
    k     = t - TestWindowStart + 1;
    Sigma2(t) = (1-Lambda) * Returns(t-1)^2 + Lambda * Sigma2(t-1);
    Sigma = sqrt(Sigma2(t));
    EWMA95(k) = -Zscore(1)*Sigma;
    EWMA99(k) = -Zscore(2)*Sigma;
end

figure;
plot(DateReturns(TestWindow),[EWMA95 EWMA99])
ylabel('VaR')
xlabel('Date')
legend({'95% Confidence Level','99% Confidence Level'},'Location','Best')
title('VaR Estimation Using the EWMA Method')

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

VaR Backtesting

В первой части этого примера VaR был оценен по тестовому окну с тремя различными методами и на двух различных доверительных уровнях VaR. Цель VaR backtesting состоит в том, чтобы оценить эффективность моделей VaR. Оценка VaR в 95%-м доверии нарушена только приблизительно 5% времени, и отказы VaR не кластеризируются. Кластеризация отказов VaR указывает на отсутствие независимости через время, потому что модели VaR не спешат реагировать на изменяющееся состояние рынка.

Общий первый шаг в анализе VaR backtesting должен построить возвраты и оценки VaR вместе. Постройте все три метода на 95%-м доверительном уровне и сравните их с возвратами.

ReturnsTest = Returns(TestWindow);
DatesTest   = DateReturns(TestWindow);
figure;
plot(DatesTest,[ReturnsTest -Normal95 -Historical95 -EWMA95])
ylabel('VaR')
xlabel('Date')
legend({'Returns','Normal','Historical','EWMA'},'Location','Best')
title('Comparison of returns and VaR at 95% for different models')

Чтобы подсветить, как разные подходы реагируют по-другому на изменяющееся состояние рынка, можно увеличить масштаб временных рядов, где существует большое и внезапное изменение в значении возвратов. Например, около августа 1998:

ZoomInd   = (DatesTest >= datetime(1998,8,5)) & (DatesTest <= datetime(1998,10,31));
VaRData   = [-Normal95(ZoomInd) -Historical95(ZoomInd) -EWMA95(ZoomInd)];
VaRFormat = {'-','--','-.'};
D = DatesTest(ZoomInd);
R = ReturnsTest(ZoomInd);
N = Normal95(ZoomInd);
H = Historical95(ZoomInd);
E = EWMA95(ZoomInd);
IndN95    = (R < -N);
IndHS95   = (R < -H);
IndEWMA95 = (R < -E);
figure;
bar(D,R,0.5,'FaceColor',[0.7 0.7 0.7]);
hold on
for i = 1 : size(VaRData,2)
    stairs(D-0.5,VaRData(:,i),VaRFormat{i});
end
ylabel('VaR')
xlabel('Date')
legend({'Returns','Normal','Historical','EWMA'},'Location','Best','AutoUpdate','Off')
title('95% VaR violations for different models')
ax = gca;
ax.ColorOrderIndex = 1;

plot(D(IndN95),-N(IndN95),'o',D(IndHS95),-H(IndHS95),'o',...
   D(IndEWMA95),-E(IndEWMA95),'o','MarkerSize',8,'LineWidth',1.5)
xlim([D(1)-1, D(end)+1])
hold off;

Отказ VaR или нарушение происходят, когда возвраты имеют отрицательный VaR. Более внимательное рассмотрение вокруг 27 августа до 31 августа показывает значительное падение в возвратах. В даты, запускающиеся с 27 августа вперед, EWMA следует за трендом возвратов тесно и более точно. Следовательно, EWMA имеет меньше нарушений VaR (два (2) нарушения, желтые ромбы) по сравнению с подходом Нормального распределения (семь (7) нарушений, голубые звезды) или Исторический метод Симуляции (восемь (8) нарушений, красные квадраты).

Помимо визуальных инструментов, можно использовать статистические тесты для VaR backtesting. В Risk Management Toolbox™, varbacktest поддержка объектов несколько статистических тестов для анализа VaR backtesting. В этом примере запустите путем сравнения различных результатов испытаний для подхода нормального распределения в 95% и 99% уровней VaR.

vbt = varbacktest(ReturnsTest,[Normal95 Normal99],'PortfolioID','S&P','VaRID',...
    {'Normal95','Normal99'},'VaRLevel',[0.95 0.99]);
summary(vbt)
ans =

  2x10 table

    PortfolioID      VaRID       VaRLevel    ObservedLevel    Observations    Failures    Expected    Ratio     FirstFailure    Missing
    ___________    __________    ________    _____________    ____________    ________    ________    ______    ____________    _______

       "S&P"       "Normal95"      0.95         0.94863           1966          101         98.3      1.0275         7             0   
       "S&P"       "Normal99"      0.99         0.98372           1966           32        19.66      1.6277         7             0   

Сводный отчет показывает, что наблюдаемый уровень достаточно близок к заданному уровню VaR. 95% и 99% уровней VaR имеют в большей части (1-VaR_level) x N ожидаемые отказы, где N является количеством наблюдений. Частота отказов показывает что Normal95 Уровень VaR в области значений, тогда как Normal99 Уровень VaR неточен и под прогнозами риск. Запускать все тесты, поддержанные в varbacktest, используйте runtests.

runtests(vbt)
ans =

  2x11 table

    PortfolioID      VaRID       VaRLevel      TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    __________    ________    ______    ______    ______    ______    ______    ______    ______    ______

       "S&P"       "Normal95"      0.95      green     accept    accept    accept    accept    reject    reject    reject
       "S&P"       "Normal99"      0.99      yellow    reject    reject    accept    reject    accept    reject    reject

95% VaR проходят тесты частоты, такие как светофор, бином и пропорция тестов отказов (tl, bin, и pof столбцы). 99% VaR не проходят эти те же тесты, как обозначено yellow и reject результаты. Оба доверительных уровня были отклонены в условной независимости покрытия, и время между независимостью отказов (cci и tbfi столбцы). Этот результат предполагает, что нарушения VaR весьма зависимы, и существуют, вероятно, периоды с многократными отказами за короткий промежуток. Кроме того, один отказ может сделать его более вероятно, за которым другие отказы будут следовать в последующие дни. Для получения дополнительной информации о тестовых методологиях и интерпретации результатов, смотрите varbacktest и отдельные тесты.

Используя varbacktest объект, запущенный те же тесты на портфеле для трех подходов на обоих доверительных уровнях VaR.

vbt = varbacktest(ReturnsTest,[Normal95 Historical95 EWMA95 Normal99 Historical99 ...
    EWMA99],'PortfolioID','S&P','VaRID',{'Normal95','Historical95','EWMA95',...
    'Normal99','Historical99','EWMA99'},'VaRLevel',[0.95 0.95 0.95 0.99 0.99 0.99]);
runtests(vbt)
ans =

  6x11 table

    PortfolioID        VaRID         VaRLevel      TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    ______________    ________    ______    ______    ______    ______    ______    ______    ______    ______

       "S&P"       "Normal95"          0.95      green     accept    accept    accept    accept    reject    reject    reject
       "S&P"       "Historical95"      0.95      yellow    accept    accept    accept    accept    accept    reject    reject
       "S&P"       "EWMA95"            0.95      green     accept    accept    accept    accept    accept    reject    reject
       "S&P"       "Normal99"          0.99      yellow    reject    reject    accept    reject    accept    reject    reject
       "S&P"       "Historical99"      0.99      yellow    reject    reject    accept    reject    accept    reject    reject
       "S&P"       "EWMA99"            0.99      red       reject    reject    accept    reject    accept    reject    reject

Результаты похожи на предыдущие результаты, и на 95%-м уровне, результаты частоты обычно приемлемы. Однако результатами частоты на 99%-м уровне обычно являются отклонения. Относительно независимости большинство тестов проходит условный тест независимости покрытия (cci), который тестирует на независимость в дни подряд. Заметьте, что все тесты приводят время к сбою между тестом независимости отказов (tbfi), который учитывает времена между всеми отказами. Этот результат предлагает, чтобы все методы имели проблемы с предположением независимости.

Чтобы лучше изучить, как эти результаты изменяют данное состояние рынка, посмотрите на годы 2000 и 2002 для 95%-го доверительного уровня VaR.

Ind2000 = (year(DatesTest) == 2000);
vbt2000 = varbacktest(ReturnsTest(Ind2000),[Normal95(Ind2000) Historical95(Ind2000) EWMA95(Ind2000)],...
   'PortfolioID','S&P, 2000','VaRID',{'Normal','Historical','EWMA'});
runtests(vbt2000)
ans =

  3x11 table

    PortfolioID       VaRID        VaRLevel     TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    ____________    ________    _____    ______    ______    ______    ______    ______    ______    ______

    "S&P, 2000"    "Normal"          0.95      green    accept    accept    accept    accept    accept    accept    accept
    "S&P, 2000"    "Historical"      0.95      green    accept    accept    accept    accept    accept    accept    accept
    "S&P, 2000"    "EWMA"            0.95      green    accept    accept    accept    accept    accept    accept    accept

Ind2002 = (year(DatesTest) == 2002);
vbt2002 = varbacktest(ReturnsTest(Ind2002),[Normal95(Ind2002) Historical95(Ind2002) EWMA95(Ind2002)],...
   'PortfolioID','S&P, 2002','VaRID',{'Normal','Historical','EWMA'});
runtests(vbt2002)
ans =

  3x11 table

    PortfolioID       VaRID        VaRLevel      TL       Bin       POF       TUFF       CC       CCI       TBF       TBFI 
    ___________    ____________    ________    ______    ______    ______    ______    ______    ______    ______    ______

    "S&P, 2002"    "Normal"          0.95      yellow    reject    reject    accept    reject    reject    reject    reject
    "S&P, 2002"    "Historical"      0.95      yellow    reject    accept    accept    reject    reject    reject    reject
    "S&P, 2002"    "EWMA"            0.95      green     accept    accept    accept    accept    reject    reject    reject

В течение года 2000, все три метода проходят все тесты. Однако в течение года 2002, результатами испытаний являются в основном отклонения для всех методов. Метод EWMA, кажется, выполняет лучше в 2 002, все же все методы проваливают тесты независимости.

Чтобы получить больше понимания тестов независимости, изучите условную независимость покрытия (cci) и время между независимостью отказов (tbfi) протестируйте детали в течение года 2002. Чтобы получить доступ к тестовым деталям для всех тестов, запустите отдельные тестовые функции.

cci(vbt2002)
ans =

  3x13 table

    PortfolioID       VaRID        VaRLevel     CCI      LRatioCCI    PValueCCI    Observations    Failures    N00    N10    N01    N11    TestLevel
    ___________    ____________    ________    ______    _________    _________    ____________    ________    ___    ___    ___    ___    _________

    "S&P, 2002"    "Normal"          0.95      reject     12.591      0.0003877        261            21       225    14     14      7       0.95   
    "S&P, 2002"    "Historical"      0.95      reject     6.3051       0.012039        261            20       225    15     15      5       0.95   
    "S&P, 2002"    "EWMA"            0.95      reject     4.6253       0.031504        261            14       235    11     11      3       0.95   

В тесте CCI, вероятность p 01 из наличия отказа во время t, зная, что не было никакого отказа во время, t-1 дают

$$ p_{01} = \frac{N_{01}}{N_{01}+N_{00}}$$

Вероятность p 11 из наличия отказа во время t, зная, что был отказ во время, t-1 дают

$$ p_{11} = \frac{N_{11}}{N_{11}+N_{10}}$$

От N00, N10, N01, N11 столбцы в результатах испытаний, значении p 01 приблизительно в 5% для этих трех методов, все же значения p 11 выше 20%. Поскольку существует доказательство, что отказ сопровождается другим отказом намного более часто, чем 5% времени, этот тест CCI сбои.

Во время между тестом независимости отказов посмотрите на минимум, максимум и квартили распределения времен между отказами, в столбцах TBFMin, TBFQ1, TBFQ2, TBFQ3, TBFMax.

tbfi(vbt2002)
ans =

  3x14 table

    PortfolioID       VaRID        VaRLevel     TBFI     LRatioTBFI    PValueTBFI    Observations    Failures    TBFMin    TBFQ1    TBFQ2    TBFQ3    TBFMax    TestLevel
    ___________    ____________    ________    ______    __________    __________    ____________    ________    ______    _____    _____    _____    ______    _________

    "S&P, 2002"    "Normal"          0.95      reject      53.936      0.00010087        261            21         1          1        5      17        48        0.95   
    "S&P, 2002"    "Historical"      0.95      reject      45.274       0.0010127        261            20         1        1.5      5.5      17        48        0.95   
    "S&P, 2002"    "EWMA"            0.95      reject      25.756        0.027796        261            14         1          4      7.5      20        48        0.95   

Для уровня VaR 95% вы ожидаете среднее время между отказами 20 дней или одним отказом каждые 20 дней. Однако медиана времени между отказами в течение года 2 002 области значений между 5 и 7.5 для этих трех методов. Этот результат предлагает, чтобы половина времени, два последовательных отказа произошли в течение 5 - 7 дней, намного более часто, чем 20 ожидаемых дней. Следовательно, больше непройденных тестов происходит. Для нормального метода первый квартиль равняется 1, означая, что 25% отказов происходят в дни подряд.

Ссылки

Nieppola, О. Бэктестинг подверженные риску значения модели. Хельсинская школа экономики. 2009.

Дэнилссон, J. Финансовое прогнозирование риска: теория и практика прогнозирования риска рынка, с реализацией в R и MATLAB®. Финансы Вайли, 2012.

Смотрите также

| | | | | | | | | |

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

Больше о

Для просмотра документации необходимо авторизоваться на сайте