🧠 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
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).
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
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
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.pdfRuntime ≈ 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
- Signal construction (
02_build_panel.py): within-year z-scores of the three anchors and the composite; controls (momentum, volatility, log market cap). - Portfolio sorts (
03_analysis.py): quintiles, EW/VW, raw and market-adjusted, Newey–West inference; long-short spread regressed on FF5 + momentum. - Panel and Fama–MacBeth (
03_analysis.py): two-way fixed effects with double-clustered errors; year-by-year cross-sectional slopes. - 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. - Placebo (
06_extended.py): five non-AI semantic factors (incl. ESG, climate) through the same pipeline. - 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
@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.texof the June 2026 draft (former folderUQO_WP_SPB_MK_CT) had been lost; it was rebuilt fromRecherche-UQO/_modele-working-paper/main.texwith 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 withscripts/04_figures.pyand08_figures_ext.py. Sections, tables and appendix are untouched. - Deviations from the standard: three author e-mails on the cover (
\WPemailholds three\hrefs, the title page prints\WPemaildirectly); 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
\tstatand\tablelegend(used by sections and tables) are defined inmain.tex.