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

Мне нужно было хотя бы попробовать. Вот что я сделал и чему научился.

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

У меня было две идеи, что делать дальше. Во-первых, я хотел стать больше. Я предположил, что между некоторыми акциями, валютами и финансовыми показателями могут быть скрытые взаимосвязи, которые невозможно обнаружить на глаз. Я подумал, что алгоритм машинного обучения сможет их выделить.

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

Я начал с загрузки истории большинства акций из S&P 500, истории стоимости валюты и пары десятков финансовых индикаторов. Сценарий Python позаботился о преобразовании их в согласованный формат, заполнении отсутствующих значений и удалении временных рядов, которые не относятся, по крайней мере, к началу 2000-х годов. В общем, когда пыль рассеялась, у меня было более тысячи столбцов в красивой таблице Pandas с данными за 18 лет.

Как только это было завершено, я использовал отличную библиотеку TA-lib для расчета группы индикаторов для каждого временного ряда для окон 5, 10 и 30 дней. У меня не было финансового опыта, и я не знал, какие из них действительно принесут пользу, поэтому я решил добавить их целиком и позволить модели разобраться с ними. Это привело к огромному количеству столбцов. Набор данных был готов для ввода в обучающую модель с более чем 32000 столбцов.

Я выбрал XGBoost для своего алгоритма из-за общей производительности и возможности легко увидеть, какие функции модель использовала для прогнозирования. Я настроил его на цикл по всем акциям в наборе данных, обучая по две модели для каждой. Первым был классификатор, который предсказывал, вырастет или упадет цена на следующий день. Вторая была регрессионной моделью, которая предсказывала цену закрытия на следующий день.

Для каждой модели я обучил ее на 95% имеющихся данных, а затем использовал оставшиеся данные для проверки, чтобы смоделировать данные о запасах, которых она никогда не видела. Оставшиеся 5% составили данные о торговле за 3 месяца. Любая модель машинного обучения отлично справится с прогнозированием данных, на которых она была обучена - хитрость заключается в том, чтобы сделать ее более общей и хорошо работать с данными, с которыми она никогда не сталкивалась.

Для запуска проверки была сделана смоделированная инвестиция в размере 1000 долларов США. Если прогнозировалось, что акции вырастут, они покупали и продавали, если прогнозировалось падение. Не было предпринято никаких усилий для учета торговых затрат, потому что я хотел увидеть, как будут выглядеть результаты без этого.

Я отработал свой Jetson TX2 в течение месяца.

Что он нашел?

Как и ожидалось, для большинства акций результаты были плохими - точность была не намного лучше, чем подбрасывание монеты. Однако были некоторые, которые, по-видимому, исключительно хорошо работали с данными валидации. Многие удвоили или утроили мои смоделированные деньги за 3–6 месяцев, и пара за этот период получила 20-кратную прибыль. Оказывается, график может вызвать скачок вашего пульса. Кто знал?

Помните, что это данные, которые алгоритм никогда раньше не видел - те последние 5%, которые были исключены из набора обучающих данных.

Нашел ли я это? Были ли какие-то акции, которые были тонко привязаны к рыночным индикаторам и, таким образом, могли быть предсказаны? Если так, я мог бы заработать на колебаниях цен.

К тому времени, как я написал код и запустил его, прошло несколько месяцев с тех пор, как я загрузил свой гигантский набор данных. Я обновил его, включив в него самые последние торговые данные, и решил посмотреть, что модели сделали бы в течение этого периода времени. Они отлично справились со своими прогонами проверки - работали бы они так же, если бы я торговал с ними вживую последние пару месяцев. ? Я был очень взволнован этим моментом.

Результаты были загадочными и мрачными. Модели, которые хорошо себя проявили во время начального обучения и проверки, могут хорошо работать во время прогонов на более поздних данных, но также могут сильно потерпеть неудачу и сжечь все начальные деньги. Половину времени симуляция приносила деньги, а половину разорялась. Иногда это было бы всего на несколько процентных пунктов лучше, чем подбрасывание монеты, а иногда было бы намного хуже. Что произошло? Это выглядело так многообещающе.

Извлеченные уроки

Наконец до меня дошло, что я сделал.

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

Не было скрытой закономерности. Модели просто несколько раз повезло по чистой случайности, и я выбрал эти экземпляры. Это не повторялось.

Таким образом, мы пришли к выводу, что машинное обучение - это не волшебство. Он не может предсказать случайную последовательность, и вы должны быть очень осторожны со своими собственными предубеждениями при обучении моделей. Тщательная проверка имеет решающее значение.

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

Первоначально опубликовано на http://shortcircuitsandinfiniteloops.blogspot.com.