Prise en charge de la régression vectorielle pour la prédiction de séries chronologiques multivariées

22

Quelqu'un a-t-il tenté de prédire des séries chronologiques en utilisant la régression des vecteurs de support?

Je comprends les machines à vecteurs de support et je comprends partiellement la régression des vecteurs de support, mais je ne comprends pas comment elles peuvent être utilisées pour modéliser des séries chronologiques, en particulier des séries temporelles multivariées.

J'ai essayé de lire quelques articles, mais ils sont trop élevés. Quelqu'un peut-il expliquer en termes simples comment ils fonctionneraient, en particulier en ce qui concerne les séries chronologiques multivariées?

EDIT: Pour élaborer un peu, permettez-moi d'essayer d'expliquer avec un exemple de prix des actions.

Disons que nous avons des cours boursiers pour N jours. Ensuite, pour chaque jour, nous pourrions construire un vecteur de caractéristiques, qui, dans un cas simple, pourrait être le prix du jour précédent et le prix du jour actuel. La réponse pour chaque vecteur d'entités serait le prix du lendemain. Ainsi, étant donné le prix d'hier et le prix d'aujourd'hui, l'objectif serait de prédire le prix du lendemain. Ce que je ne comprends pas, c'est que nous avons des données d'entraînement de six mois, comment mettriez-vous davantage l'accent sur les vecteurs de caractéristiques les plus récents?

raconteur
la source
Pouvez-vous publier les documents auxquels vous faites référence?
Ram Ahluwalia
1
Predicting Time Series with a Local Support Vector Regression Machine, Rodrigo Fernandez, svms.org/regression/Fern.pdf Support Vector Regression for Financial Time Series Forecasting, Wei Hao et Songnian Yu, springerlink.com/index/946802600u4552m8.pdf
raconteur

Réponses:

18

Dans le contexte de la régression des vecteurs de support, le fait que vos données soient une série chronologique est principalement pertinent d'un point de vue méthodologique - par exemple, vous ne pouvez pas effectuer une validation croisée k-fold, et vous devez prendre des précautions lors de l'exécution de backtests / simulations.

Fondamentalement, la régression des vecteurs de support est une technique de régression discriminante un peu comme toute autre technique de régression discriminante. Vous lui donnez un ensemble de vecteurs d'entrée et de réponses associées, et il s'adapte à un modèle pour essayer de prédire la réponse en fonction d'un nouveau vecteur d'entrée. Le noyau SVR, d'autre part, applique l'une des nombreuses transformations à votre ensemble de données avant l'étape d'apprentissage. Cela lui permet de détecter des tendances non linéaires dans l'ensemble de données, contrairement par exemple à la régression linéaire. Un bon noyau pour commencer serait probablement le RBF gaussien - il aura un hyperparamètre que vous pouvez régler, alors essayez quelques valeurs. Et puis, lorsque vous aurez une idée de ce qui se passe, vous pourrez essayer d'autres noyaux.

Avec une série chronologique, une étape d'importation détermine ce que sera votre "vecteur d'entités" ; chaque x i est appelé une "caractéristique" et peut être calculé à partir de données présentes ou passées, et chaque y i , la réponse, sera le changement futur sur une certaine période de temps de tout ce que vous essayez de prédire. Prenez un stock par exemple. Vous avez des prix au fil du temps. Peut-être que vos caractéristiques sont a.) L'écart de 200MA-30MA et b.) La volatilité sur 20 jours, de sorte que vous calculez chaque x t à chaque instant, avec y tXXjeyjeXtyt, le (disons) retour de la semaine suivante sur ce stock. Ainsi, votre SVR apprend à prédire le retour de la semaine suivante en se basant sur le spread MA actuel et le vol de 20 jours. (Cette stratégie ne fonctionnera pas, alors ne vous excitez pas trop;)).

Si les articles que vous lisez étaient trop difficiles, vous ne voudrez probablement pas essayer d'implémenter un SVM vous-même, car cela peut être compliqué. IIRC il y a un paquet "kernlab" pour R qui a une implémentation SVM du noyau avec un certain nombre de noyaux inclus, ce qui fournirait un moyen rapide de se mettre en route.

William
la source
@Jason, merci pour la réponse. Je suis confus quant à la façon de rendre les données plus anciennes moins importantes pendant la formation, c'est-à-dire comment donner de l'importance aux 100 derniers exemples, plutôt qu'aux 10 000 derniers exemples. De plus, j'ai une certaine expérience de travail avec les SVM en Python, donc je cherche à l'utiliser.
raconteur
Vous ne pouvez pas vraiment utiliser toutes les données passées comme vecteur d'entités; vous devez le transformer en quelque sorte en une fonctionnalité significative. Par exemple, envisagez de faire la moyenne des 20 dernières valeurs de la série chronologique ou la valeur actuelle de la série divisée par la moyenne mobile. Ce sont des caractéristiques qui indiquent en un seul numéro une caractéristique d'importation de l'ensemble de données. Trouvez (disons) une dizaine de fonctionnalités qui, selon vous, seront aussi prédictives que possible. Donc, pour rendre les données plus anciennes moins importantes, vous les rendriez moins importantes lors de la définition de vos fonctionnalités (c'est-à-dire utiliser des moyennes mobiles plus courtes).
William
@ Jason, permettez-moi d'essayer d'expliquer avec un exemple de cours des actions. Disons que nous avons des cours boursiers pour N jours. Ensuite, pour chaque jour, nous pourrions construire un vecteur caractéristique, qui, dans un cas simple, pourrait être le prix du jour précédent et le prix du jour actuel. La réponse pour chaque vecteur d'entités serait le prix du lendemain. Ainsi, étant donné le prix d'hier et le prix d'aujourd'hui, l'objectif serait de prédire le prix du lendemain. Ce que je ne comprends pas, c'est que nous avons des données d'entraînement de six mois, comment mettriez-vous davantage l'accent sur les vecteurs de caractéristiques les plus récents?
raconteur
2
Oh je vois ce que tu veux dire maintenant. La réponse courte est, vous ne pouvez pas, du moins pas sans avoir repensé le SVM pour comprendre la notion de récence. Un SVM est défini en termes de paires xy, et non de paires xy ordonnées, et donc la fonction objectif qu'il minimise est une fonction desdites paires. OTOH, vous pouvez exécuter plusieurs SVM distincts, un avec le mois dernier, un avec l'année dernière et un avec les deux dernières années - puis faire une moyenne pondérée des réponses que vous obtenez en fonction de votre préférence personnelle pour les récents vs anciennes données (par exemple 0,7 * le mois dernier + 0,2 * l'année dernière + 0,1 * les 2 dernières années).
William
@William .. avez-vous une recommandation sur quels algorithmes d'apprentissage automatique seraient les meilleurs pour la prédiction de séries temporelles (le même problème que celui qui a demandé) autre que SVM? la réponse serait-elle différente lorsqu'elle serait appliquée dans un domaine différent? par exemple, le cours des actions par rapport à la prévision de la chaîne d'approvisionnement (prévision de la demande des produits que nous vendons) ..
Lam
1

Ma réponse personnelle à la question posée est "oui". Vous pouvez le considérer comme un pro ou un con qu'il existe un nombre infini de choix de fonctionnalités pour décrire le passé. Essayez de choisir des fonctionnalités qui correspondent à la façon dont vous pourriez décrire de manière concise à quelqu'un ce que le marché vient de faire [par exemple "le prix est à 1,4 "ne vous dit rien s'il n'est pas lié à un autre nombre]. Quant à la cible du SVM, les plus simples sont la différence de prix et le ratio de prix pour deux jours consécutifs. Comme ceux-ci correspondent directement au sort d'un métier hypothétique, ils semblent de bons choix.

Je dois être en désaccord pédant avec la première déclaration de Jason: vous pouvez faire une validation croisée k-fold dans des situations comme celle décrite par raconteur et c'est utile (à condition que j'explique). La raison pour laquelle elle est statistiquement valable est que les instances de la cible dans ce cas n'ont pas de relation intrinsèque: ce sont des différences ou des rapports disjoints. Si vous choisissez à la place d'utiliser des données à une résolution supérieure à l'échelle de la cible, il y aurait lieu de craindre que des instances corrélées puissent apparaître dans l'ensemble d'apprentissage et l'ensemble de validation, ce qui compromettrait la validation croisée (en revanche, lors de l'application de la SVM, vous n'aurez aucune instance disponible dont les cibles chevauchent celle qui vous intéresse).

Ce qui réduit l'efficacité de la validation croisée, c'est si le comportement du marché évolue avec le temps. Il y a deux façons possibles de gérer cela. La première consiste à incorporer le temps en tant que fonctionnalité (je n'ai pas trouvé cela très utile, peut-être parce que les valeurs de cette fonctionnalité à l'avenir sont toutes nouvelles). Une alternative bien motivée consiste à utiliser la validation directe (ce qui signifie tester votre méthodologie sur une fenêtre de temps glissante et la tester sur la période juste après cette fenêtre. Si le comportement change avec le temps, le dicton attribué à Niels Bohr " La prévision est très difficile, en particulier pour l'avenir "est particulièrement approprié. Il existe des preuves dans la littérature que le comportement des marchés financiers change avec le temps, devenant généralement plus efficace,

Bonne chance!

Elroch
la source
Bienvenue sur notre site!
kjetil b halvorsen
0

Il y a un exemple sur Quantum Financier pour utiliser un SVM pour prévoir des séries financières. Il pourrait facilement être converti d'un système de classification (long / court) en un système de régression.

Zach
la source
1
CHER DIEU, SVP, personne n'utilise cette stratégie! C'est ainsi que les débutants sont fumés par Wall St :( La plus ancienne astuce du livre consiste à moderniser un modèle statistique en utilisant des analyses techniques de base comme RSI, de sorte que les newbs pensent qu'ils ont atteint l'or.
William
1
@Jason du message d'origine "Je tiens également à préciser que je ne pense pas que ce soit un bon système." Cependant, c'est un bon exemple de la façon d'adapter une machine à vecteurs de support à une série chronologique.
Zach