Sous le capot — ce que fait réellement BeRich
Une vision complète et à jour du pipeline : comment les données sont acquises, comment les features sont construites, comment les modèles sont entraînés, choisis et optimisés, à quelle fréquence tout est ré-entraîné, et — surtout — comment lire les signaux et d'où viennent les stops et objectifs. BeRich est un outil indicatif : aucun modèle ne bat actuellement le « acheter et garder » en out-of-sample, et c'est affiché honnêtement partout.
1. Vue d'ensemble
BeRich estime, pour chaque actif, une probabilité de tendance haussière à horizon de quelques jours (pas d'intraday) : la chance que la barrière haute (objectif) soit touchée avant la barrière basse (stop) dans les N prochains jours. Ce n'est PAS une prédiction de prix.
Règle d'or non négociable : un modèle n'est « promu » (servi en production) que s'il bat à la fois la baseline LightGBM ET le simple « acheter et garder », en walk-forward, hors échantillon, avec frais et slippage réalistes. Tant que ce n'est pas le cas, tout est affiché comme indicatif. À ce jour, aucun modèle ne franchit cette barre — c'est volontaire et honnête.
2. Acquisition des données
Tout part de données quotidiennes (barres journalières), récupérées et mises en cache localement (Parquet).
- Prix OHLCV (ouverture, haut, bas, clôture, volume) via yfinance, depuis 2010, ajustés des splits/dividendes.
- Univers : ~274 actions US (10 méga-caps + ~113 mid + ~151 small), plus 8 actions FR, 5 paires forex, 3 cryptos, 3 matières premières.
- Calendrier de résultats (earnings) : dates passées et futures, surprises EPS.
- Actualités via Alpha Vantage, puis score de sentiment par FinBERT (voir §4).
- Fondamentaux trimestriels (CA, résultat net, actifs, capitaux propres, dette) — historique court (~5 ans chez yfinance), donc usage prospectif.
3. Feature engineering
À partir des prix, on calcule des indicateurs « causaux » (ils n'utilisent que le passé jusqu'à la date t — jamais le futur). Le jeu de base compte 22 features ; des familles optionnelles s'ajoutent.
| Famille | Exemples | Capte |
|---|---|---|
| Base — momentum | rendements 1/5j, momentum 10/20/60/120j | tendance / élan |
| Base — oscillateurs | RSI 14, MACD (ligne/signal/histogramme) | sur-achat / sur-vente |
| Base — volatilité | ATR%, volatilité réalisée 20j | régime de risque |
| Base — tendance/MM | écart aux moyennes 20/50j, distance aux plus hauts/bas 60j | position relative |
| Base — volume / calendrier / régime | z-score volume, saisonnalité, rendement+vol du marché (SPY) | liquidité, effets de calendrier, contexte marché |
| Microstructure (nouveau) | CLV, gap d'ouverture, amplitude, Parkinson, illiquidité d'Amihud, spread de Roll | liquidité, spread, position intraday |
| Earnings (opt.) | jours avant/après résultats, surprises | pression événementielle |
| News / FinBERT (opt.) | sentiment moyen/extrême, divergence prix-sentiment | tonalité des actualités |
| Fondamentaux (opt., point-in-time) | marge nette, ROE, dette/capitaux, croissance CA | qualité / valorisation |
Important : les scalers (normalisation) sont calibrés uniquement sur la portion d'entraînement, jamais sur le test — pour éviter toute fuite d'information. La recherche d'hyperparamètres (§8) choisit elle-même quelles familles garder ; le modèle US actif utilise actuellement momentum + calendrier + microstructure.
4. FinBERT (sentiment des actualités)
FinBERT est un modèle de langage spécialisé en finance. Chaque actualité (titre + résumé) est classée en négatif / neutre / positif sur GPU. On en dérive un score de sentiment et des features (sentiment moyen sur 5 jours, intensité, divergence avec le prix). C'est le seul endroit où une IA de type « grand modèle de langage » intervient ; le reste repose sur des modèles tabulaires/séquentiels.
5. Comment on définit « gagner » (labellisation)
Méthode de la triple barrière : pour chaque jour, on ouvre un long hypothétique et on regarde les 10 jours suivants. Objectif = entrée + 2×ATR ; stop = entrée − 1×ATR ; barrière de temps = 10 jours.
- Touche l'objectif en premier → label 1 (gagné).
- Touche le stop en premier → label 0 (perdu).
- Ni l'un ni l'autre en 10 jours → résolu par le signe du rendement final.
Le modèle apprend P(gain) = probabilité de toucher l'objectif avant le stop. Comme le ratio gain/risque est 2:1, le seuil de rentabilité n'est pas 50 % mais ~33 % : au-dessus de 33 % de chances de gain, l'espérance est positive.
6. Les modèles
Tous respectent une interface commune (entraînement / prédiction de probabilité), donc interchangeables.
- LightGBM : arbres de décision boostés (CPU, rapide) — c'est la baseline et le modèle US actuellement servi.
- LSTM, PatchTST (transformeur), TFT : réseaux profonds sur GPU (pur PyTorch), lisant l'historique récent par séquences.
- Ensemble (stacking) : un méta-modèle combine les avis des modèles de base, sans fuite (validation croisée temporelle).
- Modèles dédiés par classe d'actif : un modèle propre à la crypto, au forex, aux matières premières, aux actions FR (avec son proxy de régime : Bitcoin pour la crypto, indice dollar pour le forex).
- Rankers long/short : versions « régression » pour classer les actifs entre eux (voir §11).
7. Entraînement, validation et choix du modèle
On utilise une validation « walk-forward » : on entraîne sur le passé, on prédit sur une fenêtre future jamais vue, on avance, et on répète. Un embargo (égal à l'horizon) sépare entraînement et test pour éviter tout chevauchement. C'est ainsi qu'on obtient des métriques honnêtes hors échantillon (AUC, Sharpe).
Le choix du modèle passe par la « guard rule » : la promotion est refusée automatiquement si le candidat ne bat pas à la fois la baseline ET le buy & hold (pour le long-only), ou s'il n'affiche pas un Sharpe positif et statistiquement significatif (Sharpe dégonflé / DSR, pour le market-neutral). Impossible de servir un modèle pire sans forçage explicite.
8. Recherche d'hyperparamètres (HPO)
Avec Optuna, on cherche automatiquement les meilleurs réglages — ET les meilleures features (chaque famille peut être activée/désactivée par la recherche). L'objectif n'est pas le Sharpe brut (trop sensible au biais de sélection) mais la VRAIE compétence de classement :
- Tâche US (binaire) : on maximise l'AUC out-of-sample (pouvoir de discrimination).
- Long/short : on maximise le rank-IC (corrélation de rang entre prédiction et réalité).
Les essais sont suivis dans MLflow et partagés dans une base commune entre les 2 GPU. Les meilleurs paramètres trouvés alimentent automatiquement le ré-entraînement nocturne.
9. Calibration et méta-étiquetage
Le modèle brut est souvent trop optimiste. La calibration (isotonique, ajustée hors échantillon) corrige la probabilité pour qu'elle colle à la réalité : si le modèle disait 0,63 mais ne gagnait en fait que 34 % du temps à ce niveau, la probabilité affichée devient 0,34. C'est cette probabilité honnête qui décide du signal.
Méta-étiquetage (optionnel) : un second modèle juge si le signal principal est fiable et peut rétrograder un ACHAT douteux en NEUTRE — un filtre de précision.
10. Cadence de ré-entraînement (automatique)
Tout tourne seul, chaque jour ouvré (heure de Paris) :
| Heure | Tâche |
|---|---|
| 22:30 | Données du jour + signaux + portefeuille papier |
| 22:45 | Rafraîchissement de l'univers long/short (~274 actifs) |
| 23:00 | HPO nocturne léger (params + features) |
| 23:30 | Ré-entraînement du zoo US (utilise les meilleurs params HPO + guard) |
| 23:35 | Ré-entraînement des modèles dédiés par classe d'actif |
| 23:45 | Génération du panier long/short |
| Samedi 08:00 / 12:00 | Contrôle de dérive (drift) / HPO approfondi sur GPU |
11. Stratégie marché-neutre (long/short)
Au lieu de parier « le marché monte », on classe ~274 actions chaque jour, on achète le meilleur décile et on vend à découvert le pire, à montants égaux (dollar-neutre). On ne gagne alors que sur l'écart entre bons et mauvais titres — le mouvement global du marché est neutralisé. Rééquilibrage tous les ~5 jours, pondération inverse-vol, gate sur le Sharpe dégonflé. À ce jour, le rank-IC est ≈ 0 (pas de compétence de tri exploitable) — donc aucun edge validé, affiché comme tel.
12. Comment lire les signaux (achat / stop / objectif)
Pour chaque actif, le tableau de bord montre une probabilité de gain calibrée P(win) et un verdict :
| P(win) calibrée | Signal | Sens |
|---|---|---|
| ≥ 0,35 | ACHAT (BUY) | nettement au-dessus du point mort (~0,33) → espérance positive |
| entre 0,30 et 0,35 | NEUTRE | pas d'edge clair — ni achat ni vente franc |
| ≤ 0,30 | VENTE (SELL) | sous le point mort → espérance négative |
Point crucial : NEUTRE ne veut PAS dire « vends ». Cela signifie « pas de signal franc ». Le seuil d'achat (0,35) tient compte du payoff 2:1 (point mort ~0,33).
- Prix d'entrée : la dernière clôture.
- Stop-loss (où couper la perte) : entrée − 1×ATR × facteur de volatilité. Le facteur élargit le stop quand le marché est agité, le resserre quand il est calme (SL/TP adaptatifs). Quand un modèle distributionnel est disponible, le stop peut aussi venir du quantile bas (q10) du rendement prévu.
- Take-profit (où prendre le bénéfice) : entrée + 2×ATR × facteur de volatilité (ou quantile haut q90).
- Taille de position : calculée pour ne risquer qu'1 % du capital jusqu'au stop.
- Bande q10–q90 : quand affichée, c'est l'éventail de rendements prévus (incertitude).
13. Honnêteté & limites
BeRich ne prétend pas avoir un edge. La meilleure discrimination US actuelle (AUC ≈ 0,536) reste faible (0,5 = hasard), et rien ne bat le buy & hold sur le Sharpe. La microstructure est le levier de features le plus prometteur à ce jour ; les fondamentaux ne sont pas validables faute d'historique. Les signaux sont des aides à la décision, PAS des conseils financiers. La bannière « indicatif / expérimental » est affichée partout, et la guard rule empêche toute promotion non méritée.