SPB Git forge

spb/wp17_uqo

Public
2commits 1branches 1releases
19.9 MBsize
maindefault branch
21 min agolast push
TeX 74.5% Python 25.4%
11.0 KB

# 🧠 Does the Language of Artificial Intelligence Move Markets?

UQO Working Paper No. 17 — A Semantic Analysis of S&P 500 SEC Filings and the Cross-Section of Stock Returns, 2010–2026

Paper Python Data Reproducible Institution Authors

TL;DR — We embed the full text of every S&P 500 annual report (Form 10-K, fiscal years 2010–2026) with a sentence transformer and score each passage by cosine similarity to curated AI “anchor” concepts (internal adoption, infrastructure exposure, product-disruption risk). Linked to look-ahead-free forward returns, the panel of 7,869 firm-years shows a conditional, economically large effect: the top-minus-bottom quintile spread in AI-disclosure intensity rises from +2.4 pp/yr before ChatGPT to +14.6 pp/yr after (long-short Sharpe 0.15 → 1.33), survives exclusion of the Magnificent 7, is AI-specific in a five-factor placebo (ESG and climate spreads turn negative), and shows up as +10.1 % cumulative abnormal return (t = 1.97) for high-AI firms in the year after the ChatGPT launch. The repricing is cross-sectional and regime-dependent: the market re-rated which firms and sectors are AI-exposed once AI became salient.


# 📌 Status

Item Value
Version 1.0 (June 2026) — main.tex reconstructed 2026-10-17
SSRN not yet submitted
Journal — (draft)
Code & data reproducible from scripts/ on the committed processed panel (data/processed/, 19 MB); raw 10-K embeddings come from the EDGAR Research Database (not redistributed)

# 🎯 What this paper does

Did the language of AI in firms' mandatory disclosures carry information about their subsequent stock returns, when did that information begin to be priced, and through which channel? Three ingredients are combined: a machine-readable 10-K corpus (EDGAR Research Database), a semantic measurement technology (sentence embeddings scored against AI anchor concepts, section-weighted), and a clean look-ahead-free mapping from fiscal-year disclosure to tradeable forward returns (July Y+1 → June Y+2).

text
r_{i,Y+1} = α + β · AI_{i,Y} + γ' X_{i,Y} + δ · (AI_{i,Y} × Post-ChatGPT) + ε_{i,Y+1}

Signals: AI_ADOPT (internal AI use), AI_INFRA (compute / capex exposure), AI_RISK (product-disruption risk), AI_COMPOS = z(ADOPT) + z(INFRA). Methods: within-year z-scoring, quintile portfolio sorts (EW/VW, raw and market-adjusted) with Newey–West t-statistics, FF5 + momentum alphas, two-way fixed-effects panels with double-clustered errors, Fama–MacBeth, and a post-ChatGPT (30 November 2022) structural-break interaction.

# 🏆 Headline results

Object Estimate
Panel 7,869 firm-years, 500 firms, FY 2010–2026 (estimation sample 6,852 firm-years, 497 firms)
Q5–Q1 forward-return spread, pre- / post-ChatGPT +2.4 pp/yr → +14.6 pp/yr
Long-short Sharpe, pre / post 0.15 → 1.33
Full-sample risk-adjusted long-short alpha ≈ 2 %/yr, insignificant
Event study: ChatGPT launch, high- vs low-AI firms, 1-year CAR +10.1 % (t = 1.97)
Placebo (5 non-AI semantic factors) post-2022 jump specific to AI; ESG / climate spreads negative
Magnificent 7 excluded break unchanged
Firm fixed effects / sector fixed effects effect absorbed / roughly halved → cross-sectional re-rating

# 🗂 Repository layout

text
ai-disclosure-stock-returns/
├── data/processed/           # analysis_panel, merged_panel, prices, market caps, FF5, event CARs (parquet, 19 MB, committed)
├── scripts/                  # the pipeline, in order
│   ├── 01_download_prices.py     # monthly prices (500 tickers), SPY, market caps
│   ├── 02_build_panel.py         # look-ahead-free forward returns (July formation) + controls
│   ├── 03_analysis.py            # sorts, FF6 alphas, two-way FE, Fama–MacBeth, post-ChatGPT break
│   ├── 04_figures.py             # figures 1–5
│   ├── 05_make_tables.py         # LaTeX tables (core)
│   ├── 06_extended.py            # placebo, sector-neutral / double sorts, Mag-7 exclusion, PCA, DiD
│   ├── 07_event_study.py         # ChatGPT market-model event study
│   ├── 08_figures_ext.py         # figures 6–13
│   └── 09_make_tables_ext.py     # LaTeX tables (extended)
├── results/tables/           # results*.json + CSV tables emitted by the scripts
├── figures/                  # 13 publication figures (PNG, 200 dpi)
├── docs/                     # original June 2026 report (full + short), analysis README
└── paper/                    # main.tex + sections/ + tables/ + figures/ + appendix/ + references.bib → main.pdf

# 🚀 Quick start

bash
python3 -m pip install -r requirements.txt

# scripts read/write relative to the repository root
python3 scripts/01_download_prices.py      # needs network (Yahoo Finance) — skip if data/processed/ is present
python3 scripts/02_build_panel.py
python3 scripts/03_analysis.py
python3 scripts/06_extended.py
python3 scripts/07_event_study.py
python3 scripts/04_figures.py && python3 scripts/08_figures_ext.py     # → figures/
python3 scripts/05_make_tables.py && python3 scripts/09_make_tables_ext.py   # → paper/tables/

cd paper && make                           # latexmk → main.pdf

Runtime ≈ 3 minutes on an Apple-silicon laptop from the processed panel.

# 🗃 Data

  • Disclosure signals: section-weighted cosine similarity of 10-K passages to AI anchor concepts, computed in the EDGAR Research Database (~/Desktop/UQO/UQO_RESEARCH_DB, sentence-transformer embeddings of every S&P 500 10-K, FY 2010–2026). Only the firm-year scores enter this repository.
  • Prices and factors: monthly prices and market capitalisations for the 500 constituents and SPY (Yahoo Finance), Fama–French five factors and momentum (Kenneth French data library).
  • Timing: fiscal-year Y disclosure → forward 12-month return July (Y+1) to June (Y+2), strictly tradeable.
  • Sample cascade: 7,869 firm-years → 6,852 firm-years (497 firms) with non-missing forward returns and controls (Table 1 of the paper).

# 🔬 Methodology

  1. Signal construction (02_build_panel.py): within-year z-scores of the three anchors and the composite; controls (momentum, volatility, log market cap).
  2. Portfolio sorts (03_analysis.py): quintiles, EW/VW, raw and market-adjusted, Newey–West inference; long-short spread regressed on FF5 + momentum.
  3. Panel and Fama–MacBeth (03_analysis.py): two-way fixed effects with double-clustered errors; year-by-year cross-sectional slopes.
  4. Structural break (03_analysis.py, 06_extended.py): post-ChatGPT interaction, DiD in event time, sector-neutral and double sorts, Magnificent-7 exclusion, alternative signals/horizons, PCA.
  5. Placebo (06_extended.py): five non-AI semantic factors (incl. ESG, climate) through the same pipeline.
  6. Event study (07_event_study.py): market-model CARs around 30 November 2022, binscatter on pre-event AI intensity.

# 🖼 Figures & tables inventory

Figure Content
fig1_quintile_returns forward returns by AI-disclosure quintile
fig2_cumulative_ls cumulative long-short returns by signal
fig3_annual_spread Q5–Q1 spread by formation year
fig4_ai_language_trend AI-language intensity over time
fig5_binscatter forward return vs AI intensity
fig6_fm_byyear Fama–MacBeth slopes by year
fig7_placebo AI vs five placebo semantic factors
fig8_event_car cumulative abnormal returns around ChatGPT
fig9_double_sort double sorts pre/post
fig10_mag7 Magnificent-7 exclusion
fig11_eventtime DiD in event time
fig12_sector_box AI intensity by sector
fig13_event_binscatter 1-year CAR vs pre-event AI intensity

Tables (paper/tables/*.tex): summary statistics, correlations, top firms, portfolio sorts, alphas, panel, structural break, double sorts, placebo, event study, DiD, robustness.

# ⚠️ Limitations

  • Anchor concepts embed the authors' definitional choices; alternative anchors are explored but not exhaustive.
  • S&P 500 constituents only (large caps); survivorship handled through point-in-time membership but results may not extend to small caps.
  • The post-ChatGPT window is short (2023–2026 formation years); the break is identified on few annual cross-sections.
  • Prices from Yahoo Finance (adjusted closes) rather than CRSP.

# 📝 Citation

bibtex
@techreport{kammoun2026ailanguage,
  author      = {Kammoun, Manel and Tandjambianda, Djerrycharli and Boucher, Simon-Pierre},
  title       = {Does the Language of Artificial Intelligence Move Markets? A Semantic Analysis of S\&P~500 SEC Filings and the Cross-Section of Stock Returns, 2010--2026},
  institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
  type        = {Working Paper},
  number      = {17},
  year        = {2026},
  month       = {June}
}

# 👤 Authors & contact

Manel Kammoun, Djerrycharli Tandjambianda, Simon-Pierre Boucher — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC. 📧 manel.kammoun@uqo.ca · djerrycharli.tandjambianda@uqo.ca · simon-pierre.boucher@uqo.ca

# 🗒 Notes

  • Reconstruction (2026-10-17): the working-paper main.tex of the June 2026 draft (former folder UQO_WP_SPB_MK_CT) had been lost; it was rebuilt from Recherche-UQO/_modele-working-paper/main.tex with title, abstract, keywords and JEL taken from the original report (docs/original_report_full_2026-06.tex). The 13 figures were regenerated from the committed panel with scripts/04_figures.py and 08_figures_ext.py. Sections, tables and appendix are untouched.
  • Deviations from the standard: three author e-mails on the cover (\WPemail holds three \hrefs, the title page prints \WPemail directly); the long abstract is single-spaced so that Keywords and JEL stay on page 2; data/processed/*.parquet (19 MB) is committed because it is the only reproducible input outside the EDGAR Research Database.
  • Macros \tstat and \tablelegend (used by sections and tables) are defined in main.tex.