Первые шаги в обучении для прогнозирования финансовых временных рядов с использованием машинного обучения

12

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

У меня есть финансовые временные ряды с некоторыми описательными данными, и я хотел бы сформировать модель и затем использовать модель для прогнозирования n шагов вперед.

Что я делал до сих пор:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Затем я приспособил модель randomForest к этим данным.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Который, кажется, подходит на удивление хорошо:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

И попытался использовать это, чтобы предсказать:

predict(fit, GOOG, n.ahead=2)

Но это предсказание не сработало.

Я пытаюсь предсказать Закрытие, должен ли я отстать от других переменных на столько шагов, сколько я хочу, до подгонки модели?

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

Nikke
источник

Ответы:

16

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

Что касается вашей цели - предсказать цену закрытия, я думаю, что цены закрытия слишком шумные, чтобы использовать их в качестве целевых переменных, и их использование приведет к переобучению или оптимизации неправильной цели. Вместо этого я бы начал сглаживать цену закрытия с помощью скользящей средней, а затем прогнозировать направление изменения цены в течение следующих двух дней. Например, я мог бы заменить закрытие 5-дневным SMA закрытия и затем кодировать изменение цены SMA как 1, если оно было положительным в течение следующих двух дней, и 0 в противном случае. Поскольку выходная переменная теперь закодирована как 1 или 0, это хорошая проблема, которую можно попытаться решить с помощью функции случайного леса, которую вы использовали. Вы также можете попробовать некоторые другие классификационные алгоритмы, такие как логистическая регрессия, нейронные сети и SVM, и, возможно, объединить несколько в ансамбль для повышения производительности. Это все еще трудная проблема, которую нужно решить без переоснащения, но это шаг в правильном направлении. Еще одно предостережение: ваша окончательная модель может с удивительной точностью классифицировать следующие два дня как положительные или отрицательные, но при этом потерять деньги, поскольку неправильно классифицирует несколько крупных ходов.

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

«Трейдинг на грани» Гвидо Дебека - хорошее место для начала изучения приложений машинного обучения для прогнозирования финансовых временных рядов. Это старая книга, так что она намного отстает от технологии, которую мы имеем сегодня, но это хорошее начало. Я также рекомендовал бы Новые Торговые Системы и Методы Кауфмана и Экспертные Торговые Системы Джона Вольберга.

CrossValidatedTrading
источник
хорошо, спасибо за этот хороший ответ. Этот пример помог мне понять, как настроить данные так, чтобы randomForest мог их использовать. Но теперь я знаю, что мне нужно запаздывать, чтобы все заработало. Имеет ли какой-то смысл указывать цену SMA в вашем примере в качестве выходной переменной или она должна быть равна 0 или 1? \ n Спасибо также за рекомендации книги, ознакомлюсь с ними.
Никке
Вы можете определенно использовать цену SMA в качестве выходной переменной; проблема становится все более сложной. Вместо того, чтобы предсказывать направление, вы сейчас пытаетесь предсказать точное значение цены. По моему опыту, это очень сложно для алгоритма машины сделать хорошо вне выборки. Но если вы просто знакомитесь с процессом настройки данных временных рядов для прогнозирования, это может быть хорошим началом, особенно если оно более интуитивно для вас, чем направленное прогнозирование. Вы также можете попытаться предсказать цену, по которой пересекутся две скользящие средние.
CrossValidatedTrading
Привет, создал несколько функций и сделал модель: pastie.org/7958695 Я думаю, что я понял механику. Эта модель, однако, слишком изогнута. Вы сделали что-нибудь подобное и реально использовали это? Было бы круто поговорить больше.
Никке
Я всегда открыт для более подробных разговоров. Моя контактная информация находится в моем профиле. Стреляй мне по электронной почте, если хочешь.
CrossValidatedTrading
Сделал несколько простых регрессий, чтобы предсказать доходность, которая должна работать нормально, по сравнению с прогнозированием цены-значения. Помимо предсказания возврата, нужно предсказать достаточно большой доход, чтобы превзойти распространение, коммикс и т. Д. Было бы здорово поговорить больше, не смог найти вашу почту в своем профиле. Мой в том, что я написал в предыдущем комментарии.
Никке