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

Этот пример показывает, как оценить значение риска (VaR) с помощью трех методов и выполнить обратный анализ VaR. Три метода:

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

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

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

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

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

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

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

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

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

Определите окно оценки как 250 торговых дней. Тестовое окно начинается в первый день 1996 года и проходит через конец выборки.

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

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

pVaR = [0.05 0.01];

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

Вычислите VaR с помощью метода Normal Distribution

Для метода нормального распределения примите, что прибыль и убыток портфеля обычно распределены. Используя это предположение, вычислите VaR путем умножения z-балла на каждом доверительном уровне на стандартное отклонение возвратов. Поскольку обратная проверка VaR смотрит ретроспективно на данные, 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-й квантиль последнего 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

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

Общим первым шагом в обратном тестовом анализе VaR является построение графиков оценок возвратов и 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) нарушения, желтые алмазы) по сравнению с подходом Normal Distribution (семь (7) нарушений, синие звезды) или методом Исторической симуляции (восемь (8) нарушений, красные квадраты).

Помимо визуальных инструментов, вы можете использовать статистические тесты для обратного тестирования VaR. В Risk Management Toolbox™ a varbacktest объект поддерживает несколько статистических тестов для обратного тестирования VaR. В этом примере начните с сравнения различных результатов теста для подхода нормального распределения на уровнях 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. Уровни VaR 95% и 99% имеют самое большее (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, по-видимому, работает лучше в 2002 году, но все методы не проходят проверку на независимость.

Чтобы получить больше информации о тестах независимости, посмотрите на условную независимость покрытия (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 дней. Однако медиана времени между отказами в 2002 году составляет от 5 до 7,5 для трех методов. Этот результат предполагает, что половина времени, два последовательных отказов происходят в течение 5-7 дней, гораздо чаще, чем 20 ожидаемых дней. Следовательно, происходит больше непройденных тестов. Для нормального метода первый квартиль равен 1, что означает, что 25% отказов происходит в последующие дни.

Ссылки

Nieppola, O. Backtesting Value-at-Risk Models. Хельсинкская школа экономики. 2009.

Даниэлссон, Дж. Прогнозирование финансовых рисков: теория и практика прогнозирования рыночных рисков с реализацией в R и MATLAB ®. Wiley Finance, 2012.

См. также

| | | | | | | | | |

Похожие примеры

Подробнее о