Блог им. AlexeyPetrushin

Почему GARCH и большинство Stochastic Volatility моделей не могут предсказывать реалистичную цену

Это симуляция EGARCH подобной SV модели. Первый график волатильность. Можно сравнить его с VIX и увидеть что он даже близко не похож. Можно добавить в него случайные прыжки в волатильность, и он станет чуть лучше, но все равно будут отличия. SVJ и SVVJ также не дают похожей картины.

Почему GARCH и большинство Stochastic Volatility моделей не могут предсказывать реалистичную цену



Реалистичную картину дает MSM Markov Switching Multifractal Мандельброта, но он не подходит для MCMC фиттинга.
326
7 комментариев
Так и какой вывод из всего этого? Копать далее?
Александр Сережкин, да. Но мне кажется нужно использовать более реалистичные модели.

Вывод — судяпо всему многие SV модели не совсем пригодны для прогноза цены на N шагов вперед.

Особенно если нужна оценка рисков и сюрпризов.
avatar
не понятно, что такое «не похоже» у джамп процесса правдоподобие выше — значит уже таки похоже, вы хотите до куда правдоподобие загонять?

тут есть разные способы думать (об одном и том же), мне вообще нравится взгляд на фиттинг как minimum description length — это из эпохи Колмогорова, но потом как-то название подзабыли, хотя, по сути, все ровно этим и пользуются на вайбе, не осознавая.

в чем идея — мы хотим написать архиватор, который жмет данные, и тогда мы можем судить о качестве архиватора по тому, насколько мало будет весить итоговый архив.

не вдаваясь в детали — размер архива можно свести к нулю, включив весь датасет в архиватор, внезапно. поэтому этого не достаточно и это (минимальность архива) не может быть самоцелью

так же не вдаваясь в детали — размер архива — это минус логарифм условной вероятности p(data|model) (ну там еще с учётом основания логарифмирования)

то есть message length (размер архива) = -ln p(data|model)
model length — размер архиватора (который можно кстати заархивировать другим архиватором) это -ln p(model)
и таки description = message + model — это, кто бы мог подумать, -ln p(data)

отсюда становятся более прозрачными смыслы aic/bic и других инфокритериев — потому, что они по сути о том, «как сильно еще один параметр увеличит model, уменьшив message»

я просто не совсем понимаю, где вы испытываете затык с фиттингом, большинство вещей аналитически решается…

совсем коротко: чтоб сравнить модели А и Б — к правдоподобию добавьте поправку на минимальный размер вашего кода А и кода Б на питоне или на чем вы пишите (ну можете и по ней архиватором пройтись еще)
avatar
anon, приветствую, благодарю за подробное обьяснение.

ЦЕЛЬ:

— Визуально похоже на VIX или другие меры волатильности RV, |r| и т.п. У них очень характерный вид — кластеры, резкий рост волатильности и асимметричный медленный спад. Тест — визуальная оценка графикя.
— Маржинальное распределение log r должно быть боль менее похоже на TDist. Это сложно сделать, поскольку волатильность должна быть нужно regular varying, просто прыжки могут не дать этого. Это не очень критично, но было бы хорошо иметь. Тест сравнение распределения симуляции с TDist, например, QQ plot.
— Маржинальное распределение должно иметь экспоненту тяжелых хвостов болье менеее близкую к тому что на реальных данных.
— Автокорреляция |r| должна быть боль менее похожа на реальную.

СЛОЖНОСТИ:

— Симуляция прыжка добавляет 2-3 параметров в модель (особенно если с
self-esciting). И что гораздо хуже, они подбираютсяна экстримальных режимах, которых в реальных данных очень мало. Т.е. что там за параметры подберуться после фиттинга, непонятно. И какие они должны быть, чтоб задать вручную — тоже не очень понятно. Я таки думаю в полу ручном режимеболь менее что то разумное подобрать и зафиксировать в узких пределах.
— MCMC фиттинг оч медленный, фиттинг 3-10к точек данных занимает 15-1ч, сильно тормозит прогресс.

СЛОЖНОСТЬ КОЛМОГОРОВА:

Да, хорошая идея, я знал про него но больше как некую абстрактную концепцию, мало применемую на практике. Связь с BIC/AIC интересна, я все собираюсь почитать что нить по теории информации и т.п., но все никак не осилю.

Я пока на этапе когда SV модели не проходя базовую проверку на визуальное сходство с реальными данными. До BIC/AIC еще не дошел.

И, правдоподобие для SV модели — его же не посчитать просто так. MCMC фиттинг это сглаживание (с заглядыванием в будущее, весь интервал 1-T). А правдоподобие требует фильтрации (без заглядывания в будущее, только 1-t).

MCMC что я использую STAN этого неделает. Нужен Particle Filter что вообще отдельная тема. Поэтому про оценку моделей — пока что чисто интуитивно и умозрительно. Есть примерная оценка PSIS-LOO, она вроде достатоно точна для оценки «в среднем» но я не очень понимаюнасколько она хороша для экстремальных режимов.

Вобщем, пока что оценка модели: понятная структура с минимумом параметров + интуитивная визуальная оценка + посмотреть что она генерит совпадает по моментам с реальными данными + PSIS-LOO.
avatar
И, правдоподобие для SV модели — его же не посчитать просто так. MCMC фиттинг это сглаживание (с заглядыванием в будущее, весь интервал 1-T). А правдоподобие требует фильтрации (без заглядывания в будущее, только 1-t). MCMC что я использую STAN этого неделает. Нужен Particle Filter что вообще отдельная тема.

я кажется слишком не понимаю, что именно вы делаете, я попробую конечно переварить как вы пришли к тому, что нужно фиттится на всём [1;T], но я вот сколько этим занимался всегда было рекуррентно… ну т.е. там был проход по всему интервалу, да, но без подглядываний ....

вообще я из этого ничего рабочего не вынес и ушел в «безарбитражные постановки» (это я вот сейчас собрал в кучу и БШ и APT и бонды) там и параметров поменьше и «правильный» хедж возникает более менее естественным путём

но попробую предложить мысль:

забудем на некоторое время про гарчи итд и рассмотрим модель с конечной памятью r(n+1) = \mu(r(n)… r(n-k)) + \sigma(r(n)… r(n-k))dW

r(n+1) = ln(P(n+1)/P(n))

дальше вариантов не так уж и много — скажем, что sigma^2 это какой-то полином второй степени от r(n)… r(n-k), да еще и не отрицательный

это сведётся к тому, что он представим как x^T S x + C

где S положительно определенная _диагональная_ матрица, C — какая-то константа сдвига, а x — вектор _ортогональной_ замены (поворота) переменных от r(n)..r(n-k), вобщем там что-то типа k(k-1)/2 + 1 параметров, если я не напутал (требование положительно-определенности уменьшает количество параметров в 2 раза)

идея в том, чтобы зафитить такую модель под данные, ей не нужны рекурентные цепочки, для расчёта её правдоподобия, подойдёт набор батчей из {r(n+1);r(n)..r(n-k)}

правдоподобие «всей кастрюли» будет равно сумме энтропий (логарифмов плотностей) батчей (может всё с минусом, в зависимости от конвенций) + то, что придёт от вашего инфо-критерия, это так или иначе что-то типа количества параметров k, но для начала я бы на инфокритерий забил, это тюнинг второго уровня

распределение r(n+1) — ну возьмите какое вам нравится, главное чтоб вы могли посчитать энтропию батча, задать ему центр \mu и скейл-фактор \sigma

далее вы ищите минимум суммарной энтропии (размера архива), подбирая параметры, хорошо бы, чтобы сама энтропия аналитически пару раз дифференцировалась, а это так и есть, если не брать какие-то совсем экзотические распределения

важно — вам нужна энтропия r(n+1), а не dW, если это не понятно — то нужно это понять

всё выше написанное это «разминка» для того, чтобы получить полином второй степени \sigma^2(r(n)..r(n-k))

если в нём коэффициенты при r(n-i) убывают «почти экспоненциально» и кросс продукты r(n-i)r(n-j) «почти отсутствуют» — поздравляю, вы посути можете свернуть это в рекурентное соотношение и получить XXX-GARCH сильно уменьшив кол-во параметров

и это не безнадёжная идея, вот почему: мы до сих пор ничего не говорили о dW, мы никак не предполагали его нормальность итд, а потому, нам ничто не мешает сказать, что в него вшит и джамп и толстые хвосты и ассиметрия итд, всё, что от него требуется это MdW = 0 и DdW = 1

я бы стартанул с предположения нормальности для «дебага», если хотите таки стьюдента для dW, то это требует его «отскейлить» до энтропии r(n+1)

то есть entropy(n+1) = ln(\sigma(r(n)...r(n-k))) + ln(pdf_stud(r(n+1)/\sigma(r(n)...r(n-k))) — это важно понять

кажется я столько написал, что это уже не переварить


но, если до сюда поняли, то вообще эту идею можно полностью отвязать от «предвыбора» распределения (однако контролируя MdW=0 DdW=1):

если сделать скейлинг r(n+1)/\sigma(...), то финальное правдоподобие это sum_i [ln(\sigma(r(n-i)..r(n-i-k))] + sum_i [ln(pdf(r(n-i+1)/\sigma(r(n-i)..r(n-i-k)))]

это значит, что pdf мы можем взять «какое получилось», и таки это медленнее, но не фатально, за один проход мы считаем \sigma(...) и r(n+1)/\sigma(...), далее чем-то надо аппроксимировать ln(pdf(r(n+1)/\sigma(...))

или, можно подумать в сторону какой-то параметризации асимметрии, так же как и \mu \sigma — skew_param(r(n)..r(n-k)) и его таки тоже есть шансы свернуть в рекурсию


ps: представьте, что dW имеет ассиметрию такую, что вниз может прям вот сильно — это создаст резкость в падении актива и последующий рост волатильности, как раз то что нужно. простые диффужн процессы не могут, у них или симметрично «лишняя» волатильность вверх или слишком плавный разгон, но для характерного поведения — нужна асимметрия — её вводят или джамп-процессом или корреляцией как в хестоне

pps: скорректируйте данные на дивы, если еще не скорректировали
avatar
anon, про фиттинг без подглядывания:

Для оценки точности предсказания нужно out-of-sample predictive likelihood p(y[t+1] | y[1:t], θ) t in [1:T].


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


GARCH, Фильтр Калмана, и т.п. — могут, это эффективные алгоритмы для онлайн фильтрации, но они не работают в случае нелинейных моделей со скрытыми состояниями. Для этого нужен Particle Filter.


Модель SV в MCMC внешне выглядит рекуррентно, якобы последовательно шагая от 1..T, похоже на фильтр. Но
MCMC работает совершенно по другому и делает сглаживание сразу по всем данным. Алгоритм MCMC во время фиттинга
сливает эту рекурсию в единое распределение и рассматривается все точки 1..T одновременно. Т.е. MCMC подглядывает в будущее.


Строго говоря фильтрация тоже подглядывает в будущее, но только для оценки параметров. Сглаживание подглядывает в будущее и для параметров и для скрытых переменных.


Чтобы точно расчитать out of sample likelihood нужно: 1) сделать фиттинг модели MCMC используя данные [1: Т] 2) затем взять постериор полученных параметров, выкинув постериор скрытых состояний, и рассчитать последовательно скрытое состояние для каждой точки t in [1:T] через Particle Filter 3) Либо, поскольку Particle Filter сложная вещ и требует много усилий, сделать приближенную оценку через PSIS-LOO, но, он вроде как, плохо работает для экстремальных режимов, и годится только для оценки «в среднем», поэтому эта оценка условна.

За ваше предложение спасибо, пока обдумываю… чуть позже прокомментирую...

avatar
anon, SV с прыжками, вроде близко к тому что надо, это то что она генерит (параметры условны, не реальные), посмотрим... 





avatar

Читайте на SMART-LAB:
Фото
🔥 Рост по всем ключевым показателям: SOFL публикует результаты за 2025 год
  Друзья, сегодня подводим итоги 2025 года. Все ключевые финансовые показатели Софтлайн демонстрируют рост:  • Оборот составил 131,9 млрд...
Фото
Офлайн и онлайн в одной системе: как связаны направления «МГКЛ»
🔄 В «МГКЛ» розничная сеть, цифровые сервисы и инвестиционная платформа работают как единая система. Они связаны единой логикой движения...
Bridgewater: ставка на золото и технологии
Крупнейший хедж-фонд Bridgewater Associates, основанный всемирно известным экономистом и миллиардером Рэем Далио, опубликовал отчет 13F за IV...
Фото
Россети Центр и Приволжье. Отчет об исполнении инвестпрограммы за Q4 2025г. Дивидендная база по РСБУ удивляет.
Компания Россети Центр и Приволжье (сокр. ЦиП) опубликовала отчет об исполнении инвестпрограммы за Q4 2025г., где показаны финансовые...

теги блога Alex Craft

....все тэги



UPDONW
Новый дизайн