Premiers pas pour apprendre à prédire la série financière à l'aide de l'apprentissage automatique

12

J'essaie de comprendre comment utiliser l'apprentissage automatique pour prédire la série financière 1 étape ou plus dans le futur.

J'ai une série temporelle financière avec des données descriptives et je voudrais former un modèle et ensuite utiliser le modèle pour prédire n étapes à venir.

Ce que j'ai fait jusqu'à présent, c'est:

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

J'ai ensuite adapté un modèle randomForest à ces données.

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

Ce qui semble étonnamment bien:

> 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

Et j'ai essayé de l'utiliser pour prédire:

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

Mais cette prédiction ofc n'a pas fonctionné.

J'essaie de prédire la fermeture, dois-je retarder les autres variables par autant d'étapes que je veux la prédiction, avant d'ajuster le modèle?

Je devrais probablement prendre également en compte beaucoup d'autres choses, mais ce sont vraiment mes premières étapes pour essayer l'apprentissage automatique.

nikke
la source

Réponses:

16

Ma première observation est que vous n'avez pas pris de retard par rapport aux prix de clôture et c'est pourquoi vous avez observé un si bon ajustement. La SMA (moyenne mobile simple) utilise le prix de clôture dans son calcul et la fourchette haute et basse englobe le prix de clôture, donc les utiliser pour prédire le prix de clôture confère un biais d'anticipation. Mon avis est que si vous essayez de prédire le prix de clôture deux jours à l'avance, vous devez construire votre modèle avec des entrées décalées du prix de clôture d'au moins deux jours. Certaines entrées peuvent être décalées de plus de deux jours, mais je commencerais simplement et j'essaierais d'utiliser une poignée d'entrées.

En ce qui concerne votre objectif de prédire le cours de clôture, je pense que les prix de clôture sont trop bruyants pour être utilisés comme variables cibles et leur utilisation entraînera un sur-ajustement ou une optimisation du mauvais objectif. Au lieu de cela, je commencerais par lisser le cours de clôture avec une moyenne mobile, puis à prédire la direction du changement de prix au cours des deux prochains jours. Par exemple, je pourrais remplacer la clôture par un SMA de 5 jours de la clôture, puis coder le changement de prix du SMA comme 1 s'il était positif au cours des deux prochains jours et 0 sinon. Parce que la variable de sortie est maintenant codée en 1 ou en 0, c'est un bon problème à essayer de résoudre avec la fonction de forêt aléatoire que vous utilisiez. Vous pouvez également essayer d'autres algorithmes de classification comme la régression logistique, les réseaux de neurones et les SVM et peut-être en combiner quelques-uns en un ensemble pour améliorer vos performances. C'est toujours un problème difficile à résoudre sans surajustement, mais c'est un pas dans la bonne direction. Une autre mise en garde est que votre modèle final pourrait avoir une précision étonnante pour classer les deux prochains jours comme positifs ou négatifs, mais perdre de l'argent car il classait incorrectement quelques mouvements importants.

Je recommanderais également de construire votre modèle sur plus d'une sécurité afin que l'algorithme d'apprentissage automatique ne se concentre pas sur les idiosyncrasies d'un stock. Je commencerais avec au moins 5 actions qui ne sont pas fortement corrélées les unes aux autres.

Trading on the Edge par Guido Deboeck est un bon point de départ pour explorer les applications de l'apprentissage automatique à la prévision des séries temporelles financières. C'est un livre plus ancien, il est donc loin derrière la technologie dont nous disposons aujourd'hui, mais c'est un bon début. Je recommanderais également de nouveaux systèmes et méthodes de négociation par Kaufman et des systèmes de négociation experts par John Wolberg.

CrossValidatedTrading
la source
ok, merci pour cette bonne réponse. L'exemple était plus pour moi de comprendre comment configurer les données pour que randomForest puisse les utiliser. Mais maintenant, je sais que je dois retarder les entrées pour le faire fonctionner. Serait-il logique d'avoir le prix du SMA dans votre exemple comme variable de sortie, ou devrait-il être égal à 0 ou 1? \ n Merci aussi pour les recommandations du livre qui me permettront de me familiariser avec elles.
nikke
Vous pouvez certainement utiliser le prix du SMA comme variable de sortie; le problème devient simplement plus complexe. Au lieu de prédire une direction, vous essayez maintenant de prédire une valeur de prix exacte. D'après mon expérience, il est très difficile pour un algorithme machine de bien fonctionner hors échantillon. Mais si vous vous familiarisez simplement avec le processus de configuration des données de séries chronologiques pour la prédiction, cela peut être un bon point de départ, surtout si cela vous est plus intuitif que la prédiction directionnelle. Vous pouvez également essayer de prédire le prix auquel deux moyennes mobiles se croiseront.
CrossValidatedTrading
Salut, créé quelques fonctionnalités et fait un modèle: pastie.org/7958695 Je pense que j'ai compris les mécanismes. Ce modèle est cependant trop ajusté. Avez-vous fait quelque chose de similaire et l'avez-vous vraiment utilisé? Ce serait cool de parler plus.
nikke
Je suis toujours ouvert à des conversations plus détaillées. Mes coordonnées sont sur mon profil. Envoyez-moi un e-mail si vous le souhaitez.
CrossValidatedTrading
A fait quelques régressions simples pour prédire les rendements qui devraient fonctionner correctement, par rapport à la prévision d'une valeur-prix. En plus de prédire le retour, il faut prévoir un retour suffisamment important pour battre propagation et commish, etc. Ce serait cool de parler plus, je ne pouvais pas trouver votre courrier dans votre profil. Le mien est dans le pastie que j'ai posté dans le commentaire précédent.
nikke