Блог им. uralpro

Модель скрытых состояний Маркова. Часть 2

hmm-training-outline-1024x889

В предыдущей статье мы говорили об эффективных алгоритмах, необходимых для вычисления вероятностей и стат. распределений модели Маркова, которыми являются форвардный алгоритм и алгоритм Витерби. Форвардный алгоритм вычисляет вероятность соответствия данных наблюдения полученным моделью всем возможным последовательностям состояний. Алгоритм Витерби вычисляет вероятность соответствия данных полученной моделью одной, наиболее вероятной, последовательности.

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

Форвардный алгоритм.

Форвардный алгоритм позволяет эффективно рассчитать функцию вероятности p(O|λ). Форвардной переменной называется вероятность генерации моделью наблюдений до времени t, и состояние j в момент времени t определяется как:

\alpha_j(t)=p(o_1,...,o_t,x(t)=j|\lambda)

Это выражение вычисляется рекурсивно через форвардную переменную в момент времени t-1, находясь в состоянии k, и затем вычисляется состояние j  в момент времени t:

\alpha_j(t)=p(o_1,...,o_t,x(t-1)=k,x(t)=j|\lambda)=\alpha_k(t-1)a_{kj}b_j(o_t)

где akj — вероятность перехода из состояния k  в состояние j, и bj(ot)- вероятность генерации вектора параметров ot из состояния t.

\alpha_j(t)=\sum_{k=1}^N p(o_1,...,o_t,x(t-1)=k,x(t)=j|\lambda)

1. Инициализация алгоритма.

\alpha_1(0)=1,\alpha_j(0)=0для 1< j ≤ N и\alpha_1(t)=0для 1< t ≤ T

2. Рекурсия.

Для t=1,2,...,T

… для j=2,3,....,N−1

................\alpha_j(t)=b_j(o_t)[\sum_{k=1}^{N-1}\alpha_k(t-1)a_{kj}]

3. Решение.

p(O|\lambda)=\sum_{k=2}^{N-1}\alpha_k(T)a_{kN}

Алгоритм Витерби.

Форвардный алгоритм находит p(O|λ) суммированием по всем возможным последовательностям состояний, но иногда предпочтительней аппроксимировать p(O|λ) вероятностью p^(O|λ) которая вычисляется для одной, наиболее вероятной последовательности. Для этого применяется алгоритм Витерби:

\hat{p}(O|\lambda)=\max_X[p(O,X|\lambda)], где X — наиболее вероятная последовательность состояний.

Вероятность лучшего  пути длиной t по модели Маркова, заканчивающегося состоянием j определяется как:

\phi_j(t)=\max_{X^{t-1}}[p(o_1,...,o_t, x(t)=j|\lambda)], где X^{t-1} — лучший путь/последовательность состояний.

Форвардная переменная ϕ также может быть вычислена рекурсивно:

\phi_j(t)=\max_i[\phi_i(t-1)a_{ij}b_j(o_t)]

1. Инициализация алгоритма.

\phi_1(0)=1,\phi_j(0)=0для 1< j < N и \phi_1(t)=0для 1≤ t ≤ T

2. Рекурсия.

Для t=1,2,...,T

… для j=2,3,...,N−1

....................\phi_j(t)=\max_{1\leq k&lt;N}[\phi_k(t-1)a_{kj}]b_j(o_t)

… сохранить предыдущее значение pred(j,t)=k

3. Решение.

p(O,X|\lambda)=\max_{1\leq k&lt;N}\phi_k(T)a_{kN}

сохранить предыдущее значение pred(N,T)=k.

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

Ошибки малой разрядности

Прямое вычисление p(O|λ) может привести к ошибкам малой разрядности. Значение вероятности может быть таким маленьким, что компьютер не сможет рассчитать его верно. Вместо этого необходимо использовать вычисление натурального логарифма log(p(O|λ).

В следующей части цикла рассмотрим тренировку модели Маркова на сгенерированных входных данных с помощью реализации разобранных выше алгоритмов на языке R.

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

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
542 | ★19
17 комментариев
Аффтырь, слишком примитивно это все. Все уже заработали по этой модели миллиарды. Давай напиши лучше про нелинейные неоднородные дифференциальные уравнения высших порядков.
avatar
Злой Инвестор, а я люблю в чужих карманах посчитать и помоделировать чужие скрытые состояния. И 90% здесь присутствующих любят.
Злой Инвестор, во первых, не примитивно.
Во вторых, не надо ля-ля про дифуры.
В третьих, по слухам, на этом если кто и смог заработать, так это Ренессанс Текноложди.
avatar
Злой Инвестор, А если серьезно чем вам модель на основе марковских состояний так не нравится? Вы думаете, что модель должна быть проще?
avatar
Еще-бы в excel это оформить
avatar
IliaM, только если в VBA.
avatar
Интересно, а какой алгроритм для оценки Скрытых марковских состояний точнее, быстрее? Витерби или еще какой?
И как определить скольк овобще состояний имеет модель(например цнновой ряд) На глаз опрделеять или есть какие-то рекомендации?
avatar
Ivan, состояния определяются вашим алгоритмом. Можно так — восходящий тренд, боковик, нисходящий тренд. А можно и так: в этом режиме моя стратегия зарабатывает, а в этом — сливает
avatar
uralpro, понятноно если состояния меняются довольно часто и с разной частотой.Например 1мин боковик 1мин тренд 5мин боковик 1мин тренд 2мин тренд 3минбоковик 1мин боковик 1мин тренд итд
То что тогда делать? ну тоесть они в случайном порядке идут и с разной периодичностью? Почти как рендом волк
avatar
Ivan, неважно какая продолжительность состояний, важна точность их определений. Если вы хотите ловить минутные тренды и модель позволяет это сделать, то можно вас поздравить — у вас будет высокочастотный алгоритм. Если вы не хотите так делать, что мешает детектировать тренды, например, на часовиках?
avatar
uralpro, А как система опрделит тренд или флэт.КМожет ведь быть и такое, что система только определила, что это тренд, так он и закончится.
Предположим у нас был сигнал (10 мин цена идет вверх- значит это тренд.А потом этот же сигнал перестанет работать.10 мин цена шла вверх, А дальше она не пойдет вверх, а наоборот боковик или вниз. Получается, что нужна какая-то оптимизация на истории.Мы берем нбеольшой промежуток веремени 10мин и по нему опрделеяем куда цена идет дальше.Если 10мин шло вверх-то тренд. Но как мне кажется у нас такая ситуацию не часто будет встречаться, а чаще будет угадайка, что произойдет если цена 10мин шла вверх? Исходя из исторических данных вряд ли это даст нам сигнал, Который с высокой вероятностью(70%, что цена после 10мин вверх и дальше еще 10-20мин будет идти вверх)
avatar
Ivan, конечно, запаздывание будет. На истории в любом случае необходимо тестировать и смотреть статистику. Определять тренды вообще не лучшая мысль для высокой частоты. Я указал направление в одном из ответов на ваш коммент, поверьте, это хорошая подсказка :)
avatar
uralpro, да спасибо, с вашими знаниями надо кандидатскую уже писать :-)
avatar
uralpro, а что вы делаете, если видите какую-то непонятную формулу в тексте, тройные интегралы, дифуры итд? Лезть по учебникам математики? Есть ли простые учебники по дифурам?
avatar
Ivan, в любом случае пытаюсь разобраться, что формула означает. Но в алгоритмах, как правило, применяются численные решения задач, поэтому достаточно подобрать правильную библиотеку
avatar
uralpro, понятно спасибо
avatar
Тему уже подобрал Стохастические дифференциальные уравнения с пуассоновской составляющей для поиска Грааля
avatar

Читайте на SMART-LAB:
ФосАгро в лидерах роста на Мосбирже
Акции ФосАгро 22 сентября растут на 4,8%, до 5285 руб. На наш взгляд, в первую очередь котировка повторяет движение российского фондового рынка в...
Фото
Акции ВТБ на минимумах. Что будет дальше?
Дарья Фёдорова Акции ВТБ обновляют минимумы перед допэмиссией, которую банк планировал провести до конца сентября, и торгуются около...
Фото
USD/JPY: иена росла на ожиданиях и упала на фактах, но пытается отбиться
Японская иена сначала продолжила укрепляться, однако затем развернувшись заметно ослабла. В этот период фактором укрепления иены были изменения...
Фото
Мозговой штурм: какие идеи в моменте?
Доброго вечера. Сегодня мы провели традиционный мозговой штурм. Выпишу некоторые идеи:

теги блога uralpro

....все тэги



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