Primeiros passos para aprender a prever séries temporais financeiras usando o aprendizado de máquina

12

Estou tentando entender como usar o aprendizado de máquina para prever séries temporais financeiras 1 ou mais etapas no futuro.

Tenho séries temporais financeiras com alguns dados descritivos e gostaria de formar um modelo e depois usá-lo para prever n passos adiante.

O que tenho feito até agora é:

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

Então eu ajustei um modelo randomForest nesses dados.

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

O que parece se encaixar surpreendentemente bem:

> 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

E tentou usá-lo para prever:

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

Mas essa previsão não funcionou.

Tento prever o fechamento, devo atrasar as outras variáveis ​​em quantas etapas quiser a previsão, antes de ajustar o modelo?

Provavelmente, devo levar em consideração muitas outras coisas, mas esses são realmente os meus primeiros passos para experimentar o aprendizado de máquina.

Nikke
fonte

Respostas:

16

Minha primeira observação é que você não atrasou os insumos em relação ao preço de fechamento e foi por isso que observou um ajuste tão bom. A SMA (média móvel simples) usa o preço de fechamento em seu cálculo e a faixa alta baixa abrange o preço de fechamento, portanto, usá-los para prever o preço de fechamento gera um viés de antecipação. Minha opinião é que, se você estiver tentando prever o preço de fechamento dois dias antes, deverá construir seu modelo com entradas que estão atrasadas em relação ao preço de fechamento em pelo menos dois dias. Algumas das entradas podem ter um atraso de mais de dois dias, mas eu começaria simples e tentaria usar apenas algumas entradas.

Quanto ao seu objetivo de prever o preço de fechamento, acho que os preços de fechamento são muito barulhentos para serem usados ​​como variáveis-alvo e usá-los levará ao ajuste excessivo ou à otimização do objetivo errado. Em vez disso, começaria suavizando o preço de fechamento com uma média móvel e depois prevendo a direção da mudança de preço nos próximos dois dias. Por exemplo, eu poderia substituir o fechamento por um SMA de 5 dias do fechamento e, em seguida, codificar a alteração de preço do SMA como 1 se ele fosse positivo nos próximos dois dias e 0 caso contrário. Como a variável de saída agora está codificada como 1 ou 0, é um bom problema para tentar resolver com a função de floresta aleatória que você estava usando. Você também pode tentar outros algoritmos de classificação, como regressão logística, redes neurais e SVMs, e talvez combinar alguns em um conjunto para melhorar seu desempenho. Esse ainda é um problema difícil de resolver sem sobreajuste, mas é um passo na direção certa. Outra palavra de cautela é que seu modelo final pode ter uma precisão incrível ao classificar os próximos dois dias como positivos ou negativos, mas ainda assim perder dinheiro porque classificou alguns movimentos grandes incorretamente.

Eu recomendaria também construir seu modelo em mais de uma segurança, para que o algoritmo de aprendizado de máquina não se concentre nas idiossincrasias de um estoque. Eu começaria com pelo menos 5 ações que não estão altamente correlacionadas entre si.

A negociação on the Edge de Guido Deboeck é um bom ponto de partida para explorar as aplicações do aprendizado de máquina na previsão financeira de séries temporais. Como é um livro antigo, está muito atrás da tecnologia que temos disponível hoje, mas é um bom começo. Eu também recomendaria Novos Sistemas e Métodos de Negociação por Kaufman e Expert Trading Systems por John Wolberg.

CrossValidatedTrading
fonte
ok, obrigado por esta boa resposta. O exemplo foi mais para eu entender como configurar os dados para que randomForest possa usá-los. Mas agora eu sei que preciso atrasar as entradas para fazê-lo funcionar. Faria algum sentido ter o preço da SMA no seu exemplo como variável de saída ou teria que ser 0 ou 1? \ n Obrigado também pelas recomendações do livro que me familiarizarão com elas.
Nikke 15/05
Você definitivamente poderia usar o preço do SMA como variável de saída; o problema se torna mais complexo. Em vez de prever uma direção, agora você está tentando prever um valor exato do preço. Na minha experiência, isso é algo muito difícil para um algoritmo de máquina sair bem fora da amostra. Mas se você está apenas se familiarizando com o processo de configuração de dados de séries temporais para previsão, este pode ser um bom ponto de partida, especialmente se for mais intuitivo para você do que a previsão direcional. Você também pode tentar prever o preço pelo qual duas médias móveis se cruzam.
CrossValidatedTrading
Olá, criei alguns recursos e fiz um modelo: pastie.org/7958695 Acho que descobri a mecânica. Esse modelo, no entanto, é muito ajustado à curva. Você fez algo semelhante e teve algum uso real? Seria legal falar mais.
Nikke 25/05
Estou sempre aberto a conversas mais detalhadas. Minhas informações de contato estão no meu perfil. Envie-me um e-mail, se desejar.
CrossValidatedTrading
Fiz algumas regressões simples para prever retornos que devem funcionar bem, em comparação com a previsão de um valor-preço. Além de prever o retorno, é necessário prever um retorno grande o suficiente para bater o spread e o commish, etc. O meu está no pasto que publiquei no comentário anterior.
Nikke 29/05