À qui s’adresse cette page — À quiconque transforme des données historiques en signaux, optimise des paramètres, emploie le machine learning ou simule des ordres. Un modèle peut être correctement programmé et pourtant « connaître » le futur parce que la causalité a été violée dans une jointure, une feature, un découpage ou un prix d’exécution.
La fuite de données est la contamination d’une procédure de recherche par
une information qui n’aurait pas dû être disponible au point où elle est
employée. Le biais d’anticipation est son cas temporel : la décision au temps
t intègre directement ou indirectement des données connues seulement après
t. Le résultat n’est pas simplement optimiste ; il simule une autre stratégie,
dotée d’un canal d’information inexistant.
En termes simples — Il ne suffit pas de trier les lignes par date. Chaque étape doit respecter cette chaîne : information disponible → signal → ordre → éventuelle exécution → position → résultat.
Distinctions essentielles
| Problème | Ce qui se passe | Exemple |
|---|---|---|
| Look-ahead | une valeur future entre dans la décision | décider avec le prix final de l’enchère puis antidater l’ordre à cette même enchère |
| Target leakage | la variable à prévoir filtre dans les features | agrégation incluant également la période future de la cible |
| Fuite du prétraitement | estimation ou sélection emploie ensemble train et test | normaliser avec la moyenne et l’écart-type de tout l’échantillon |
| Fuite entre échantillons | l’entraînement intègre des résultats encore inobservables à sa date limite | une cible à cinq séances se termine pendant la période de test |
| Information révisée | la valeur finale remplace le millésime disponible | donnée macro corrigée plusieurs mois plus tard |
| Simulation non causale | l’ordre reçoit un prix impossible | signal sur le close et exécution garantie à ce même close |
Le biais de survie est distinct : il résulte de l’observation exclusive des entités survivantes ou sélectionnées a posteriori. Il peut coexister avec une fuite, mais corriger les horodatages ne recrée pas à lui seul les instruments défaillants, les fonds fermés ou les anciennes composantes d’un indice.
Trois horloges : signal, ordre et exécution
Une règle de trading doit déclarer au moins trois moments :
- Heure du signal : moment où le signal est prêt, distinct de l’heure limite des informations admises dans le calcul.
- Heure de l’ordre : création et transmission, suivies de l’arrivée et de l’acceptation sur le marché.
- Heure d’exécution : instant ou intervalle où l’ordre admis peut rencontrer des prix et quantités compatibles.
Si la décision exige le prix final close[t], elle ne peut déterminer la participation à l’enchère même qui forme ce prix. Un ordre de clôture transmis auparavant doit respecter les heures limites du marché et utiliser les informations alors disponibles : la fiche NYSE citée distingue l’entrée des ordres du processus d’enchère. Une exécution ultérieure pourrait avoir le même prix numérique, mais pas le même instant. Le plus haut et le plus bas définitifs de la barre ne sont pas des entrées disponibles avant son achèvement ; une relecture intrabar doit n’exposer que les événements déjà observés à chaque décision.
Pour les communiqués, dépôts et données macroéconomiques, la date de la période économique n’est pas l’horodatage de diffusion. La stratégie doit aussi avoir reçu et pouvoir traiter la donnée. Les données point-in-time conservent les versions (millésimes) : une révision ultérieure ne remplace pas celle disponible lors de la décision. ALFRED reconstitue ce qui était connu à une date historique ; il ne certifie pas à lui seul l’heure intrajournalière ni la latence du fournisseur utilisé.
Où se cache la fuite
Features et transformations
- moyennes centrées, filtres bidirectionnels ou interpolations utilisant des observations futures ;
- classement cross-sectional calculé sur un univers reconstitué aujourd’hui ;
- winsorisation, imputation ou standardisation estimées sur tout le jeu de données ;
- fondamentaux alignés sur la fin du trimestre plutôt que sur le dépôt ;
- splits et dividendes appliqués sans distinguer date d’effet et information connue.
Pour standardiser une variable : z = (x − moyenne_train) / écart_type_train. Estimez moyenne et écart-type dans l’entraînement de chaque fold, puis réutilisez-les sur son test ; traitez aussi un écart-type nul. scikit-learn distingue fit de transform.
Recherche et sélection
Le data snooping réutilise l’échantillon pour l’inférence ou la sélection : il peut produire un gagnant fortuit même si toutes les entrées respectent le temps. Il se distingue donc du biais d’anticipation.
Le jeu de test peut être contaminé même sans colonne future. Consulter répétitivement son résultat pour choisir features, seuils ou modèles le transforme progressivement en donnée de développement. Le hors échantillon n’est pas une étiquette de fichier : c’est un rôle dans le processus. Le nombre de solutions essayées, les décisions écartées et les critères de sélection doivent être enregistrés.
Ordres et exécution
Un prix OHLC ne démontre pas que l’ordre aurait été exécuté. Stops et ordres à cours limité peuvent être touchés sans exécution ; la quantité disponible peut être insuffisante ; la priorité dans la file est inconnue ; retards et exécutions partielles changent la position. Attribuer systématiquement le prix le plus favorable de la barre constitue une connaissance rétrospective, distincte mais liée aux coûts de transaction du backtest.
Protocole causal
- Écrire la décision avant le code. Énumérer entrées, horodatages, fuseau, heure limite, fréquence et action produite.
- Versionner les données brutes. Conserver instantanés, millésimes, univers et opérations sur titres sans écraser l’histoire.
- Calculer chaque feature « as of ». À la décision
t, exclure les enregistrements avecavailable_at > tet sélectionner la version alors disponible de chaque donnée ; documenter la construction deavailable_at. - Ajuster uniquement dans l’entraînement. Estimer imputation, mise à l’échelle et sélection des variables dans l’entraînement de chaque fold ; appliquer au test les transformations apprises. Choisir les paramètres avec la validation, en préservant le test final.
- Respecter l’ordre temporel. Chaque cible d’entraînement doit déjà être observable à sa date limite. Si les intervalles d’information chevauchent le test, évaluer la purge et les gaps selon les dates effectives, et non la seule proximité des lignes.
- Geler la spécification. Avant l’évaluation finale, enregistrer règles, paramètres, univers, benchmark et métriques.
- Séparer signal, ordre et exécution. Appliquer retards, calendrier, type d’ordre et données réellement observables.
- Conserver tous les essais. Un registre des variantes réduit l’invisibilité du data snooping.
- Repartir d’un instantané propre. Le résultat doit être reproductible sans fichiers intermédiaires construits avec le futur.
Exemple illustratif — Une règle achète à l’ouverture lorsque le bénéfice trimestriel dépasse les attentes. La base associe la donnée à la fin du trimestre, mais le communiqué arrive six semaines plus tard. Le test initial achète donc avant la publication. La correction conserve disponibilité et millésimes du communiqué comme du consensus des attentes, calcule le signal et attend une fenêtre d’exécution compatible avec l’arrivée de l’ordre. Les nombres et la séquence illustrent le contrôle causal, et non une stratégie recommandée.
Tests diagnostiques
| Test | Ce qu’il peut révéler |
|---|---|
| Décaler chaque feature d’une barre | dépendance cachée à la barre courante |
| Reconstituer le jeu de données à une date historique | valeurs révisées ou appartenance rétrospective |
| Augmenter artificiellement latence et gap | fragilité de la séquence causale |
| Ajuster le prétraitement séparément pour chaque fold | contamination train/test |
| Supprimer le prix « parfait » de la barre | exécutions impossibles ou sélection favorable |
| Réaliser un placebo avec une cible décalée dans le temps | corrélations suspectes dans la chaîne |
Un effondrement après ces tests est un signal d’alarme, pas une preuve automatique de la cause. Un résultat stable ne démontre pas non plus l’absence de fuite : certaines contaminations peuvent résister aux perturbations.
Cibles futures et frontières de l’entraînement
La cible est le résultat à prévoir. Par exemple, le rendement des cinq séances suivant la ligne t n’est connu qu’après ces séances. L’utiliser comme objectif d’un entraînement ultérieur est normal ; l’introduire parmi les entrées de t, ou dans un entraînement terminé avant sa réalisation, apporte une information future. Exclure les cibles dépassant la date limite est différent d’interdire toute corrélation entre observations. Le gap de scikit-learn compte les lignes exclues : il ne reconstitue pas automatiquement la durée et la disponibilité de chaque cible.
Limites
Découpages temporels, walk-forward ou validation croisée ne réparent pas des données déjà contaminées. Purge et embargo doivent découler de la structure des labels, et non être appliqués comme des rituels. Un jeu causal peut encore souffrir d’erreurs de mesure, de sélection multiple, de changement de régime, de faible puissance ou d’un univers incomplet. La validation exige donc à la fois des contrôles statistiques et un audit du parcours de l’information.
Références
- Halbert White, A Reality Check for Data Snooping, Econometrica, 2000 — inférence lorsque le résultat sélectionné provient de nombreuses spécifications.
- Robert D. Arnott, Campbell R. Harvey et Harry Markowitz, A Backtesting Protocol in the Era of Machine Learning — séparation entre recherche, sélection, holdout et rareté des données financières.
- David H. Bailey, Jonathan M. Borwein, Marcos López de Prado et Qiji Jim Zhu, The Probability of Backtest Overfitting — risque de surapprentissage issu de la sélection entre de nombreuses configurations.
- Federal Reserve Bank of St. Louis, FRED® versus ALFRED® — différence entre l’information historique disponible aujourd’hui et le millésime connu dans le passé.
- scikit-learn, Common pitfalls — Data leakage et StandardScaler — entraînement, prétraitement et application au test.
- NYSE, Opening and closing auctions, p. 2 — séquence d’entrée des ordres et enchère de clôture sur le marché décrit.
- scikit-learn, TimeSeriesSplit — validation croisée ordonnée dans le temps et paramètre de gap ; documentation technique officielle.