Lorsque 'on essaie de prédire une série financière Y à partir d'un vecteur X=( (X1)t,..,(XN)t) de prédicteurs, le problème se réduit à déterminer une fonction f telle que:
La fonction f représente la partie déterministe des fluctuations de notre variable d’intérêt Y dont la variance peut être expliquée par notre algorithme de Machine learning. Cette fonction f n'est pas paramétrique, et n'est probablement pas exploitable si on la réduit à une fonction linéaire.
Dans les séries financières, l’expérience montre qu'une faible partie des fluctuations de Y peut être expliquée par notre fonction déterministe (voir aussi la performance de cette compétition kaggle). Dans la pratique, la prédiction des séries financières est rendu difficile pour au minimum les raisons suivantes:
- Les prédicteurs sont tous très faibles quand ils sont pris individuellement.
- Obtenir une relation générale à partir de données historiques est difficile car le bruit ε obscurcit la définition de notre fonction f.
- Il est probablement nécessaire de combiner un nombre important de prédicteurs pour obtenir un pronostic de qualité ce qui réduit l’efficacité des algorithme de ML pour cause de malédiction de haute dimensionnalité.
- Les marchés financiers sont sujets à des changements de régimes, et les relation statistiques historiques peuvent disparaitre suite à des changements de cycles économique ou sociétaux.
Obtenir une Prédiction Exploitable
Un algorithme de trading utilisant le machine learning disposant de donnée de marché de qualité doit pouvoir surmonter ces obstacles. Pour être exploitable dans la pratique, cet algorithme doit pouvoir donner un score à un ensemble d'actifs, pour permettre de sélectionner une allocation d'actif (comme celui-ci. Par exemple dans mon cas:Ici, chaque barre représente une score du rendement probable dans 20 jours de chaque actif en date du 03 mars 2017. Le meilleur score correspond à la meilleure espérance de gain. Si on veut interpréter cet algorithme, on voit qu'il recommande recommande d'investir sur les indices d'actions américains et émergents à l'exclusion de ceux dont l'économie dépend du secteur énergétique. Dans la pratique, toutes les prédictions ci-dessus ne sont pas exploitables. Notamment celles qui sont trop proches de 0 ne permettent pas d'avoir une marge de sécurité assez importante et doivent être donc ignorées. Les prédictions en dessous d'un certain seuil T sont considérées comme du bruit. Par exemple, on peut placer ce seuil à 4%, et ne passer un ordre d'achat que sur les deux meilleurs scores produit par l'algorithme (ici un GRU keras).
Dans la pratique, cet algorithme s'éloigne parfois très sensiblement des rendements réalisés historiquement:
Ce qui nous amène au sujet de ce post: Une fois la prédiction réalisée, comment s'assurer qu'elle est exploitable ou à jeter ?
Les ouvrages de référence mentionnent bien sur plusieurs mesures de la précision d'un algorithme. Elles sont basées sur l'erreur quadratique moyenne comme le coefficient de détermination R2 ou sur l'erreur absolue.
Mais elles sont difficiles à appliquer sur des séries financières à cause de leur forte composante aléatoire. Pour être concret, j'ai noté que lorsqu'on soumet des séries financières à un algorithme d'apprentissage (SVM, Gadient Boosting, NN, RNN, Random Forest,etc), les algorithmes ont tendances à converger vers une solution naïve qui est la moyenne des échantillons proposés à l'algorithme (pour les séries financières, souvent E(Y) tend vers 0...). Cette solution naïve a tendance à dominer d'autres solutions proposées par les algorithmes d'apprentissage quand on utilise les mesures d'erreur quadratiques, alors même que cette solution naïve n'a aucune valeur dans le cadre d'un algorithme d'allocation dynamique d'actif. Il existe pourtant d'autres mesures utilisées pour les problèmes de classification qui permettent de surmonter ce problème.
Considérons un algorithme qui tous les mois fait une prédiction sur les actifs qui vont surperformer sur le mois suivant. Dans ce cas, comme on l'a dit plus haut, on exploitera pas les prédictions dont la valeur absolue est inférieure à un seuil arbitraire T correspondant à une marge de sécurité. Si par ailleurs, notre algorithme est long-only, les prédictions inférieures à notre seuil T ne devraient pas compter dans notre mesure d'erreur. Par exemple, si mon algorithme me produit un score -6% pour un actifs, je suis certain de ne pas investir sur ce titre. Si cet actif perd lors du mois suivant, -12% u -20% importe peu: Comme cet actif n'est pas investi, il ne contribue pas à notre résultat le mois suivant. Il y a donc une asymétrie qui doit nous permettre, si on l'exploite, de sélectionner des algorithmes qui ne convergent pas vers la moyenne arithmétique.
On veut comptabiliser toutes les prédictions dont le score est supérieur à T et qui se concrétise pas un investissement de rendement positif. Les prédictions supérieures à T qui aboutissent à un rendement négatif seront comptabilisées au détriment de la mesure précédente. Il existe des mesures pour atteindre cet objectif :le ROC.
Je détaillerai la semaine prochaine mes expérimentations sur ce sujet.