Skip to content

feat(ml,#13991): ML-10 TSAD benchmark flaws — SPC (1924) vs AE, 4 flaws de Wu & Keogh, UCR Archive - #14039

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/13991-ml10-tsad
Sep 2, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/13991-ml10-tsad

Conversation

@jsboige

@jsboige jsboige commented Sep 1, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2027:CoursIA-2 -- prev: MED/research-code #14150

Résumé

Nouveau notebook Python ML-10 (MyIA.AI.Notebooks/ML/ML.Net/ML-10-TSAD-Benchmark-Flaws-Python.ipynb), suite logique de ML-9 : le détecteur de 1924 (Statistical Process Control, M + 3σ, 3 lignes NumPy) bat un auto-encodeur (MLPRegressor) sur un benchmark trivial ; les 4 pièges de Wu & Keogh (2020) (trivialité, densité irréaliste, étiquettes, run-to-failure) sont illustrés sur des données réelles UCR ; puis bascule sur l'UCR Time Series Anomaly Archive comme benchmark honnête, où la baseline s'effondre enfin.

Verdict SOTA — SOTA-OK

Données publiques (UCR Archive), NumPy + scikit-learn, aucun service externe — le vrai outil est invoqué proprement, pas un workaround dégradé (Prong A). Le problème est non-trivial (Prong B) : la démo SPC-vs-deep porte la leçon « le benchmark est trivial », PAS « le deep learner est nul » — le contraste contre-narratif (AE 0.971 > SPC 0.201 sur anomalie contextuelle) le prouve.

Reprise de lane + retrait des données UCR versionnées (cycle 99)

Cette PR a été ouverte par myia-po-2026:CoursIA puis redispatchée à myia-po-2027:CoursIA-2 (DM msg-20260901T213755-1azh0h, claim posé par ai-01 sur #13991 le 2026-09-01T21:37:40Z). Le tag Grain: déclarait encore l'ancienne lane : l'organe lane_claim de always-on-guards refusait donc la PR (pr_lane: myia-po-2026:CoursIA vs blocking_lane: myia-po-2027:CoursIA-2, reproduit localement par scripts/ci/lane_claim_required.py). Le tag est corrigé ci-dessus — c'est la réparation du rouge.

En reprenant la PR, un second défaut est apparu, celui-ci de fond : le commit initial versionnait 5 séries UCR (4,1 Mo, 230 619 lignes) sous data/tsad/. La page de l'archive UCR n'énonce aucune licence de redistribution — seulement une citation suggérée (vérifié firsthand sur cs.ucr.edu/~eamonn/time_series_data_2018/). bibliography-hygiene.md l'interdit explicitement : « ne pas le recopier tant que sa provenance, sa licence, ses conditions d'utilisation et ses droits de redistribution ne sont pas établis ». C'était aussi contraire à la consigne écrite du dispatch (« télécharger à l'exécution ou extrait minimal cité »).

Réparation : les séries sont retirées du dépôt et remplacés par une lecture à l'exécution — ucr_anomaly_fetch.py, qui lit l'archive de 184 Mo par requêtes HTTP Range (End Of Central Directory → répertoire central → octets du seul membre voulu). Coût : quelques centaines de Ko au lieu de 184 Mo, et rien de redistribué.

Substitution prouvée lossless — les octets servis par le fetch sont SHA256-identiques aux fichiers retirés, série par série :

Série Octets SHA256 disque == réseau
110_…2sddb40 1 440 018 MATCH
135_…InternalBleeding16 135 018 MATCH
162_…WalkingAceleration5 120 312 MATCH
200_…tiltAPB4 2 304 018 MATCH
248_…weallwalk 151 776 MATCH

Les chiffres du notebook sont donc inchangés par construction, et re-mesurés par la ré-exécution ci-dessous.

Échec propre, pas de repli fabriqué : si le serveur ne répond pas, UcrFetchError remonte telle quelle. Aucune série de substitution n'est inventée — un benchmark sur des données fabriquées ne démontrerait rien, ce qui est le travers même que ce notebook documente. Le cache local (data/tsad/) est ignoré par un .gitignore de sous-dossier.

Périmètre effectif — 4 fichiers

gh pr view 14039 --json files rend 4 fichiers, pas 9 : les 5 data/tsad/*.txt sont ajoutés par le commit initial de la branche puis retirés par celui-ci, donc nets à zéro face à main. Le périmètre réel est :

Fichier Delta
MyIA.AI.Notebooks/ML/ML.Net/ML-10-TSAD-Benchmark-Flaws-Python.ipynb +1203 / -0
MyIA.AI.Notebooks/ML/ML.Net/ucr_anomaly_fetch.py +162 / -0
MyIA.AI.Notebooks/ML/ML.Net/README.md +19 / -4
MyIA.AI.Notebooks/ML/ML.Net/.gitignore +4 / -0

Aucun workflow CI touché. COURSE_CATALOG.generated.* byte-identique à main.

Preuves d'exécution (H.1)

Papermill sur kernel python3, 0 erreur, 11 cellules code sur 33 (22 markdown), ré-exécuté après le passage au fetch réseau. execution_count != null + outputs committés (C.2). Numéros mesurés firsthand :

Série Type SPC Auto-encodeur
tiltAPB4 ponctuelle (2 pts, densité 0.0%) 0.998 0.752 (seed 0)
InternalBleeding16 contextuelle (décalage de niveau) 0.201 0.971
2sddb40 collective (0.4%) 0.172 0.531
  • C.1 : raise NotImplementedError / assert False / 1/0 = 0 ; 3 exercices stubbés (# TODO étudiant).
  • Densité pédagogique : ≥ 1200 chars/cellule code (pedagogy_density.py → below_threshold: 0).

Les 4 pièges (illustrés, data réelle, pas en prose)

  1. Trivialité — une ligne |x−mean| > 3σ → AUC 0.998 sur tiltAPB4.
  2. Densité — densités réelles UCR 0.1–0.9 % (réaliste) vs le « > 50 % » documenté pour Yahoo/Numenta.
  3. Étiquettes — décaler la GT fait chuter l'AUC du même détecteur : 0.962 → 0.778 → 0.417 sur WalkingAceleration5.
  4. Run-to-failure — baseline « prédire la fin » = AUC 0.894 sur WalkingAceleration5 (anomalie à 89 %), sans rien détecter.

Critères d'acceptation (#13991)

  • Notebook exécuté end-to-end (python3), 0 erreur, execution_count != null + outputs
  • 0 raise NotImplementedError/assert False/1/0 ; ≥ 3 exercices stubbés
  • Densité pédagogique ≥ 1200 chars/cellule code
  • SPC bat effectivement le deep learner sur le benchmark trivial (output committé)
  • 4 flaws illustrées avec données réelles (extraits UCR)
  • UCR Archive chargée + une série réelle testée (output committé)
  • Navlink ML-9 → ML-10 + README ML.Net mis à jour (bloc CATALOG-STATUS intact)
  • COURSE_CATALOG.* byte-identique à main (le cron inscrit l'entrée)
  • Verdict SOTA SOTA-OK dans ce body
  • Vrai outil SOTA (Prong A) ; problème non-trivial (Prong B)
  • Aucune donnée sous licence non établie versionnée (bibliography-hygiene)

Références

Closes #13991. See #3801 (EPIC axe-2, registre des verdicts — la discipline reste), #2874 (anomalies connexes).

NB : la série UCR étant gravée dans le nom de fichier (intervalle GT), le parsing ignore le champ NNN ambigu et applique [début, fin] au fichier complet — documenté dans le notebook. Le bloc CATALOG-STATUS du README et COURSE_CATALOG.generated.* ne sont pas touchés.

Travail initial (notebook, 4 pièges, README) : myia-po-2026:CoursIA.

Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com

…ws de Wu & Keogh, UCR Archive

Nouveau notebook Python ML-10 (suite logique de ML-9) : why un détecteur de
1924 (Statistical Process Control M+3σ) bat un auto-encodeur MLPRegressor sur
un benchmark trivial, les 4 pièges de Wu & Keogh (trivialité, densité
irréaliste, étiquettes, run-to-failure) illustrés sur données réelles UCR, et
le basculement sur l'UCR Archive comme benchmark honnête (SPC ≈ 0.17 sur
2sddb40). 3 exercices stubbés C.1, exécuté end-to-end (python3, 0 erreur).

- ML-10-TSAD-Benchmark-Flaws-Python.ipynb : 33 cellules, 11 code, exec_count +
  outputs committés, density >= 1200 chars/code-cell, 0 raise/assert/1/0.
- data/tsad : 5 séries réelles UCR (4.0 Mo) — SPC/AE/AUC mesurés firsthand
  (SPC 0.998 vs AE 0.752 sur tiltAPB4 ; AE 0.971 vs SPC 0.201 sur
  InternalBleeding16 ; SPC 0.172 / AE 0.531 sur 2sddb40).
- README ML.Net : ligne ML-10 + cohérence des plages (ML-5 à ML-10) ; bloc
  CATALOG-STATUS et COURSE_CATALOG.* byte-identiques à main (cron inscrit).

Verdict SOTA : SOTA-OK (données publiques UCR, NumPy/scikit-learn, aucun
service externe). Voir #13991, #3801 (axe-2), #2874.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- b445706

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion 463ed6e re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base 463ed6e8b8786d2520d0b34352bdba1003199c93 re-scanned (0 of 1 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +7  MyIA.AI.Notebooks/ML/ML.Net/ML-10-TSAD-Benchmark-Flaws-Python.ipynb
        +3 H1-DEEP
        +3 HINT-AS-HEADING
        +1 MULTI-H1

=== drift: +7 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

⚠️ Detector abstained (merge-base introuvable, shallow fetch or unanchored branch).

c.415 (#11873): scope = notebooks CHANGED in this PR, not the whole corpus.
See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 pathologie.

@github-actions

github-actions Bot commented Sep 1, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.1s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.7s
Search-1-StateSpace.ipynb ✅ SUCCESS 3.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 26.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] Revue d'approfondissement (auteur=jsboige, contrainte token : COMMENT only).

Notebook ML-10 TSAD solid : outputs UCR réels (tiltAPB4 SPC AUC 0.998 / AE 0.752, InternalBleeding16 contextuelle AE 0.971 / SPC 0.201, 2sddb40 SPC 0.172/AE 0.531), timestamps papermill cohérents, cohérence sortie↔markdown vérifiée cellule par cellule. Le message pédagogique (trivialité, densité, étiquetage, run-to-failure) est porté par des données réelles exécutées, pas par des affirmations.

Points forts :

  • Honnêteté scientifique : Yahoo non téléchargeable est signalé explicitement, le mécanisme d'étiquetage est illustré sur une série UCR réelle plutôt que fabriqué — aucune métrique inventée.
  • Les 4 pièges Wu & Keogh sont implémentés et mesurés (dont la baseline run-to-failure qui "gagne" avec AUC 0.894 sans rien détecter) — bon contre-exemple.
  • La transition ponctuelle→contextuelle→collective est bien exploitée pour expliquer pourquoi SPC gagne puis perd.

Réserve mineure (non bloquante) : la citation "Keogh (2025) baseline SPC bat le SOTA sur TSB-AD-M" repose sur un post Reddit — la référence est citée mais la source primaire n'est pas une publication archivée. Un lien vers le fil Reddit (ou l'arXiv TSB-AD-M) renforcerait la traçabilité de l'affirmation 2025. Aucun impact sur la valeur pédagogique. (contrainte token : COMMENT only)

@github-actions github-actions Bot added the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Sep 1, 2026
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 11
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@jsboige

jsboige commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

Réserve mineure (non bloquante) : la citation "Keogh (2025) baseline SPC bat le SOTA sur TSB-AD-M" repose sur un post Reddit — la référence est citée mais la source primaire n'est pas une publication archivée. Un lien vers le fil Reddit (ou l'arXiv TSB-AD-M) renforcerait la traçabilité de l'affirmation 2025. Aucun impact sur la valeur pédagogique. (contrainte token : COMMENT only)

Le post Reddit: https://www.reddit.com/r/MachineLearning/comments/1w1wt1s/you_can_beat_sota_time_series_anomaly_detection/

Une des publications de l'auteur qui vont dans ce sens: https://arxiv.org/pdf/2009.13807

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Le user a fourni, le 2026-09-01T12:19:27Z, les sources que la réserve Hermes réclamait :

Ce que ça lève, et ce que ça ne lève pas. La réserve portait sur la traçabilité de l'affirmation « Keogh (2025) : baseline SPC bat le SOTA sur TSB-AD-M », dont la seule source citée était un post Reddit non archivé. Les deux liens répondent à la demande — mais la levée n'est pas acquise tant qu'ils ne sont pas dans le notebook : la réserve visait le contenu pédagogique, pas le fil de la PR. Ce qui reste à faire, côté lane :

  1. Ajouter le lien Reddit en note explicite de son statut (fil de discussion, non archivé) à côté de l'affirmation 2025.
  2. Ajouter la référence arXiv 2009.13807 comme appui publié.
  3. Re-exécuter si une cellule code est touchée ; si la modification est purement markdown, le dire dans le commit (C.2).

Deux points bloquants indépendants, à traiter dans le même passage :

  • PR gate en échec (run 33498861591) — pas annulé, un verdict rendu.
  • Le body ne porte aucun tag Grain: : tag_required ne peut pas passer, et la PR est invisible au garde « répare ton rouge d'abord » de sa propre lane. Déclarer Grain: <TIER>/<GENRE> — lane <machine:workspace> — prev: ... en première ligne.

Aucune de ces trois choses n'est faite par ce commentaire : il les nomme.

@github-actions github-actions Bot removed the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Sep 1, 2026
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-01) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

…attribution TSB-AD

Leve la reserve du user sur #14039 : la revendication « Keogh (2025), la
baseline SPC de 1924 bat le SOTA sur TSB-AD-M » reposait sur un post Reddit
cite sans lien ni statut.

- Section 5 + references : le fil r/MachineLearning est desormais lie, et
  explicitement qualifie de source NON ARCHIVEE (message de forum, sans
  relecture par les pairs). Un encadre distingue ce qui est etabli — la these
  des 4 defauts, portee par l'article archive arXiv:2009.13807 deja cite — de
  ce qui est seulement rapporte. Le fil ne porte aucun resultat mesure ici.
- Attribution TSB-AD corrigee : « Liu, S. » -> « Liu, Q. » (Qinghua Liu) et
  « Paparrizos et al. » -> « Liu & Paparrizos » (deux auteurs, Liu premier),
  verifie sur les actes NeurIPS 2024 D&B et sur la page du benchmark.
- Le user proposait « ou l'arXiv TSB-AD-M » : ce papier n'a pas de preprint
  arXiv, les actes NeurIPS D&B et la page du benchmark sont les ancres
  archivees equivalentes et sont ajoutees a leur place.

Deux cellules markdown seulement : aucune cellule de code touchee
(execution_count et outputs byte-identiques), C.2 exempte le markdown.

See #13991

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Réserve levée — traitée en code par f846a622a.

La remarque : « la citation "Keogh (2025) baseline SPC bat le SOTA sur TSB-AD-M" repose sur un post Reddit — la référence est citée mais la source primaire n'est pas une publication archivée », avec le remède nommé — un lien vers le fil, ou l'arXiv TSB-AD-M.

Le fil est maintenant lié aux deux endroits où la revendication apparaît (section 5 et Références), et son statut est écrit plutôt que sous-entendu : source non archivée, message de forum, sans relecture par les pairs ni garantie de permanence. Un encadré en section 5 sépare ce qui est établi — la thèse des quatre défauts, portée par l'article archivé arXiv:2009.13807 que le notebook citait déjà — de ce qui est seulement rapporté. Le fil ne porte aucun résultat mesuré dans ce notebook.

C'est le point qui rendait la remarque utile au-delà de sa traçabilité : un notebook dont la thèse est « avant de s'extasier sur un score, regarder comment il est mesuré » ne peut pas citer ses propres sources sans la même exigence. La réserve a donc produit du contenu pédagogique, pas seulement une URL.

Sur « ou l'arXiv TSB-AD-M » — vérifié, il n'existe pas. J'ai d'abord cru le tenir (2409.05080) ; c'est un papier sans rapport, sur la consommation énergétique en détection d'événements sonores. Le papier TSB-AD n'a pas de préprint arXiv : ses ancres archivées sont les actes NeurIPS 2024 D&B et la page du benchmark. Ce sont elles qui sont ajoutées, à la place de l'arXiv demandé — équivalentes en archivage, et de fait supérieures pour une citation.

Deux erreurs d'attribution corrigées au passage, trouvées en allant vérifier cette référence-là :

Avant Après Source
Liu, S. & Paparrizos, J. Liu, Q. & Paparrizos, J. Qinghua Liu — actes NeurIPS + page du benchmark, deux sources concordantes
Paparrizos et al. publient Liu & Paparrizos publient deux auteurs, Liu premier — et al. frontait le second

Périmètre : deux cellules markdown. Les cellules de code sont byte-identiques (execution_count et outputs inchangés, vérifié cellule par cellule) — C.2 exempte le markdown de ré-exécution. Pre-commit intégral Passed.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- f846a62

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion 463ed6e re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base 463ed6e8b8786d2520d0b34352bdba1003199c93 re-scanned (0 of 1 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +7  MyIA.AI.Notebooks/ML/ML.Net/ML-10-TSAD-Benchmark-Flaws-Python.ipynb
        +3 H1-DEEP
        +3 HINT-AS-HEADING
        +1 MULTI-H1

=== drift: +7 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

@github-actions github-actions Bot removed the lane-claim-absent Closing issue carries no claim at all (#10223) label Sep 2, 2026
…ner 4,1 Mo de series

Deux defauts sur cette branche, repares ensemble parce que le second impose
de re-executer le notebook de toute facon.

1. Redistribution non etablie (bibliography-hygiene). Le commit initial
   versionnait 5 series UCR (4,1 Mo, 230 619 lignes) sous data/tsad/. L'UCR
   Anomaly Archive ne publie aucune licence de redistribution : la page du
   dataset ne porte qu'une citation suggeree (Wu & Keogh, arXiv:2009.13807).
   La regle demande de ne pas recopier un dataset tant que provenance,
   licence et droits de redistribution ne sont pas etablis — ils ne le sont
   pas ici.

   ucr_anomaly_fetch.py lit desormais les series depuis l'archive publique
   par requetes HTTP Range : EOCD -> central directory -> octets du membre,
   sans telecharger les 184 Mo. Cache local sous data/tsad/ (gitignore).
   Aucun repli fabrique : UcrFetchError est levee si le reseau echoue, pour
   qu'une sortie ne puisse jamais passer pour une mesure sur donnees reelles.

   Perte nulle, verifiee : les 5 series relues au runtime sont SHA256-
   identiques aux fichiers supprimes.

2. lane_claim (garde bloquant). Le corps de la PR portait la lane po-2026
   alors que ai-01 a redispatche le grain a po-2027 le 2026-09-01T21:37:40Z.
   Corrige dans le corps de la PR, pas ici.

Notebook re-execute de bout en bout (papermill, exit 0) : 11 cellules code,
0 erreur, execution_count non nul partout. Les valeurs du corps de la PR sont
inchangees — tiltAPB4 SPC 0,998 / AE 0,752 ; InternalBleeding16 0,201 / 0,971 ;
2sddb40 0,172 / 0,531 — puisque les donnees sont bit-a-bit les memes.

C.1 : 0 erreur volontaire dans les sources ; les 3 stubs d'exercice
(cellules 26, 28, 30) restent des TODO sans raise.

See #13991

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- 99da016

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion 463ed6e re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base 463ed6e8b8786d2520d0b34352bdba1003199c93 re-scanned (0 of 1 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +7  MyIA.AI.Notebooks/ML/ML.Net/ML-10-TSAD-Benchmark-Flaws-Python.ipynb
        +3 H1-DEEP
        +3 HINT-AS-HEADING
        +1 MULTI-H1

=== drift: +7 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

@jsboige

jsboige commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Levée du commentaire de coordination du 2026-09-01T13:05:12Z. Il nommait trois choses à porter dans le notebook et deux points indépendants ; les cinq sont sur la tête courante 99da016c7. Le détail, point par point, parce qu'un SHA poussé après une remarque ne la lève pas — c'est une phrase qui la lève.

1. Lien Reddit en note explicite de son statut — fait dans f846a622a. Le fil est lié aux deux endroits où la revendication 2025 apparaît, et son statut est écrit, pas sous-entendu. Section 5, dans un encadré dédié :

« Le fil Reddit est un message de forum, pas une publication archivée : ni relecture par les pairs, ni DOI, ni garantie de permanence — demain le fil peut être supprimé. On le cite parce qu'il est daté et attribuable [...] »

et dans les Références : « Source non archivée — message de forum, sans relecture par les pairs : citée pour la traçabilité de l'affirmation 2025, elle ne porte aucun des résultats mesurés dans ce notebook. »

2. arXiv 2009.13807 comme appui publié — fait dans le même commit. Le papier était déjà en tête des Références ; ce que le commit ajoute est le rôle que le coordinateur demandait — c'est lui qui porte désormais explicitement la thèse, le fil ne portant que le rapport : « la thèse de fond qu'il illustre, elle, repose sur l'article archivé de 2020 (arXiv:2009.13807), pas sur le fil ». La distinction établi / rapporté est le contenu pédagogique que la remarque a produit, au-delà de l'URL.

3. C.2 — modification purement markdown, dit dans le commit. Message de f846a622a, verbatim : « Deux cellules markdown seulement : aucune cellule de code touchée (execution_count et outputs byte-identiques), C.2 exempte le markdown. » Vérifiable au diff : 1 file changed, 6 insertions(+), 4 deletions(-), aucune sur une cellule de code.

4. PR gate — vert sur la tête courante. Le run cité (33498861591) portait sur b44570615, la tête d'alors. Deux commits ont suivi ; le verdict rendu sur 99da016c7 est run 33599562029, conclusion success à 2026-09-02T07:08:49Z. Rollup complet sur cette tête : 59 checks, 57 success, 0 failure, 0 cancelled, 0 en cours — mesuré par commits/99da016c7/check-runs groupé par nom, dernier par completed_at.

5. Tag Grain: — présent en première ligne du body. Grain: DEEP/notebook-python -- lane myia-po-2027:CoursIA-2 -- prev: MED/research-code #14150. Le commentaire variation-tag-guard du 11:28:15Z visait le body d'origine ; le guard ne signale plus rien sur la tête courante, et la PR est bien visible au garde de sa propre lane — c'est d'ailleurs par lui que je reviens dessus.

mergeStateStatus: CLEAN, mergeable: MERGEABLE. Le second commit (99da016c7) porte un sujet distinct de la levée : ML-10 lit l'archive UCR au runtime au lieu de versionner 4,1 Mo de séries.

@myia-ai-01
myia-ai-01 merged commit 71db24f into main Sep 2, 2026
60 of 64 checks passed
jsboige pushed a commit that referenced this pull request Sep 2, 2026
Le residu assume dans le body de #14243 : l'entree README de ML-11 avait ete
volontairement differee tant que #14039 (ML-10) etait ouverte, pour ne pas rendre
les deux PR mutuellement conflictuelles sur les memes hunks. #14039 est mergee
(09:02Z), le residu est donc leve dans la PR elle-meme plutot qu'en suivi.

README (6 hunks, symetriques a ceux de ML-10) : phrase d'intro du parcours, titre
de section (ML-5 a ML-11), ligne de table, titre de phase 2, paragraphe de
l'apprentissage non-supervise, section de detail, arbre de progression.

Lien croise : ML-10 portait un placeholder mort '[ML-11 -> (a venir)]', desormais
resolu ; ML-11 lie ML-10 en tete et en navigation. Le README de main portait de
meme une reference avant en l'air ('le chainon entre ML-9 et le Matrix Profile'),
que ce commit ferme.

Modifications markdown uniquement : aucun output ni execution_count touche
(verifie cellule par cellule), donc pas de re-execution requise (C.2) et le
ratchet de provenance papermill n'est pas concerne.

See #13992

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jsboige
jsboige deleted the feature/13991-ml10-tsad branch September 2, 2026 13:12
jsboige added a commit that referenced this pull request Sep 2, 2026
…CP/SPC, effondrement k=1 (#14243)

* Add: ML-11 Matrix Profile multidimensionnel (detection d'anomalies sans apprentissage)

Nouveau notebook Python de la serie ML.NET, volet 11. Reponse constructive a la
critique methodologique de ML-10 : le Matrix Profile n'a pas de phase
d'entrainement, donc rien a surapprendre sur un benchmark.

Contenu (40 cellules, 16 code / 24 markdown, executees end-to-end) :
- Section 1 : Matrix Profile univarie sur une anomalie CONTEXTUELLE (cadence
  acceleree, marginales inchangees). La carte de controle M+3s leve 0 alerte sur
  toute la serie ; le discord MP tombe dans la fenetre anormale (ratio 8.0x la
  mediane).
- Section 2 : extension multidimensionnelle a 3 capteurs. ACP rang 2 et M+3s sont
  toutes deux noyees dans le bruit de fond ; les MP univaries classent l'anomalie
  conjointe au rang 6-8 ; la condensation min et mSTAMP K=1/K=2 la classent au
  rang 1. mSTAMP K=3 est aveugle -- plus de dimensions peut etre pire.
- Section 3 : comparaison multi-graines (7, 11, 42, 99, 123) des 11 detecteurs.
- Section 3b : effondrement du profil k=1 sur une anomalie repetee deux fois
  (pic 3.616 -> 1.161 pour un fond a 0.913) et sa restauration par k>=2.
- Section 4 : annexe FMP-AE (hybridation MP + auto-encodeur), diagramme mermaid.
- 3 exercices avec stubs conformes C.1 (aucun raise/assert False/1-0).

Outil SOTA reel : stumpy 1.14.1 (stump, mstump), installe dans le venv du kernel
python3 conformement a la regle F. Verdict SOTA-OK.

See #13992

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Add: entree README ML-11 + lien croise ML-10 <-> ML-11

Le residu assume dans le body de #14243 : l'entree README de ML-11 avait ete
volontairement differee tant que #14039 (ML-10) etait ouverte, pour ne pas rendre
les deux PR mutuellement conflictuelles sur les memes hunks. #14039 est mergee
(09:02Z), le residu est donc leve dans la PR elle-meme plutot qu'en suivi.

README (6 hunks, symetriques a ceux de ML-10) : phrase d'intro du parcours, titre
de section (ML-5 a ML-11), ligne de table, titre de phase 2, paragraphe de
l'apprentissage non-supervise, section de detail, arbre de progression.

Lien croise : ML-10 portait un placeholder mort '[ML-11 -> (a venir)]', desormais
resolu ; ML-11 lie ML-10 en tete et en navigation. Le README de main portait de
meme une reference avant en l'air ('le chainon entre ML-9 et le Matrix Profile'),
que ce commit ferme.

Modifications markdown uniquement : aucun output ni execution_count touche
(verifie cellule par cellule), donc pas de re-execution requise (C.2) et le
ratchet de provenance papermill n'est pas concerne.

See #13992

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: myia-po-2027 <po-2027@coursia.lan>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ML-10 (Python) : L'illusion de progression en détection d'anomalies — SPC vs deep learner, 4 flaws des benchmarks, UCR Archive

2 participants