L’Oracle
Socle de données et prévision évaluée dans le temps

- d’erreur sur les vues à 28 jours face à la médiane glissante : MAE log10 0,499 → 0,393 (102 vidéos de test)
- −21 %
- couverture mesurée de l’intervalle à 80 % (71 % avant), plus étroit : ×4,64 contre ×5,04
- 81 %
- modèles comparés en walk-forward, départagés par une porte de qualité statistique
- 13
- pour le backtest complet sur CPU (335 s avant)
- ≈ 90 s
- Le problème
- Savoir ce qu’une prévision vaut vraiment demande un socle de données unique et une évaluation qui respecte le temps.
- Pour qui
- La chaîne LaRefVlog : décider chaque matin de quoi parler et combien de vues attendre, avec des données qui restent en local.
- Le résultat
- Un socle unique, treize modèles jugés en walk-forward et une porte de qualité écrite d’avance. Le prédicteur « régime chaîne » ramène la MAE log10 de 0,499 à 0,393 : −21 % d’erreur face à la médiane glissante, avec un intervalle à 80 % couvert à 81 %.
Contexte
Avant de tourner un short, deux questions : de quoi parler aujourd’hui, et combien de vues attendre d’une idée, avec une incertitude chiffrée.
La refonte du 20 octobre part du protocole : un seul entrepôt partagé avec Radar, une évaluation chronologique, et une règle de choix écrite avant la mesure. Un modèle appris n’entre en production que si l’intervalle de confiance à 90 % de son gain exclut zéro.
Ce que j’ai construit
- Socle partagé avec Radar : 348 vidéos, 1 457 instantanés horodatés, 904 articles de 30 sources, tendances et Wikipédia ; santé de chaque source à chaque passage.
- Prédicteur « régime chaîne » : vues quotidiennes des 7 derniers jours rapportées aux vidéos actives sur 28 jours. Connu le jour même, il supprime les 28 jours de retard de la médiane glissante : −21 % d’erreur, IC 90 % du gain [0,044 ; 0,166] en log10.
- Backtest walk-forward purgé (embargo de 28 jours, 4 plis) : 13 modèles, des médianes de référence au LightGBM régularisé sur l’écart au régime, tous jugés sur les mêmes 102 vidéos.
- Signaux testés à armes égales : presse reconstituée pour 348 vidéos, effet du titre appris sur 2 182 shorts de 10 chaînes comparables ; la porte de qualité ne retient que ce qui gagne.
- Intervalle à 80 % par conformal glissant asymétrique sur les 60 derniers résidus, et nowcasting : la dernière mesure d’une vidéo récente est ramenée à 28 jours par une courbe de croissance ajustée sur les instantanés.
- Idées classées : sujets chauds, rédaction, filtres, fourchette P10–P50–P90 et score expliqué ; LoRA entraîné sur les titres de la chaîne pour la rédaction.
- Produit : une CLI, un tableau de bord à quatre vues, une API REST, un serveur MCP à 9 outils et un service planifié hors de ~/Documents ; 49 tests.
Architecture 7 briques
- 01 · EntréeCollecteursChaîne et instantanés, presse FR, tendances, Wikipédia
- 02 · DonnéesSocleUn entrepôt SQLite partagé avec Radar, santé des sources
- 03 · ModèleWalk-forward13 modèles : régime chaîne, médianes, Ridge, HistGB, LightGBM, MLP, mélange ; embargo 28 j
- 04 · OutilRègle de choixUn modèle appris seulement si l’IC 90 % de son gain exclut 0
- 05 · ModèleIntervalles et nowcastConformal glissant à 80 %, courbe de croissance
- 06 · ModèleIdéesSujets chauds, rédaction LLM ou gabarits, filtres, classement
- 07 · SortieServiceCLI, tableau de bord, API REST, MCP à 9 outils
Les calculs lourds (TimesFM, LoRA, génération LLM) passent par une file GPU, un job à la fois.
Fabrication 6 étapes
- CollecteChaîne, presse, tendances, Wikipédia.
- SocleUn entrepôt SQLite, une configuration.
- Walk-forwardTreize modèles, embargo de 28 jours.
- IntervallesConformal glissant à 80 %, couverture 81 %.
- NowcastVidéos de moins de 28 jours.
- IdéesRédaction, filtres, classement.
Décisions le choix, la raison, l’alternative écartée
- D1Évaluer dans le temps (walk-forward purgé, embargo de 28 jours) plutôt qu’en validation croisée mélangée.
Le niveau de la chaîne dérive dans le temps : seule une évaluation chronologique mesure l’erreur réelle. En walk-forward, la médiane glissante atteint une MAE de 1,44 sur le CTR, contre 2,25 pour le mélange.
ÉcartéLa validation croisée mélangée, optimiste sur une série qui dérive.
- D2Écrire la règle de choix avant la mesure : la baseline reste en production tant qu’aucun gain n’est significatif.
La porte tranche sans biais : le régime chaîne, meilleur prédicteur mesuré (−21 % d’erreur face à la médiane glissante, IC 90 % du gain [0,044 ; 0,166]), est en production.
ÉcartéChoisir le modèle le plus sophistiqué.
- D3Prédire à partir du régime du jour (vues quotidiennes 7 j ÷ vidéos actives 28 j) plutôt que de la médiane des vidéos mûres.
La médiane suit la chaîne avec 28 jours de retard ; le régime est connu le jour même et suit les changements de tendance : MAE log10 de 0,499 à 0,393.
ÉcartéLa médiane glissante des 30 dernières vidéos.
- D4Un intervalle conformal glissant asymétrique, sur les 60 derniers résidus connus, et publier sa couverture réelle.
Couverture mesurée de 81 % pour une cible de 80 % (71 % avant), avec une fourchette plus étroite : ×4,64 contre ×5,04.
- D5Entraîner le LoRA d’idées sur un modèle qui tient dans la machine.
Dimensionné pour 16 Go : Qwen3 4B en 4 bits s’entraîne en 47 min avec 4,5 Go de pic ; sur 36 cas tenus à l’écart, 97 % des titres respectent le format de la chaîne (0 % pour le modèle de base). Un 9B relève d’un GPU de 24 Go.
ÉcartéUn LoRA 9B, qui demande un GPU dédié.
Résultats
Vues à 28 jours, walk-forward (102 vidéos de test, 4 plis)
| Modèle (extrait des 13) | MAE log10 | Écart au régime chaîne [IC 90 %] |
|---|---|---|
| Régime chaîne (vues par vidéo active) | 0,393 | — |
| LightGBM régularisé, écart rétréci | 0,403 | −0,010 [−0,029 ; 0,009] |
| Ridge sur l’écart au régime | 0,455 | −0,062 [−0,112 ; −0,010] |
| Médiane glissante 30 vidéos | 0,499 | −0,106 [−0,166 ; −0,044] |
| Médiane glissante par format | 0,506 | −0,113 [−0,173 ; −0,050] |
| LightGBM quantile | 0,579 | −0,186 [−0,269 ; −0,103] |
| Mélange (Ridge, HGB, MLP, LGBM) | 0,587 | −0,194 [−0,274 ; −0,109] |
| MLP, 5 graines | 0,710 | −0,317 [−0,395 ; −0,231] |
La porte de qualité place en production le régime chaîne : un modèle appris n’est retenu que si l’IC 90 % de son gain exclut zéro. 0,30 en log10 correspond à un facteur 2.
Avant / après (mêmes 4 plis, mêmes 102 vidéos de test)
| Mesure | Avant : médiane glissante | Après : régime chaîne |
|---|---|---|
| MAE log10 | 0,499 | 0,393 (−21 %) |
| Couverture de l’intervalle à 80 % | 71 % | 81 % |
| Largeur de l’intervalle | ×5,04 | ×4,64 |
| Méthode d’intervalle | Conformal split | Conformal glissant asymétrique, 60 résidus |
| Backtest complet sur CPU | 335 s | ≈ 90 s |
Gain MAE de 0,106 log10, IC 90 % bootstrap apparié [0,044 ; 0,166].
CTR : validation mélangée contre validation chronologique (222 vidéos)
| Protocole | Modèle | MAE (points de CTR) |
|---|---|---|
| 5 plis mélangés (publié le 19/10) | Mélange MLP + HistGB | 1,355 |
| Walk-forward, 9 plis | Mélange MLP + HistGB | 2,247 |
| Walk-forward, 9 plis | Médiane glissante 30 vidéos | 1,441 |
Le niveau de CTR dérive dans le temps : la validation chronologique empêche le modèle de voir des vidéos du futur. Elle sert de référence à tous les chiffres publiés.
LoRA d’idées sur Qwen3 4B : base contre LoRA, 36 vidéos tenues à l’écart
| Mesure | Base | LoRA |
|---|---|---|
| Format de titre de la chaîne respecté | 0 % | 97 % |
| Titres valides | 6 % | 89 % |
| Similarité au vrai titre | 0,51 | 0,79 |
| Écart au style de la chaîne (↓) | 69,4 | 5,1 |
| Perte sur le jeu de test (↓) | 4,73 | 1,48 |
Le LoRA apprend le format, le ton et le style de la chaîne : titres directement exploitables, sans perdre en diversité. Même protocole que la version précédente sur LFM2.5 1,2B, dépassée sur chaque mesure.
Livrables 5
- Socle de données commun (Oracle et Radar) avec migrations, journal des passages et santé des sources.
- Résultats régénérés depuis les fichiers : RESULTS, carte de modèle, carte du jeu de données.
- Tableau de bord à quatre vues, API REST, serveur MCP à 9 outils, service planifié prêt à installer.
- Adaptateur LoRA Qwen3 4B et son évaluation base contre LoRA, comparée à la version LFM2.5 ; journal de dimensionnement mémoire.
- 49 tests hors ligne ; backtest complet en ≈ 90 s sur CPU (335 s avant).
Environnement
Matériel et conditions de mesure
- LoRA d’idées entraîné sur Qwen3 4B (MLX 4 bits) sur MacBook Pro M1 Pro 16 Go : 300 itérations, 47 min, 4,5 Go de pic. Un LoRA sur un modèle 9B demande un GPU de 24 Go.
- Modèle de vues entièrement sur CPU : backtest complet en ≈ 90 s sur MacBook Pro M1 Pro.
- Données de la chaîne et exports YouTube Studio conservés en local ; service planifié par launchd, calculs lourds sur une file GPU, un job à la fois.
Reproduire commandes du README
Code privé : accès en lecture sous accord de confidentialité, ou démo en direct de 30 minutes. Demander l’accès →
.venv/bin/python -m oracle.cli collecte chaine --mode complet
.venv/bin/python -m oracle.cli collecte news
.venv/bin/python -m oracle.cli sujets
.venv/bin/python -m oracle.cli vues backtest
.venv/bin/python -m oracle.cli ctr walkforward
.venv/bin/python -m oracle.cli docs
.venv/bin/python -m oracle.cli dashboard
.venv/bin/python -m pytest- Le CTR et la série journalière viennent des exports YouTube Studio du propriétaire de la chaîne ; ces données restent en local.
- Tableau de bord et API sur 127.0.0.1:8333 ; LoRA et TimesFM passent par les scripts gpu_jobs, un à la fois.
Galerie 3
Ce que ce projet change pour vous
Le même savoir-faire, sur votre sujet.
Un chiffre qui tient
Une évaluation qui respecte le temps et une règle de choix écrite d’avance : vous savez ce qu’un modèle apporte avant de vous en servir, et le plus simple qui gagne reste en production.
Un socle avant les modèles
Un seul entrepôt, une seule configuration, la santé de chaque source : vos outils arrêtent de se contredire.
La prédiction dans vos outils
Serveur MCP pour vos assistants, API REST ou tableau de bord : la prévision arrive là où l’équipe décide déjà.