Блог им. uralpro

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

hidden-markov-model-1024x412

В данном цикле статей начинаем рассматривать модель Маркова, которая находит применение в задачах классификации состояния рынка и используется во многих биржевых роботах. Статьи основаны на постах, опубликованных в блоге Gekko Quant. Также будет рассмотрены практические алгоритмы на финансовых рынках. Код в цикле приведен на языке R. Вначале будет много теории, ее надо хотя бы попробовать понять, затем разберем практические примеры.

Рабочая среда распознавания основных паттернов.

Рассмотрим набор признаков O, полученный из набора данных d и класс w, обозначающий наиболее подходящий класс для O:

\hat{w}=\arg\max_w P(w|O)

Так как P(w|O) неизвестен, применяем правило Байеса:

\hat{w}=\arg\max_w\frac{P(O|w)P(w)}{P(O)}=\arg\max_w P(O|w)P(w)

Максимизация не зависит от P(O), поэтому мы можем игнорировать эту вероятность. P(O|w),P(w) означают вероятность того, что данные O принадлежат классу w и вероятность существования класса w соответственно.P(O|w) определяется моделью скрытых состояний Маркова.

Формулировка задачи.

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

Затем необходимо вектор О ассоциировать с классом модели Маркова. Это можно сделать путем применения метода максимального правдоподобия, где модель Маркова определяет класс, который с наибольшей вероятностью генерирует набор параметров, соответствующий набору параметров О.

Спецификация модели Маркова.

Рассмотрим рисунок в заглавии поста. На нем приведены следующие обозначения:

N — число состояний модели (на рисунке равно 5),

ai,j- вероятности перехода из состояния i в состояние j,

bj(O)- вероятность получения вектора параметров О при состоянии j ( j не является входным и выходным состоянием),

вектор параметров модели Маркова λ определим как \lambda=[N,a_{i,j},b_j],

O=[o_1,o_2,...,o_T] — вектор параметров наблюдений,

X=[x_1,x_2,..,x_T] — найденный вектор последовательности состояний.

Совместная вероятность соответствия вектора О последовательности состояний X при параметрах модели λ равна вероятности перехода  из текущего состояния в следующее, умноженное на вектор параметров, сгенерированный в этом состоянии:

p(O,X|\lambda)=a_{x_0,x_1}\prod_{t=1}^T b_{x_t}(o_t)a_{x_t,x_{t+1}}

где x0,xT+1- входное состояние 1 и выходное соcтояние N соответственно.

Вычисление вероятности.

В рассмотренной выше совместной вероятности мы определили последовательность состояний X. Так как эта последовательность является скрытой переменной ( вот почему модель Маркова называется моделью скрытых состояний), мы ее не знаем. Однако, если мы суммируем вероятности по всем возможным состояниям, то получим:

p(O|\lambda)=\sum_X p(O,X|\lambda)

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

Что представляет из себя bj(o)?

Это полученное распределение вероятностей при состоянии j модели. Это распределение может быть любым, но оно должно соответствовать распределению данных при состоянии j, и должно быть математически определяемым. Обычным выбором на этой стадии является предположение, что вектор O может описываться набором гауссовских распределений — мультивариантным нормальным распределением. В качестве предупреждения отметим, что если составляющие вектора параметров сильно коррелированы между собой, тогда Σ- ковариационная матрица — будет иметь много вычисляемых значений. В этом случае нужно подбирать вектор парметров так, чтобы Σ представляла собой диагональную матрицу, другими словами, параметры не должны быть кореллированы между собой:

b_j(o)\sim N(o;\mu_j,\Sigma_j), где μ,Σ- параметры мультивариантного гауссовского распределения.

Как получить bj(o)? Определение параметров методом Витерби.

Мы знаем, что для описания нормального распределения достаточно методом максимального правдоподобия вычислить среднее распределения μ и ковариацию Σ вектора параметров. Значит мы должны получить только среднее и ковариацию вектора параметров для состояния j нашей модели, используя так называемую сегментацию Витерби. Она подразумевает нахождения жесткого соответствия между вектором параметров и последовательностью состояний, которое его генерировало. Существует также и альтернативный метод Баума-Вельша, который ассоциирует вектор параметров с несколькими последовательностями состояний с определенной вероятностью.

Состояние j генерирует наблюдения, начиная с tj:

\hat{\mu}_j=\frac{1}{t_{j+1}-t_j}\sum_{t=t_j}^{t_{j+1}-1}o_t

\hat{\Sigma}_j=\frac{1}{t_{j+1}-t_j}\sum_{t=t_j}^{t_{j+1}-1}[(o_t-\hat{\mu}_j)(o_t-\hat{\mu}_j)^{`}]

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

hmm-training-outline-1024x889

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

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

★45
34 комментария
Спасибо. Интересно
Спасибо вам, что пытаетесь разобраться в настоящем трейдинге :)
avatar
Я восхищен! Наверное вы очень богаты :)
Верю в Россию, знатный подкол)
Какой содержательный смысл можно, на Ваш взгляд, вложить в различные состояния, включая состояние EXIT?
avatar
SergeyJu, например три состояния — восходящий тренд, нисходящий тренд, боковик. Последовательность состояний определяется входными данными, на выходе может любое из вышеперечисленных. Подробнее об этом в следующих частях, или на моем сайте, где уже все опубликовано
avatar
uralpro, при такой логике должна быть полная матрица переходов между тремя состояниями, а вход и выход — лишены смысла.
avatar
SergeyJu, ну так в статье и идет речь о получении в дальнейшем матрицы переходов. Последовательность состояний используется для объяснения теории
avatar
Генерация набора признаков всегда будет отставать от рыночных данных. Ценность такой модели сомнительна. Всегда будете бить по хвостам.
Кан Делябр, такое утверждение справедливо для любой модели, но все зависит от вектора параметров, насколько сильно будет такое отставание. А в самой модели Маркова отставания нет — есть входной вектор — и моментально определяем состояние.
avatar
uralpro, вы же сами указали, что признаки — это индикаторы, а они всегда отстают от потока рыночных данных, поэтому отставание здесь принципиально присутствет.
Кан Делябр, ну да, я об этом и говорю. А вы знаете модели, в которых нет отставания?
avatar
uralpro, да, такие модели есть, они очень сложны, о них знают некоторые трейдеры-кванты нового поколения.
Кан Делябр, эти кванты нового поколения миллиардеры? Если нет, то почему? Вопрос не преследует цель поддёвки.
avatar
Юрий Романов, на биржу сначала занесите :)
avatar
божечьки божечки...
оказываецца как все просто то и тривиально...
— мои щи сложнее намного
Юрий Романов, а зачем? Если у вас есть желание разобраться, то вы точно разберетесь. Здесь нет ничего, кроме основ теории вероятности и самых простейших численных алгоритмов. Изложение и так предельно адаптированное, почитали бы вы статьи о модели Маркова, публикуемые в академической литературе. Вот там реально жесть.
avatar
если коротко то хххххрень. при большом количестве совмещении вероятности получите вектор который не имеет реального воплощения в жизни. его погрешность будет больше целевого значения… как-то так
avatar
ахх… у… е… т… ьььььь))) за что вы так с нами!?=80
Григорий Старцун, но вы ведь не уверены, что каждый день будете так зарабатывать в течение, скажем, хотя бы 5 лет? В этом и есть кардинальное отличие мат. моделей от интуитивной торговли
avatar
uralpro, всегда с интересом читаю Ваши статьи, было бы здорово выстроить статьи в виде курса или хотя бы связать их какой-то логической цепочкой, например «разрабатываем торговую систему» или «делаем анализ», что бы каждый мог бы на примере посмотреть.

У меня к Вам вопрос, без подвоха, действительно хочу знать Ваш мнение. Если без формул, что дает Вам уверенность, в том что найденные закономерности устойчивы? Как объяснить владельцу кирпичного завода, что под стратегию можно давать деньги (по моему опыту люди легко понимают факторы на товарных рынках, а с мат. моделями намного сложнее)? Не кажется ли Вам, что основой торговой системы является ММ, а фильтр сделок — мат. модель или какие-то примитивные правила — не так важны? Спасибо.
avatar
sheffield, про курс статей мысли есть, главное, чтобы времени на все хватило. Я еще и реальным воплощением алгоритмов занимаюсь, на это уходит очень много времени.
Закономерности устойчивы как раз потому, что имеют четкое математическое или статистическое обоснование. Если вы понимаете, как работает модель на уровне мат. закономерностей, вы легко определите, как они меняются во времени и изменение торгового алгоритма станет почти автоматической процедурой. Что вы имеете в виду под ММ? Если манименеджмент, то это важная, но не определяющая часть алгоритма. Все-таки самое главное — это положительное мат. ожидание стратегии. Которое можно оценить большим количеством испытаний — то есть статистически. Поэтому бессмыслены всякие стратегии, где вывод делается на основании, скажем 30 сделок за год, это все статистически недостоверно. А если брать историю за 20 лет — это тоже не вариант, слишком мало взаимосвязей на таких промежутках времени ( если конечно, там не было постоянного тренда, как в Америке). Поэтому столь привлекательны HFT алгоритмы, где за один или несколько дней набирается достаточная статистика.
avatar
uralpro, Абсолютно не уверен, у меня пакет разных стратегий какие то попадают в рынок, я пытаюсь смотреть на сумму каждой конкретной стратегии.
Извините, а только я ничего не понял или еще кто-то?
Типичный пример, когда очень умные очкарико-ботаники начинают развертывать на рынке научно-исследовательскую деятельность, вместо того, чтобы «растет-покупай», «падает-продавай» и «дай прибыли течь, а убытки обрезай» )))
Сука, я не понял ни одного предложения, как такая ебанина с формулами может иметь что-то общее с заколачиванием бабла на рынке?))))
avatar
Дмитрий Сергеев,
Абсолютно никакой. Рынок одна из тех сфер, в которых чистая математика даёт полностью оторванные от реальности результаты. Ценой на рынке движет ценообразование, что есть непрерывный процес оценки стоимости актива участниками. В один момент оценка одна, в другой момент-другая. Оценка может меняться мгновенно. Именно оценка стоимости определяет то, за сколько продавцы желают продать и насколько с этим согласны покупатели. Единственным индикатором оценки стоимости актива является её цена, а динамикой изменения оценки актива является
динамика изменения цены. И тут не нужно ничего сложнее стандатных всем известных индикаторов, основанных на анализе цены. Объёмы тоже не играют никакой роли в ценообразовании, так как показывают только то, что в какой-то момент в прошлом сошлись такое-то количество покупающих и продающих, и этот факт на динамику ценообразования в будущем никак не влияет, цена может бегать не только без объёмов, но и вообще без котировок, если изменится оценка цены участниками. Крупные игроки используют алгоритмы в торговле, но ни в коем случае не для того, чтоб предсказать рынок, это невозможно. Алгоритмы используются, например, для продажи большого объёма без изменения цены вниз, или скупка без роста цен. Именно эти алгоритмы создают краткосрочные тренды (несколько дней), в которых крупные игроки занимают позиции, например на нисходящем краткосрочном тренде, крупняк закупается.
avatar
Lomov Tom, вот, сразу видно знатока алготрейдинга :)
avatar
В итоге все-равно Грааль в самой модели? а не в способе подсчета и упрощения этих подсчетов (как я понял подставляется уже посчитанное алгоритмом суррогатом).
Олег, в случае модели Маркова сложно что-либо еще упростить, она и так считается фактически одной-двумя функциями языка программирования. В целом, да, некоторые модели даже нужно упрощать, но для этого необходимо понимание, как эта модель работает.
avatar
uralpro, кто-то кого-то не понял, на примере физического робота можно много сил и средств вложить в изменение материала супер легкие металлы и прочее, думая что он не ходит из-за веса, а на самом деле мы просто не научили его ходить или сделали ошибку. Пускай лучше неповоротливый и хромой, но не отвлекались от основной задачи (навешивая датчики и светящееся прибамбасы).

теги блога uralpro

....все тэги



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