samedi 22 avril 2017

Réaction à chaud sur les élections présidentielles françaises de 2017: macron en tête

Élections françaises: considérations dans le désordre

Nous sommes au portes du premier tour des élections françaises, et les derniers sondages donnent le tiercé gagnant suivant: Macron (24%), Le Pen (23%), et Fillon et Mélenchon plus ou moins ex æquo à 19%. Le gain de vote pour marine ou tout autre candidat n'est pas encore visible dans ces sondages (et il ne le sera pas avant la fin du premier tour).

Vu de l'étranger, et notamment de États-Unis, cette élection est vue comme une élection à risque avec de gros enjeux... Alors que chez nous, on peut clairement dire qu'elle ne suscite l’excitation de personne.

Donald Trump 'est même fendu d'un tweet sur le sujet:
Comme d'habitude, Donald Trump prouve encore son ineptie. Comment l’Amérique a-t-elle pu tomber aussi bas ?

On peut affirmer que contrairement à ce qu'affirme ce tweet et les articles du New York Times, l'attentat de jeudi soir, n'aura pas ou peu d'impact sur ces élections. D'abord, depuis des mois, Marine Le Pen est données perdante du second tour quel que soit son opposant, on voit mal un simple attentat comme celui de jeudi changer quelque chose à ces résultats. Nous sommes malheureusement habitués à ces attentats, ce n'est pas comme si c'était le premier....
Je suis toutefois sidéré par la complaisance que les médias français ont eu à 'égard de la candidate du Front National. Le règles du CSA semblent trop rigides, elles donnent une exposition beaucoup trop importante aux candidats dominants. Le seul résultat de ce système, c'est que TF1 à fait la pub de Marine pendant toute la campagne et que c'est sensé être un gain pour la démocratie. J'en ai marre de voir Philippot au journal de 13 heure, je n'ai pas besoin d'avoir son avis. Et TF1 et France 2 ne devraient pas nous forcer à subir cet affront quotidien. Ce système de représentativité proportionnelle ne fait le bonheur de personne, il devrait favoriser les petits candidats.
Sur le plan des idées et programmes, on peut dire que rien de nouveau n'a vraiment emergé ddans le débat.

Et l'impact sur le marché action ?

Comme on pu le voir, les élections françaises ont frappé les esprits des médias internationaux.



Pour moi, les médias étrangers surestiment les chances de Marine Le Pen de gagner, comme dans cet article de Mohamed El Erian, Il y a donc une opportunité à saisir. Dans un marché parisien détenu en grande partie par des investisseurs étrangers, qui depuis plusieurs mois fait preuve d'une valorisation attractive selon plusieurs indicateurs et peut offrir potentiellement des rendements long termes sur 10 ans de 6.1%.

Au vu de tout ces considérations, j'ai pris une position sur le CAC 40  depuis 2 semaines. Quelque soit le candidat qui se retrouvera face à Marine Le Pen au second tour il l'emportera, et l'impact sera positif. Ce qui sera le cas même si Mélenchon l'emporte au premier tour (et peut-être au second si macron est éliminé), potentiellement suite à un report des votes Hamon vers Mélenchon,  du moins dans un premier temps:

 
vote mélenchon elections présidentielles
Dans ce scenario inédit, on aurait potentiellement un second tour Melenchon/Macron qui donnerait Macron gagnant. Pour les investisseurs étrangers, il s'agit certainement de la meilleure option.

Dans tous les cas, un pari gagnant.  Nous le sauront de manière certaine lundi.





lundi 17 avril 2017

Selection de variables predictives pour un algorithme de Machine learning du marché action

feature selection

Trouver le sous-ensemble de variables explicatives qui améliore la qualité de prédiction d'un modèle: un problème difficile.

Posons d'abord le problème en termes abstraits. Supposons que nous disposons de K séries temporelles X1...Xk que nous envisageons comme potentiels prédicteurs d'une variable d’intérêt Y que nous souhaitons prédire à un horizon donné. Étant donné que nous pouvons totalement ignorer l'ordre de ces variables (les permutations ne changent pas le résultats), si nous voulions étudier toutes les combinaisons possibles de N variables (N<K) il nous faudrait évaluer 2^K combinaisons de prédicteurs, ce qui devient rapidement inexploitable pour des problèmes non triviaux.


Et il y a bien pire, les scenarios suivants peuvent se produire:
-  Deux variables supposées redondantes peuvent être prédictives lorsqu'elles sont combinées.
- Une variable inutile par elle-même peut devenir prédictive quand elle est combinée à d'autres variables
- Deux variables inutiles peuvent devenir utiles quand elles sont combinées.
- Augmenter le nombre de variable peut conduire à de l'overfitting.

Pour illustrer chacun de ces points, je vous invite à  consulter An Introduction to Variable and Feature Selection.

Utilisation des indicateurs économiques


De nombreux indicateurs économiques ont été proposés au fil des ans pour expliquer les fluctuation du marché action. La qualité de ces prédictions ont depuis été mis en causes lorsque ces variables ont été réévaluées sur des échantillons ou des intervalles différents ou pour des questions méthodologiques. Un papier célèbre de Goyal & Welsh (PDF) arguent que parmi 50 variables identifiées, aucune ne fait apparaître les propriétés décrites dans les travaux publiés originalement. Cette évaluation a été largement critiquée (par exemple Campbell & Thompson). Et le débat continue...

Ces travaux académiques ont toutefois en commun d'utiliser des outils paramétriques et/ou Bayésien basé sur des relations linéaires entre le variables (Ordinary Least Square OLS, ARD, Ridge, elasticNet), sans s'aventurer sur des algorithme d'apprentissages non paramétriques comme les arbres de décisions (Boosted Trees, Random Forest) ou les réseaux de neurones (LTSM, GRU et autres NarX). 

La littérature sur l'application de ces méthode de machine learning reste largement marginale, alors même qu'elle est d'un intérêt certain pour le praticien car les outils du machine learning comme Keras ou Scikit-Learn sont devenus maintenant d'une simplicité d’accès remarquable.

Dans cet article, je me propose d'exposer ma démarche pour sélectionner les variables explicatives dans le cadre particulier de la prédiction des marchés financiers caractérisés par un ratio bruit/signal très élevé, et par une structure qui évolue dans le temps.


Les Trois approches pour la sélection des prédicteurs dans une démarche de machine learning: Filter, Embedded & wrapper

Sans aller chercher très loin , l'article Wikipédia sur la sélection de variable (feature selection en anglais) donne une vision assez complète  du paysage moderne de la sélection de variable explicative.

L'approche Filter

Ces approches se divisent en trois catégories:L'approche filter: On  utilise ici des outils statistiques ou liés à a théorie de l'information pour isoler les variables les plus significatives parmi un ensemble, et cela indépendamment de tout algorithme d'apprentissage. Scikit-learn propose des outils dans ce sens issus de l'indicateur d'information mutuelle pour les régressions.

J'en profite pour fortement recommander à tous ceux qui sont intéressés par cette approche, de consulter avec la plus grande attention les extensions proposées par l'université Arizona State University au sein d'un package d'extension à scikit-learn appelé scikit-feature. Ce package s’intègre parfaitement au framework scikit-learn.

Dans la pratique, dans le cadre de mon application, ces méthodologies, même les plus récentes (JMI,CIFE),m'ont proposé parfois des choix de variables explicatives assez étranges... J'aimerais que le choix des variables soit basé sur un raisonnement statistique, mais dans la pratique, les variables sélectionnées sont souvent peu informatives pour les algorithmes que j'utilise (ExtraTrees, LTSM) ni même pour des ensembles de ceux-ci. Les sélections de ces algorithme donnent des résultats assez décevant dan la cross-validation de time-series (TimeSeriesSplit).
 

L'approche Embedded

Il s'agit ici des méthodes de sélection de variable intégrées à  la construction d'un modèle.Les modéle proposant de pondérer les variables sont nombreux : Lasso, ElasticNet, Ridge, SVM, Extra Trees, etc.
Ces modèles peuvent être utilisés directement, ou via un algorithme de Recursive Feature Elimination (RFE ou RFECV).

Ici encore, les résultats ont été decevants. Dans on cas, les méthodes de RFE ont donné des resultats trés instables à travers les classes d'actifs, les modèles choisis ou même les paramètres de Cross-Validation.  Les méthodes basés sur l'algorithme LARS n'ont pas réussi à converger. Les arbres décisionnels donnent soit beaucoup trop de variables significatives soit pas assez. Aucun modèle ne donne le même résultats qu'un autre modèle. Il est possible que ces résultats décevants soit lié à ma méconnaissance des paramètres et modalités pratiques de ces méthodes.

Mais dans tous les cas, vu le temps que j'y ai passé, ce ne sont pas vraiment des outils triviaux à utiliser.

L'approche Wrapper


Dans mon expérience, la seule méthode qui fonctionne est celle que j'appellerai la méthode ad-hoc: Dans le sens, ou elle est basée sur des sélections qui sont aléatoires initialement, et qui sont renforcées en les modifiant de manière répétée jusqu’à qu'une bonne solution soit trouvée. Cette approche nécessite d'évaluer les propositions une à une avec une cross-validation reproduisant au plus prés le scenario d'utilisation des modèles choisis. Pour ma part, je fais ma cross validation comme suit: je découpe mes données en 16 intervalles via TimeSeriesSplit. Pour éviter des résultats aberrants sur les premiers intervalles, le premier tiers de ceux-ci sont utilisés dans le training uniquement. Je choisit un modèle d’évaluation de cross-validation qui fait a moyenne entre des arbres décisionnels (Extra Trees) et un NN simple (MLPRegressor).

Parcourir l'espaces des prédicteurs avec les algorithmes génétiques et la recherche tabou.

Pour cadrer mon approche Wrapper, J'ai étudié une librairie assez marginale et peu connue qui s'appelle PyNeurGen. Cette librairie se propose de combiner les approches des algorithmes génétiques et celles des réseaux de neurones en utilisant une binarisation des formes de Backus-Naur. Cette librairie m'est utile pour deux raisons principales: elle contient une implémentation d'un réseau NarX, et surtout elle me permet de générer une population aléatoire de sous-ensemble de variables prédictives, de les évaluer, et de combiner les meilleures solutions entre elles.

Dans la pratique, comme l'univers à explorer contient 2^k combinaisons, l'algorithme peut ne jamais conserver vers une bonne solution. Par ailleurs, comme les variables peuvent se neutraliser les unes les autres, ou produire des effets non intuitifs, les solutions combinées sont rarement aussi bonnes que les deux parents qui leur ont donné leur matériel génétique.

Les avantages de cette méthode sont de proposer un ensemble initial de solution quand  le problème n'a pas été défriché.

Souvent, au lieu de rechercher une ensemble de prédicteurs à partir de rien, il est plus intéressant de partir d'une bonne solution et de rechercher des solutions adjacentes qui sont meilleures que la solution initiale. C'est le cas notamment quand on a récemment élargi notre ensemble de prédicteurs avec de nouvelles variables. Dans ce cas, on peut vouloir étudier la performance d'une substitution ou d'un ajout d'une nouvelle variable en lieu et place d'une ancienne variable, ou vérifier si l'ajout d'une nouvelle variable ne rends pas redondantes les autres variables.

Pour ces situations, j'ai implémenté un outil de recherche d'optimum local basé sur une implémentation minimale de l'algorithme de Recherche Tabou.

En partant d'un sous ensemble de variables déjà évalué (une solution), a chaque itération de cet algorithme on évalue d'autres sous ensembles où une variable a été échangée, ajoutée ou soustraite de ma solution initiale. Cette méthode donne de bon résultats.

A terme, je compte étendre cet algorithme en lui permettant d'explorer des solutions ou des combinaisons non linéaires de variables qui seront ajoutées/substituées au variables existantes (produit, division, moyennes mobiles, etc).


samedi 1 avril 2017

Yahoo stocks API: données manquantes sur les etf depuis le vendredi 24 mars 2017

pandas datareader yahoo problem foreign stocks

Récupérer les données avec pandas datareader sur le marché français

Comme je l'ai déjà dit, je suis en train de monter un outil de machine learning pour mettre en place une plateforme d'allocation stratégique sur les etf du marché français.

Pour ce faire, je construit plus de 87 séries financières distinctes (techniques ou économiques),que je construis avec Quandl, la FED et Yahoo stock API.

Yahoo stock API est essentiel car il me permet de récupérer les valeurs journalières pour mes actifs de leur Open High Low Close Volume (OHLCV) sur un historique partant de 2005 (oui je sais c'est peu...) soit 3000 valeurs à peu prés.

Pour  être plus efficient, je ne récupère plus l'historique complet de mes actifs depuis 2005, mais je procède par incréments de date à date. De cette manière, je ne récupère que les données de la semaine en cours.

Techniquement, j'utilise depuis le départ pandas datareader pour cette tache. Qui me donne entière satisfaction mais qui a révélé ses limites au cours de l'incident actuel sur yahoo.

En effet, depuis le 23 mars 2017, les données yahoo sur tous les etfs (mais pas les actions) sont figées. Pas moyen de récupérer ces données, et donc toute ma chaine était bloquée.
cours historique etf Euronext manuant sur yaho stock depuis le 23 mars

Ayant déjà anticipé ce problème, je me suis immédiatement tourné vers Google stock API via pandas datareader. Mais je suis tombé sur un autre os: pandas ne récupère pas d'historique sur les marchés autre que uk ou us.

Heureusement, nous sommes en python, et les solutions ne manquent pas: Beautiful Soup !

Récupérer les derniers cours des etf via bs et pandas

Dans le code ci-dessous, je vais utiliser la librairie pandas et beautiful soup pour construire un outil récupérant le dernier historique d'une Série d'actifs sur Google finance API. Le code est self explanatory, je vous laisse le lire:


from datetime import datetime
import requests
import bs4
import pandas as pd

google_tickers=[ 
    'NRGW','ASI' 
    ]

def get_scraped_google_stock_prices(begin,end):
    data={}
    for ticker in google_tickers:
        print ticker,
        url = 'https://www.google.com/finance/historical?q=EPA:'+ticker
        req = requests.get(url)
        bs = bs4.BeautifulSoup(req.text,'lxml')
        div_price = bs.find(attrs={'class': 'gf-table historical_price'})
        df=pd.read_html(str(div_price),parse_dates=True,index_col=0,header=0)[0].sort_index().loc[begin:end]
        data[ticker]=df
        print 'fetched from: ',df.index.min(),', to:',df.index.max(),', ', len(df),' rows '
    pane=pd.Panel.from_dict(data,orient='minor')
    return pane

 
print get_scraped_google_stock_prices(datetime(2017,3,20),datetime(2017,3,30))


ce qui nous retourne:


Dimensions: 5 (items) x 9 (major_axis) x 2 (minor_axis)
Items axis: Open to Volume
Major_axis axis: 2017-03-20 00:00:00 to 2017-03-30 00:00:00
Minor_axis axis: ASI to NRGW

et voila.

samedi 25 mars 2017

Keras 2.0: Suppression des NN MaxoutDense et Highway

Keras 2.0 Keras 2.0: Une bonne nouvelle ?

Notre ami frenchy François Chollet, vient de publier a version 2.0 du framework de deep learning keras.

Vous pouvez l'installer simplement mais pour les utilisateurs avancés, cette version reserve une mauvaise surprise, les layers Highway et MaxoutDense sont supprimés

Les sources de ces layers sont toujours disponibles, mais leur maintenance n'est plus assurée. C'est dommage parce que ces outils donnaient accès au pékin moyen à des travaux de recherche récents et prometteurs (. J'utilise pour ma part ces deux Layers et je pense qu'ils peuvent servir au plus grand nombre, alors pourquoi les supprimer ? Petit tour de ces deux essentiels.

Highway networks

Les Highway networks sont des réseaux qui tirent parti des avancées sur les réseaux récurrents à mémoire longue (LTSM) pour résoudre le problème des vanishing gradients sur des réseaux qui affectent les architectures avec de nombreux niveaux.

On connait depuis longtemps le résultat théorique qu'un réseau de neurones peut approximer n'importe quelle fonction, mais cette propriété théorique occulte le fait que les réseaux plus profonds convergent plus rapidement, et surtout qu'ils ont un pouvoir de généralisation beaucoup plus fort. Avoir la possibilité d'étendre son réseau sans encourir de pénalité est donc primordial, et la décision de Keras de reléguer cette fonctionnalité à la marge est surprenante.

En python avec keras, on avait le code suivant:
def get_Highway_model(l, n_highway=4):
    model = Sequential()
    model.add(Dense(3 * l, input_dim=l))
    model.add(Dropout(0.2))
    for i in range(n_highway):
        model.add(Highway())
        model.add(Dropout(0.2))
    model.add(Dense(1))
    model.compile(loss='mse', optimizer='rmsprop')
    return model

Max out Networks

Les Max Out networks sont une extension de la technique du Drop Out, une technique de régularisation des poids qui réduit effectivement le degré d'overfitting associé à une optimisation.

Les Maxout networks peuvent être assimilé à un moyennage de modèle, plusieurs versions d'un même réseau contribuant au résultat final.

def get_MaxOut_model(l):
    model = Sequential()
    model.add(MaxoutDense(3 * l, input_dim=l))
    model.add(Dropout(0.2))
    model.add(MaxoutDense(3 * l))
    model.add(Dropout(0.2))
    model.add(Dense(1))
    model.compile(loss='mse', optimizer='rmsprop')
    return model

Je suis en train  d’essayer de combiner ces deux layers... Mais pour l'instant, pas question de passer à la version 2.0 de Keras.

jeudi 23 mars 2017

Liens : superbe infographie de stitchfix

allez jeter un coup d'oeuil à Stitchfix. Vraiment.

mercredi 8 mars 2017

Backtests: determiner l'univers des solutions

algorithme de trading overfitting
Lorsque l'on se lance dans la réalisation d'un algorithme de trading, la première étape est de procéder à un backtest. Un backtest est un programme qui permet de simuler le comportement qu'un algorithme aurait eu dans le passé. Un backtest permet de répondre à al question: si j'avais fait tourner mon algorithme en 2016, en 2015 ou en 2008, que m'aurais-t-il apporté ?

Note: J'utilise le framework PyalgoTrade pour exécuter mes backtests.

Lorsque on souhaite optimiser un algorithme, il est tentant de le construire en maximisant le rendement des backtests sur la période d’intérêt. Mais attention, si la performance d'un backtest est indicative, il est déconseillé de choisir des paramètres uniquement selon ce critère, car en se faisant on adapte son algorithme à une période dans le passé sans le préparer pour les conditions qui prévaudrons dans le futur. On parle d'overfitting.

Il est souvent conseillé de procéder à des cross-validations pour éviter cet écueil. Mais avant d'en arriver là, il y a un test qui est rarement évoqué, qui consiste à comparer le backtest de l'algorithme avec un backtest complétement aléatoire, et inversement de comparer l'algorithme avec un algorithme qui aurait une connaissance parfaite et absolue du futur.

Ces deux tests sont purement théoriques, mais ils permettent de répondre aux questions suivantes:
  • Quelle est la performance maximale théorique avec les contraintes et modalités (fréquence, nombre d'actifs évalués, nombre d'actifs détenus, stop loss, coût de transaction...) de mon algorithme ?
  • Comment mon algorithme se compare avec un algorithme similaire mais qui choisit ses trades complétement au hasard ?

Résultat du test avec mon algorithme de trading


Je m'attache à tester la performance absolue et théorique d'un algorithme de trading qui suit les modalités suivantes:
  • Sélectionne tous les mois à date fixe 3 etf parmi 15 alternatives.
  • Les trois titres sont équi-pondérés et sont détenus pendant un mois complet date à date.
  • Cet algorithme est testé pendant 4 ans roulants de 2013 à 2017.
Selon ces modalités, un algorithme qui aurait une connaissance parfaite et absolue du future aurait la performance suivante:

backtest etf performance absolue
Ce dispositif hypothétique aurait multiplié par 19 fois (oui fois +1 800%) soit 109% par an. On est très clairement dans une croissance exponentielle.

Et inversent sur une cinquantaine de tests d'algorithmes aléatoires, on mesure une moyenne de performance de 38% en 4 ans. Pour donner une idée de ce que cela représente, un algorithme aléatoire aurait rapporté plus qu'un buy & hold sur le CAC 40.

Cette performance des algorithme totalement naifs est particulièrement surprenante. Actuellement d'ailleurs, la meilleure performance que j'ai obtenue sur un backtest est inférieure au meilleur résultat aléatoire que j'ai obtenu. Mon meilleur algorithme se situe à peine dans le 97eme percentile des résultats aléatoires

De manière générale, Ceci illustre deux points importants:
  • Il est très difficile au sens statistique de distinguer entre un résultat obtenu par chance et un résultat construit par une méthode. Il est facile de contruire des solutions aléatoires qui battent sur des intervalles restreint des solutions basés sur un raisonnement statistique de machine learning.
  • Il est vraisemblablement impossible de se rapprocher de la performance de l'algorithme omniscient. Ceci illustre le fait que dan la plupart des cas, les algorithme basé sur des raisonnements statistiques reposent sur des probabilités s'éloignant seulement très légèrement d'un jeté de dés. Au lieu de gagner 50% du temps, on gagne 51% du temps, et c'est de ce minsuscule 'edge' que l'on doit tirer parti. 

samedi 4 mars 2017

Mesure de la performance d'un algorithme de Machine learning pour le trading (partie 1/2)

neural network
La section qui va suivre est basée sur l'ouvrage de référence, Elements of Statistical Learning (PDF) de Hastie, Tibshirani & Friedman. 

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:
Optimiation target, regression des prédiceurs
Le terme ε représente la part aléatoire du problème, il s'agit d'une variable aléatoire réelle d'espérance 0 et indépendante de X.  Dans le cas des séries financières de marché, il est prudent de supposer que ε n'est pas normale et exhibe skew (asymétrie) et une kurtosis (kurtoleptique).

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:

algorithme de prédiction d'ETF

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:
prediction keras algorithme rendement

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.







samedi 25 février 2017

Une introduction au deep learning pour le trading algorithmique


Une excellente introduction au sujet précéden par Siraj Raval:

Newsletter

Vous voulez suivre ce blog ?

Saisissez votre adresse email :

Flux RSS