0% ont trouvé ce document utile (0 vote)
11 vues6 pages

Python ML

Ce rapport présente une stratégie de trading LONG/SHORT pour Exxon Mobil utilisant un classifieur supervisé basé sur des données de clôture. L'approche inclut un pipeline méthodologique complet, des techniques de validation temporelle, et un backtest out-of-sample, soulignant l'importance de la stabilité du signal et des coûts de transaction. Les résultats montrent que malgré une légère amélioration des métriques de classification, la performance nette reste insuffisante, indiquant des axes d'amélioration possibles.

Transféré par

boitetom
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
11 vues6 pages

Python ML

Ce rapport présente une stratégie de trading LONG/SHORT pour Exxon Mobil utilisant un classifieur supervisé basé sur des données de clôture. L'approche inclut un pipeline méthodologique complet, des techniques de validation temporelle, et un backtest out-of-sample, soulignant l'importance de la stabilité du signal et des coûts de transaction. Les résultats montrent que malgré une légère amélioration des métriques de classification, la performance nette reste insuffisante, indiquant des axes d'amélioration possibles.

Transféré par

boitetom
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Trading quotidien LONG/SHORT par Machine

Learning
Application à la série Close d’Exxon Mobil (XOM)

Ethan Ada Tom Cohen Valentin Beaufils

10 février 2026

Résumé
Ce rapport présente un pipeline complet et reproductible pour construire une stratégie de
trading quotidienne sur une action, en s’appuyant sur un classifieur supervisé. Conformément aux
consignes de l’examen, toutes les variables explicatives sont dérivées du Close (transformations
et indicateurs techniques), la cible est définie à partir de rendements futurs, la validation est
temporelle (TimeSeriesSplit), et la stratégie est backtestée out-of-sample avec frais de transaction.
L’objectif n’est pas de maximiser la performance brute mais de justifier les choix méthodologiques
(métriques, sélection de variables, tuning, robustesse) et d’analyser de manière critique les résultats.

1 Objectif et cadre du projet


L’objectif est de produire chaque jour une décision de trading sur Exxon Mobil :

positiont ∈ {−1, +1}, (1)

avec +1 une position LONG et −1 une position SHORT. La contrainte imposée est LONG/SHORT
uniquement : la stratégie est toujours investie (pas de cash). Le livrable principal est un rapport
sans code expliquant les étapes (nettoyage, labelling, features, métriques, modèle, validation, backtest
et analyse critique).

2 Données et préparation
2.1 Source et périmètre
Le jeu de données contient une série temporelle quotidienne avec au minimum : Date et Close.
La période out-of-sample considérée va de 2015-06-15 à 2023-01-04.

2.2 Nettoyage et alignements


La préparation suit une démarche standard sur séries temporelles :
— conversion de Date en format date, tri chronologique strict ;
— conversion de Close en numérique ;
— gestion des valeurs manquantes créées par les fenêtres glissantes (indicateurs) ;
— remplacement de ±∞ par NaN ;
— complétion par forward fill si nécessaire, puis drop final des lignes restantes non valides ;
— alignement exact entre les features X et la cible y afin d’éviter toute fuite temporelle.

2.3 Contrôles de cohérence (sanity checks)


Un bloc de vérification systématique a été ajouté pour sécuriser le pipeline (dimensions, NaN/inf,
split, équilibre de classes). Les contrôles observés sur la version finale sont résumés ci-dessous.

1
Table 1 – Résumé des contrôles de cohérence

Élément Valeur
Dimensions dataframe (9519, 50)
Dimensions X (9519, 45)
Dimensions y (9519, )
NaN / Inf dans X 0/0
Split temporel Train (7615, 45) ; Test (1904, 45)
Balance classes (Train) {1 : 0.502, 0 : 0.498}
Balance classes (Test) {0 : 0.515, 1 : 0.485}

3 Labelling : définition de la cible


3.1 Rendement futur
On définit le rendement futur à horizon H jours :
Closet+H
rt→t+H = − 1. (2)
Closet
Le problème de classification consiste à prédire, à la date t, un proxy directionnel de rt→t+H .

3.2 Encodage LONG/SHORT


La cible économique naturelle est yttrade ∈ {−1, +1}. Pour compatibilité avec XGBoost (classes
entières), on utilise : (
1 si LONG
yt = (3)
0 si SHORT.
En post-traitement, ŷ ∈ {0, 1} est reconverti en position p̂ ∈ {−1, +1} pour le backtest.

3.3 Seuils et règle sticky


Deux logiques de labelling ont été testées :
— seuil zéro : LONG si rt→t+H > 0 ;
— seuil médian : LONG si rt→t+H dépasse la médiane (classes plus équilibrées).
En trading, la stabilité du signal est critique car les changements de position génèrent du turnover
et donc des coûts. Nous avons donc ajouté une règle sticky basée sur la probabilité prédite P(LONG) :
— LONG si p(LONG) > u ;
— SHORT si p(LONG) < ℓ ;
— sinon, conservation de la position précédente.
Cette règle respecte la contrainte LONG/SHORT (jamais flat) tout en contrôlant le nombre de flips.

4 Feature engineering (inputs)


Conformément à la consigne, toutes les variables explicatives sont dérivées du Close. L’objectif
est de fournir au modèle plusieurs points de vue : tendance, momentum, volatilité et normalisation.
— Rendements : rendement simple et log-rendement.
— Tendance / momentum : SMA/EMA multi-fenêtres, momentum k-jours, ratios (ex. Close/SMA(20)-1).
— Volatilité et z-scores : volatilité rolling des rendements ; z-score rolling du prix.
— Indicateurs techniques (TA-Lib ou équivalents) : RSI(14), MACD(12,26,9), Bandes de
Bollinger (20, 2σ) et dérivés (

2
5 Split temporel, métriques et validation
5.1 Split train/test
Le split est strictement chronologique (aucun shuffle). Il simule un usage réel : entraînement
sur le passé, évaluation sur une période future non vue.

5.2 Validation croisée temporelle


Pour le tuning, nous utilisons TimeSeriesSplit (3 folds) afin de limiter la fuite d’information et
d’obtenir une estimation plus robuste que le seul test.

5.3 Choix des métriques


En classification directionnelle LONG/SHORT, l’accuracy seule est insuffisante (déséquilibre
possible, coûts asymétriques). Nous utilisons :
— F1 macro comme objectif de tuning : elle pénalise un modèle qui ne prédirait qu’une seule
classe et traite les classes de manière symétrique.
— Matrice de confusion et classification report pour diagnostiquer les erreurs.
— Backtest OOS comme critère final : equity, drawdown, Sharpe et turnover, car une légère
hausse de métriques ML ne garantit pas un edge exploitable une fois les coûts inclus.

6 Modèle, pipeline et optimisation


6.1 Choix du modèle
Nous retenons XGBClassifier (gradient boosting) car il capture des non-linéarités, fonctionne
bien sur données tabulaires d’indicateurs, et fournit des probabilités utiles pour la règle sticky.

6.2 Pipeline de modélisation


Le pipeline utilisé est :

StandardScaler → SelectKBest → XGBClassifier.

SelectKBest réduit la dimension, limite l’overfitting et accélère la recherche d’hyperparamètres.

6.3 GridSearch (baseline) et Optuna


Une première étape de GridSearchCV sert de référence méthodologique, puis Optuna est employé
pour explorer plus efficacement l’espace de paramètres.

Table 2 – Tuning : meilleurs scores observés (objectif = F1 macro en CV)

Méthode Meilleur score CV Commentaire


GridSearch 0.5328 Baseline (40 candidats, 3 folds)
Optuna (Run A) 0.5352 Recherche bayésienne/heuristique
Optuna (Run B) 0.5355 Nouvelle exploration (robustesse)

3
7 Résultats ML (classification)
Nous reportons les performances sur train et test, ainsi qu’un modèle dummy en benchmark.

Table 3 – Performance en test : modèle vs baseline

Modèle (Test) Accuracy F1 macro


XGB + GridSearch 0.4916 0.4916
XGB + Optuna (Run A) 0.5058 0.5058
Dummy (classe majoritaire) 0.4848 0.3265

Analyse. Les scores en test sont proches de 0.50, ce qui indique un signal faible, typique sur un
seul actif avec des features techniques classiques. L’écart Train > Test suggère un sur-apprentissage
partiel. Néanmoins, le modèle bat le dummy en F1 macro, car il apprend à prédire les deux classes.

8 Backtest out-of-sample
8.1 Règles de backtest
Le backtest respecte des conventions réalistes :
— la décision au jour t s’applique au rendement du jour suivant (shift t → t + 1) ;
— position toujours LONG/SHORT ;
— coût de transaction appliqué lors d’un flip (changement de signe).

8.2 Impact des seuils sticky (frais = 0.5%)

Table 4 – Backtest OOS avec règle sticky (Optuna Run A, frais par trade = 0.005)

Seuils (u/ℓ) Equity finale strat. Equity stock Sharpe strat. Flips
0.55 / 0.45 0.1825 1.2759 -0.6086 275
0.60 / 0.40 0.2927 1.2759 -0.3996 167
0.65 / 0.35 0.2251 1.2759 -0.5162 83

8.3 Diagnostic : isoler l’effet des frais


Pour distinguer un problème de signal d’un problème de coûts, on compare l’equity finale en
faisant varier les frais (exemple sur sticky 0.55/0.45) :

Table 5 – Sensibilité aux frais (sticky 0.55/0.45)

Frais par trade Equity finale Turnover Flips


0.000 0.7231 0.1445 275
0.001 0.5493 0.1445 275
0.005 0.1825 0.1445 275

Analyse. Même sans frais, l’equity est inférieure à 1 (0.72–0.77 dans nos diagnostics), ce qui
suggère que le signal est structurellement insuffisant sur la période. L’ajout de frais réalistes dégrade
fortement la performance nette, surtout lorsque les flips sont nombreux.

4
8.4 Figures

Figure 1 – Courbes d’equity OOS : stratégie vs buy&hold.

Figure 2 – Drawdowns OOS : stratégie vs buy&hold.

Figure 3 – Histogramme des rendements nets journaliers (OOS).

5
9 Discussion critique et pistes d’amélioration
Les résultats obtenus sont cohérents avec un contexte de signal faible sur une action isolée :
— Faible généralisation. Les métriques proches de 0.5 en test indiquent que les patterns appris
ne sont pas stables.
— Turnover. Le nombre de flips (83 à 275 selon les seuils) rend les coûts déterminants.
— Objectif ML vs objectif trading. Optimiser F1 macro améliore l’équilibre de prédiction,
mais ne garantit pas un PnL positif.
Axes d’amélioration (méthodologiques) :
— enrichir l’information (si autorisé) : volume, high/low, facteurs de marché ;
— labels plus robustes : triple-barrier, seuils dépendants de la volatilité, horizon multiple ;
— réduire la variance : bagging / ensembles, calibration des probabilités, régularisation accrue ;
— politique de trading : filtre de tendance (régime), neutralisation (si multi-actifs), gestion du
risque (stop/position sizing).

10 Conclusion
Nous avons construit un pipeline complet de ML appliqué à une stratégie LONG/SHORT sur
Exxon Mobil : labelling via rendements futurs, features techniques à partir du Close, split temporel,
validation TimeSeriesSplit, tuning (GridSearch puis Optuna), et backtest out-of-sample avec coûts
de transaction. Les résultats confirment qu’une légère amélioration des métriques de classification ne
suffit pas à générer une performance nette positive : la stabilité du signal et le turnover (donc les
coûts) sont déterminants. Le travail reste néanmoins conforme aux bonnes pratiques attendues pour
un framework ML de trading (pas de fuite, validation temporelle, benchmark, backtest et analyse
critique).

Vous aimerez peut-être aussi