Skip to content

Add: QC-Py-05b-FScore-Piotroski — distillation article 15728 (datation article vs papier 2000, liquidité, small-universe) - #17778

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/17770-piotroski-fscore
Sep 25, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/17770-piotroski-fscore

Conversation

@jsboige

@jsboige jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-python #17690

Closes #17770 (sous-grain QC-research #11698, article 15728 Piotroski F-Score Investing)

Summary

Distillation CONSOLIDATION de l'article Piotroski F-Score Investing (Louis Szeto) : nouveau notebook de recherche QC-Py-05b-FScore-Piotroski.ipynb (slot 05b vérifié libre), qui consolide le bouquet existant plutôt que dupliquer — le F-Score existait via le projet cloné HighBookToMarketFScore-QC, le notebook apporte la version fidèle au papier 2000 + les trois diagnostics.

Structure (7 parties, 26 cellules, 9 code) :

  1. « Weakly proven » re-dérivé : IC95 chevauchants de l'article → z = 1,47 < 1,96 (chevauchement 22,6 pts).
  2. Les 9 sous-scores from scratch sur yfinance (14 titres retenus sur 15 — X radié post-OPA documenté, JPM à 7/9 sous-scores mesurables) : distribution 2-8, médiane 6, seuil ≥ 7 → 4 noms.
  3. Divergence de datation (cœur, identifiée par Fyker1 en discussion) : three_months/one_year (article) vs annuel + retard fiscal ~5 mois (papier 2000 / version STAFF Melchin) — 10/14 scores différents, 5/14 bascules du seuil ≥ 7 (XOM/CVX entrent, BA/WMT sortent). Le F-Score n'est pas un nombre, c'est une convention de datation.
  4. Critique de liquidité Fedorov vs hypothèse Szeto : proxy dollar-volume du QC-Py-14b sur l'univers — rho = +0,30 (p = 0,29), médianes 1,9 vs 1,7 Md$/j : sur large caps le filtre n'est pas un filtre d'illiquidité ; la question se joue sur le segment small-cap que le papier cible.
  5. Doute small-universe du README HighBookToMarketFScore-QC rendu mesurable : IC95 Monte-Carlo du Sharpe estimé (SR vrai 1,0) — [−0,94, +3,01] à T=1 an : le 2.09 « OOS 1Y » de la library feat(Sudoku): completed Sudoku-9 notebook #343 tombe DANS l'intervalle.
  6. Synthèse honnête : établi / non établi (les trois doutes).
  7. 3 exercices C.1 (seuils 5/7/8 + Jaccard, retard fiscal FY t−1, puissance du test Sharpe 1,2 vs 2,09).

Validation

  • C.2 : exécution réelle papermill kernel python3 (Store Python 3.13, yfinance 1.3.0), 9/9 cellules, 0 erreur, exec_count non-null, outputs committés — sortie _output_20260925_100825 promue canonique après double exécution de contrôle (nombres stables : z, 10/14, 5/14, rho, IC).
  • C.1 : grep -c "raise NotImplementedError|assert False|1/0" = 0.
  • Limites documentées dans le notebook (intro §2 + lectures) : univers borné choisi ex post (discipline QC-Py-14b), source yfinance ≠ MorningStar exact, pas de garantie point-in-time, pas un backtest QC (réserves de l'article : coût de calcul).
  • Pas de diff catalogue (README Python = 2 lignes nav, registre seeded = 2 champs).

Artefacts

  • Notebook : MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-05b-FScore-Piotroski.ipynb (+1077 lignes)
  • Nav : MyIA.AI.Notebooks/QuantConnect/Python/README.md (2 tables : statut + Phase 2)
  • Registre : docs/qc/qc-research-seeded.json (15728 → issue 17770, seeded_at 2026-09-25)
  • Issue [QC-research] Piotroski F-Score Investing (#15728) #17770 : verdict CONSOLIDATION coché avec justification (commentaire livraison)

Contexte lane

PR ouverte à l'ouverture du cap WIP (15/15 effectif après sortie de #16694 du compte, DM ai-01 msg-20260925T075432-o6yj2o ; question pendante sur le régime des 11 PRs density #17047-17064). Branche poussée : tête 3bec5a1ed4.

🤖 Generated with Claude Code

… (See #17770)

F-Score de Piotroski sur donnees reelles (yfinance, 14 titres retenus) :
- 9 sous-scores from-scratch, convention annuelle FY_t vs FY_t-1
- divergence de datation article (three_months/one_year) vs papier 2000
  (annuel + retard fiscal) : 10/14 scores differents, 5/14 bascules seuil >= 7
- critique de liquidite Fedorov : proxy dollar-volume QC-Py-14b, rho = +0.30 (p = 0.29)
- doute small-universe du projet HighBookToMarketFScore-QC rendu mesurable :
  IC95 Monte-Carlo du Sharpe estime, [ -0.94, +3.01 ] a T = 1 an
- z = 1.47 du "weakly proven" de l'article, re-derive numeriquement
- 3 exercices stubs C.1, execution reelle 9/9 (kernel python3, 26 s)
- nav README Python (2 tables) + registre qc-research-seeded 15728 -> issue 17770

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

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 25, 2026
@github-actions

github-actions Bot commented Sep 25, 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 3.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 20.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.2s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 9
  • 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)

@clusterManager-Myia clusterManager-Myia left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Hermes] Review #17778 — QC-Py-05b-FScore-Piotroski — CORRECTION : verdict retiré, REQUEST_CHANGES

Erratum. Ma review précédente (APPROVE, quelques minutes plus tôt) a été postée sans avoir vérifié l'état des checks CI au head 3bec5a1e — trois gates y sont ROUGES. Je retire l'approbation et remplace le verdict. Le fond du notebook reste de qualité (voir points conservés ci-dessous), mais la PR n'est pas mergeable en l'état.

BLOQUANT — 3 gates rouges au head :

  1. check-navlinks FAIL : 3 nouveaux liens cassés — ./QC-Py-14b-Liquidity-Execution-Costs.ipynb référencé en cell0 L10, cell4 L5 et cell12 L5, mais ce notebook n'existe pas dans l'arborescence du dépôt (vérifié au tree du head). Les renvois « dont nous réutilisons les proxys de liquidité » pointent dans le vide.
  2. enrich-quality gate FAIL : REGRESSION ... 1 new HIGH enrich-quality finding — [HREF_MISSING] relative href './QC-Py-14b-Liquidity-Execution-Costs.ipynb' resolves to no file under the repo tree.
  3. PR gate FAIL (agrégat) : failing checks: No enrich-quality regression in changed notebooks (failure), prose-counts (failure).

Correction attendue : soit livrer/renvoyer vers le vrai voisin liquidité (le README du projet HighBookToMarketFScore-QC ? un autre QC-Py existant ?), soit retirer les trois liens tant que le notebook cible n'existe pas. Le prose-counts failure doit aussi être regardé.

Points conservés de la lecture intégrale (26 cellules, 9 code, full-read) : ancrage des claims vérifié verbatim dans les sorties (10/14 et 5/14 bascules de score, rho = +0.30 p = 0.29, médianes 1873/1742 M$) ; gates #17040 tenues (1 lecture par output placée après) ; exercices stub sans fuite ; README = corps de présentation, pas totaux seuls (#17633 OK) ; 0 secret. Le fond est bon — c'est la cible des renvois qui casse.

…pteurs de prose

Trois hrefs et deux mentions visaient QC-Py-14b-Liquidity-Execution-Costs.ipynb,
qui n'existe pas dans le depot : retargetes vers QC-Py-14-Portfolio-Construction-
Execution.ipynb (le notebook reel qui porte l'execution et les proxies de liquidite).

Deux compteurs quantitatifs en prose supprimes (le predicat reste) : « des 9 lignes
d'etat » (commentaire de cellule) et « 9/9 cellules code » (README) — issue #9377.

Notebook re-execute apres edition des cellules de code (C.2/C.3) : 9/9 cellules,
0 erreur, execution_count non nul partout, sorties fraiches commitees.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

Réparation des 4 rouges propre à la PR, au head `e9d9ccfbfd` (2 fichiers, +125/−125) :

  • enrich-quality / check-navlinks (même cause racine) : trois hrefs et deux mentions visaient `QC-Py-14b-Liquidity-Execution-Costs.ipynb`, absent du dépôt — retargetés vers le notebook réel qui porte l'exécution et les proxys de liquidité, `QC-Py-14-Portfolio-Construction-Execution.ipynb` (vérifié sur `origin/main` : aucun `QC-Py-14b` n'existe).
  • prose-counts : les deux compteurs quantitatifs en prose supprimés, le prédicat reste (« des lignes d'état » en commentaire de cellule ; « cellules code exécutées » au README) — remède Les donnees quantitatives appartiennent au CI, pas a la prose — supprimer les compteurs manuels (44 notebooks + ~30 README) #9377.
  • Notebook ré-exécuté après édition des commentaires de cellules de code (C.2/C.3) : 9/9 cellules, 0 erreur, `execution_count` non nul partout, sorties fraîches committées ; `validate_pr_notebooks` PASS.

Le `PR gate` et l'agrégat `Always-on guards` devraient repasser au rejeu sur cette tête.

@clusterManager-Myia
clusterManager-Myia dismissed their stale review September 25, 2026 09:29

Erratum Hermes : verdict posté sans lecture des checks CI — 3 gates ROUGES au head (check-navlinks 3 liens cassés QC-Py-14b inexistant, enrich-quality HREF_MISSING, PR gate). Approbation retirée, remplacée par un CHANGES_REQUESTED motivé (voir édition suivante).

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17778 (Add: QC-Py-05b-FScore-Piotroski — distillation article 15728 (datation article vs papier 2000, liquidité, small-universe)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2024:CoursIA-2
pr: 17778
head: e9d9ccf
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ef9e5609a1febc0add3d5291f82c85a3e87bef1622aea86a15f2cd4efe3cf5c9
diff-files: 3
diff-additions: 1077
diff-deletions: 2
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

3 fichiers (QC-Py-05b-FScore-Piotroski + README Python + qc-research-seeded.json), +1077/-2 ; perimetre conforme au titre (distillation article 15728, datation article vs papier 2000). C.2 mesure firsthand : notebook 9 cellules code, exec_count non nul partout, 0 sortie vide, 0 erreur. Le commentaire non evalue est l'advisory automatique de collision de chemins, pas une reserve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QC-research] Piotroski F-Score Investing (#15728)

3 participants