Skip to content

QC-Py-19 : le bloc de metriques test XGBoost ne se reproduit dans aucun environnement (3 jeux mesures, prose divergente) #19744

Closed

Description

@jsboige

Part of #19181

Constat

La re-execution C.2 de QC-Py-19-ML-Supervised-Classification.ipynb (grain #18941, lignes 3-4 du perimetre) a revele deux choses : les sorties commitees sur main ne concordaient pas avec la prose du carnet, et la re-execution ne les reconcilie pas entierement.

Trois jeux de valeurs coexistent pour le meme pipeline, sur le meme test set XGBoost :

Metrique Prose (cellules 36 et 40) Sortie committee sur main Sortie re-executee (3.13.3)
Accuracy 0.7988 0.8049 0.7988
Precision 0.7015 0.7059 0.6957
Recall 0.7833 0.8000 0.8000
F1 0.7402 0.7500 0.7442
ROC AUC 0.8609 0.8603 0.8617

Les trois jeux sont auto-coherents : F1 = 2PR/(P+R) tombe juste dans chacun (prose 0.7401, base 0.7499, re-execution 0.7442). Il ne s'agit donc pas d'une faute de recopie isolee, mais de trois matrices de confusion distinctes pour le meme code.

Ce qui est etabli

  • Le pipeline est entierement graine : generate_sample_data(n_days=500, seed=42), RandomForestClassifier(random_state=42), XGBClassifier(random_state=42). La separation train/test est chronologique (decoupage .iloc), pas un train_test_split non seede. Aucune stochasticite non seedee n'est en jeu.
  • Deux executions consecutives dans le meme environnement rendent un resultat identique (cellule 35 bit-identique) : la reproductibilite locale est bonne, l'environnement n'est pas la variable cachee d'une execution a l'autre.
  • La re-execution reconcilie Accuracy exactement avec la prose (0.7988) et reduit l'ecart de F1 (0.0098 -> 0.0040), mais Precision (ecart 0.0044 -> 0.0058), Recall (inchange, 0.0167) et ROC AUC (0.0006 -> 0.0008) restent divergents.

Ce que cela implique

Donnees et modeles etant seedes, et le resultat etant stable a l'interieur d'un environnement, la divergence entre les trois jeux ne peut venir que de l'environnement d'execution -- versions de xgboost, scikit-learn, numpy. C'est la meme classe que #19181, qui porte deja la question de la version canonique de la serie QuantConnect/Python.

Le cas ajoute a #19181 un element que sa mesure ne portait pas : la derive ne touche pas seulement metadata.language_info.version, elle atteint des valeurs calculees, et elle rend la prose quantitative du carnet inverifiable par re-execution.

Consequence pratique pour la meme serie : toute PR qui re-execute un carnet QC/Python sous l'interpreteur courant deplace des valeurs numeriques. Tant que l'environnement de reference n'est pas fige, ces deplacements se reproduiront dans les deux sens et chaque PR devra les declarer.

Ce qui est demande

  1. Fixer, pour la serie QuantConnect/Python, la version d'interpreteur et les versions des bibliotheques de calcul (la question ouverte de [QC] QuantConnect/Python : version d'interpreteur canonique de la serie et transitions du cliquet kernel-drift #19181), puis
  2. re-executer QC-Py-19 sous cet environnement de reference et aligner la prose des cellules 36 et 40 sur la sortie obtenue -- ou, si l'alignement n'est pas atteignable, retirer les chiffres de la prose au profit d'un renvoi a la sortie.

Portee

Cette issue ne rejoue pas le grain #18941 et ne rouvre pas ses correctifs : elle traite le reliquat que la re-execution C.2 a rendu visible au lieu de le masquer. Reference de mesure : PR du grain #18941, section ## Diagnostic derive.

Activity

  1. added a commit that references this issue on Oct 7, 2026
  2. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- investigation 3 matrices confusion distinctes meme code XGBoost QC-Py-19, diagnostic C.2 + prose alignment -- paths: MyIA.AI.Notebooks/QuantConnect/projects/QC-Py-19-ML-Supervised-Classification.ipynb

    (check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with [RELEASED] when your PR lands.)

  3. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- investigation 3 matrices confusion distinctes meme code XGBoost QC-Py-19, diagnostic C.2 + prose alignment -- paths: MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-19-ML-Supervised-Classification.ipynb

    (check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with [RELEASED] when your PR lands.)

  4. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [INFO] Grain livre en PR #19801 (commit f295589 sur fix/19744-qcpy19-prose-alignment).

    Diagnostic : la sortie committee (cellule 39, execution_count 17) etait deja la mesure reexecutee (Python 3.13.3), mais la prose des cellules 36 et 40 portait encore les valeurs d'origine (3.10/3.11). Accuracy etait reconciliee par hasard (0.7988 des deux cotes), mais Precision/Recall/F1/ROC AUC divergeaient.

    Fix applique : 1 fichier, scope strict cellules 36 et 40 (+33/-28). Le flip de Recall (0.7833 -> 0.8000) change la lecture pedagogique (XGBoost gagne 2/5 metriques au lieu de 1/5, dont le Recall). Titre de la cellule 36 enrichi, verdict de la cellule 40 corrige. Pas de reexecution (la cellule 39 porte deja les bons outputs). Pas de hand-edit d'output (regle 6).

    Verdict C.4 : CAUSE_DOCUMENTED_ONLY. Cause = environnement d'execution (xgboost/sklearn/numpy versions) ; fix canonique = decision policy de la serie QuantConnect/Python, ouverte par #19181. Tant que cette decision n'est pas prise, chaque reexecution deplacera des valeurs.

    Grain: DEEP/QC -- lane myia-ai-01:CoursIA-2 -- prev: MED/tooling c.246 #19786

  5. added a commit that references this issue on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions