Repository Public Research preview
1<!--2Author: Simon-Pierre Boucher3Contact: contact@spboucher.ai4-->56# CHANGELOG — Révision scientifique complète (editorial board, 2026-10-17)78Papier : **WP 7 — The Options-Implied Information Content for Cross-Asset Return and Volatility9Prediction** (`finance/options-implied-cross-asset`, dépôt `wp7_uqo.git`).10État de départ figé : tag `pre-revision-20261017`, PDF `docs/main_pre-revision-20261017.pdf` (29 pages, v1.1).11État d'arrivée : `paper/main.pdf` (53 pages, v1.2, October 2026), `paper/main_anon.pdf`.12Rapport scientifique : `docs/REVIEW-REPORT.md`. Les CSV de résultats remplacés sont conservés dans13`results/_pre-revision-20261017/` (41 fichiers, copie exacte du tag).1415Convention : **C** = correction (erreur démontrée), **A** = ajout/renforcement, **E** = éditorial.1617---1819## 1. Corrections majeures (avant → après, preuve)2021### C1 — Cibles multi-jours mal alignées (erreur de code, affecte toute la partie « weekly » du papier)22- **Où** : `scripts/01_extract_data.py::compute_weekly_rv` (et `06_rq5_ml_rv_forecast.py` pour SPX).23 `ret_5d = daily_return.shift(-1).rolling(5).sum()` : la fenêtre `rolling` est **rétrospective**, donc24 `ret_5d(t) = r_{t-3} + r_{t-2} + r_{t-1} + r_t + r_{t+1}` — quatre termes passés/contemporains sur cinq.25 Idem pour `rv_fwd_5d` et `rv_fwd_22d` (RQ5).26- **Preuve** : `data/processed/realized_vol.parquet` — 100 % des valeurs de `ret_5d` coïncident avec la27 définition fautive, 0,005 % avec la vraie somme forward ; corr(`ret_5d`, `daily_return_t`) = 0,4228 (contrôle exécuté le 2026-10-17, voir REVIEW-REPORT §4.1). `ret_1d` et `rv_fwd_1d` étaient corrects.29- **Correction** : `src/wp7/data_io.py::forward_sum` / `fix_forward_targets` (somme strictement forward30 `sum_{j=1..5} x_{t+j}`, 5 observations exigées) appliquée par défaut dans `load_merged()` ; colonnes31 `ret_5d_legacy`, `rv_fwd_5d_legacy` conservées ; `WP7_LEGACY_TARGETS=1` reproduit v1.1. Parquets livrés **inchangés**.32- **Conséquences chiffrées (v1.1 → v1.2)** :3334| Résultat | v1.1 | v1.2 |35|---|---|---|36| R² rendement 5 j, actions / ETF / indices / tous | 4,76 % / 12,4 % / 19,3 % / 5,29 % | **0,29 % / 0,61 % / 1,01 % / 0,31 %** |37| Tri quintile kurtosis implicite, L/S 5 j | +44,0 %/an, Sharpe 2,33, t = 19,84 | **−6,1 %/an, Sharpe −0,33, t_NW = −1,66** |38| Tri PC volume ratio | −30,3 %, Sharpe −2,48, t = −21,8 | +5,1 %, Sharpe 0,42, t_NW = 2,64 |39| Tri skew 25δ | −37,5 %, Sharpe −1,87 | +5,9 %, Sharpe 0,31, t_NW = 1,54 |40| Double tri IV × skew, cellule High IV/High skew | −47,8 bps/sem. (t = −6,17) | +34,0 bps (t = 2,59) ; différences H−L skew non significatives |41| R² HAR-RV, cible RV 5 j | 0,888 | 0,421 (échantillon commun) |42| R² HAR+IV, cible RV 5 j | 0,896 | 0,515 |43| RQ5 R²_OOS HAR-RV 5 j / 22 j | 0,948 / 0,994 | **retirés** (non recalculables, données brutes absentes) |44| Sous-périodes, R² 5 j | 3,1 %–14,4 % | 0,13 %–4,2 % |45| Régimes VIX, R² 5 j | 2,7 %–19,8 % | 0,11 %–3,0 % |46| Leave-one-year-out, R² 5 j | [4,7 %, 5,7 %] | [0,26 %, 0,53 %] |47| Placebo | 0,0008 vs 0,0529 | 0,0004 vs 0,0031 |48| IC Spearman 5 j kurtosis / PC vol | +0,098 (t 16,8) / −0,059 (t −13,8) | −0,019 (t −3,2) / +0,016 (t 3,9) |49| Winsorisation : t kurtosis sans winsorisation | 13,8 | −0,47 |50| Robustesse SE 5 j : # prédicteurs sig. HC1 / NW(5) / DC | 10 / 9 / 8 | 7 / 4 / 1 |5152### C2 — Inférence des tris et doubles tris53- **Où** : `src/wp7/portfolio.py`. v1.1 : t = moyenne/(σ/√N) sur la série quotidienne de rendements 5 j54 **chevauchants** ; double tri : t calculé en empilant tous les titre-jours d'une cellule (ignore la dépendance55 transversale et le chevauchement).56- **Après** : t Newey–West (h−1 = 4 retards) sur la série de portefeuille ; cellules du double tri = portefeuilles57 quotidiens, t NW sur la série, différences H−L sur séries de différences. L'ancien t est conservé (`t_statistic_iid`).58 Facteur d'inflation mesuré : 1,4–1,8.5960### C3 — Analyse de coûts de transaction61- v1.1 : coûts appliqués au seul tri sur l'implied skewness avec un turnover **supposé** de 2/5 par jour.62- v1.2 : implémentation calendar-time (Jegadeesh–Titman) de **chaque** stratégie (h = 1 et 5) : série63 quotidienne non chevauchante, turnover **mesuré** Σ|W_t − W_{t−1}|, coût de rentabilité nul, Sharpe net à64 5/10/25/50 bps (`portfolio.calendar_time_long_short`, `results/calendar_time_strategies.csv`,65 `transaction_cost_analysis.csv`, Table 8). Seule la stratégie IV ATM garde un Sharpe net positif à 10 bps (0,34, t brut 2,19).6667### C4 — Comparaison de modèles RQ2 sur des échantillons différents + colinéarité exacte68- v1.1 : HAR-RV R² = 0,359 sur 264 345 obs. vs HAR+IV R² = 0,442 sur 119 093 obs. (« +23,3 % ») ;69 « IV only » contenait `iv_atm_30d`, `iv_atm_90d` **et** `iv_term_slope = iv_atm_90d − iv_atm_30d` (dépendance70 linéaire exacte) → prévisions OOS explosives (R²_OOS médian −539, QLIKE 73 606 dans `rq2_oos_results.csv` v1.1,71 jamais rapportées) ; composante journalière HAR = RV_{t−1} au lieu de RV_t ; plancher QLIKE à 1e-10.72- v1.2 : échantillon commun (119 093), RV_t comme composante journalière (éq. HAR du papier), blocs IV sans la pente,73 prévisions plancher = 1er centile de la cible d'entraînement, DM avec variance NW(h) pour les 30 titres (et non74 4 titres choisis parmi 10). Résultat : HAR 0,415 → 0,457 (+9,9 %) à 1 j ; 0,421 → 0,515 (+22,3 %) à 5 j ;75 OOS : MSE ratio médian 0,967, DM > 1,96 pour 14/30, < −1,96 pour 0 ; **QLIKE ratio 1,17, pire pour 15/30**.76- Omission réparée : v1.1 citait AAPL, AMD, CAT, COST (DM positifs) et taisait BA (−39 %, DM −6,4) et CSCO (−34 %, DM −3,8).7778### C5 — RQ3 : design singulier79- v1.1 régressait sur `corr_divergence`, `corr_ratio`, `implied_corr`, `realized_corr` ensemble ;80 `corr_divergence = implied_corr − realized_corr` ⇒ X'X singulier, t « 0,00 » de la divergence = artefact (déjà81 signalé dans AUDIT.md §7). Erreurs-types HC1 sur un indicateur forward chevauchant.82- v1.2 : trois spécifications séparées (ratio ; divergence ; composantes) + VIX + IV SPX, NW(h). Ratio :83 t = 3,27/4,13/2,33 (v1.1 : 4,07/8,30/3,91) ; divergence : 2,14/1,89/1,38. Période explicitée : fév. 2016–déc. 202584 (la corrélation réalisée n'existe qu'à partir de 2016-02-02 ; N = 2 486).8586### C6 — FEVD non orthogonalisée87- v1.1 : « parts » calculées à partir des IRF réduites à chocs unitaires (sans Σ) : 73,8 % à 20 j.88- v1.2 : `econometrics.orthogonalized_irf_fevd` (Cholesky, deux ordres). Part de la variance de RV due aux chocs IV à 20 j :89 **20,2 % (RV d'abord) / 28,5 % (IV d'abord)** ; corrélation résiduelle moyenne 0,20 ; part de IV due à RV < 6 %.9091### C7 — Bibliographie92- `ni2009does` (« Does option trading convey stock price information?, JF 60(3) 2009 ») : titre, revue, volume,93 pages erronés → remplacé par **Ni, Pearson & Poteshman (2005), JFE 78(1), 49–87**, DOI 10.1016/j.jfineco.2004.08.005.94- `barbon2022option` (« JFE 143(1) 316–348 ») : aucune publication trouvée (Crossref) → @unpublished SSRN 3725454.95- DOI ajoutés aux 45 entrées existantes ; titres complétés (Blair et al. 2001, Busch et al. 2011, Driessen et al. 2009,96 Easley et al. 1998, Patton & Sheppard 2015).9798### C8 — Chiffres du texte non reproductibles (signalés dans AUDIT/CHANGES v1.1, désormais régénérés)99- Colonne HC1 de l'ancienne Table « robust_se » (kurtosis 25,87) et distribution R² par titre (5,9 % / 4,7 %)100 ne correspondaient à aucun CSV → toutes les tables sont désormais **générées** par `scripts/14_make_paper_tables.py`.101102---103104## 2. Éditorial et structure (E)105- Toutes les tables du papier (27 fragments `paper/tables/*.tex`) sont générées depuis `results/` ; plus aucun nombre tapé106 à la main (sauf la table d'inventaire des données brutes, figée).107- Introduction réécrite (contribution, résultats, paragraphe « Relation to the previous version ») ; revue de littérature108 restructurée (5 sous-sections, 52 références ajoutées, discussion des résultats contradictoires) ; données109 (univers fixe, biais de survie, proxys ≠ moments BKM, équation des cibles + note de bas de page sur l'erreur) ;110 méthodologie (équations FM, calendar-time, pertes MSE/QLIKE, DM, corrélation implicite dérivée, VAR/FEVD) ;111 résultats, robustesse, discussion, conclusion réécrits sur les nouveaux chiffres ; appendice (univers, crises,112 DM par titre, features SPX, importance RF).113- Résumé, mots-clés, `\WPversion` 1.2, `\WPdate` October 2026 ; `main_anon.tex` régénéré.114- Vocabulaire : « GARCH proxy » → « ARCH-type benchmark » ; « implied skewness/kurtosis » qualifiés de proxys.115116## 3. Références ajoutées (52, toutes vérifiées Crossref — `docs/verify/crossref/*.json|log`)117Bakshi–Kapadia–Madan 2003 (10.1093/rfs/16.1.0101) ; Bakshi–Madan 2000 (10.1016/S0304-405X(99)00050-1) ;118Britten-Jones–Neuberger 2000 (10.1111/0022-1082.00228) ; Jiang–Tian 2005 (10.1093/rfs/hhi027) ;119Dennis–Mayhew 2002 (10.2307/3594989) ; Bali–Hovakimian 2009 (10.1287/mnsc.1090.1063) ; Rehman–Vilkov 2012 (SSRN 1301648) ;120Conrad–Dittmar–Ghysels 2013 (10.1111/j.1540-6261.2012.01795.x) ; Bali–Murray 2013 (10.1017/S0022109013000410) ;121Mixon 2007 (10.1016/j.jempfin.2006.06.003) ; Vasquez 2017 (10.1017/S002210901700076X) ; Borochin–Chang–Wu 2020122(10.1016/j.jempfin.2020.06.003) ; Martin 2017 (10.1093/qje/qjw034) ; Martin–Wagner 2019 (10.1111/jofi.12778) ;123Christoffersen–Jacobs–Chang 2013 (10.1016/B978-0-444-53683-9.00010-4) ; Chakravarty–Gulen–Mayhew 2004124(10.1111/j.1540-6261.2004.00661.x) ; Muravyev–Pearson–Broussard 2013 (10.1016/j.jfineco.2012.09.003) ;125Muravyev–Pearson–Pollet 2025 (10.1016/j.jfineco.2025.104153) ; Ni–Pan–Poteshman 2008 (10.1111/j.1540-6261.2008.01352.x) ;126Ni–Pearson–Poteshman–White 2021 (10.1093/rfs/hhaa082) ; Golez–Jackwerth 2012 (10.1016/j.jfineco.2012.06.010) ;127Baltussen–Da–Lammers–Martens 2021 (10.1016/j.jfineco.2021.04.029) ; Andersen–Bollerslev 1998 (10.2307/2527343) ;128Andersen–Bollerslev–Diebold–Ebens 2001 (10.1016/S0304-405X(01)00055-1) ; Liu–Patton–Sheppard 2015129(10.1016/j.jeconom.2015.02.008) ; Taylor–Yadav–Zhang 2010 (10.1016/j.jbankfin.2009.09.015) ; Prokopczuk–Wese Simen 2014130(10.1016/j.jbankfin.2013.12.002) ; Kourtis–Markellos–Symeonidis 2016 (10.1002/fut.21792) ; Bollerslev–Patton–Quaedvlieg 2016131(10.1016/j.jeconom.2015.10.007) ; Bollerslev 1986 (10.1016/0304-4076(86)90063-1) ; Hansen–Lunde 2005 (10.1002/jae.800) ;132Patton 2011 (10.1016/j.jeconom.2010.03.034) ; Giacomini–White 2006 (10.1111/j.1468-0262.2006.00718.x) ; Clark–West 2007133(10.1016/j.jeconom.2006.05.023) ; Hansen–Lunde–Nason 2011 (10.3982/ECTA5771) ; Poon–Granger 2003 (10.1257/jel.41.2.478) ;134Skintzi–Refenes 2005 (10.1002/fut.20137) ; Pollet–Wilson 2010 (10.1016/j.jfineco.2010.02.011) ; Buraschi–Trojani–Vedolin 2014135(10.1111/jofi.12095) ; Faria–Kosowski–Wang 2022 (10.1016/j.jbankfin.2021.106399) ; Bollerslev–Todorov 2011136(10.1111/j.1540-6261.2011.01695.x) ; Granger 1969 (10.2307/1912791) ; Sims 1980 (10.2307/1912017) ; Kilian–Lütkepohl 2017137(10.1017/9781108164818) ; Hansen–Hodrick 1980 (10.1086/260910) ; Jegadeesh–Titman 1993 (10.1111/j.1540-6261.1993.tb04702.x) ;138Lo 2002 (10.2469/faj.v58.n4.2453) ; Novy-Marx–Velikov 2016 (10.1093/rfs/hhv063) ; Hou–Xue–Zhang 2020 (10.1093/rfs/hhy131) ;139McLean–Pontiff 2016 (10.1111/jofi.12365) ; Chordia–Goyal–Saretto 2020 (10.1093/rfs/hhaa018) ; Ang–Hodrick–Xing–Zhang 2006140(10.1111/j.1540-6261.2006.00836.x).141Références retirées : `ni2009does` (remplacée). Total : 45 → **97 entrées, toutes citées, toutes vérifiées**.142143## 4. Réanalyses exécutées (laptop, Python 3.14 / pandas 3.0.2 / numpy 2.4.4 ; logs `docs/verify/logs-revision/`)144145| Script | Durée | Sorties (results/) |146|---|---|---|147| `02_rq1_return_predictability.py` (cibles corrigées, FM NW(4), coefficients bps, p exactes, Bonferroni) | 6 s | `rq1_regression_results.csv`, `rq1_meta.csv` |148| `03_rq2_rv_forecasting.py` (échantillon commun, modèles non colinéaires, plancher OOS, DM NW 30 titres) | 2 s | `rq2_insample.csv`, `rq2_oos_results.csv`, `rq2_diebold_mariano.csv` |149| `04_rq3_correlation_divergence.py` stage 2 (3 spécifications, NW(h)) | 1 s | `rq3_stress_prediction.csv`, `rq3_crisis_analysis.csv` |150| `05_rq4_greeks_decay_magnets.py` partie B (parquet) | <1 s | `rq4_price_magnet.csv` (inchangé) |151| `07_descriptive_stats.py` (+ panel F via VIX du parquet RQ3) | 1 s | `descriptive_*.csv` (A–G) |152| `08_subperiod_regime.py` (RV : échantillon commun + winsorisation par titre ; régimes VIX recalculés) | 19 s | `subperiod_results.csv`, `regime_results.csv`, `rolling_r2.csv`, `pre_post_covid.csv` |153| `09_portfolio_sorts.py` (t NW, double tri par portefeuilles, calendar-time + coûts) | 37 s | `portfolio_sort_results.csv`, `double_sort_iv_skew.csv`, `calendar_time_strategies.csv`, `transaction_cost_analysis.csv` |154| `10_robustness.py` (+ HC1 et NW(22) dans la table ; VIX<30 recalculé) | 17 s | `robustness_*.csv` |155| `11_granger_var.py` (FEVD Cholesky, deux ordres, corrélation résiduelle) | 3 s | `granger_causality.csv`, `var_results.csv`, `irf_results.csv`, `fevd_results.csv` |156| `13_extended_robustness.py` (cibles corrigées ; LOYO avec HAR et Δ) | 15 s | `extended_*.csv` |157| `14_make_paper_tables.py` (**nouveau**) | 1 s | `paper/tables/*.tex` (27 fragments) |158| `12_make_figures.py` | 2 s | `figures/fig_*.{png,pdf}` (supplémentaires) |159160Durée totale < 2 min. Les sorties v1.1 remplacées sont dans `results/_pre-revision-20261017/`.161162## 5. Non modifié faute de données (données brutes DuckDB absentes)163- `rq4_greeks_decay.csv` (RQ4 partie A) : conservé tel quel ; cibles 1 j correctes ; le papier ne rapporte plus que R² et t(IV)164 (les t des autres grecques, ±150, traduisent une colinéarité).165- `rq5_model_comparison.csv`, `rq5_feature_importance.csv` : seules les lignes 1 j (VIX, HAR, RF, GBM) sont rapportées ;166 lignes OLS surface (MSE 1e60, colinéarité exacte) et cibles 5/22 j (erreur C1) retirées du papier. Le code de `06` est corrigé167 (cibles forward, RV_t) mais n'a pas pu être relancé.168- `descriptive_options_quality.csv` (panel H) : inchangé.169- Table d'inventaire des données brutes (`tab:data`) : chiffres figés de l'extraction originale.170171## 6. Fichiers dépôt172- Nouveaux : `scripts/14_make_paper_tables.py`, `paper/tables/`, `results/calendar_time_strategies.csv`,173 `results/_pre-revision-20261017/`, `docs/REVIEW-REPORT.md`, `docs/CHANGELOG-REVISION.md`,174 `docs/verify/logs-revision/`, `docs/verify/crossref/`.175- Modifiés : `src/wp7/{config,data_io,econometrics,forecasting,portfolio}.py`, `scripts/02,03,04,06,08,09,10,11,13`,176 toutes les sections LaTeX, `references.bib`, `main.tex`, `main_anon.tex`, `preamble.tex`, `README.md`.177- Inchangés : `data/processed/*.parquet`, `paper/sections/titlepage*.tex`, `docs/AUDIT.md`, `docs/CHANGES.md`,178 `docs/verify/{logs,results}` (v1.1).179