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%

harmonisation standard UQO WP (2026-10-17)

WP 17 : main.tex reconstruit sur le gabarit (3 auteurs, cover WP 17, aer), WP/ → paper/, analysis/ → scripts/, data/processed, results/, figures/ (13 figures régénérées), README et .gitignore standard.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 h ago (Oct 17, 2026)

98 changed files +5,630 −0

added .gitignore +38 −0
@@ -0,0 +1,38 @@
1 +# Raw & processed data — never committed (see data/raw/README.md for provenance)
2 +data/raw/*
3 +!data/raw/README.md
4 +data/processed/*
5 +!data/processed/.gitkeep
6 +
7 +# Python
8 +__pycache__/
9 +*.pyc
10 +.pytest_cache/
11 +.venv/
12 +*.egg-info/
13 +
14 +# LaTeX build artifacts (paper/main.pdf IS committed)
15 +paper/*.aux
16 +paper/*.log
17 +paper/*.out
18 +paper/*.toc
19 +paper/*.lof
20 +paper/*.lot
21 +paper/*.fls
22 +paper/*.fdb_latexmk
23 +paper/*.bbl
24 +paper/*.blg
25 +paper/*.spl
26 +paper/*.synctex.gz
27 +paper/*.run.xml
28 +paper/*.bcf
29 +
30 +# Logs
31 +logs/
32 +*.log
33 +
34 +# macOS
35 +.DS_Store
36 +
37 +# WP 17: the processed firm-year panel (19 MB) is committed on purpose (see README Notes)
38 +!data/processed/*.parquet
added README.md +179 −0
@@ -0,0 +1,179 @@
1 +<!-- Authors: Manel Kammoun, Djerrycharli Tandjambianda, Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca -->
2 +# 🧠 Does the Language of Artificial Intelligence Move Markets?
3 +
4 +**UQO Working Paper No. 17** — *A Semantic Analysis of S&P 500 SEC Filings and the Cross-Section of Stock Returns, 2010–2026*
5 +
6 +[![Paper](https://img.shields.io/badge/paper-PDF%20(39%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
7 +[![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt)
8 +[![Data](https://img.shields.io/badge/data-7%2C869%20firm--years%20·%20500%20S%26P%20500%20firms%20·%2010--K%20embeddings-4051b5)](data/processed/)
9 +[![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline%20(9%20scripts)-2e7d32)](scripts/)
10 +[![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)
11 +[![Authors](https://img.shields.io/badge/authors-Kammoun%20·%20Tandjambianda%20·%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)
12 +
13 +> **TL;DR** — We embed the full text of every S&P 500 annual report (Form 10-K, fiscal years
14 +> 2010–2026) with a sentence transformer and score each passage by cosine similarity to curated AI
15 +> “anchor” concepts (internal adoption, infrastructure exposure, product-disruption risk). Linked to
16 +> look-ahead-free forward returns, the panel of 7,869 firm-years shows a **conditional, economically
17 +> large** effect: the top-minus-bottom quintile spread in AI-disclosure intensity rises from
18 +> **+2.4 pp/yr before ChatGPT to +14.6 pp/yr after** (long-short Sharpe 0.15 → 1.33), survives
19 +> exclusion of the Magnificent 7, is AI-specific in a five-factor placebo (ESG and climate spreads turn
20 +> *negative*), and shows up as **+10.1 % cumulative abnormal return** (t = 1.97) for high-AI firms in
21 +> the year after the ChatGPT launch. The repricing is cross-sectional and regime-dependent: the
22 +> market re-rated *which firms and sectors* are AI-exposed once AI became salient.
23 +
24 +---
25 +
26 +## 📌 Status
27 +
28 +| Item | Value |
29 +|---|---|
30 +| Version | 1.0 (June 2026) — `main.tex` reconstructed 2026-10-17 |
31 +| SSRN | not yet submitted |
32 +| Journal | — (draft) |
33 +| 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) |
34 +
35 +## 🎯 What this paper does
36 +
37 +Did the *language* of AI in firms' mandatory disclosures carry information about their subsequent
38 +stock returns, when did that information begin to be priced, and through which channel? Three
39 +ingredients are combined: a machine-readable 10-K corpus (EDGAR Research Database), a semantic
40 +measurement technology (sentence embeddings scored against AI anchor concepts, section-weighted),
41 +and a clean look-ahead-free mapping from fiscal-year disclosure to tradeable forward returns
42 +(July Y+1 → June Y+2).
43 +
44 +```
45 +r_{i,Y+1} = α + β · AI_{i,Y} + γ' X_{i,Y} + δ · (AI_{i,Y} × Post-ChatGPT) + ε_{i,Y+1}
46 +```
47 +
48 +Signals: `AI_ADOPT` (internal AI use), `AI_INFRA` (compute / capex exposure), `AI_RISK`
49 +(product-disruption risk), `AI_COMPOS` = z(ADOPT) + z(INFRA). Methods: within-year z-scoring,
50 +quintile portfolio sorts (EW/VW, raw and market-adjusted) with Newey–West t-statistics, FF5 +
51 +momentum alphas, two-way fixed-effects panels with double-clustered errors, Fama–MacBeth, and a
52 +post-ChatGPT (30 November 2022) structural-break interaction.
53 +
54 +## 🏆 Headline results
55 +
56 +| Object | Estimate |
57 +|---|---|
58 +| Panel | 7,869 firm-years, 500 firms, FY 2010–2026 (estimation sample 6,852 firm-years, 497 firms) |
59 +| Q5–Q1 forward-return spread, pre- / post-ChatGPT | **+2.4 pp/yr → +14.6 pp/yr** |
60 +| Long-short Sharpe, pre / post | 0.15 → 1.33 |
61 +| Full-sample risk-adjusted long-short alpha | ≈ 2 %/yr, insignificant |
62 +| Event study: ChatGPT launch, high- vs low-AI firms, 1-year CAR | **+10.1 %** (t = 1.97) |
63 +| Placebo (5 non-AI semantic factors) | post-2022 jump specific to AI; ESG / climate spreads negative |
64 +| Magnificent 7 excluded | break unchanged |
65 +| Firm fixed effects / sector fixed effects | effect absorbed / roughly halved → cross-sectional re-rating |
66 +
67 +## 🗂 Repository layout
68 +
69 +```
70 +ai-disclosure-stock-returns/
71 +├── data/processed/ # analysis_panel, merged_panel, prices, market caps, FF5, event CARs (parquet, 19 MB, committed)
72 +├── scripts/ # the pipeline, in order
73 +│ ├── 01_download_prices.py # monthly prices (500 tickers), SPY, market caps
74 +│ ├── 02_build_panel.py # look-ahead-free forward returns (July formation) + controls
75 +│ ├── 03_analysis.py # sorts, FF6 alphas, two-way FE, Fama–MacBeth, post-ChatGPT break
76 +│ ├── 04_figures.py # figures 1–5
77 +│ ├── 05_make_tables.py # LaTeX tables (core)
78 +│ ├── 06_extended.py # placebo, sector-neutral / double sorts, Mag-7 exclusion, PCA, DiD
79 +│ ├── 07_event_study.py # ChatGPT market-model event study
80 +│ ├── 08_figures_ext.py # figures 6–13
81 +│ └── 09_make_tables_ext.py # LaTeX tables (extended)
82 +├── results/tables/ # results*.json + CSV tables emitted by the scripts
83 +├── figures/ # 13 publication figures (PNG, 200 dpi)
84 +├── docs/ # original June 2026 report (full + short), analysis README
85 +└── paper/ # main.tex + sections/ + tables/ + figures/ + appendix/ + references.bib → main.pdf
86 +```
87 +
88 +## 🚀 Quick start
89 +
90 +```bash
91 +python3 -m pip install -r requirements.txt
92 +
93 +# scripts read/write relative to the repository root
94 +python3 scripts/01_download_prices.py # needs network (Yahoo Finance) — skip if data/processed/ is present
95 +python3 scripts/02_build_panel.py
96 +python3 scripts/03_analysis.py
97 +python3 scripts/06_extended.py
98 +python3 scripts/07_event_study.py
99 +python3 scripts/04_figures.py && python3 scripts/08_figures_ext.py # → figures/
100 +python3 scripts/05_make_tables.py && python3 scripts/09_make_tables_ext.py # → paper/tables/
101 +
102 +cd paper && make # latexmk → main.pdf
103 +```
104 +
105 +Runtime ≈ 3 minutes on an Apple-silicon laptop from the processed panel.
106 +
107 +## 🗃 Data
108 +
109 +- **Disclosure signals**: section-weighted cosine similarity of 10-K passages to AI anchor concepts, computed in the
110 + EDGAR Research Database (`~/Desktop/UQO/UQO_RESEARCH_DB`, sentence-transformer embeddings of every S&P 500 10-K,
111 + FY 2010–2026). Only the firm-year scores enter this repository.
112 +- **Prices and factors**: monthly prices and market capitalisations for the 500 constituents and SPY (Yahoo Finance),
113 + Fama–French five factors and momentum (Kenneth French data library).
114 +- **Timing**: fiscal-year Y disclosure → forward 12-month return July (Y+1) to June (Y+2), strictly tradeable.
115 +- Sample cascade: 7,869 firm-years → 6,852 firm-years (497 firms) with non-missing forward returns and controls
116 + (Table 1 of the paper).
117 +
118 +## 🔬 Methodology
119 +
120 +1. **Signal construction** (`02_build_panel.py`): within-year z-scores of the three anchors and the composite; controls (momentum, volatility, log market cap).
121 +2. **Portfolio sorts** (`03_analysis.py`): quintiles, EW/VW, raw and market-adjusted, Newey–West inference; long-short spread regressed on FF5 + momentum.
122 +3. **Panel and Fama–MacBeth** (`03_analysis.py`): two-way fixed effects with double-clustered errors; year-by-year cross-sectional slopes.
123 +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.
124 +5. **Placebo** (`06_extended.py`): five non-AI semantic factors (incl. ESG, climate) through the same pipeline.
125 +6. **Event study** (`07_event_study.py`): market-model CARs around 30 November 2022, binscatter on pre-event AI intensity.
126 +
127 +## 🖼 Figures & tables inventory
128 +
129 +| Figure | Content |
130 +|---|---|
131 +| `fig1_quintile_returns` | forward returns by AI-disclosure quintile |
132 +| `fig2_cumulative_ls` | cumulative long-short returns by signal |
133 +| `fig3_annual_spread` | Q5–Q1 spread by formation year |
134 +| `fig4_ai_language_trend` | AI-language intensity over time |
135 +| `fig5_binscatter` | forward return vs AI intensity |
136 +| `fig6_fm_byyear` | Fama–MacBeth slopes by year |
137 +| `fig7_placebo` | AI vs five placebo semantic factors |
138 +| `fig8_event_car` | cumulative abnormal returns around ChatGPT |
139 +| `fig9_double_sort` | double sorts pre/post |
140 +| `fig10_mag7` | Magnificent-7 exclusion |
141 +| `fig11_eventtime` | DiD in event time |
142 +| `fig12_sector_box` | AI intensity by sector |
143 +| `fig13_event_binscatter` | 1-year CAR vs pre-event AI intensity |
144 +
145 +Tables (`paper/tables/*.tex`): summary statistics, correlations, top firms, portfolio sorts, alphas, panel,
146 +structural break, double sorts, placebo, event study, DiD, robustness.
147 +
148 +## ⚠️ Limitations
149 +
150 +- Anchor concepts embed the authors' definitional choices; alternative anchors are explored but not exhaustive.
151 +- S&P 500 constituents only (large caps); survivorship handled through point-in-time membership but results may not extend to small caps.
152 +- The post-ChatGPT window is short (2023–2026 formation years); the break is identified on few annual cross-sections.
153 +- Prices from Yahoo Finance (adjusted closes) rather than CRSP.
154 +
155 +## 📝 Citation
156 +
157 +```bibtex
158 +@techreport{kammoun2026ailanguage,
159 + author = {Kammoun, Manel and Tandjambianda, Djerrycharli and Boucher, Simon-Pierre},
160 + 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},
161 + institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
162 + type = {Working Paper},
163 + number = {17},
164 + year = {2026},
165 + month = {June}
166 +}
167 +```
168 +
169 +## 👤 Authors & contact
170 +
171 +**Manel Kammoun**, **Djerrycharli Tandjambianda**, **Simon-Pierre Boucher** — Département des sciences administratives,
172 +Université du Québec en Outaouais (UQO), Gatineau, QC.
173 +📧 [manel.kammoun@uqo.ca](mailto:manel.kammoun@uqo.ca) · [djerrycharli.tandjambianda@uqo.ca](mailto:djerrycharli.tandjambianda@uqo.ca) · [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca)
174 +
175 +## 🗒 Notes
176 +
177 +- **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.
178 +- Deviations from the standard: three author e-mails on the cover (`\WPemail` holds three `\href`s, 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.
179 +- Macros `\tstat` and `\tablelegend` (used by sections and tables) are defined in `main.tex`.
added data/processed/analysis_panel.parquet +0 −0

Binary file not shown.

added data/processed/event_car.parquet +0 −0

Binary file not shown.

added data/processed/event_car_paths.parquet +0 −0

Binary file not shown.

added data/processed/ff5_monthly.parquet +0 −0

Binary file not shown.

added data/processed/ls_ts_AI_ADOPT.parquet +0 −0

Binary file not shown.

added data/processed/ls_ts_AI_COMPOS.parquet +0 −0

Binary file not shown.

added data/processed/ls_ts_AI_INFRA.parquet +0 −0

Binary file not shown.

added data/processed/ls_ts_AI_RISK.parquet +0 −0

Binary file not shown.

added data/processed/marketcap.parquet +0 −0

Binary file not shown.

added data/processed/merged_panel.parquet +0 −0

Binary file not shown.

added data/processed/mom_monthly.parquet +0 −0

Binary file not shown.

added data/processed/monthly_returns.parquet +0 −0

Binary file not shown.

added data/processed/prices_daily_event.parquet +0 −0

Binary file not shown.

added data/processed/prices_monthly.parquet +0 −0

Binary file not shown.

added data/processed/spy_monthly.parquet +0 −0

Binary file not shown.

added docs/README-analysis.md +43 −0
@@ -0,0 +1,43 @@
1 +# AI Disclosure & S&P 500 Returns — Empirical Study
2 +
3 +Links the semantic AI-disclosure factors (EDGAR Research Database) to realized stock
4 +performance (Yahoo Finance) and tests whether AI language in 10-K filings explains
5 +the cross-section of subsequent returns. Full 40-page paper in `report/`.
6 +
7 +## Pipeline (run in order)
8 +| Script | Purpose | Key output |
9 +|--------|---------|-----------|
10 +| `01_download_prices.py` | Monthly prices (500 tickers), SPY, market caps | `data/prices_monthly.parquet` |
11 +| `02_build_panel.py` | Look-ahead-free forward returns (July formation) + controls; merge | `data/merged_panel.parquet` |
12 +| `03_analysis.py` | Sorts, FF6 alphas, two-way FE panel, Fama-MacBeth, post-ChatGPT break | `tables/results.json` |
13 +| `06_extended.py` | Placebo, sector-neutral/double sorts, Mag-7 exclusion, alt signals/horizons, PCA, DiD, fwd-vol | `tables/results2.json` |
14 +| `07_event_study.py` | ChatGPT (Nov 2022) market-model event study, daily CARs | `tables/results_event.json` |
15 +| `04_figures.py`, `08_figures_ext.py` | 13 publication figures | `figures/fig1..13_*.png` |
16 +| `05_make_tables.py`, `09_make_tables_ext.py` | 12 LaTeX table fragments | `report/tab_*.tex` |
17 +
18 +FF5 + momentum factors fetched into `data/ff5_monthly.parquet`, `data/mom_monthly.parquet`.
19 +
20 +## Report
21 +**`report/ai_disclosure_returns_full.tex` → `ai_disclosure_returns_full.pdf` (40 pp).**
22 +Compile: `cd report && tectonic ai_disclosure_returns_full.tex`.
23 +(`ai_disclosure_returns.tex` is the earlier short 6-page version.)
24 +
25 +## Headline finding
26 +AI-disclosure intensity barely predicted returns for a decade, then was sharply
27 +rewarded after ChatGPT (Nov 2022). High−low (Q5−Q1) forward-return spread:
28 +**+2.4 pp/yr pre-2022 → +14.6 pp/yr post-2022**; long-short Sharpe 0.15 → 1.33.
29 +Identified by: (1) a **placebo** — the jump is AI-specific (ESG/climate go *negative*);
30 +(2) an **event study** — high-AI firms earned +10.1% higher abnormal return in the
31 +year after ChatGPT (t=1.97); (3) it survives **Mag-7 exclusion** (+14.1pp). It is a
32 +**cross-sectional, regime-dependent re-rating** (absorbed by firm FE, halved by sector
33 +FE), not within-firm news timing.
34 +
35 +## Design notes
36 +- **Signals**: section-weighted cosine similarity to AI anchors (`*_wmean`) for
37 + adoption/infrastructure/disruption-risk; standardized cross-sectionally each year.
38 +- **Timing**: 10-K(FY=Y) → form June Y+1 → hold July Y+1..June Y+2 (no look-ahead).
39 +- **Inference**: Newey-West (sorts, FM, monthly LS), double-clustered SE (panel/DiD),
40 + Welch t (event study).
41 +- **Caveats**: 3 post-period cohorts (concentrated in 2024); current-membership
42 + survivorship; shares-held-constant size proxy; AI signals collinear (ρ=0.75–0.86);
43 + effect operates substantially through a sector (tech) channel.
added docs/original_report_full_2026-06.tex +909 −0
@@ -0,0 +1,909 @@
1 +\documentclass[11pt]{article}
2 +\usepackage[margin=1in]{geometry}
3 +\usepackage{graphicx,booktabs,amsmath,amssymb,siunitx,caption,float,multirow}
4 +\usepackage[round,authoryear]{natbib}
5 +\usepackage[hidelinks]{hyperref}
6 +\usepackage{xcolor,sectsty,setspace,enumitem}
7 +\usepackage{titling}
8 +\definecolor{navy}{HTML}{1b3a6b}
9 +\sectionfont{\color{navy}\large}\subsectionfont{\color{navy}\normalsize}
10 +\captionsetup{font=small,labelfont={bf,color=navy}}
11 +\graphicspath{{../figures/}}
12 +\setlength{\parskip}{0.4em}
13 +\sisetup{group-minimum-digits=4,group-separator={,}}
14 +\newcommand{\tstat}[1]{{\footnotesize(\textit{t}=#1)}}
15 +\doublespacing
16 +\hypersetup{linkcolor=navy,citecolor=navy}
17 +
18 +\title{\color{navy}\bfseries Does the Language of Artificial Intelligence Move Markets?\\[3mm]
19 +\large A Semantic Analysis of S\&P~500 SEC Filings and the Cross-Section of Stock Returns, 2010--2026}
20 +\author{%
21 +\begin{tabular}{c}
22 +\textbf{Manel Kammoun}\\
23 +\texttt{manel.kammoun@uqo.ca}\\[0.5em]
24 +\textbf{Djerrycharli Tandjambianda}\\
25 +\texttt{djerrycharli.tandjambianda@uqo.ca}\\[0.5em]
26 +\textbf{Simon-Pierre Boucher}\\
27 +\texttt{simon-pierre.boucher@uqo.ca}\\[0.8em]
28 +{\large\textbf{Universit\'e du Qu\'ebec en Outaouais (UQO)}}\\
29 +\end{tabular}%
30 +}
31 +\date{June 2026}
32 +
33 +\begin{document}
34 +\maketitle
35 +\thispagestyle{empty}
36 +
37 +\begin{abstract}
38 +\noindent\normalsize
39 +We construct a \emph{semantic} measure of artificial-intelligence (AI) engagement for every
40 +S\&P~500 firm by embedding the text of its annual SEC filings (Form~10-K) with a sentence
41 +transformer and scoring each passage by cosine similarity to professionally curated AI
42 +``anchor'' concepts---internal AI adoption, AI infrastructure exposure, and AI product-disruption
43 +risk. Linking these scores to monthly equity prices from Yahoo Finance and to the Fama--French
44 +factor data, we assemble a panel of \num{7869} firm-years (500 firms, fiscal years 2010--2026)
45 +and ask whether the intensity of AI language predicts the cross-section of subsequent returns.
46 +Our central result is \textbf{conditional and economically large}. Over the full sample the
47 +relation between AI-disclosure intensity and future returns is positive but modest and only
48 +marginally significant; a risk-adjusted long--short portfolio earns an insignificant
49 +$\sim$2\%/year. After the public launch of ChatGPT (30 November 2022), however, the relation
50 +\emph{more than sextuples}: the spread between the top and bottom quintile of AI disclosure rises
51 +from $+2.4$ percentage points per year before 2022 to $+14.6$ points per year afterward. The
52 +break survives section-weighting choices, alternative signal definitions and horizons, dimension
53 +reduction, and---crucially---the exclusion of the ``Magnificent~7'' mega-caps. A battery of
54 +identification tests sharpens the interpretation: (i) a \emph{placebo} across five non-AI
55 +semantic factors shows the post-2022 jump is specific to AI-related language (ESG and climate
56 +disclosure, by contrast, earn \emph{negative} post-2022 spreads); (ii) a market-model
57 +\emph{event study} finds that firms with higher pre-event AI disclosure earned $+10.1\%$ higher
58 +cumulative abnormal returns over the year after ChatGPT \tstat{1.97}; and (iii) the effect is
59 +absorbed by firm fixed effects and roughly halved by sector fixed effects, indicating a
60 +\emph{cross-sectional, regime-dependent re-rating}---the market repriced \emph{which firms and
61 +sectors} are AI-exposed once AI became salient, rather than rewarding year-to-year changes in any
62 +single firm's wording. The findings provide direct, text-based evidence for an attention- and
63 +narrative-driven repricing of AI exposure, and illustrate the value of embedding-based disclosure
64 +measurement for asset pricing.
65 +
66 +\vspace{2mm}
67 +\noindent\textbf{Keywords:} textual analysis, sentence embeddings, artificial intelligence,
68 +disclosure, cross-section of returns, investor attention, event study, generative AI.\\
69 +\noindent\textbf{JEL:} G12, G14, G17, M41, O33.
70 +\end{abstract}
71 +
72 +\clearpage
73 +\setcounter{page}{1}
74 +\tableofcontents
75 +\clearpage
76 +
77 +\section{Introduction}
78 +The arrival of generative artificial intelligence has been the defining corporate-narrative shift
79 +of the 2020s. Between the public launch of ChatGPT in late 2022 and 2025, the market
80 +capitalization of AI-linked firms swelled by trillions of dollars, ``AI'' became the most
81 +frequently invoked theme on earnings calls, and the language of corporate disclosure filled with
82 +references to large language models, generative tools, intelligent automation, and the compute
83 +infrastructure that powers them. This paper asks a deceptively simple question: did the
84 +\emph{language} of AI in firms' mandatory disclosures carry information about their subsequent
85 +stock returns---and if so, when and through what channel?
86 +
87 +Answering this question well requires three ingredients that have only recently become jointly
88 +feasible: a large, machine-readable corpus of corporate disclosure; a measurement technology that
89 +captures the \emph{meaning} of text rather than the mere frequency of keywords; and a clean
90 +mapping from disclosure to tradeable returns. We bring all three to bear. Our laboratory is the
91 +universe of S\&P~500 constituents over fiscal years 2010--2026. Our raw material is the full text
92 +of their annual reports (Form~10-K), parsed section by section. Our measurement engine is the
93 +EDGAR Research Database, which embeds every text chunk with the \texttt{all-MiniLM-L6-v2} sentence
94 +transformer and scores it by cosine similarity to a set of carefully written ``anchor'' passages
95 +that define eight economic concepts. Three of these anchors isolate distinct facets of AI
96 +engagement: \emph{internal AI adoption} (using AI to run the business), \emph{AI infrastructure
97 +exposure} (capital tied to AI compute), and \emph{AI product-disruption risk} (the danger that AI
98 +commoditizes the firm's offerings). The result is a continuous, comparable, firm-year measure of
99 +how intensively---and in what sense---each firm engages with AI in its own words.
100 +
101 +We pair these semantic scores with monthly adjusted prices for all 500 tickers from Yahoo Finance
102 +and with the Fama--French five factors plus momentum. To avoid look-ahead bias we adopt the
103 +standard portfolio-formation convention: because a 10-K covering fiscal year $Y$ is public by
104 +early in year $Y{+}1$, we form signals at the end of June of $Y{+}1$ and measure the forward
105 +twelve-month return from July of $Y{+}1$ to June of $Y{+}2$. The signal is therefore always known
106 +before the holding period begins. This yields \num{6852} firm-years with a strictly tradeable
107 +forward return, spanning formation years 2010 through 2024.
108 +
109 +Our headline finding is that the pricing of AI language is \emph{not} a stable factor premium but
110 +a \textbf{regime-dependent re-rating that switched on with the generative-AI boom}. For most of
111 +the 2010s, sorting S\&P~500 firms on the intensity of their AI disclosure produced only a faint
112 +return pattern: the equal-weighted spread between the highest and lowest quintiles averaged about
113 +$+2.4$ percentage points per year, and a risk-adjusted long--short portfolio earned an
114 +economically small and statistically insignificant alpha. After the launch of ChatGPT in November
115 +2022, the same sort produced a spread of $+14.6$ percentage points per year. The cross-sectional
116 +re-rating is visible in every post-2022 formation cohort, in a cumulative long--short wealth
117 +curve that inflects sharply upward at the end of 2022, and in a year-by-year Fama--MacBeth slope
118 +that jumps from near zero to large and positive.
119 +
120 +A natural worry is that this pattern simply reflects the well-known rally of a handful of
121 +technology mega-caps. We address this concern head-on and reject it. The post-2022 spread is
122 +$+14.1$ percentage points (\textit{t}=1.9) when the ``Magnificent~7'' are excluded and $+14.5$
123 +points when the ten largest firms by market capitalization are dropped---the effect is
124 +broad-based across the index, not an artifact of Nvidia, Microsoft, or their peers. It is robust
125 +to using the simple mean, the section-weighted mean, or the top-5\% tail of similarity scores; to
126 +six-, twelve-, and twenty-four-month horizons; and to replacing the three AI signals with their
127 +first principal component (which alone explains 87\% of their common variation).
128 +
129 +We then deploy three complementary tests to pin down what the result is---and is not. First, a
130 +\emph{placebo} exercise re-runs the entire design on the five non-AI semantic factors in the
131 +database (ESG, climate, cybersecurity, automation/labor, and macro risk). If the post-2022 jump
132 +merely reflected a generic ``more disclosure earns more'' phenomenon, or a mechanical artifact of
133 +our pipeline, every factor should display it. They do not. The post-2022 spread is large and
134 +positive for the AI factors, essentially zero for macro-risk language, and \emph{negative} for
135 +ESG and climate disclosure---high-ESG firms \emph{underperformed} after 2022. The post-ChatGPT
136 +re-rating is specific to AI-related content. Second, we run a market-model \emph{event study}
137 +around the 30 November 2022 ChatGPT launch. Firms in the top tercile of pre-event AI disclosure
138 +(measured from their FY2021 10-K, the last report filed before the event) earned cumulative
139 +abnormal returns $+10.1$ percentage points higher than the bottom tercile over the following year
140 +\tstat{1.97} and $+14.6$ points higher over eighteen months. Because abnormal returns are
141 +purged of market-beta exposure, this is a clean cross-sectional response to an unanticipated
142 +narrative shock. Third, we use two-way fixed effects and difference-in-differences to localize the
143 +mechanism. The premium is absorbed by firm fixed effects and roughly halved by sector fixed
144 +effects, telling us that the durable signal is the persistent \emph{level} of a firm's (and its
145 +sector's) AI exposure relative to peers, not the year-to-year wiggle in its wording.
146 +
147 +Taken together, the evidence supports an \textbf{attention- and narrative-driven repricing}
148 +interpretation. The textual evidence of firms' AI engagement accumulated quietly for a decade and
149 +was barely priced. A salient catalyst---the consumer breakthrough of generative AI---then drew
150 +investor attention to that pre-existing information, and capital flowed toward the firms and
151 +sectors whose disclosures revealed the greatest AI exposure. This is the asset-pricing signature
152 +of limited attention and narrative economics, observed not through a sentiment proxy but directly
153 +in the semantic content of mandatory disclosure.
154 +
155 +\paragraph{Contribution.} We make four contributions. \emph{First}, methodologically, we
156 +demonstrate the value of embedding-based semantic measurement of disclosure for asset pricing: a
157 +cosine-similarity-to-anchor design captures economically meaningful, multi-faceted exposure
158 +(adoption vs.\ infrastructure vs.\ risk) that keyword counts cannot, and it does so at scale across
159 +the entire S\&P~500 and a decade and a half of filings. \emph{Second}, substantively, we provide
160 +the first text-based, look-ahead-free evidence that the cross-sectional pricing of AI exposure is
161 +a post-2022 regime phenomenon rather than a long-standing premium. \emph{Third}, we discipline the
162 +finding with a placebo across non-AI factors and an event study, distinguishing a genuine
163 +AI-specific repricing from a mechanical or market-wide artifact. \emph{Fourth}, we document the
164 +\emph{anatomy} of the effect---its concentration in smaller firms, its operation substantially
165 +through a sector channel, and its disappearance under firm fixed effects---which sharpens the
166 +economic interpretation and warns against naive trading strategies.
167 +
168 +The remainder of the paper proceeds as follows. Section~\ref{sec:lit} situates the study in five
169 +literatures. Section~\ref{sec:hyp} states our hypotheses. Section~\ref{sec:data} describes the
170 +data and the construction of the semantic measures. Section~\ref{sec:method} lays out the
171 +empirical methodology. Section~\ref{sec:results} presents the main results, and
172 +Section~\ref{sec:robust} the robustness and identification tests. Section~\ref{sec:disc} discusses
173 +mechanisms, Section~\ref{sec:limits} the limitations, and Section~\ref{sec:concl} concludes.
174 +
175 +\section{Related Literature}\label{sec:lit}
176 +Our study sits at the intersection of five strands of research: textual analysis in finance, the
177 +pricing of corporate disclosure, technology and innovation in asset pricing, investor attention
178 +and narrative economics, and the nascent literature on the economics of artificial intelligence.
179 +
180 +\subsection{Textual analysis and natural language processing in finance}
181 +A now-large literature extracts economic signals from financial text. The foundational work of
182 +\citet{tetlock2007} showed that the tone of a Wall Street Journal column forecasts aggregate
183 +returns, and \citet{tetlock2008} extended this to firm-level news. \citet{lm2011} demonstrated
184 +that finance-specific sentiment dictionaries materially outperform general-purpose word lists in
185 +10-K analysis, launching a wave of dictionary-based studies and the widely used Loughran--McDonald
186 +word lists. \citet{lm2016} survey this field. A second generation moved from counting words to
187 +modeling them: \citet{gentzkow2019} review text-as-data methods in economics, while
188 +\citet{kelly2019textregression} and \citet{bybee2024narrative} use machine-learning
189 +representations of news to construct interpretable factors and a ``state of the economy'' from
190 +text. Our paper belongs to the most recent, embedding-based generation. Rather than counting AI
191 +keywords---which conflate ``we use no AI'' with ``we are an AI leader'' and miss paraphrase---we
192 +measure the \emph{semantic similarity} of disclosure to anchor concepts using a sentence
193 +transformer \citep{reimers2019sbert}. This follows a growing practice of using contextual
194 +embeddings to quantify disclosure content \citep{cong2022textfactor}, and is closest in spirit to
195 +similarity-to-concept designs that score documents against reference passages.
196 +
197 +\subsection{The pricing of corporate disclosure}
198 +A parallel literature asks whether the \emph{content} and \emph{changes} of mandatory disclosure
199 +predict returns. \citet{cohen2020lazy} show that firms that change the language of their 10-K
200 +relative to the prior year (``lazy prices'' when they do not) experience predictable future
201 +returns and operating outcomes. \citet{hoberg2010product} and \citet{hobergphillips2016} use 10-K
202 +product descriptions to build text-based industry classifications and measures of product-market
203 +fluidity that carry asset-pricing content. \citet{lopezlira2023risk} extract risk exposures from
204 +10-K risk-factor sections. The general lesson is that the qualitative portions of filings contain
205 +value-relevant information that markets process incompletely and with delay. We contribute a
206 +focused, concept-level measure---AI engagement---and show that its pricing is strongly
207 +state-dependent, a dimension the disclosure-pricing literature has largely left implicit.
208 +
209 +\subsection{Technology, innovation, and the cross-section of returns}
210 +Asset pricing has long sought to connect technological change to risk and return.
211 +\citet{hirshleifer2013innovative} show that innovative efficiency predicts returns;
212 +\citet{kogan2017technological} build market-based measures of innovation from patents and link
213 +them to growth and reallocation. \citet{koganpapanikolaou2014} show that investment-specific
214 +technology shocks shape the cross-section. A more recent literature studies AI exposure directly:
215 +\citet{babina2024aiinvestment} measure firm-level AI investment from job-posting and resume data
216 +and document faster growth among AI-adopting firms; \citet{eisfeldt2023generative} construct a
217 +firm-level measure of \emph{generative}-AI exposure from the task content of occupations and show
218 +that a generative-AI factor was priced precisely in the weeks around ChatGPT's release.
219 +\citet{acemoglu2020wrong} and \citet{webb2020} study the labor-market exposure of firms to AI and
220 +automation. Our contribution relative to this work is to measure AI exposure from the firm's
221 +\emph{own disclosure}---a self-reported, narrative signal available for the entire index at annual
222 +frequency---and to characterize the full time profile of its pricing across a decade and a half,
223 +not only the event window. Where \citet{eisfeldt2023generative} use occupation-task exposure, we
224 +use the language firms choose, providing a complementary and highly granular measure.
225 +
226 +\subsection{Investor attention, salience, and narrative economics}
227 +Why might value-relevant disclosure be priced only after a catalyst? The behavioral literature
228 +offers a clear mechanism: limited investor attention. \citet{barberodean2008} show that retail
229 +investors are drawn to attention-grabbing stocks; \citet{da2011} construct a direct attention
230 +proxy from Google search and link it to prices; \citet{dellavigna2009} document under-reaction to
231 +information released when attention is low; and \citet{hirshleifer2009driven} show that earnings
232 +news is underweighted when investors are distracted. \citet{shiller2017narrative} argues that
233 +contagious narratives drive major asset-price movements, and \citet{bakerwurgler2006} show that
234 +sentiment differentially affects hard-to-value, speculative stocks. Our results provide a sharp
235 +illustration: the information about firms' AI engagement existed in filings for years but was
236 +repriced abruptly when a salient consumer event---ChatGPT---focused investor attention on AI. The
237 +asymmetry we document (AI rewarded, ESG penalized after 2022) is itself consistent with a shift in
238 +the prevailing market narrative.
239 +
240 +\subsection{ESG and climate disclosure as a comparison case}
241 +Finally, our placebo design connects to the literature on the pricing of ESG and climate
242 +disclosure. \citet{pastor2021sustainable} model how sustainability preferences depress the
243 +expected returns of green assets in equilibrium, and \citet{pastor2022dissecting} show that green
244 +stocks' strong \emph{realized} returns through 2021 reflected unexpected increases in climate
245 +concern rather than high expected returns. \citet{bolton2021risk} document a carbon premium.
246 +Consistent with the post-2021 reversal in this literature, we find that high-ESG and high-climate
247 +disclosure earned \emph{negative} spreads after 2022, exactly when AI disclosure began to earn
248 +large positive ones---underscoring that the post-2022 re-rating reflects a thematic rotation
249 +toward AI rather than a generic disclosure effect.
250 +
251 +\section{Hypotheses}\label{sec:hyp}
252 +Our analysis is organized around four hypotheses.
253 +
254 +\begin{description}[leftmargin=2.4em,style=nextline]
255 +\item[H1 (Unconditional pricing).] If AI exposure carries a stable risk premium or persistent
256 +mispricing, then sorting on AI-disclosure intensity yields a positive and significant
257 +risk-adjusted return spread over the full 2010--2026 sample.
258 +\item[H2 (Regime dependence).] If instead AI exposure is repriced only once AI becomes salient,
259 +the return spread is small before and large after the late-2022 generative-AI catalyst, with a
260 +detectable structural break.
261 +\item[H3 (AI-specificity).] If the post-2022 spread reflects a genuine AI repricing rather than a
262 +mechanical or market-wide artifact, it appears for AI-related semantic factors but not for
263 +unrelated factors (e.g.\ ESG, climate, macro risk).
264 +\item[H4 (Cross-sectional, not within-firm).] If the market repriced \emph{which} firms are
265 +AI-exposed rather than rewarding incremental wording, the effect is concentrated in the
266 +cross-section and attenuates under firm and sector fixed effects.
267 +\end{description}
268 +
269 +\noindent The data, as we show, decisively favor H2--H4 over H1.
270 +
271 +\section{Data and Variable Construction}\label{sec:data}
272 +\subsection{The semantic factor panel}
273 +The backbone of our study is the EDGAR Research Database, an infrastructure that downloads,
274 +parses, and semantically scores SEC filings for S\&P~500 firms. For each filing the pipeline
275 +(i)~extracts the canonical sections (Risk Factors, MD\&A, legal proceedings, financial statements,
276 +and so on); (ii)~splits each section into overlapping text chunks; (iii)~embeds every chunk into a
277 +384-dimensional vector with the \texttt{all-MiniLM-L6-v2} sentence transformer; and (iv)~scores
278 +each chunk by cosine similarity to a set of \emph{anchor} passages defining eight economic
279 +concepts. The anchors are short, deliberately written paragraphs that articulate the concept in
280 +natural language; for example, the AI-adoption anchor describes a firm ``internally using
281 +artificial intelligence, machine learning, generative AI, large language models, automation,
282 +predictive analytics \dots to improve productivity, operations, efficiency, decision-making.''
283 +Cosine similarity to such an anchor measures how closely a passage's \emph{meaning} matches the
284 +concept, regardless of the exact words used---capturing paraphrase and context in a way keyword
285 +counts cannot.
286 +
287 +Chunk-level scores are aggregated to the filing level using section weights that emphasize the
288 +parts of the document where the concept is most likely to be discussed substantively (e.g.\ MD\&A
289 +and Risk Factors), and then to the firm-fiscal-year level. For each concept the database reports
290 +the mean, maximum, standard deviation, top-5\% tail, and section-weighted mean (\texttt{wmean}) of
291 +chunk similarities, along with first and second differences, percentage changes, and three-year
292 +rolling statistics. The eight concepts comprise three AI facets---\emph{AI adoption}, \emph{AI
293 +infrastructure}, \emph{AI disruption risk}---and five others used as placebos: \emph{ESG
294 +commitment}, \emph{climate risk}, \emph{cybersecurity}, \emph{automation/labor}, and \emph{macro
295 +risk}.
296 +
297 +The resulting panel covers all 500 current S\&P~500 members across fiscal years 2010--2026, a
298 +total of \num{7869} firm-years. We take the section-weighted mean (\texttt{wmean}) as our headline
299 +signal because it up-weights the forward-looking, strategy-rich sections; we verify robustness to
300 +the simple mean and the top-5\% tail in Section~\ref{sec:robust}. Our three primary signals are
301 +therefore \texttt{ai\_adoption\_wmean} (\textbf{AI\,Adopt}), \texttt{ai\_infrastructure\_wmean}
302 +(\textbf{AI\,Infra}), and \texttt{ai\_disruption\_risk\_wmean} (\textbf{AI\,Risk}); we also form a
303 +standardized opportunity composite, $\text{AI\,Compos}=\tfrac12[z(\text{AI\,Adopt})+z(\text{AI\,Infra})]$.
304 +
305 +\subsection{Price and factor data}
306 +We download monthly adjusted-close prices for all 500 tickers from Yahoo Finance over 2009--2026
307 +(handling share-class tickers such as BRK.B and BF.B), the SPDR S\&P~500 ETF (SPY) as the market
308 +benchmark, and the Fama--French five factors, the momentum factor, and the risk-free rate from the
309 +Kenneth R.\ French data library. Monthly simple returns are computed from adjusted prices, which
310 +incorporate dividends and splits. A market-capitalization proxy is formed as shares outstanding
311 +(from Yahoo Finance) times the historical price; we use it for value-weighting and as a size
312 +control, acknowledging the shares-held-constant approximation.
313 +
314 +\subsection{Timing and the construction of tradeable returns}
315 +The single most important design choice in a disclosure--return study is timing. A 10-K covering
316 +fiscal year $Y$ becomes public only when filed, typically in February or March of year $Y{+}1$. To
317 +guarantee that our signal is in the public information set before any return is measured, we follow
318 +the Fama--French portfolio convention: signals from fiscal year $Y$ are used to form portfolios at
319 +the \textbf{end of June of $Y{+}1$}, and we measure the \textbf{forward twelve-month return from
320 +July of $Y{+}1$ through June of $Y{+}2$}. The roughly three-month gap between the typical filing
321 +date and June~30 ensures no look-ahead bias even for late filers. After requiring a valid forward
322 +return with adequate monthly coverage, we obtain \num{6852} firm-years spanning formation years
323 +2010--2024, with return realizations extending through mid-2026.
324 +
325 +\subsection{Controls and standardization}
326 +For each formation year we compute cross-sectional $z$-scores of every signal, so that all
327 +coefficients are expressed per cross-sectional standard deviation and the powerful secular rise in
328 +AI language (documented below) is differenced out---in any given year we compare firms to their
329 +contemporaneous peers. We control for the three workhorse return determinants: \emph{size}
330 +(log market-cap proxy), \emph{momentum} (the firm's own return over the twelve months ending at
331 +formation, skipping the last month), and \emph{idiosyncratic volatility} (the annualized standard
332 +deviation of monthly returns over the trailing year). In regressions, returns and continuous
333 +controls are winsorized at the 1st and 99th percentiles to limit the influence of outliers; in
334 +portfolio sorts we use raw returns.
335 +
336 +\subsection{Summary statistics}
337 +Table~\ref{tab:summ} reports summary statistics for the estimation sample. The average forward
338 +twelve-month return is 18.6\% (reflecting the strong 2011--2026 bull market for U.S.\ large caps),
339 +with a wide cross-sectional dispersion (standard deviation 41.5\%). The AI signals are small in
340 +level---cosine similarities of disclosure to narrow anchors---but exhibit meaningful
341 +cross-sectional variation. Table~\ref{tab:corr} reports correlations. Two features stand out.
342 +First, the three AI signals are highly collinear (pairwise $\rho$ between 0.75 and 0.86): firms
343 +that write more about adopting AI also write more about AI infrastructure and AI risk. They are
344 +best understood as three lenses on a single latent construct---\emph{AI salience}---a point we
345 +formalize with principal-components analysis in Section~\ref{sec:robust}. Second, the raw
346 +(unconditional) correlation between each AI signal and the forward return is positive but small
347 +($\approx 0.04$), foreshadowing that the unconditional relation is weak and that the action lies in
348 +its time variation.
349 +
350 +\input{tab_summary}
351 +\input{tab_corr}
352 +
353 +\subsection{The secular rise of AI language}
354 +Before turning to returns, Figure~\ref{fig:trend} documents the raw phenomenon that motivates our
355 +within-year design. The cross-sectional mean similarity to all three AI concepts trended steadily
356 +upward through the 2010s and inflected sharply after 2022; by 2025--2026 AI language saturates
357 +S\&P~500 disclosure. This is precisely why our tests rely on within-year cross-sectional ranking:
358 +the interesting question is not whether the index as a whole talks more about AI over time (it
359 +emphatically does), but whether, \emph{in a given year}, firms that talk about AI more than their
360 +peers subsequently earn different returns. Figure~\ref{fig:sectorbox} shows that AI disclosure is
361 +also unevenly distributed across sectors, concentrated in Information Technology, Communication
362 +Services, and Industrials---a fact that will matter for interpreting the sector channel.
363 +
364 +\begin{figure}[H]\centering
365 +\includegraphics[width=0.9\textwidth]{fig4_ai_language_trend.png}
366 +\caption{Cross-sectional mean of section-weighted cosine similarity to each AI anchor, by fiscal
367 +year. All three measures trend upward and inflect after the 2022 launch of ChatGPT (dashed
368 +line).}\label{fig:trend}
369 +\end{figure}
370 +
371 +\begin{figure}[H]\centering
372 +\includegraphics[width=0.9\textwidth]{fig12_sector_box.png}
373 +\caption{Distribution of the AI-adoption score by GICS sector (box plots, outliers suppressed; red
374 +line = median). AI disclosure is concentrated in technology-intensive sectors.}\label{fig:sectorbox}
375 +\end{figure}
376 +
377 +\subsection{Which firms disclose the most AI? Descriptive evidence}
378 +Table~\ref{tab:topfirms} lists the ten most AI-intensive S\&P~500 firms by average AI-adoption
379 +score over the full sample. The list is instructive in two ways. First, it has strong face
380 +validity: it features enterprise-technology and software firms (Hewlett Packard Enterprise, Intel,
381 +IBM, Tyler Technologies, Autodesk), an algorithm-centric platform (Uber), and data-intensive
382 +financials (BNY Mellon, Berkshire Hathaway), exactly the kinds of firms one would expect to write
383 +substantively about deploying AI. Second, the list is \emph{not} confined to the technology sector:
384 +industrials (Cummins) and energy (EOG Resources) appear, confirming that intensive AI disclosure
385 +cuts across the GICS taxonomy and that our continuous, text-based measure captures within- and
386 +cross-sector variation that a sector dummy would miss.
387 +
388 +A further descriptive fact is central to our interpretation: the AI signal is highly
389 +\emph{persistent}. The year-over-year cross-sectional rank autocorrelation of the AI composite is
390 +0.88, and even at a five-year horizon it remains 0.73. Firms that are AI-intensive disclosers stay
391 +AI-intensive; the measure captures a slow-moving structural characteristic of the firm rather than
392 +transient wording. This persistence has two implications we exploit later: it explains why firm
393 +fixed effects absorb most of the signal (there is little within-firm variation to identify), and it
394 +underpins the difference-in-differences design, in which we fix each firm's exposure at its
395 +pre-event level precisely because that level is stable.
396 +
397 +\input{tab_topfirms}
398 +
399 +\section{Methodology}\label{sec:method}
400 +We bring six complementary research designs to bear, ranging from simple portfolio sorts to a
401 +market-model event study. Using multiple designs with different identifying assumptions guards
402 +against any single method's weaknesses and lets us triangulate the economic interpretation.
403 +
404 +\subsection{Portfolio sorts}
405 +Each formation year we sort firms into quintiles on a given (within-year standardized) AI signal
406 +and compute the equal-weighted (EW) and value-weighted (VW) forward return of each quintile, plus
407 +the high-minus-low (Q5$-$Q1) spread. We report the time-series average of the annual spreads and
408 +test its significance with Newey--West \citep{neweywest1987} standard errors (three lags) to
409 +account for any serial correlation in the overlapping return windows. Sorts are model-free and
410 +transparent, and the EW--VW comparison reveals whether an effect is concentrated in larger or
411 +smaller firms.
412 +
413 +\subsection{Factor-model spanning of a long--short portfolio}
414 +To ask whether the AI spread survives risk adjustment, we build an annually rebalanced,
415 +equal-weighted, self-financing long--short portfolio (top minus bottom quintile), record its
416 +monthly return, and regress it on (i)~the CAPM market factor and (ii)~the Fama--French five
417 +factors plus momentum (FF6). The intercept (alpha) measures the average return unexplained by
418 +known risk factors; we use heteroskedasticity- and autocorrelation-consistent (HAC) standard
419 +errors. A significant alpha would indicate pricing beyond standard exposures.
420 +
421 +\subsection{Two-way fixed-effects panel regressions}
422 +We estimate
423 +\begin{equation}
424 +r_{i,t\to t+12} = \beta\, \text{AI}_{i,t} + \gamma' X_{i,t} + \alpha_i + \delta_t + \varepsilon_{i,t},
425 +\end{equation}
426 +where $r$ is the winsorized forward return, $\text{AI}_{i,t}$ the standardized signal, $X$ the
427 +controls, and $\alpha_i,\delta_t$ firm and year fixed effects. Standard errors are double-clustered
428 +by firm and year \citep{petersen2009,cameron2011}. Firm fixed effects absorb all
429 +time-invariant cross-firm differences, so $\beta$ identifies whether \emph{within-firm} changes in
430 +AI language predict returns; year fixed effects absorb common shocks. Contrasting this estimate
431 +with the cross-sectional ones isolates whether the signal lives across or within firms (H4).
432 +
433 +\subsection{Fama--MacBeth regressions}
434 +We also run annual cross-sectional regressions of the forward return on the AI signal and controls
435 +and average the slopes \`a la \citet{famamacbeth1973}, with Newey--West errors on the time series of
436 +coefficients. This estimator weights each year equally and yields an interpretable
437 +per-standard-deviation premium; plotting the annual slopes reveals the time profile of the premium
438 +directly.
439 +
440 +\subsection{Structural-break and difference-in-differences designs}
441 +To test regime dependence (H2) we split the sample at the 30~November 2022 ChatGPT launch and
442 +compare sub-period spreads, and we estimate pooled interaction models of the form
443 +$r = \beta_1 \text{AI} + \beta_2 (\text{AI}\times \text{Post}) + \gamma' X + \varepsilon$, where
444 +$\text{Post}=\mathbb{1}[\text{formation year}\ge 2022]$ and $\beta_2$ captures the change in the
445 +premium. We complement this with a difference-in-differences design in which treatment is the
446 +firm's \emph{pre-determined} AI exposure---fixed at its 2019--2021 average so it cannot respond to
447 +the event---interacted with Post, within firm and year fixed effects. An event-time version
448 +interacts pre-determined exposure with each year dummy (relative to 2021) to trace the dynamic
449 +response.
450 +
451 +\subsection{Market-model event study}
452 +Finally, we run a classic event study \citep{mackinlay1997} around the ChatGPT launch. For each
453 +stock we estimate a market model ($r_{i,d}=a_i+b_i r^{m}_{d}+e_{i,d}$) over the estimation window
454 +January--October 2022 and compute daily abnormal returns $\text{AR}_{i,d}=r_{i,d}-(\hat a_i+\hat
455 +b_i r^m_d)$ over the event window November 2022--June 2024. Cumulative abnormal returns (CAR) are
456 +compared across terciles of \emph{pre-event} AI disclosure (from the FY2021 10-K), and we regress
457 +firm-level CAR on pre-event exposure with size, beta, and sector controls. Because abnormal
458 +returns net out market-beta exposure, the event study isolates the cross-sectional response to the
459 +AI-narrative shock from the contemporaneous (and initially negative) market drift of 2022--2023.
460 +
461 +\section{Results}\label{sec:results}
462 +\subsection{Portfolio sorts: a weak unconditional relation}
463 +Table~\ref{tab:sorts} reports the quintile sorts over the full sample. The relation between AI
464 +disclosure and future returns is positive and broadly monotone but economically modest. The
465 +equal-weighted Q5$-$Q1 spread is $+4.6$ percentage points per year for AI adoption \tstat{1.83},
466 +$+3.9$ for AI infrastructure \tstat{1.58}, $+5.3$ for AI disruption risk \tstat{2.27}, and $+4.9$
467 +for the composite \tstat{1.88}. Value-weighting attenuates the adoption and composite spreads,
468 +indicating the effect is stronger among smaller index members. The left panel of
469 +Figure~\ref{fig:quint} displays the full-sample pattern: returns rise gently from the lowest to
470 +the highest AI quintile. On its own, this is suggestive but far from decisive evidence---and, as
471 +we now show, it averages over two very different regimes.
472 +
473 +\input{tab_sorts}
474 +
475 +\subsection{Does AI disclosure earn risk-adjusted alpha unconditionally? (H1)}
476 +Table~\ref{tab:alpha} reports CAPM and FF6 alphas of the long--short portfolios. The
477 +AI-opportunity composite earns a raw spread of about $+2.3\%$ per year, of which the FF6 alpha is
478 +$+1.9\%$---but statistically insignificant \tstat{1.24}. The AI-adoption and AI-infrastructure
479 +long--shorts are similarly insignificant after risk adjustment. The one exception is the
480 +AI-disruption-risk spread, whose FF6 alpha of $+2.8\%$ per year is marginally significant
481 +\tstat{2.10}, hinting at a small risk premium for firms that flag AI as a competitive threat. The
482 +factor loadings (not the focus here) show the AI long--short is roughly market-neutral with modest
483 +negative profitability (RMW) and investment (CMA) tilts, consistent with a growth-oriented long
484 +leg. The verdict on H1 is clear: \textbf{unconditionally, AI disclosure is at best weakly
485 +priced.} This is not the end of the story but the beginning of it.
486 +
487 +\input{tab_alpha}
488 +
489 +\subsection{Panel and Fama--MacBeth estimates}
490 +Table~\ref{tab:panel} juxtaposes the two-way fixed-effects panel with the Fama--MacBeth estimator.
491 +The contrast is instructive. In the Fama--MacBeth (cross-sectional) regressions, the AI-adoption
492 +and AI-infrastructure premia are positive---$+1.3$ and $+1.6$ percentage points per
493 +standard-deviation---with \textit{t}-statistics near 1.6--1.7, indicating a weak but positive
494 +cross-sectional premium on average. In the two-way fixed-effects panel, however, every AI
495 +coefficient collapses to essentially zero. Because firm fixed effects remove all permanent
496 +cross-firm differences, this tells us the signal lives \emph{across} firms, not \emph{within}
497 +them: a given firm writing relatively more about AI from one year to the next does not predict its
498 +own subsequent return (anticipating H4). Throughout, size carries the familiar negative premium
499 +($t\approx-8$) and volatility a positive one, consistent with the broader cross-sectional
500 +literature in this large-cap universe.
501 +
502 +\input{tab_panel}
503 +
504 +\subsection{The structural break: AI pricing switched on after ChatGPT (H2)}
505 +The full-sample averages mask a sharp regime change that is the paper's central result. Splitting
506 +the sample at the November 2022 ChatGPT launch, the center and right panels of
507 +Figure~\ref{fig:quint} reveal a striking transformation: the quintile pattern is nearly flat
508 +before 2022 and steeply increasing afterward. The high-minus-low composite spread is $+2.4$
509 +percentage points per year pre-ChatGPT but $+14.6$ points per year post-ChatGPT---a more than
510 +sixfold increase.
511 +
512 +\begin{figure}[H]\centering
513 +\includegraphics[width=\textwidth]{fig1_quintile_returns.png}
514 +\caption{Mean forward twelve-month return by AI-disclosure composite quintile, full sample and by
515 +sub-period. The high-minus-low spread is $+2.4$ percentage points before ChatGPT and $+14.6$ points
516 +after.}\label{fig:quint}
517 +\end{figure}
518 +
519 +Table~\ref{tab:break} quantifies the break two ways. In sub-period sorts, the AI-adoption Q5$-$Q1
520 +spread rises from $+2.2\%$ per year \tstat{2.04} pre-2022 to $+14.3\%$ \tstat{2.15} post-2022; the
521 +composite rises from $+2.5\%$ to $+14.6\%$; AI infrastructure from $+1.4\%$ to $+13.6\%$. In the
522 +pooled interaction regressions, the post-2022 incremental slope is positive for all three signals
523 +and statistically significant for AI infrastructure \tstat{2.63}---the facet most directly tied to
524 +the chip, cloud, data-center, and power firms that led the 2023--2025 rally. Figure~\ref{fig:spread}
525 +shows the annual spreads: small and mixed-sign through 2021, uniformly large and positive for every
526 +post-2022 cohort.
527 +
528 +\input{tab_break}
529 +
530 +\begin{figure}[H]\centering
531 +\includegraphics[width=0.9\textwidth]{fig3_annual_spread.png}
532 +\caption{Annual high-minus-low (Q5$-$Q1) forward-return spread on the AI-disclosure composite, by
533 +10-K fiscal year. Post-ChatGPT cohorts (red) are uniformly and substantially positive.}\label{fig:spread}
534 +\end{figure}
535 +
536 +The same regime change is visible in two further lenses. Figure~\ref{fig:cum} plots the cumulative
537 +value of one dollar invested in the equal-weighted, annually rebalanced, self-financing
538 +high-minus-low portfolio: it drifts sideways-to-up for a decade and then inflects upward after the
539 +dashed ChatGPT line. Figure~\ref{fig:fmyear} plots the year-by-year Fama--MacBeth slope on the AI
540 +composite (with controls): it hovers near zero for the entire 2010s and then turns sharply
541 +positive, peaking in the 2024 cohort. The latter figure also delivers an important nuance: the
542 +size-controlled premium is largest in the most recent cohort, consistent with the AI
543 +\emph{infrastructure} super-cycle of 2024--2025 (the build-out of data centers and accelerated
544 +compute). We return to this concentration when discussing limitations.
545 +
546 +\begin{figure}[H]\centering
547 +\includegraphics[width=0.86\textwidth]{fig2_cumulative_ls.png}
548 +\caption{Cumulative value of \$1 invested in the equal-weighted, annually rebalanced, self-financing
549 +high-minus-low AI-disclosure portfolio (AI opportunity composite and AI disruption-risk).}\label{fig:cum}
550 +\end{figure}
551 +
552 +\begin{figure}[H]\centering
553 +\includegraphics[width=0.9\textwidth]{fig6_fm_byyear.png}
554 +\caption{Year-by-year Fama--MacBeth slope on the AI-disclosure composite (forward return per
555 +cross-sectional standard deviation), controlling for size, momentum, and volatility. Bars are
556 +$\pm1$ standard error.}\label{fig:fmyear}
557 +\end{figure}
558 +
559 +Finally, Figure~\ref{fig:bin} confirms the pattern is not an artifact of a few influential
560 +observations: the binned relation between the AI composite and forward returns is essentially flat
561 +in the pre-ChatGPT sub-period and distinctly upward-sloping afterward, across the entire
562 +distribution of AI disclosure rather than only at the extreme quintiles.
563 +
564 +\begin{figure}[H]\centering
565 +\includegraphics[width=\textwidth]{fig5_binscatter.png}
566 +\caption{Binned scatter of forward twelve-month return against the AI-disclosure composite, by
567 +sub-period. Each point is a portfolio of firms in a bin of the AI signal; the line is an OLS fit.
568 +The conditional slope steepens markedly after ChatGPT.}\label{fig:bin}
569 +\end{figure}
570 +
571 +\subsection{The anatomy of the premium: size and sector}
572 +Where in the cross-section does the post-2022 premium concentrate? Table~\ref{tab:doublesort} and
573 +Figure~\ref{fig:double} report an AI~$\times$~size double sort. Before 2022 the AI gradient is flat
574 +within both size halves. After 2022 it is steep, and dramatically so among smaller firms: small,
575 +high-AI firms earned a mean forward return of 34.6\%, versus 19.5\% for small, low-AI firms---a
576 +15-point gap---while the corresponding gap among large firms is 7 points. The premium is thus
577 +\emph{not} merely a mega-cap phenomenon (a point we reinforce in Section~\ref{sec:robust}); if
578 +anything it is strongest among the smaller, less-followed names, consistent with an
579 +attention-based mechanism in which information diffuses more slowly into smaller stocks.
580 +
581 +\input{tab_doublesort}
582 +
583 +\begin{figure}[H]\centering
584 +\includegraphics[width=\textwidth]{fig9_double_sort.png}
585 +\caption{AI-disclosure $\times$ firm-size double sort: mean forward twelve-month return by AI
586 +tercile within small and large firms, pre- and post-ChatGPT.}\label{fig:double}
587 +\end{figure}
588 +
589 +\subsection{Economic significance}
590 +The statistical break is matched by an economic one. The Sharpe ratio of the equal-weighted
591 +AI-composite long--short portfolio---a direct gauge of risk-adjusted attractiveness---rises from
592 +0.15 in the pre-ChatGPT decade to 1.33 afterward; for the AI-disruption-risk spread it rises from
593 +0.33 to 1.15. A Sharpe ratio above one is exceptional for a single-characteristic, self-financing
594 +equity strategy, and its emergence precisely at the ChatGPT boundary is hard to reconcile with a
595 +constant risk premium. The point estimates in the quintile sorts are equally vivid: a 14-point
596 +annual spread between the top and bottom AI quintiles is roughly three times the unconditional
597 +equity risk premium and an order of magnitude larger than the pre-2022 spread. Even acknowledging
598 +that a portion of this reflects the higher realized volatility of AI-exposed firms (documented in
599 +Section~\ref{sec:robust}) and the broad technology rally, the magnitude of the post-2022 re-rating
600 +is among the largest single-theme cross-sectional effects in the recent asset-pricing record. The
601 +contrast between an essentially flat pre-period and a near-vertical post-period is, to us, the most
602 +compelling single piece of evidence that a genuine regime change occurred.
603 +
604 +\section{Robustness and Identification}\label{sec:robust}
605 +The structural break is economically large; this section asks how much we should believe it. We
606 +subject it to a placebo across non-AI factors, an event study, a difference-in-differences design,
607 +and a battery of construction and universe robustness checks.
608 +
609 +\subsection{Placebo: is the effect specific to AI? (H3)}
610 +If the post-2022 spread were a mechanical artifact of our pipeline---or a generic ``high-disclosure
611 +firms did well'' phenomenon---it should appear for any semantic factor. Table~\ref{tab:placebo} and
612 +Figure~\ref{fig:placebo} re-run the entire sub-period and interaction design on all eight factors.
613 +The result strongly supports AI-specificity. The three AI factors show large positive post-2022
614 +spreads ($+13.6$ to $+14.3$ points). Macro-risk language shows essentially no spread ($-0.5$,
615 +$t=-0.1$). And, strikingly, ESG-commitment and climate-risk disclosure earn \emph{negative}
616 +post-2022 spreads ($-8.8$ and $-5.0$ points, both significant)---high-ESG firms \emph{underperformed}
617 +after 2022, in line with the post-2021 reversal in the sustainable-investing literature
618 +\citep{pastor2022dissecting}. The one non-AI factor that does show a large positive post-2022
619 +spread is cybersecurity ($+13.5$); we read this not as a violation but as confirmation, since
620 +cybersecurity disclosure is tightly bundled with technology exposure and is itself increasingly
621 +AI-related. The cleanest contrast---AI rewarded, ESG and climate penalized---makes a powerful case
622 +that the post-ChatGPT re-rating reflects a thematic rotation \emph{toward AI}, not a generic
623 +disclosure effect.
624 +
625 +\input{tab_placebo}
626 +
627 +\begin{figure}[H]\centering
628 +\includegraphics[width=0.92\textwidth]{fig7_placebo.png}
629 +\caption{Placebo test: post-ChatGPT high-minus-low return spread for each of the eight semantic
630 +factors. AI-related factors (red) cluster at the top; ESG and climate disclosure earn negative
631 +spreads.}\label{fig:placebo}
632 +\end{figure}
633 +
634 +\subsection{Event study around ChatGPT}
635 +The portfolio results use annual formation and forward returns; the event study provides a
636 +higher-frequency, cleanly identified complement. Table~\ref{tab:event} and Figure~\ref{fig:event}
637 +report market-model cumulative abnormal returns by pre-event AI tercile. The ordering is monotone
638 +at every horizon and widens steadily over time. The High-minus-Low CAR difference is $+2.9$ points
639 +at 60 trading days \tstat{1.77}, $+10.1$ points at one year \tstat{1.97}, and $+14.6$ points at
640 +eighteen months \tstat{1.89}. Because these are abnormal returns---purged of each firm's market
641 +beta---the spread cannot be attributed to high-AI firms simply being higher-beta in a recovering
642 +market. A cross-sectional regression of one-year CAR on pre-event AI exposure yields $+3.1$ points
643 +per standard deviation \tstat{1.39}; adding sector fixed effects halves it to $+2.1$ points
644 +\tstat{0.99}, again locating much---but not all---of the effect in a sector channel.
645 +Figure~\ref{fig:eventbin} shows the relation is smooth across the exposure distribution, not driven
646 +by a few outliers.
647 +
648 +\input{tab_event}
649 +
650 +\begin{figure}[H]\centering
651 +\includegraphics[width=\textwidth]{fig8_event_car.png}
652 +\caption{ChatGPT event study. Left: mean cumulative abnormal return (market model) by pre-event AI
653 +tercile. Right: the High$-$Low CAR spread.}\label{fig:event}
654 +\end{figure}
655 +
656 +\begin{figure}[H]\centering
657 +\includegraphics[width=0.66\textwidth]{fig13_event_binscatter.png}
658 +\caption{One-year cumulative abnormal return after ChatGPT versus pre-event AI exposure (binned
659 +scatter with fitted line).}\label{fig:eventbin}
660 +\end{figure}
661 +
662 +\subsection{Difference-in-differences and the cross-sectional nature of the effect (H4)}
663 +Table~\ref{tab:did} reports difference-in-differences estimates in which treatment is the firm's
664 +pre-determined (2019--2021) AI exposure interacted with the post-2022 indicator, within firm and
665 +year fixed effects. The continuous-exposure DiD coefficient is $+2.7$ percentage points per
666 +standard deviation \tstat{1.51}; the binary version is $+1.7$ points \tstat{0.78}. These are
667 +positive and economically meaningful but weaker than the cross-sectional estimates---exactly the
668 +pattern predicted by H4. Once firm fixed effects absorb the permanent component of AI exposure,
669 +only the residual within-firm variation identifies the effect, and that variation is small. The
670 +event-time profile in Figure~\ref{fig:eventtime} reinforces this reading: the return premium on a
671 +firm's \emph{fixed} pre-event AI exposure is flat and near zero through 2021 and jumps after 2022,
672 +peaking in 2024. The market did not reward firms for adding AI sentences to their filings; it
673 +repriced the firms whose pre-existing, persistent exposure made them AI winners once the narrative
674 +turned.
675 +
676 +\input{tab_did}
677 +
678 +\begin{figure}[H]\centering
679 +\includegraphics[width=0.82\textwidth]{fig11_eventtime.png}
680 +\caption{Event-study coefficients: the return premium on pre-determined (2019--2021) AI exposure by
681 +year (95\% confidence intervals), relative to 2021. The premium activates after ChatGPT.}\label{fig:eventtime}
682 +\end{figure}
683 +
684 +\subsection{Construction, horizon, and universe robustness}
685 +Table~\ref{tab:robust} collects the remaining checks. The post-2022 spread is essentially unchanged
686 +whether the signal is the section-weighted mean (base, $+14.6$), the simple mean ($+13.4$), or the
687 +top-5\% tail ($+14.9$). It holds at six-, twelve-, and twenty-four-month horizons (growing with the
688 +horizon, as a persistent premium should). It survives replacing the three AI signals with their
689 +first principal component---which alone explains 86.8\% of their common variance, confirming the
690 +``single latent AI construct'' interpretation---yielding a post-2022 PC1 spread of $+13.4$ points
691 +\tstat{1.97}. Most importantly for the mega-cap concern, the spread is $+14.1$ points \tstat{1.92}
692 +when the Magnificent~7 are excluded and $+14.5$ points \tstat{1.93} when the ten largest firms are
693 +dropped (Figure~\ref{fig:mag7}). The AI re-rating is a broad-based feature of the index, not the
694 +mechanical footprint of a handful of trillion-dollar winners. Finally, the sector-neutral
695 +composite---which compares firms only to others \emph{within} their GICS sector---produces a much
696 +smaller and insignificant post-2022 spread ($+3.8$ points, $t=0.84$). This is not a failure of the
697 +result but a sharpening of it: a large share of the AI premium operates through a
698 +\emph{between-sector} channel, as the market re-rated AI-exposed sectors (technology above all)
699 +relative to others, with a smaller within-sector residual.
700 +
701 +\input{tab_robust}
702 +
703 +\begin{figure}[H]\centering
704 +\includegraphics[width=0.78\textwidth]{fig10_mag7.png}
705 +\caption{Robustness of the AI return spread to excluding mega-cap winners. The post-2022 composite
706 +spread is stable when the Magnificent~7 or the ten largest firms are removed.}\label{fig:mag7}
707 +\end{figure}
708 +
709 +\subsection{An alternative performance outcome: risk}
710 +Performance is not only about mean returns. We also relate AI disclosure to subsequent realized
711 +volatility. High-AI firms exhibit modestly higher forward volatility, and the gap widens after
712 +2022 (a Q5$-$Q1 difference of about 2.9 annualized volatility points, $t=3.1$). The post-2022 AI
713 +premium therefore came bundled with somewhat higher risk---part, though by no means all, of the
714 +elevated returns is compensation for the greater volatility of AI-exposed firms during a period of
715 +rapid technological repricing.
716 +
717 +\section{Discussion: Mechanism and Interpretation}\label{sec:disc}
718 +What economic mechanism best fits this constellation of facts? We find an \emph{attention- and
719 +narrative-driven repricing} the most parsimonious explanation, and we read the evidence as follows.
720 +
721 +\paragraph{The information pre-existed; the attention did not.} Firms disclosed their AI engagement
722 +for years before it was priced. The semantic content of those disclosures was, in cross-section,
723 +only faintly related to returns through 2021. What changed in late 2022 was not the information but
724 +its \emph{salience}: a consumer breakthrough (ChatGPT) made AI the dominant market narrative
725 +\citep{shiller2017narrative}, drawing investor attention \citep{da2011,barberodean2008} to a body
726 +of disclosure that had been hiding in plain sight. The abrupt, near-simultaneous repricing across
727 +the cross-section---visible in the event study within months of the launch---is the signature of an
728 +attention shock rather than the gradual accrual of a risk premium.
729 +
730 +\paragraph{It is a re-rating of levels, not of changes.} The disappearance of the effect under firm
731 +fixed effects, the muted difference-in-differences estimates, and the event-time profile all point
732 +the same way: the market repriced the persistent \emph{level} of a firm's AI exposure, not the
733 +year-to-year change in its wording. This has a clear practical corollary---firms cannot
734 +mechanically earn the premium by adding AI boilerplate to their filings (and our top-5\% and
735 +simple-mean robustness suggests the measure is not easily gamed)---and a clear methodological one:
736 +studies that difference out firm effects will understate the cross-sectional importance of
737 +disclosure content.
738 +
739 +\paragraph{It operates substantially, but not entirely, through sectors.} The sector-neutral and
740 +sector-fixed-effects results show that much of the AI premium reflects the re-rating of AI-exposed
741 +\emph{sectors}---technology, communication services, and the industrial firms supplying the AI
742 +build-out---relative to the rest of the index. This is economically sensible: the generative-AI
743 +boom was, to first order, a sectoral reallocation of expected cash flows and valuations. Yet a
744 +positive within-sector residual remains in the event study, indicating that the firm's own
745 +disclosure carried incremental information even among industry peers.
746 +
747 +\paragraph{The thematic asymmetry is telling.} Perhaps the most revealing single fact is the
748 +placebo: in the very same post-2022 window, high-AI firms were rewarded while high-ESG and
749 +high-climate firms were penalized. Markets did not simply reward verbose or virtuous-sounding
750 +disclosure; they rotated toward one theme (AI) and away from another (sustainability). This is
751 +difficult to reconcile with a purely mechanical or risk-based account and natural under a
752 +narrative-rotation view of investor attention.
753 +
754 +\paragraph{Relation to the AI-asset-pricing literature.} Our findings complement
755 +\citet{eisfeldt2023generative}, who show that an occupation-task measure of generative-AI exposure
756 +was priced around ChatGPT. We reach a convergent conclusion from an entirely different
757 +measurement---firms' own disclosure language---and extend it along the time dimension, showing that
758 +the same exposure was \emph{un}priced for a decade beforehand. The agreement of two independent
759 +measures on the timing and sign of the effect strengthens confidence that a real AI repricing
760 +occurred.
761 +
762 +\subsection{Implications}
763 +Our findings carry distinct implications for three audiences. \emph{For investors and quantitative
764 +strategists}, the results are a caution as much as an opportunity. The AI-disclosure signal
765 +delivered a striking post-2022 Sharpe ratio, but the same signal was nearly inert for the preceding
766 +decade, and the effect is absorbed by firm fixed effects---so a strategy that traded on
767 +year-to-year changes in AI verbosity would have captured little. The tradeable content lies in the
768 +persistent cross-sectional \emph{level} of AI exposure, and even that is partly a sector bet whose
769 +durability is unproven. The honest reading is that disclosure-based AI signals are best viewed as a
770 +lens on a regime-dependent theme rather than as a stable alpha source. \emph{For corporate managers
771 +and disclosure policy}, the asymmetry between AI (rewarded) and ESG/climate (penalized) after 2022
772 +illustrates how powerfully the prevailing market narrative conditions the valuation consequences of
773 +what firms choose to emphasize. Because the premium attaches to persistent, hard-to-fake exposure
774 +rather than to boilerplate, the result does not invite cheap disclosure manipulation; but it does
775 +suggest that the market reads filings for genuine strategic content and reprices it when attention
776 +turns. \emph{For researchers}, the study demonstrates that embedding-based semantic measurement
777 +uncovers pricing dynamics invisible to both keyword counts (which cannot distinguish meaning) and
778 +firm-differenced panels (which discard the persistent cross-sectional variation that turns out to
779 +matter). The broader agenda---measuring multi-faceted, concept-level exposure from disclosure at
780 +scale and studying its state-dependent pricing---appears fertile.
781 +
782 +\subsection{Summary of the evidence across designs}
783 +It is worth stepping back to see how the designs corroborate one another, since each has different
784 +weaknesses. The portfolio sorts establish the raw magnitude and its post-2022 timing but are
785 +model-free and could in principle reflect risk; the factor-model spanning regressions show the
786 +unconditional spread is not explained by standard factors yet is statistically weak over the full
787 +sample; the sub-period and interaction tests localize the effect to the post-ChatGPT regime; the
788 +placebo rules out a mechanical or generic-disclosure explanation by showing the opposite sign for
789 +ESG and climate; the event study, using daily abnormal returns purged of beta, provides
790 +cleanly-timed, cross-sectional confirmation within months of the catalyst; and the fixed-effects
791 +and difference-in-differences estimates pin down that the priced object is persistent firm- and
792 +sector-level exposure, not incremental wording. No single design is decisive, but their
793 +convergence---on the same sign, the same timing, and a consistent economic story---is what gives us
794 +confidence in the conclusion. A spurious result would have to survive all six designs
795 +simultaneously while also producing the precise ESG/climate sign reversal, which strains credulity.
796 +
797 +\section{Limitations}\label{sec:limits}
798 +Several caveats temper our conclusions. \emph{First}, the post-2022 window contains only three
799 +formation cohorts, and the size-controlled premium is concentrated in the most recent (2024)
800 +cohort, which captures the 2024--2025 AI-infrastructure capital-expenditure boom. The regime result
801 +is economically large and consistent across designs (sorts, event study, DiD), but its post-period
802 +rests on a short sample and could in principle reflect a single extraordinary episode rather than a
803 +durable new regime; only future data can settle this. \emph{Second}, our universe is current
804 +S\&P~500 membership, which introduces survivorship and look-ahead-at-the-index-level bias: firms
805 +that exited the index are absent, and current members were selected partly on past success. This
806 +biases the level of returns upward but is less likely to drive the \emph{cross-sectional}
807 +AI--return relation that is our focus. \emph{Third}, the market-capitalization proxy holds shares
808 +outstanding at their latest value, approximating historical size with error. \emph{Fourth}, the
809 +semantic anchors, though carefully written, embed the authors' definitional choices; different
810 +anchor wording would yield somewhat different scores, although the robustness to mean/tail
811 +aggregations and to PCA mitigates this concern. \emph{Fifth}, disclosure intensity is correlated
812 +with sector, and while our within-year, size-, momentum-, and volatility-controlled tests and the
813 +sector-FE event study address this, we cannot fully separate ``AI exposure'' from ``technology
814 +sector'' as the priced characteristic---indeed, our sector-channel results suggest the two are
815 +deeply intertwined. \emph{Finally}, our designs establish a robust association and an
816 +event-study-based timing argument, but not strict causality; the attention-repricing interpretation
817 +is the most consistent with the evidence rather than the only logically possible one.
818 +
819 +\section{Conclusion}\label{sec:concl}
820 +Using a semantic, embedding-based measure of artificial-intelligence language in the SEC filings of
821 +S\&P~500 firms, linked to Yahoo Finance returns and standard factor data, we have shown that the
822 +pricing of AI disclosure is a \emph{conditional, regime-dependent} phenomenon. For most of the
823 +2010s, how intensively a firm wrote about adopting, building, or being threatened by AI bore only a
824 +faint relation to its subsequent returns, and a risk-adjusted long--short strategy earned no
825 +reliable alpha. After the launch of ChatGPT in late 2022, the same disclosure became strongly
826 +priced: the high-minus-low AI-disclosure return spread jumped from roughly $+2$ to roughly $+15$
827 +percentage points per year. The break is robust to signal definition, horizon, dimension reduction,
828 +and the exclusion of mega-cap winners; it is specific to AI-related language (ESG and climate
829 +disclosure, tested identically, were \emph{penalized} in the same window); it is corroborated by a
830 +market-model event study in which high-AI firms earned $+10$ points of additional abnormal return
831 +in the year after ChatGPT; and it operates as a cross-sectional re-rating of persistent firm- and
832 +sector-level exposure rather than a reward for year-to-year wording, fading under firm fixed
833 +effects.
834 +
835 +The economic message is that markets price the \emph{language} of AI---but only once AI commands
836 +their attention. The methodological message is that embedding-based measurement of disclosure
837 +content opens a productive avenue for asset pricing, capturing economically meaningful, multi-faceted
838 +exposures at scale and revealing pricing dynamics that keyword counts and firm-differenced designs
839 +would miss. As generative AI continues to reshape the corporate landscape, the semantic footprint
840 +it leaves in mandatory disclosure offers a rich, and now demonstrably value-relevant, signal.
841 +
842 +\clearpage
843 +\begin{thebibliography}{99}\small
844 +\setlength{\itemsep}{2pt}
845 +\bibitem[Acemoglu and Restrepo(2020)]{acemoglu2020wrong} Acemoglu, D., and P.\ Restrepo (2020). Robots and Jobs: Evidence from US Labor Markets. \textit{Journal of Political Economy} 128(6), 2188--2244.
846 +\bibitem[Babina et al.(2024)]{babina2024aiinvestment} Babina, T., A.\ Fedyk, A.\ He, and J.\ Hodson (2024). Artificial Intelligence, Firm Growth, and Product Innovation. \textit{Journal of Financial Economics} 151, 103745.
847 +\bibitem[Baker and Wurgler(2006)]{bakerwurgler2006} Baker, M., and J.\ Wurgler (2006). Investor Sentiment and the Cross-Section of Stock Returns. \textit{Journal of Finance} 61(4), 1645--1680.
848 +\bibitem[Barber and Odean(2008)]{barberodean2008} Barber, B.\ M., and T.\ Odean (2008). All That Glitters: The Effect of Attention and News on the Buying Behavior of Individual and Institutional Investors. \textit{Review of Financial Studies} 21(2), 785--818.
849 +\bibitem[Bolton and Kacperczyk(2021)]{bolton2021risk} Bolton, P., and M.\ Kacperczyk (2021). Do Investors Care about Carbon Risk? \textit{Journal of Financial Economics} 142(2), 517--549.
850 +\bibitem[Bybee et al.(2024)]{bybee2024narrative} Bybee, L., B.\ Kelly, A.\ Manela, and D.\ Xiu (2024). Business News and Business Cycles. \textit{Journal of Finance} 79(5), 3105--3147.
851 +\bibitem[Cameron et al.(2011)]{cameron2011} Cameron, A.\ C., J.\ B.\ Gelbach, and D.\ L.\ Miller (2011). Robust Inference with Multiway Clustering. \textit{Journal of Business \& Economic Statistics} 29(2), 238--249.
852 +\bibitem[Cohen et al.(2020)]{cohen2020lazy} Cohen, L., C.\ Malloy, and Q.\ Nguyen (2020). Lazy Prices. \textit{Journal of Finance} 75(3), 1371--1415.
853 +\bibitem[Cong et al.(2022)]{cong2022textfactor} Cong, L.\ W., T.\ Liang, and X.\ Zhang (2022). Textual Factors: A Scalable, Interpretable, and Data-Driven Approach to Analyzing Unstructured Information. Working paper.
854 +\bibitem[Da et al.(2011)]{da2011} Da, Z., J.\ Engelberg, and P.\ Gao (2011). In Search of Attention. \textit{Journal of Finance} 66(5), 1461--1499.
855 +\bibitem[DellaVigna and Pollet(2009)]{dellavigna2009} DellaVigna, S., and J.\ M.\ Pollet (2009). Investor Inattention and Friday Earnings Announcements. \textit{Journal of Finance} 64(2), 709--749.
856 +\bibitem[Eisfeldt et al.(2023)]{eisfeldt2023generative} Eisfeldt, A.\ L., G.\ Schubert, and M.\ B.\ Zhang (2023). Generative AI and Firm Values. NBER Working Paper 31222.
857 +\bibitem[Fama and French(2015)]{famafrench2015} Fama, E.\ F., and K.\ R.\ French (2015). A Five-Factor Asset Pricing Model. \textit{Journal of Financial Economics} 116(1), 1--22.
858 +\bibitem[Fama and MacBeth(1973)]{famamacbeth1973} Fama, E.\ F., and J.\ D.\ MacBeth (1973). Risk, Return, and Equilibrium: Empirical Tests. \textit{Journal of Political Economy} 81(3), 607--636.
859 +\bibitem[Gentzkow et al.(2019)]{gentzkow2019} Gentzkow, M., B.\ Kelly, and M.\ Taddy (2019). Text as Data. \textit{Journal of Economic Literature} 57(3), 535--574.
860 +\bibitem[Hirshleifer et al.(2009)]{hirshleifer2009driven} Hirshleifer, D., S.\ S.\ Lim, and S.\ H.\ Teoh (2009). Driven to Distraction: Extraneous Events and Underreaction to Earnings News. \textit{Journal of Finance} 64(5), 2289--2325.
861 +\bibitem[Hirshleifer et al.(2013)]{hirshleifer2013innovative} Hirshleifer, D., P.-H.\ Hsu, and D.\ Li (2013). Innovative Efficiency and Stock Returns. \textit{Journal of Financial Economics} 107(3), 632--654.
862 +\bibitem[Hoberg and Phillips(2010)]{hoberg2010product} Hoberg, G., and G.\ Phillips (2010). Product Market Synergies and Competition in Mergers and Acquisitions: A Text-Based Analysis. \textit{Review of Financial Studies} 23(10), 3773--3811.
863 +\bibitem[Hoberg and Phillips(2016)]{hobergphillips2016} Hoberg, G., and G.\ Phillips (2016). Text-Based Network Industries and Endogenous Product Differentiation. \textit{Journal of Political Economy} 124(5), 1423--1465.
864 +\bibitem[Kelly et al.(2019)]{kelly2019textregression} Kelly, B., A.\ Manela, and A.\ Moreira (2019). Text Selection. Working paper / \textit{Journal of Business \& Economic Statistics} (2021).
865 +\bibitem[Kogan and Papanikolaou(2014)]{koganpapanikolaou2014} Kogan, L., and D.\ Papanikolaou (2014). Growth Opportunities, Technology Shocks, and Asset Prices. \textit{Journal of Finance} 69(2), 675--718.
866 +\bibitem[Kogan et al.(2017)]{kogan2017technological} Kogan, L., D.\ Papanikolaou, A.\ Seru, and N.\ Stoffman (2017). Technological Innovation, Resource Allocation, and Growth. \textit{Quarterly Journal of Economics} 132(2), 665--712.
867 +\bibitem[Lopez-Lira(2023)]{lopezlira2023risk} Lopez-Lira, A. (2023). Risk Factors That Matter: Textual Analysis of Risk Disclosures for the Cross-Section of Returns. Working paper.
868 +\bibitem[Loughran and McDonald(2011)]{lm2011} Loughran, T., and B.\ McDonald (2011). When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks. \textit{Journal of Finance} 66(1), 35--65.
869 +\bibitem[Loughran and McDonald(2016)]{lm2016} Loughran, T., and B.\ McDonald (2016). Textual Analysis in Accounting and Finance: A Survey. \textit{Journal of Accounting Research} 54(4), 1187--1230.
870 +\bibitem[MacKinlay(1997)]{mackinlay1997} MacKinlay, A.\ C. (1997). Event Studies in Economics and Finance. \textit{Journal of Economic Literature} 35(1), 13--39.
871 +\bibitem[Newey and West(1987)]{neweywest1987} Newey, W.\ K., and K.\ D.\ West (1987). A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix. \textit{Econometrica} 55(3), 703--708.
872 +\bibitem[P\'astor et al.(2021)]{pastor2021sustainable} P\'astor, \v{L}., R.\ F.\ Stambaugh, and L.\ A.\ Taylor (2021). Sustainable Investing in Equilibrium. \textit{Journal of Financial Economics} 142(2), 550--571.
873 +\bibitem[P\'astor et al.(2022)]{pastor2022dissecting} P\'astor, \v{L}., R.\ F.\ Stambaugh, and L.\ A.\ Taylor (2022). Dissecting Green Returns. \textit{Journal of Financial Economics} 146(2), 403--424.
874 +\bibitem[Petersen(2009)]{petersen2009} Petersen, M.\ A. (2009). Estimating Standard Errors in Finance Panel Data Sets: Comparing Approaches. \textit{Review of Financial Studies} 22(1), 435--480.
875 +\bibitem[Reimers and Gurevych(2019)]{reimers2019sbert} Reimers, N., and I.\ Gurevych (2019). Sentence-BERT: Sentence Embeddings Using Siamese BERT-Networks. \textit{EMNLP}.
876 +\bibitem[Shiller(2017)]{shiller2017narrative} Shiller, R.\ J. (2017). Narrative Economics. \textit{American Economic Review} 107(4), 967--1004.
877 +\bibitem[Tetlock(2007)]{tetlock2007} Tetlock, P.\ C. (2007). Giving Content to Investor Sentiment: The Role of Media in the Stock Market. \textit{Journal of Finance} 62(3), 1139--1168.
878 +\bibitem[Tetlock et al.(2008)]{tetlock2008} Tetlock, P.\ C., M.\ Saar-Tsechansky, and S.\ Macskassy (2008). More Than Words: Quantifying Language to Measure Firms' Fundamentals. \textit{Journal of Finance} 63(3), 1437--1467.
879 +\bibitem[Webb(2020)]{webb2020} Webb, M. (2020). The Impact of Artificial Intelligence on the Labor Market. Working paper, Stanford University.
880 +\end{thebibliography}
881 +
882 +\clearpage
883 +\appendix
884 +\section*{Appendix A. Variable Definitions}
885 +\addcontentsline{toc}{section}{Appendix A. Variable Definitions}
886 +\begin{description}[leftmargin=1.5em,style=nextline,itemsep=2pt]
887 +\item[AI\,Adopt (\texttt{ai\_adoption\_wmean}).] Section-weighted mean cosine similarity of a firm's 10-K chunks to the AI-internal-adoption anchor in fiscal year $Y$.
888 +\item[AI\,Infra (\texttt{ai\_infrastructure\_wmean}).] Section-weighted mean similarity to the AI-compute-infrastructure anchor.
889 +\item[AI\,Risk (\texttt{ai\_disruption\_risk\_wmean}).] Section-weighted mean similarity to the AI-product-disruption-risk anchor.
890 +\item[AI\,Compos.] $\tfrac12[z(\text{AI\,Adopt})+z(\text{AI\,Infra})]$, with $z$ the within-year cross-sectional standardization.
891 +\item[Forward return.] Buy-and-hold simple return from July of $Y{+}1$ to June of $Y{+}2$ (adjusted close, dividends reinvested).
892 +\item[Market-adjusted return.] Forward return minus the contemporaneous SPY return.
893 +\item[Size.] Natural log of the market-cap proxy (latest shares outstanding $\times$ price) at formation.
894 +\item[Momentum.] Own return over the 12 months ending at formation, skipping the last month.
895 +\item[Volatility.] Annualized standard deviation of monthly returns over the trailing 12 months.
896 +\item[Post.] Indicator equal to one for formation (fiscal) years $\ge 2022$.
897 +\item[CAR.] Cumulative market-model abnormal return; market model estimated Jan--Oct 2022, event window Nov 2022--Jun 2024.
898 +\end{description}
899 +
900 +\section*{Appendix B. Data and Reproducibility}
901 +\addcontentsline{toc}{section}{Appendix B. Data and Reproducibility}
902 +\noindent Semantic factors are from the EDGAR Research Database (UQO). Equity prices (monthly and
903 +daily) are from Yahoo Finance; the Fama--French five factors, momentum, and the risk-free rate are
904 +from the Kenneth R.\ French data library. All return tests use look-ahead-free July-formation
905 +forward returns. The analysis pipeline (\texttt{analysis/01--09}) downloads prices, builds the
906 +merged panel, runs the sorts/regressions/event study, and emits all figures and tables; results are
907 +serialized to \texttt{results.json}, \texttt{results2.json}, and \texttt{results\_event.json}.
908 +
909 +\end{document}
added docs/original_report_short_2026-06.tex +269 −0
@@ -0,0 +1,269 @@
1 +\documentclass[11pt]{article}
2 +\usepackage[margin=1in]{geometry}
3 +\usepackage{graphicx,booktabs,amsmath,amssymb,siunitx,caption,float}
4 +\usepackage[hidelinks]{hyperref}
5 +\usepackage{xcolor,sectsty,setspace}
6 +\usepackage{titling}
7 +\definecolor{navy}{HTML}{1b3a6b}
8 +\sectionfont{\color{navy}}\subsectionfont{\color{navy}}
9 +\captionsetup{font=small,labelfont={bf,color=navy}}
10 +\graphicspath{{../figures/}}
11 +\setlength{\parskip}{0.45em}\setlength{\parindent}{0pt}
12 +\sisetup{group-minimum-digits=4,group-separator={,}}
13 +\newcommand{\tstat}[1]{{\footnotesize(\textit{t}=#1)}}
14 +
15 +\title{\color{navy}\bfseries Does the Language of Artificial Intelligence Move Markets?\\[2mm]
16 +\large A Semantic Analysis of S\&P~500 SEC Filings and Subsequent Stock Returns, 2010--2026}
17 +\author{EDGAR Research Database Project\\
18 +\small Manel Kammoun \quad Djerrycharli Tandjambianda \quad Simon-Pierre Boucher\\
19 +\small Universit\'e du Qu\'ebec en Outaouais (UQO)}
20 +\date{June 2026}
21 +
22 +\begin{document}
23 +\maketitle
24 +
25 +\begin{abstract}
26 +\noindent We measure the \emph{semantic intensity} of artificial-intelligence (AI) language in the
27 +annual SEC filings (10-K) of S\&P~500 constituents using sentence-embedding cosine
28 +similarity to curated AI ``anchor'' concepts, and ask whether this disclosure
29 +intensity is related to the cross-section of subsequent stock returns. Combining a
30 +panel of 7{,}869 firm-years (500 firms, fiscal years 2010--2026) with monthly
31 +prices from Yahoo Finance and the Fama--French factor data, we form strictly
32 +tradeable forward 12-month returns and study them with portfolio sorts,
33 +factor-model spanning regressions, two-way fixed-effects panels, Fama--MacBeth
34 +regressions, and a structural-break test around the launch of ChatGPT
35 +(November~2022). Our central finding is \textbf{conditional}: over the full sample
36 +the relation between AI-disclosure intensity and future returns is positive but
37 +economically modest and only marginally significant; however, it \emph{more than
38 +sextuples} after 2022. Firms in the top quintile of AI-disclosure intensity
39 +outperformed the bottom quintile by \textbf{+2.4 percentage points} per year before
40 +ChatGPT but by \textbf{+14.6 percentage points} per year afterward. The effect is a
41 +\emph{cross-sectional, regime-dependent re-rating}---it is absorbed by firm fixed
42 +effects, indicating the market repriced which \emph{firms} were AI-exposed rather
43 +than rewarding year-to-year changes in any single firm's wording.
44 +\end{abstract}
45 +
46 +\section{Introduction}
47 +The diffusion of generative AI has been the defining corporate-narrative shift of
48 +the 2020s. A natural question for investors and researchers is whether the
49 +\emph{disclosure} of AI engagement---how intensively a firm writes about adopting,
50 +building, or being threatened by AI in its mandatory filings---carries information
51 +about future equity performance. This study answers that question for the S\&P~500
52 +using a purpose-built semantic measurement of filing text rather than naive keyword
53 +counts.
54 +
55 +We exploit the EDGAR Research Database, which parses every 10-K/10-Q/8-K filing into
56 +sections, embeds each text chunk with the \texttt{all-MiniLM-L6-v2} sentence
57 +transformer, and scores it by cosine similarity to professionally curated anchor
58 +passages describing eight economic concepts. Three of these capture distinct facets
59 +of AI exposure:
60 +\begin{itemize}\setlength\itemsep{0.1em}
61 + \item \textbf{AI~adoption} --- internal use of AI/ML to improve operations;
62 + \item \textbf{AI~infrastructure} --- capital exposure to AI compute (GPUs, data centers, cloud);
63 + \item \textbf{AI~disruption risk} --- the risk that AI commoditizes the firm's products.
64 +\end{itemize}
65 +We aggregate chunk scores to a section-weighted annual firm score, link them to
66 +realized returns, and subject the relation to a battery of asset-pricing tests.
67 +
68 +Our contribution is threefold. First, we move beyond keyword dictionaries to a
69 +\emph{semantic} measure of AI exposure that captures meaning, not just term
70 +frequency. Second, we provide a clean, look-ahead-free mapping from disclosure to
71 +\emph{tradeable} forward returns. Third, and most importantly, we document that the
72 +pricing of AI language is \emph{not} a stable factor premium but a
73 +\textbf{regime-dependent re-rating} that switched on with the generative-AI boom.
74 +
75 +\section{Data}
76 +\paragraph{Semantic factors.} The firm-year panel contains 7{,}869
77 +observations covering all 500 current S\&P~500 members across fiscal years
78 +2010--2026. For each of the eight anchor concepts the database reports the mean,
79 +maximum, standard deviation, top-5\% tail, and section-weighted mean
80 +(\texttt{wmean}) of chunk-level cosine similarities, together with first/second
81 +differences and rolling statistics. We use the section-weighted mean as our
82 +headline signal because it up-weights the Risk-Factors and MD\&A sections where
83 +forward-looking strategic content concentrates.
84 +
85 +\paragraph{Prices and factors.} We download monthly adjusted close prices for all
86 +500 tickers from Yahoo Finance (2009--2026), the SPDR S\&P~500 ETF (SPY) as the
87 +market benchmark, and the Fama--French five factors plus momentum and the risk-free
88 +rate from the Kenneth French data library.
89 +
90 +\paragraph{Timing.} A 10-K covering fiscal year $Y$ is public by roughly
91 +February--March of $Y{+}1$. To eliminate look-ahead bias we form signals at the
92 +\textbf{end of June of $Y{+}1$} and measure the \textbf{forward 12-month return over
93 +July~$Y{+}1$ to June~$Y{+}2$}---the Fama--French portfolio convention. The signal is
94 +therefore always known before the holding period begins. This yields 6{,}852
95 +firm-years with a tradeable forward return spanning formation years 2010--2024
96 +(return realizations through mid-2026).
97 +
98 +\paragraph{Variables and treatment.} For each formation year we compute
99 +cross-sectional $z$-scores of every signal (so coefficients are per-standard-deviation
100 +and the secular rise in AI language is differenced out), plus controls for size
101 +(log market-cap proxy), 12-month momentum, and trailing volatility. Returns and
102 +controls are winsorized at the 1st/99th percentiles in regressions. Table~\ref{tab:summ}
103 +reports summary statistics.
104 +
105 +\input{tab_summary}
106 +
107 +A first caveat is visible in the correlation structure: the three AI signals are
108 +highly collinear ($\rho = 0.75$--$0.86$). They are best read as three lenses on a
109 +single latent construct---\emph{AI salience} in corporate disclosure---rather than as
110 +independent factors. This collinearity matters for interpreting multivariate
111 +specifications below.
112 +
113 +\section{The Rise of AI Language}
114 +Before turning to returns we document the raw phenomenon. Figure~\ref{fig:trend}
115 +shows that the cross-sectional mean similarity to all three AI concepts rose
116 +steadily over the decade and accelerated sharply after 2022: by 2025--2026, AI
117 +language saturates S\&P~500 disclosure. This secular trend is precisely why our
118 +tests rely on \emph{within-year cross-sectional} ranking---in any given year we ask
119 +which firms talk about AI \emph{more than their peers}, not whether the index as a
120 +whole talks about AI more than it used to.
121 +
122 +\begin{figure}[H]\centering
123 +\includegraphics[width=0.92\textwidth]{fig4_ai_language_trend.png}
124 +\caption{Cross-sectional mean of section-weighted cosine similarity to each AI anchor,
125 +by fiscal year. All three measures trend upward and inflect after the 2022 launch of
126 +ChatGPT (dashed line).}\label{fig:trend}
127 +\end{figure}
128 +
129 +\section{Results}
130 +\subsection{Portfolio sorts}
131 +Each formation year we sort firms into quintiles on each AI signal and compute the
132 +equal-weighted (EW) and value-weighted (VW) forward return of each quintile, plus
133 +the high-minus-low (Q5$-$Q1) spread. Statistical significance uses Newey--West
134 +(3-lag) $t$-statistics on the annual spread series. Table~\ref{tab:sorts} summarizes.
135 +
136 +\input{tab_sorts}
137 +
138 +Over the full sample the relation is monotone-ish and positive but economically
139 +modest: the EW Q5$-$Q1 spread is +4.6~pp/yr for AI~adoption \tstat{1.83},
140 ++3.9~pp/yr for AI~infrastructure \tstat{1.58}, and +5.3~pp/yr for AI~disruption
141 +risk \tstat{2.27}. Value-weighting attenuates the adoption and composite spreads,
142 +indicating the effect is stronger among smaller index members. The left panel of
143 +Figure~\ref{fig:quint} shows the full-sample quintile pattern.
144 +
145 +\subsection{Does AI disclosure earn risk-adjusted alpha?}
146 +We next build an annually rebalanced, equal-weighted, self-financing long-short
147 +portfolio (top minus bottom quintile) and regress its monthly return on the CAPM and
148 +on the Fama--French five-factor-plus-momentum (FF6) model. Table~\ref{tab:alpha}
149 +reports intercepts (alphas).
150 +
151 +\input{tab_alpha}
152 +
153 +Unconditionally, the AI-opportunity long-short earns about +2.3\%/yr, of which the
154 +FF6 alpha is +1.9\%/yr but statistically insignificant \tstat{1.24}: most of the raw
155 +spread is compensation for known factors and noise. The one exception is the
156 +\emph{AI-disruption-risk} spread, whose FF6 alpha of +2.8\%/yr is marginally
157 +significant \tstat{2.10}---firms that flag AI as a competitive threat earned a small
158 +premium, consistent with a risk-premium interpretation. The headline message of the
159 +full-sample tests is therefore one of \emph{weak, mostly-not-significant} pricing.
160 +
161 +\subsection{Panel regressions and Fama--MacBeth}
162 +Table~\ref{tab:panel} reports two-way (firm $\times$ year) fixed-effects panel
163 +regressions of forward returns on the AI $z$-scores and controls, with standard
164 +errors double-clustered by firm and year, alongside Fama--MacBeth estimates.
165 +
166 +\input{tab_panel}
167 +
168 +The two contrasting columns are instructive. In the \textbf{Fama--MacBeth}
169 +cross-sectional regressions the AI-adoption and AI-infrastructure premia are positive
170 +(+1.3 and +1.6~pp per standard deviation) with $t$-statistics near 1.6--1.7---weakly
171 +positive pricing in the cross-section. In the \textbf{two-way fixed-effects} panel,
172 +however, every AI coefficient collapses to essentially zero. Because firm fixed
173 +effects remove all permanent cross-firm differences, this tells us the signal lives
174 +\emph{across} firms, not \emph{within} them: a given firm writing relatively more
175 +about AI from one year to the next does not predict its own subsequent return. The
176 +market priced \emph{which firms are AI-exposed}, not the annual wording wiggle. (Size
177 +carries the familiar negative premium throughout, $t\approx-8$.)
178 +
179 +\subsection{The structural break: AI pricing switched on after ChatGPT}
180 +The full-sample averages mask a sharp regime change. Splitting at the November~2022
181 +launch of ChatGPT, Figure~\ref{fig:quint} (center vs.\ right panel) shows the
182 +quintile pattern is nearly flat before 2022 and steeply increasing afterward. The
183 +annual Q5$-$Q1 spreads in Figure~\ref{fig:spread} are small and mixed-sign through
184 +2021, then large and positive for every post-2022 formation year.
185 +
186 +\begin{figure}[H]\centering
187 +\includegraphics[width=\textwidth]{fig1_quintile_returns.png}
188 +\caption{Mean forward 12-month return by AI-disclosure composite quintile. The
189 +high-minus-low spread is +2.4~pp before ChatGPT and +14.6~pp after.}\label{fig:quint}
190 +\end{figure}
191 +
192 +\begin{figure}[H]\centering
193 +\includegraphics[width=0.92\textwidth]{fig3_annual_spread.png}
194 +\caption{Annual high-minus-low (Q5$-$Q1) forward-return spread on the AI-disclosure
195 +composite, by 10-K fiscal year. Post-ChatGPT formation years (red) are uniformly and
196 +substantially positive.}\label{fig:spread}
197 +\end{figure}
198 +
199 +Table~\ref{tab:break} quantifies the break two ways: sub-period quintile spreads and
200 +a pooled interaction of the AI $z$-score with a post-2022 indicator.
201 +
202 +\input{tab_break}
203 +
204 +The numbers are striking. The AI-adoption Q5$-$Q1 spread rises from +2.2\%/yr
205 +\tstat{2.04} pre-2022 to \textbf{+14.3\%/yr} \tstat{2.15} post-2022; the composite
206 +rises from +2.5\% to +14.6\%/yr. In the interaction regressions the post-2022
207 +incremental slope is positive for all three signals and statistically significant for
208 +AI~infrastructure \tstat{2.63}, the facet most directly tied to the firms (chipmakers,
209 +cloud, data-center, and power names) that led the 2023--2025 rally. The cumulative
210 +long-short wealth curve in Figure~\ref{fig:cum} makes the timing visible: the AI
211 +portfolios drift sideways-to-up for a decade, then inflect upward after the dashed
212 +ChatGPT line.
213 +
214 +\begin{figure}[H]\centering
215 +\includegraphics[width=0.92\textwidth]{fig2_cumulative_ls.png}
216 +\caption{Cumulative value of \$1 invested in the equal-weighted, annually
217 +rebalanced, self-financing high-minus-low AI-disclosure portfolio.}\label{fig:cum}
218 +\end{figure}
219 +
220 +Figure~\ref{fig:bin} confirms the pattern is not driven by outliers: the binned
221 +relation between the AI composite and forward returns is flat pre-2022 and clearly
222 +upward-sloping post-2022.
223 +
224 +\begin{figure}[H]\centering
225 +\includegraphics[width=\textwidth]{fig5_binscatter.png}
226 +\caption{Binned scatter of forward return against the AI-disclosure composite, by
227 +sub-period. The conditional slope steepens markedly after ChatGPT.}\label{fig:bin}
228 +\end{figure}
229 +
230 +\section{Discussion}
231 +Three conclusions follow. \textbf{(1) AI disclosure is informative, but
232 +conditionally.} It is not a stable, decade-long return factor; it is a signal that
233 +the market began to price only once generative AI became salient. This is consistent
234 +with an \emph{attention} or \emph{re-rating} mechanism: the textual evidence of AI
235 +engagement existed for years, but capital flowed toward AI-exposed firms only after a
236 +narrative catalyst. \textbf{(2) The effect is cross-sectional, not within-firm.} The
237 +disappearance of the coefficient under firm fixed effects warns against trading
238 +year-to-year changes in a single firm's AI verbosity; the durable signal is the
239 +persistent \emph{level} of a firm's AI exposure relative to peers. \textbf{(3) The
240 +three AI lenses largely coincide.} Their high collinearity means one should not
241 +over-interpret which specific facet (adoption vs.\ infrastructure vs.\ risk)
242 +``wins''; they jointly proxy a single AI-salience construct, and the infrastructure
243 +lens simply loads most heavily on the firms that led the boom.
244 +
245 +\section{Limitations}
246 +The post-2022 window contains only three formation years, so the regime result, while
247 +economically large and robust across signals and specifications, rests on a short
248 +post-period and should be read as suggestive rather than definitive. The market-cap
249 +proxy holds shares outstanding at their latest value; survivorship is present because
250 +we use current index membership; and the semantic anchors, though carefully curated,
251 +embed the authors' definitional choices. Finally, disclosure intensity is correlated
252 +with sector (Information Technology firms naturally score higher), so part of the
253 +post-2022 premium reflects a sector tilt toward technology---though the within-year,
254 +size- and momentum-controlled tests mitigate this.
255 +
256 +\section{Conclusion}
257 +Using a semantic, embedding-based measure of AI language in S\&P~500 filings linked
258 +to Yahoo Finance returns, we find that AI disclosure carried little pricing power for
259 +most of the 2010s and then became strongly rewarded after the launch of ChatGPT. The
260 +high-minus-low AI-disclosure return spread jumped from roughly +2~pp to roughly
261 ++15~pp per year. The pattern is a regime-dependent, cross-sectional re-rating rather
262 +than a persistent factor premium---evidence that markets price the \emph{language} of
263 +AI, but only once AI commands their attention.
264 +
265 +\vspace{1em}\hrule\vspace{0.4em}
266 +{\footnotesize\textit{Data:} EDGAR Research Database (UQO); prices from Yahoo Finance;
267 +factors from the Kenneth R.\ French data library. All return tests use look-ahead-free
268 +July-formation forward returns. Code and tables: \texttt{analysis/}.}
269 +\end{document}
added figures/fig10_mag7.png +0 −0

Binary file not shown.

added figures/fig11_eventtime.png +0 −0

Binary file not shown.

added figures/fig12_sector_box.png +0 −0

Binary file not shown.

added figures/fig13_event_binscatter.png +0 −0

Binary file not shown.

added figures/fig1_quintile_returns.png +0 −0

Binary file not shown.

added figures/fig2_cumulative_ls.png +0 −0

Binary file not shown.

added figures/fig3_annual_spread.png +0 −0

Binary file not shown.

added figures/fig4_ai_language_trend.png +0 −0

Binary file not shown.

added figures/fig5_binscatter.png +0 −0

Binary file not shown.

added figures/fig6_fm_byyear.png +0 −0

Binary file not shown.

added figures/fig7_placebo.png +0 −0

Binary file not shown.

added figures/fig8_event_car.png +0 −0

Binary file not shown.

added figures/fig9_double_sort.png +0 −0

Binary file not shown.

added paper/.latexmkrc +5 −0
@@ -0,0 +1,5 @@
1 +$pdf_mode = 1;
2 +$pdflatex = 'pdflatex -interaction=nonstopmode -halt-on-error -synctex=1 %O %S';
3 +$bibtex_use = 2;
4 +$clean_ext = 'synctex.gz run.xml bbl bcf fdb_latexmk fls log aux out toc lof lot blg';
5 +@default_files = ('main.tex');
added paper/Makefile +11 −0
@@ -0,0 +1,11 @@
1 +.PHONY: all clean distclean
2 +
3 +all:
4 + latexmk
5 +
6 +clean:
7 + latexmk -c
8 +
9 +distclean:
10 + latexmk -C
11 + rm -f *.synctex.gz *.run.xml *.bbl *.bcf
added paper/appendix/appendix.tex +53 −0
@@ -0,0 +1,53 @@
1 +% ============================================================================
2 +% Appendix
3 +% ============================================================================
4 +\newpage
5 +\begin{appendices}
6 +
7 +\renewcommand{\thetable}{A\arabic{table}}
8 +\renewcommand{\thefigure}{A\arabic{figure}}
9 +\setcounter{table}{0}
10 +\setcounter{figure}{0}
11 +
12 +\section{Variable Definitions}
13 +\label{app:variables}
14 +
15 +\begin{table}[htbp]
16 + \centering
17 + \caption{Variable Definitions}
18 + \label{tab:app_variables}
19 + \small
20 + \begin{tabular}{@{}p{4.2cm}p{10.5cm}@{}}
21 + \toprule
22 + Variable & Definition \\
23 + \midrule
24 + AI\,Adopt (\texttt{ai\_adoption\_wmean}) & Section-weighted mean cosine similarity of a firm's 10-K text chunks to the AI-internal-adoption anchor in fiscal year $Y$. \\[4pt]
25 + AI\,Infra (\texttt{ai\_infrastructure\_wmean}) & Section-weighted mean similarity to the AI-compute-infrastructure anchor. \\[4pt]
26 + AI\,Risk (\texttt{ai\_disruption\_risk\_wmean}) & Section-weighted mean similarity to the AI-product-disruption-risk anchor. \\[4pt]
27 + AI\,Compos & $\tfrac12[z(\text{AI\,Adopt})+z(\text{AI\,Infra})]$, with $z$ the within-year cross-sectional standardization. \\[4pt]
28 + Forward return & Buy-and-hold simple return from July of $Y{+}1$ to June of $Y{+}2$ (adjusted close, dividends reinvested). \\[4pt]
29 + Market-adjusted return & Forward return minus the contemporaneous SPY return. \\[4pt]
30 + Size & Natural logarithm of the market-cap proxy (latest shares outstanding $\times$ price) at formation. \\[4pt]
31 + Momentum & Own return over the 12 months ending at formation, skipping the last month. \\[4pt]
32 + Volatility & Annualized standard deviation of monthly returns over the trailing 12 months. \\[4pt]
33 + Post & Indicator equal to one for formation (fiscal) years $\ge 2022$. \\[4pt]
34 + CAR & Cumulative market-model abnormal return; market model estimated Jan--Oct 2022, event window Nov 2022--Jun 2024. \\
35 + \bottomrule
36 + \end{tabular}
37 +\end{table}
38 +
39 +\section{Data Sources and Reproducibility}
40 +\label{app:repro}
41 +
42 +Semantic factors are from the EDGAR Research Database (UQO), which embeds 10-K text with the
43 +\texttt{all-MiniLM-L6-v2} sentence transformer and scores each chunk by cosine similarity to curated
44 +anchor passages. Equity prices (monthly and daily) are from Yahoo Finance; the Fama--French five
45 +factors, the momentum factor, and the risk-free rate are from the Kenneth R.\ French data library. All
46 +return tests use look-ahead-free July-formation forward returns, with signals taken from the 10-K of
47 +the preceding fiscal year. The analysis pipeline downloads prices, builds the merged firm-year panel,
48 +runs the portfolio sorts, factor regressions, panel and Fama--MacBeth estimators, the
49 +difference-in-differences specifications, and the market-model event study, and emits all figures and
50 +tables programmatically; numerical results are serialized to machine-readable result files so that
51 +every number reported in the paper is reproducible from source.
52 +
53 +\end{appendices}
added paper/figures/fig10_mag7.png +0 −0

Binary file not shown.

added paper/figures/fig11_eventtime.png +0 −0

Binary file not shown.

added paper/figures/fig12_sector_box.png +0 −0

Binary file not shown.

added paper/figures/fig13_event_binscatter.png +0 −0

Binary file not shown.

added paper/figures/fig1_quintile_returns.png +0 −0

Binary file not shown.

added paper/figures/fig2_cumulative_ls.png +0 −0

Binary file not shown.

added paper/figures/fig3_annual_spread.png +0 −0

Binary file not shown.

added paper/figures/fig4_ai_language_trend.png +0 −0

Binary file not shown.

added paper/figures/fig5_binscatter.png +0 −0

Binary file not shown.

added paper/figures/fig6_fm_byyear.png +0 −0

Binary file not shown.

added paper/figures/fig7_placebo.png +0 −0

Binary file not shown.

added paper/figures/fig8_event_car.png +0 −0

Binary file not shown.

added paper/figures/fig9_double_sort.png +0 −0

Binary file not shown.

added paper/main.pdf +0 −0

Binary file not shown.

added paper/main.tex +183 −0
@@ -0,0 +1,183 @@
1 +% ============================================================================
2 +% UQO Working Paper Template — Economics / Finance
3 +% ============================================================================
4 +\documentclass[12pt,letterpaper]{article}
5 +
6 +% --- Encoding & Language ---
7 +\usepackage[utf8]{inputenc}
8 +\usepackage[T1]{fontenc}
9 +\usepackage[english]{babel}
10 +
11 +% --- Page Layout ---
12 +\usepackage[
13 + letterpaper,
14 + top=1in,
15 + bottom=1in,
16 + left=1in,
17 + right=1in
18 +]{geometry}
19 +
20 +% --- Typography ---
21 +\usepackage{mathptmx} % Times-like font (text + math)
22 +\usepackage{microtype} % Improved typographic refinements
23 +\usepackage{setspace}
24 +\onehalfspacing % 1.5 line spacing
25 +
26 +% --- Math ---
27 +\usepackage{amsmath,amssymb,amsthm}
28 +
29 +% --- Tables ---
30 +\usepackage{booktabs}
31 +\usepackage{tabularx}
32 +\usepackage{multirow}
33 +\usepackage{threeparttable}
34 +\usepackage{siunitx}
35 +\sisetup{
36 + input-symbols = {()},
37 + table-format = -1.3,
38 + parse-numbers = false
39 +}
40 +
41 +% --- Figures ---
42 +\usepackage{graphicx}
43 +\usepackage{subcaption}
44 +\usepackage{float}
45 +
46 +% --- Colors & Links ---
47 +\usepackage[dvipsnames]{xcolor}
48 +\usepackage[
49 + colorlinks = true,
50 + linkcolor = NavyBlue,
51 + citecolor = NavyBlue,
52 + urlcolor = NavyBlue,
53 + breaklinks = true
54 +]{hyperref}
55 +\hypersetup{
56 + pdftitle = {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},
57 + pdfauthor = {Manel Kammoun, Djerrycharli Tandjambianda, Simon-Pierre Boucher}
58 +}
59 +
60 +% --- Bibliography ---
61 +\usepackage[authoryear,round,semicolon]{natbib}
62 +\bibliographystyle{aer}
63 +
64 +% --- Captions ---
65 +\usepackage[
66 + font = small,
67 + labelfont = bf,
68 + labelsep = period,
69 + justification = justified,
70 + singlelinecheck = false
71 +]{caption}
72 +
73 +% --- Headers & Footers ---
74 +\usepackage{fancyhdr}
75 +\pagestyle{fancy}
76 +\fancyhf{}
77 +\renewcommand{\headrulewidth}{0pt}
78 +\fancyfoot[C]{\thepage}
79 +
80 +% --- Section Formatting ---
81 +\usepackage{titlesec}
82 +\titleformat{\section}{\large\bfseries}{\thesection.}{0.5em}{}
83 +\titleformat{\subsection}{\normalsize\bfseries}{\thesubsection.}{0.5em}{}
84 +\titleformat{\subsubsection}{\normalsize\itshape}{\thesubsubsection.}{0.5em}{}
85 +
86 +% --- Appendix Support ---
87 +\usepackage[toc,page]{appendix}
88 +
89 +% --- Paper-specific ---
90 +\sisetup{group-minimum-digits=4, group-separator={,}}
91 +\newcommand{\tstat}[1]{{\footnotesize(\textit{t}=#1)}}
92 +\newcommand{\tablelegend}[1]{\par\vspace{0.25em}\begin{minipage}{\linewidth}\footnotesize\textit{Notes:} #1\end{minipage}}
93 +\graphicspath{{figures/}}
94 +
95 +% --- Misc ---
96 +\usepackage{enumitem}
97 +\setlist{nosep,leftmargin=*}
98 +
99 +% ============================================================================
100 +% METADATA
101 +% ============================================================================
102 +\newcommand{\WPnumber}{17}
103 +\newcommand{\WPtitle}{Does the Language of Artificial Intelligence Move Markets?}
104 +\newcommand{\WPsubtitle}{A Semantic Analysis of S\&P~500 SEC Filings and the Cross-Section of Stock Returns, 2010--2026}
105 +\newcommand{\WPdate}{June 2026}
106 +\newcommand{\WPversion}{1.0}
107 +\newcommand{\WPabstract}{%
108 +\begingroup\singlespacing % long abstract: single spacing so that Keywords and JEL stay on page 2
109 +We construct a \emph{semantic} measure of artificial-intelligence (AI) engagement for every
110 +S\&P~500 firm by embedding the text of its annual SEC filings (Form~10-K) with a sentence
111 +transformer and scoring each passage by cosine similarity to professionally curated AI
112 +``anchor'' concepts---internal AI adoption, AI infrastructure exposure, and AI product-disruption
113 +risk. Linking these scores to monthly equity prices from Yahoo Finance and to the Fama--French
114 +factor data, we assemble a panel of \num{7869} firm-years (500 firms, fiscal years 2010--2026)
115 +and ask whether the intensity of AI language predicts the cross-section of subsequent returns.
116 +Our central result is \textbf{conditional and economically large}. Over the full sample the
117 +relation between AI-disclosure intensity and future returns is positive but modest and only
118 +marginally significant; a risk-adjusted long--short portfolio earns an insignificant
119 +$\sim$2\%/year. After the public launch of ChatGPT (30 November 2022), however, the relation
120 +\emph{more than sextuples}: the spread between the top and bottom quintile of AI disclosure rises
121 +from $+2.4$ percentage points per year before 2022 to $+14.6$ points per year afterward. The
122 +break survives section-weighting choices, alternative signal definitions and horizons, dimension
123 +reduction, and---crucially---the exclusion of the ``Magnificent~7'' mega-caps. A battery of
124 +identification tests sharpens the interpretation: (i) a \emph{placebo} across five non-AI
125 +semantic factors shows the post-2022 jump is specific to AI-related language (ESG and climate
126 +disclosure, by contrast, earn \emph{negative} post-2022 spreads); (ii) a market-model
127 +\emph{event study} finds that firms with higher pre-event AI disclosure earned $+10.1\%$ higher
128 +cumulative abnormal returns over the year after ChatGPT \tstat{1.97}; and (iii) the effect is
129 +absorbed by firm fixed effects and roughly halved by sector fixed effects, indicating a
130 +\emph{cross-sectional, regime-dependent re-rating}---the market repriced \emph{which firms and
131 +sectors} are AI-exposed once AI became salient, rather than rewarding year-to-year changes in any
132 +single firm's wording. The findings provide direct, text-based evidence for an attention- and
133 +narrative-driven repricing of AI exposure, and illustrate the value of embedding-based disclosure
134 +measurement for asset pricing.
135 +
136 +\par\endgroup
137 +}
138 +\newcommand{\WPkeywords}{textual analysis, sentence embeddings, artificial intelligence, disclosure, cross-section of returns, investor attention, event study, generative AI}
139 +\newcommand{\WPjel}{G12, G14, G17, M41, O33}
140 +
141 +% --- Authors ---
142 +\newcommand{\WPauthor}{Manel Kammoun \quad Djerrycharli Tandjambianda \quad Simon-Pierre Boucher}
143 +\newcommand{\WPaffiliation}{%
144 + Département des sciences administratives\\
145 + Université du Québec en Outaouais%
146 +}
147 +\newcommand{\WPemail}{%
148 + \href{mailto:manel.kammoun@uqo.ca}{manel.kammoun@uqo.ca} \,\textperiodcentered\,
149 + \href{mailto:djerrycharli.tandjambianda@uqo.ca}{djerrycharli.tandjambianda@uqo.ca} \,\textperiodcentered\,
150 + \href{mailto:simon-pierre.boucher@uqo.ca}{simon-pierre.boucher@uqo.ca}%
151 +}
152 +\newcommand{\WPaddress}{%
153 + Gatineau -- Pavillon Alexandre-Taché\\
154 + 283, boulevard Alexandre-Taché\\
155 + Gatineau, Québec, Canada J9A 1L8%
156 +}
157 +
158 +% ============================================================================
159 +% DOCUMENT
160 +% ============================================================================
161 +\begin{document}
162 +
163 +% --- Title Page ---
164 +\input{sections/titlepage}
165 +
166 +% --- Main Body ---
167 +\input{sections/introduction}
168 +\input{sections/literature}
169 +\input{sections/data}
170 +\input{sections/methodology}
171 +\input{sections/results}
172 +\input{sections/robustness}
173 +\input{sections/discussion}
174 +\input{sections/conclusion}
175 +
176 +% --- References ---
177 +\newpage
178 +\bibliography{references}
179 +
180 +% --- Appendix ---
181 +\input{appendix/appendix}
182 +
183 +\end{document}
added paper/references.bib +340 −0
@@ -0,0 +1,340 @@
1 +% ============================================================================
2 +% References — BibTeX Database
3 +% "Does the Language of Artificial Intelligence Move Markets?"
4 +% ============================================================================
5 +
6 +@article{acemoglu2020wrong,
7 + author = {Acemoglu, Daron and Restrepo, Pascual},
8 + title = {Robots and Jobs: Evidence from {US} Labor Markets},
9 + journal = {Journal of Political Economy},
10 + volume = {128},
11 + number = {6},
12 + pages = {2188--2244},
13 + year = {2020}
14 +}
15 +
16 +@article{babina2024aiinvestment,
17 + author = {Babina, Tania and Fedyk, Anastassia and He, Alex and Hodson, James},
18 + title = {Artificial Intelligence, Firm Growth, and Product Innovation},
19 + journal = {Journal of Financial Economics},
20 + volume = {151},
21 + pages = {103745},
22 + year = {2024}
23 +}
24 +
25 +@article{bakerwurgler2006,
26 + author = {Baker, Malcolm and Wurgler, Jeffrey},
27 + title = {Investor Sentiment and the Cross-Section of Stock Returns},
28 + journal = {Journal of Finance},
29 + volume = {61},
30 + number = {4},
31 + pages = {1645--1680},
32 + year = {2006}
33 +}
34 +
35 +@article{barberodean2008,
36 + author = {Barber, Brad M. and Odean, Terrance},
37 + title = {All That Glitters: The Effect of Attention and News on the Buying Behavior of Individual and Institutional Investors},
38 + journal = {Review of Financial Studies},
39 + volume = {21},
40 + number = {2},
41 + pages = {785--818},
42 + year = {2008}
43 +}
44 +
45 +@article{bolton2021risk,
46 + author = {Bolton, Patrick and Kacperczyk, Marcin},
47 + title = {Do Investors Care about Carbon Risk?},
48 + journal = {Journal of Financial Economics},
49 + volume = {142},
50 + number = {2},
51 + pages = {517--549},
52 + year = {2021}
53 +}
54 +
55 +@article{bybee2024narrative,
56 + author = {Bybee, Leland and Kelly, Bryan and Manela, Asaf and Xiu, Dacheng},
57 + title = {Business News and Business Cycles},
58 + journal = {Journal of Finance},
59 + volume = {79},
60 + number = {5},
61 + pages = {3105--3147},
62 + year = {2024}
63 +}
64 +
65 +@article{cameron2011,
66 + author = {Cameron, A. Colin and Gelbach, Jonah B. and Miller, Douglas L.},
67 + title = {Robust Inference with Multiway Clustering},
68 + journal = {Journal of Business \& Economic Statistics},
69 + volume = {29},
70 + number = {2},
71 + pages = {238--249},
72 + year = {2011}
73 +}
74 +
75 +@article{cohen2020lazy,
76 + author = {Cohen, Lauren and Malloy, Christopher and Nguyen, Quoc},
77 + title = {Lazy Prices},
78 + journal = {Journal of Finance},
79 + volume = {75},
80 + number = {3},
81 + pages = {1371--1415},
82 + year = {2020}
83 +}
84 +
85 +@techreport{cong2022textfactor,
86 + author = {Cong, Lin William and Liang, Tengyuan and Zhang, Xiao},
87 + title = {Textual Factors: A Scalable, Interpretable, and Data-Driven Approach to Analyzing Unstructured Information},
88 + institution = {Working Paper},
89 + year = {2022}
90 +}
91 +
92 +@article{da2011,
93 + author = {Da, Zhi and Engelberg, Joseph and Gao, Pengjie},
94 + title = {In Search of Attention},
95 + journal = {Journal of Finance},
96 + volume = {66},
97 + number = {5},
98 + pages = {1461--1499},
99 + year = {2011}
100 +}
101 +
102 +@article{dellavigna2009,
103 + author = {DellaVigna, Stefano and Pollet, Joshua M.},
104 + title = {Investor Inattention and {Friday} Earnings Announcements},
105 + journal = {Journal of Finance},
106 + volume = {64},
107 + number = {2},
108 + pages = {709--749},
109 + year = {2009}
110 +}
111 +
112 +@techreport{eisfeldt2023generative,
113 + author = {Eisfeldt, Andrea L. and Schubert, Gregor and Zhang, Miao Ben},
114 + title = {Generative {AI} and Firm Values},
115 + institution = {National Bureau of Economic Research},
116 + type = {NBER Working Paper},
117 + number = {31222},
118 + year = {2023}
119 +}
120 +
121 +@article{famafrench2015,
122 + author = {Fama, Eugene F. and French, Kenneth R.},
123 + title = {A Five-Factor Asset Pricing Model},
124 + journal = {Journal of Financial Economics},
125 + volume = {116},
126 + number = {1},
127 + pages = {1--22},
128 + year = {2015}
129 +}
130 +
131 +@article{famamacbeth1973,
132 + author = {Fama, Eugene F. and MacBeth, James D.},
133 + title = {Risk, Return, and Equilibrium: Empirical Tests},
134 + journal = {Journal of Political Economy},
135 + volume = {81},
136 + number = {3},
137 + pages = {607--636},
138 + year = {1973}
139 +}
140 +
141 +@article{gentzkow2019,
142 + author = {Gentzkow, Matthew and Kelly, Bryan and Taddy, Matt},
143 + title = {Text as Data},
144 + journal = {Journal of Economic Literature},
145 + volume = {57},
146 + number = {3},
147 + pages = {535--574},
148 + year = {2019}
149 +}
150 +
151 +@article{hirshleifer2009driven,
152 + author = {Hirshleifer, David and Lim, Sonya S. and Teoh, Siew Hong},
153 + title = {Driven to Distraction: Extraneous Events and Underreaction to Earnings News},
154 + journal = {Journal of Finance},
155 + volume = {64},
156 + number = {5},
157 + pages = {2289--2325},
158 + year = {2009}
159 +}
160 +
161 +@article{hirshleifer2013innovative,
162 + author = {Hirshleifer, David and Hsu, Po-Hsuan and Li, Dongmei},
163 + title = {Innovative Efficiency and Stock Returns},
164 + journal = {Journal of Financial Economics},
165 + volume = {107},
166 + number = {3},
167 + pages = {632--654},
168 + year = {2013}
169 +}
170 +
171 +@article{hoberg2010product,
172 + author = {Hoberg, Gerard and Phillips, Gordon},
173 + title = {Product Market Synergies and Competition in Mergers and Acquisitions: A Text-Based Analysis},
174 + journal = {Review of Financial Studies},
175 + volume = {23},
176 + number = {10},
177 + pages = {3773--3811},
178 + year = {2010}
179 +}
180 +
181 +@article{hobergphillips2016,
182 + author = {Hoberg, Gerard and Phillips, Gordon},
183 + title = {Text-Based Network Industries and Endogenous Product Differentiation},
184 + journal = {Journal of Political Economy},
185 + volume = {124},
186 + number = {5},
187 + pages = {1423--1465},
188 + year = {2016}
189 +}
190 +
191 +@article{kelly2019textregression,
192 + author = {Kelly, Bryan and Manela, Asaf and Moreira, Alan},
193 + title = {Text Selection},
194 + journal = {Journal of Business \& Economic Statistics},
195 + volume = {39},
196 + number = {4},
197 + pages = {859--879},
198 + year = {2021}
199 +}
200 +
201 +@article{kogan2017technological,
202 + author = {Kogan, Leonid and Papanikolaou, Dimitris and Seru, Amit and Stoffman, Noah},
203 + title = {Technological Innovation, Resource Allocation, and Growth},
204 + journal = {Quarterly Journal of Economics},
205 + volume = {132},
206 + number = {2},
207 + pages = {665--712},
208 + year = {2017}
209 +}
210 +
211 +@article{koganpapanikolaou2014,
212 + author = {Kogan, Leonid and Papanikolaou, Dimitris},
213 + title = {Growth Opportunities, Technology Shocks, and Asset Prices},
214 + journal = {Journal of Finance},
215 + volume = {69},
216 + number = {2},
217 + pages = {675--718},
218 + year = {2014}
219 +}
220 +
221 +@techreport{lopezlira2023risk,
222 + author = {Lopez-Lira, Alejandro},
223 + title = {Risk Factors That Matter: Textual Analysis of Risk Disclosures for the Cross-Section of Returns},
224 + institution = {Working Paper},
225 + year = {2023}
226 +}
227 +
228 +@article{lm2011,
229 + author = {Loughran, Tim and McDonald, Bill},
230 + title = {When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks},
231 + journal = {Journal of Finance},
232 + volume = {66},
233 + number = {1},
234 + pages = {35--65},
235 + year = {2011}
236 +}
237 +
238 +@article{lm2016,
239 + author = {Loughran, Tim and McDonald, Bill},
240 + title = {Textual Analysis in Accounting and Finance: A Survey},
241 + journal = {Journal of Accounting Research},
242 + volume = {54},
243 + number = {4},
244 + pages = {1187--1230},
245 + year = {2016}
246 +}
247 +
248 +@article{mackinlay1997,
249 + author = {MacKinlay, A. Craig},
250 + title = {Event Studies in Economics and Finance},
251 + journal = {Journal of Economic Literature},
252 + volume = {35},
253 + number = {1},
254 + pages = {13--39},
255 + year = {1997}
256 +}
257 +
258 +@article{neweywest1987,
259 + author = {Newey, Whitney K. and West, Kenneth D.},
260 + title = {A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix},
261 + journal = {Econometrica},
262 + volume = {55},
263 + number = {3},
264 + pages = {703--708},
265 + year = {1987}
266 +}
267 +
268 +@article{pastor2021sustainable,
269 + author = {P{\'a}stor, {\v{L}}ubo{\v{s}} and Stambaugh, Robert F. and Taylor, Lucian A.},
270 + title = {Sustainable Investing in Equilibrium},
271 + journal = {Journal of Financial Economics},
272 + volume = {142},
273 + number = {2},
274 + pages = {550--571},
275 + year = {2021}
276 +}
277 +
278 +@article{pastor2022dissecting,
279 + author = {P{\'a}stor, {\v{L}}ubo{\v{s}} and Stambaugh, Robert F. and Taylor, Lucian A.},
280 + title = {Dissecting Green Returns},
281 + journal = {Journal of Financial Economics},
282 + volume = {146},
283 + number = {2},
284 + pages = {403--424},
285 + year = {2022}
286 +}
287 +
288 +@article{petersen2009,
289 + author = {Petersen, Mitchell A.},
290 + title = {Estimating Standard Errors in Finance Panel Data Sets: Comparing Approaches},
291 + journal = {Review of Financial Studies},
292 + volume = {22},
293 + number = {1},
294 + pages = {435--480},
295 + year = {2009}
296 +}
297 +
298 +@inproceedings{reimers2019sbert,
299 + author = {Reimers, Nils and Gurevych, Iryna},
300 + title = {Sentence-{BERT}: Sentence Embeddings Using {Siamese} {BERT}-Networks},
301 + booktitle = {Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing (EMNLP)},
302 + year = {2019}
303 +}
304 +
305 +@article{shiller2017narrative,
306 + author = {Shiller, Robert J.},
307 + title = {Narrative Economics},
308 + journal = {American Economic Review},
309 + volume = {107},
310 + number = {4},
311 + pages = {967--1004},
312 + year = {2017}
313 +}
314 +
315 +@article{tetlock2007,
316 + author = {Tetlock, Paul C.},
317 + title = {Giving Content to Investor Sentiment: The Role of Media in the Stock Market},
318 + journal = {Journal of Finance},
319 + volume = {62},
320 + number = {3},
321 + pages = {1139--1168},
322 + year = {2007}
323 +}
324 +
325 +@article{tetlock2008,
326 + author = {Tetlock, Paul C. and Saar-Tsechansky, Maytal and Macskassy, Sofus},
327 + title = {More Than Words: Quantifying Language to Measure Firms' Fundamentals},
328 + journal = {Journal of Finance},
329 + volume = {63},
330 + number = {3},
331 + pages = {1437--1467},
332 + year = {2008}
333 +}
334 +
335 +@techreport{webb2020,
336 + author = {Webb, Michael},
337 + title = {The Impact of Artificial Intelligence on the Labor Market},
338 + institution = {Stanford University Working Paper},
339 + year = {2020}
340 +}
added paper/sections/conclusion.tex +36 −0
@@ -0,0 +1,36 @@
1 +% ============================================================================
2 +\section{Conclusion}
3 +\label{sec:conclusion}
4 +% ============================================================================
5 +
6 +Using a semantic, embedding-based measure of artificial-intelligence language in the SEC filings of
7 +S\&P~500 firms, linked to Yahoo Finance returns and standard factor data, we have shown that the
8 +pricing of AI disclosure is a \emph{conditional, regime-dependent} phenomenon. For most of the 2010s,
9 +how intensively a firm wrote about adopting, building, or being threatened by AI bore only a faint
10 +relation to its subsequent returns, and a risk-adjusted long--short strategy earned no reliable
11 +alpha. After the launch of ChatGPT in late 2022, the same disclosure became strongly priced: the
12 +high-minus-low AI-disclosure return spread jumped from roughly $+2$ to roughly $+15$ percentage points
13 +per year, and the long--short Sharpe ratio rose from 0.15 to 1.33.
14 +
15 +The break is robust to signal definition, horizon, dimension reduction, and the exclusion of mega-cap
16 +winners; it is specific to AI-related language (ESG and climate disclosure, tested identically, were
17 +\emph{penalized} in the same window); it is corroborated by a market-model event study in which
18 +high-AI firms earned $+10$ points of additional abnormal return in the year after ChatGPT; and it
19 +operates as a cross-sectional re-rating of persistent firm- and sector-level exposure rather than a
20 +reward for year-to-year wording, fading under firm fixed effects.
21 +
22 +Two messages emerge, one economic and one methodological. The economic message is that markets price
23 +the \emph{language} of AI---but only once AI commands their attention; value-relevant information can
24 +sit unpriced in plain sight for years until a salient catalyst turns the market's gaze toward it,
25 +after which the repricing is abrupt rather than gradual. The methodological message is that
26 +embedding-based measurement of disclosure content opens a productive avenue for asset pricing,
27 +capturing economically meaningful, multi-faceted exposures at scale and revealing pricing dynamics
28 +that keyword counts (which cannot read meaning) and firm-differenced designs (which discard the
29 +persistent cross-sectional variation that turns out to matter) would both miss. As generative AI
30 +continues to reshape the corporate landscape, the semantic footprint it leaves in mandatory disclosure
31 +offers a rich, and now demonstrably value-relevant, signal. Several next steps follow naturally:
32 +extending the panel beyond the S\&P~500 to the mid- and small-cap firms where attention frictions are
33 +larger and the effect may be stronger; incorporating earnings-call transcripts and patent text as
34 +complementary, higher-frequency AI-exposure measures; and---perhaps most consequentially for
35 +investors---tracking whether the post-2022 premium persists, decays, or reverses as the AI narrative
36 +matures and the market's attention becomes fully impounded in prices.
added paper/sections/data.tex +152 −0
@@ -0,0 +1,152 @@
1 +% ============================================================================
2 +\section{Data and Variable Construction}
3 +\label{sec:data}
4 +% ============================================================================
5 +
6 +\subsection{The semantic factor panel}
7 +\label{subsec:semantic}
8 +The backbone of our study is the EDGAR Research Database, an infrastructure that downloads, parses,
9 +and semantically scores SEC filings for S\&P~500 firms. For each filing the pipeline proceeds in four
10 +steps. It (i)~extracts the canonical sections of the 10-K---Risk Factors, Management's Discussion and
11 +Analysis (MD\&A), legal proceedings, the financial statements, and so on---so that the location as
12 +well as the content of each passage is known; (ii)~splits each section into overlapping text chunks of
13 +a few sentences, the overlap ensuring that a thought spanning a chunk boundary is not lost;
14 +(iii)~embeds every chunk into a 384-dimensional vector with the \texttt{all-MiniLM-L6-v2} sentence
15 +transformer, a compact and widely validated model that maps semantically similar passages to nearby
16 +points in the embedding space; and (iv)~scores each chunk by its cosine similarity to a set of
17 +\emph{anchor} passages that define eight economic concepts. The anchors are short, deliberately
18 +written paragraphs that articulate each concept in natural language. The AI-adoption anchor, for
19 +instance, describes a firm ``internally using artificial intelligence, machine learning, generative
20 +AI, large language models, automation, predictive analytics \dots\ to improve productivity,
21 +operations, efficiency, decision-making.'' Cosine similarity to such an anchor measures how closely a
22 +passage's \emph{meaning} matches the concept, on a scale from $-1$ to $1$, regardless of the exact
23 +words used---so that a sentence on ``deploying neural networks to forecast demand'' scores highly on
24 +AI adoption even though it shares no keyword with the anchor. This is precisely the paraphrase- and
25 +context-sensitivity that keyword counts lack.
26 +
27 +Chunk-level scores are aggregated to the filing level using section weights that emphasize the parts
28 +of the document where the concept is most likely to be discussed substantively (e.g.\ MD\&A and Risk
29 +Factors), and then to the firm-fiscal-year level. For each concept the database reports the mean,
30 +maximum, standard deviation, top-5\% tail, and section-weighted mean (\texttt{wmean}) of chunk
31 +similarities, along with first and second differences, percentage changes, and three-year rolling
32 +statistics. The eight concepts comprise three AI facets---\emph{AI adoption}, \emph{AI
33 +infrastructure}, \emph{AI disruption risk}---and five others used as placebos: \emph{ESG commitment},
34 +\emph{climate risk}, \emph{cybersecurity}, \emph{automation/labor}, and \emph{macro risk}.
35 +
36 +The resulting panel covers all 500 current S\&P~500 members across fiscal years 2010--2026, a total
37 +of 7{,}869 firm-years. We take the section-weighted mean (\texttt{wmean}) as our headline signal
38 +because it up-weights the forward-looking, strategy-rich sections; we verify robustness to the
39 +simple mean and the top-5\% tail in Section~\ref{sec:robustness}. Our three primary signals are
40 +therefore \texttt{ai\_adoption\_wmean} (\textbf{AI\,Adopt}), \texttt{ai\_infrastructure\_wmean}
41 +(\textbf{AI\,Infra}), and \texttt{ai\_disruption\_risk\_wmean} (\textbf{AI\,Risk}); we also form a
42 +standardized opportunity composite, $\text{AI\,Compos}=\tfrac12[z(\text{AI\,Adopt})+z(\text{AI\,Infra})]$.
43 +
44 +\subsection{Price and factor data}
45 +\label{subsec:price}
46 +We download monthly adjusted-close prices for all 500 tickers from Yahoo Finance over 2009--2026
47 +(handling share-class tickers such as BRK.B and BF.B), the SPDR S\&P~500 ETF (SPY) as the market
48 +benchmark, and the Fama--French five factors \citep{famafrench2015}, the momentum factor, and the
49 +risk-free rate from the Kenneth R.\ French data library. Monthly simple returns are computed from
50 +adjusted prices, which incorporate dividends and splits. A market-capitalization proxy is formed as
51 +shares outstanding (from Yahoo Finance) times the historical price; we use it for value-weighting and
52 +as a size control, acknowledging the shares-held-constant approximation.
53 +
54 +\subsection{Timing and the construction of tradeable returns}
55 +\label{subsec:timing}
56 +The single most important design choice in a disclosure--return study is timing, because a signal
57 +that inadvertently peeks at information unavailable in real time can manufacture predictability that
58 +no investor could have traded on. A 10-K covering fiscal year $Y$ becomes public only when filed,
59 +typically in February or March of year $Y{+}1$. To guarantee that our signal is in the public
60 +information set before any return is measured, we follow the Fama--French portfolio convention:
61 +signals from fiscal year $Y$ are used to form portfolios at the end of June of $Y{+}1$, and we measure
62 +the forward twelve-month return from July of $Y{+}1$ through June of $Y{+}2$. The roughly three-month
63 +gap between the typical filing date and June~30 builds in a margin that rules out look-ahead bias even
64 +for late filers, while the July-to-June holding window is the standard one in the cross-sectional
65 +literature and so keeps our estimates comparable to it. After requiring a valid forward return with
66 +adequate monthly coverage, we obtain 6{,}852 firm-years spanning formation years 2010--2024, with
67 +return realizations extending through mid-2026.
68 +
69 +\subsection{Controls and standardization}
70 +\label{subsec:controls}
71 +For each formation year we compute cross-sectional $z$-scores of every signal, so that all
72 +coefficients are expressed per cross-sectional standard deviation and the powerful secular rise in AI
73 +language (documented below) is differenced out---in any given year we compare firms to their
74 +contemporaneous peers. We control for the three workhorse return determinants: \emph{size} (log
75 +market-cap proxy), \emph{momentum} (the firm's own return over the twelve months ending at formation,
76 +skipping the last month), and \emph{idiosyncratic volatility} (the annualized standard deviation of
77 +monthly returns over the trailing year). In regressions, returns and continuous controls are
78 +winsorized at the 1st and 99th percentiles to limit the influence of outliers; in portfolio sorts we
79 +use raw returns. Appendix~\ref{app:variables} gives precise definitions.
80 +
81 +\subsection{Summary statistics}
82 +\label{subsec:summary}
83 +Table~\ref{tab:summ} reports summary statistics for the estimation sample. The average forward
84 +twelve-month return is 18.6\% (reflecting the strong 2011--2026 bull market for U.S.\ large caps),
85 +with a wide cross-sectional dispersion (standard deviation 41.5\%). The AI signals are small in
86 +level---cosine similarities of disclosure to narrow anchors---but exhibit meaningful cross-sectional
87 +variation. Table~\ref{tab:corr} reports correlations. Two features stand out. First, the three AI
88 +signals are highly collinear (pairwise $\rho$ between 0.75 and 0.86): firms that write more about
89 +adopting AI also write more about AI infrastructure and AI risk. They are best understood as three
90 +lenses on a single latent construct---\emph{AI salience}---a point we formalize with
91 +principal-components analysis in Section~\ref{sec:robustness}. Second, the raw (unconditional)
92 +correlation between each AI signal and the forward return is positive but small ($\approx 0.04$),
93 +foreshadowing that the unconditional relation is weak and that the action lies in its time variation.
94 +
95 +\input{tables/tab_summary}
96 +\input{tables/tab_corr}
97 +
98 +\subsection{The secular rise of AI language}
99 +\label{subsec:trend}
100 +Before turning to returns, Figure~\ref{fig:trend} documents the raw phenomenon that motivates our
101 +within-year design. The cross-sectional mean similarity to all three AI concepts trended steadily
102 +upward through the 2010s and inflected sharply after 2022; by 2025--2026 AI language saturates
103 +S\&P~500 disclosure. This is precisely why our tests rely on within-year cross-sectional ranking: the
104 +interesting question is not whether the index as a whole talks more about AI over time (it
105 +emphatically does), but whether, \emph{in a given year}, firms that talk about AI more than their
106 +peers subsequently earn different returns. Figure~\ref{fig:sectorbox} shows that AI disclosure is
107 +also unevenly distributed across sectors, concentrated in Information Technology, Communication
108 +Services, and Industrials---a fact that will matter for interpreting the sector channel.
109 +
110 +\begin{figure}[htbp]\centering
111 +\includegraphics[width=0.9\textwidth]{fig4_ai_language_trend.png}
112 +\caption{\textbf{The secular rise of AI language in S\&P~500 disclosure.} The figure plots the
113 +cross-sectional mean of the section-weighted cosine similarity of 10-K text to each of the three AI
114 +anchors (adoption, infrastructure, and disruption risk), by fiscal year over 2010--2026. All three
115 +measures trend steadily upward through the 2010s and inflect sharply after the November 2022 launch of
116 +ChatGPT (dashed vertical line), by which point AI language saturates index disclosure. This secular
117 +trend motivates the within-year cross-sectional design used throughout the paper.}
118 +\label{fig:trend}
119 +\end{figure}
120 +
121 +\begin{figure}[htbp]\centering
122 +\includegraphics[width=0.9\textwidth]{fig12_sector_box.png}
123 +\caption{\textbf{AI disclosure across GICS sectors.} The figure shows box plots of the firm-level
124 +AI-adoption score within each GICS sector (boxes span the interquartile range, the red line marks the
125 +sector median, and outliers are suppressed for legibility). AI disclosure is concentrated in
126 +technology-intensive sectors---Information Technology, Communication Services, and Industrials---a
127 +concentration that motivates the sector-channel analysis and the sector-neutral robustness checks
128 +reported later.}
129 +\label{fig:sectorbox}
130 +\end{figure}
131 +
132 +\subsection{Which firms disclose the most AI? Descriptive evidence}
133 +\label{subsec:topfirms}
134 +Table~\ref{tab:topfirms} lists the ten most AI-intensive S\&P~500 firms by average AI-adoption score
135 +over the full sample. The list is instructive in two ways. First, it has strong face validity: it
136 +features enterprise-technology and software firms (Hewlett Packard Enterprise, Intel, IBM, Tyler
137 +Technologies, Autodesk), an algorithm-centric platform (Uber), and data-intensive financials (BNY
138 +Mellon, Berkshire Hathaway), exactly the kinds of firms one would expect to write substantively about
139 +deploying AI. Second, the list is \emph{not} confined to the technology sector: industrials (Cummins)
140 +and energy (EOG Resources) appear, confirming that intensive AI disclosure cuts across the GICS
141 +taxonomy and that our continuous, text-based measure captures variation a sector dummy would miss.
142 +
143 +A further descriptive fact is central to our interpretation: the AI signal is highly
144 +\emph{persistent}. The year-over-year cross-sectional rank autocorrelation of the AI composite is
145 +0.88, and even at a five-year horizon it remains 0.73. Firms that are AI-intensive disclosers stay
146 +AI-intensive; the measure captures a slow-moving structural characteristic of the firm rather than
147 +transient wording. This persistence has two implications we exploit later: it explains why firm fixed
148 +effects absorb most of the signal (there is little within-firm variation to identify), and it
149 +underpins the difference-in-differences design, in which we fix each firm's exposure at its pre-event
150 +level precisely because that level is stable.
151 +
152 +\input{tables/tab_topfirms}
added paper/sections/discussion.tex +99 −0
@@ -0,0 +1,99 @@
1 +% ============================================================================
2 +\section{Discussion: Mechanism and Interpretation}
3 +\label{sec:discussion}
4 +% ============================================================================
5 +
6 +What economic mechanism best fits this constellation of facts? We find an attention- and
7 +narrative-driven repricing the most parsimonious explanation, and we read the evidence as follows.
8 +
9 +\paragraph{The information pre-existed; the attention did not.} Firms disclosed their AI engagement
10 +for years before it was priced. The semantic content of those disclosures was, in cross-section, only
11 +faintly related to returns through 2021. What changed in late 2022 was not the information but its
12 +\emph{salience}: a consumer breakthrough (ChatGPT) made AI the dominant market narrative
13 +\citep{shiller2017narrative}, drawing investor attention \citep{da2011,barberodean2008} to a body of
14 +disclosure that had been hiding in plain sight. The abrupt, near-simultaneous repricing across the
15 +cross-section---visible in the event study within months of the launch---is the signature of an
16 +attention shock rather than the gradual accrual of a risk premium.
17 +
18 +\paragraph{It is a re-rating of levels, not of changes.} The disappearance of the effect under firm
19 +fixed effects, the muted difference-in-differences estimates, and the event-time profile all point the
20 +same way: the market repriced the persistent \emph{level} of a firm's AI exposure, not the
21 +year-to-year change in its wording. This has a clear practical corollary---firms cannot mechanically
22 +earn the premium by adding AI boilerplate to their filings (and our top-5\% and simple-mean
23 +robustness suggests the measure is not easily gamed)---and a clear methodological one: studies that
24 +difference out firm effects will understate the cross-sectional importance of disclosure content.
25 +
26 +\paragraph{It operates substantially, but not entirely, through sectors.} The sector-neutral and
27 +sector-fixed-effects results show that much of the AI premium reflects the re-rating of AI-exposed
28 +\emph{sectors}---technology, communication services, and the industrial firms supplying the AI
29 +build-out---relative to the rest of the index. This is economically sensible: the generative-AI boom
30 +was, to first order, a sectoral reallocation of expected cash flows and valuations. Yet a positive
31 +within-sector residual remains in the event study, indicating that the firm's own disclosure carried
32 +incremental information even among industry peers.
33 +
34 +\paragraph{The thematic asymmetry is telling.} Perhaps the most revealing single fact is the placebo:
35 +in the very same post-2022 window, high-AI firms were rewarded while high-ESG and high-climate firms
36 +were penalized. Markets did not simply reward verbose or virtuous-sounding disclosure; they rotated
37 +toward one theme (AI) and away from another (sustainability). This is difficult to reconcile with a
38 +purely mechanical or risk-based account and natural under a narrative-rotation view of investor
39 +attention.
40 +
41 +\paragraph{Relation to the AI-asset-pricing literature.} Our findings complement
42 +\citet{eisfeldt2023generative}, who show that an occupation-task measure of generative-AI exposure was
43 +priced around ChatGPT. We reach a convergent conclusion from an entirely different measurement---firms'
44 +own disclosure language---and extend it along the time dimension, showing that the same exposure was
45 +\emph{un}priced for a decade beforehand. The agreement of two independent measures on the timing and
46 +sign of the effect strengthens confidence that a real AI repricing occurred.
47 +
48 +\subsection{Implications}
49 +Our findings carry distinct implications for three audiences. \emph{For investors and quantitative
50 +strategists}, the results are a caution as much as an opportunity. The AI-disclosure signal delivered
51 +a striking post-2022 Sharpe ratio, but the same signal was nearly inert for the preceding decade, and
52 +the effect is absorbed by firm fixed effects---so a strategy that traded on year-to-year changes in AI
53 +verbosity would have captured little. The tradeable content lies in the persistent cross-sectional
54 +\emph{level} of AI exposure, and even that is partly a sector bet whose durability is unproven. The
55 +honest reading is that disclosure-based AI signals are best viewed as a lens on a regime-dependent
56 +theme rather than as a stable alpha source. \emph{For corporate managers and disclosure policy}, the
57 +asymmetry between AI (rewarded) and ESG/climate (penalized) after 2022 illustrates how powerfully the
58 +prevailing market narrative conditions the valuation consequences of what firms choose to emphasize.
59 +Because the premium attaches to persistent, hard-to-fake exposure rather than to boilerplate, the
60 +result does not invite cheap disclosure manipulation; but it does suggest that the market reads
61 +filings for genuine strategic content and reprices it when attention turns. \emph{For researchers},
62 +the study demonstrates that embedding-based semantic measurement uncovers pricing dynamics invisible
63 +to both keyword counts (which cannot distinguish meaning) and firm-differenced panels (which discard
64 +the persistent cross-sectional variation that turns out to matter).
65 +
66 +\subsection{Summary of the evidence across designs}
67 +It is worth stepping back to see how the designs corroborate one another, since each has different
68 +weaknesses. The portfolio sorts establish the raw magnitude and its post-2022 timing but are
69 +model-free and could in principle reflect risk; the factor-model spanning regressions show the
70 +unconditional spread is not explained by standard factors yet is statistically weak over the full
71 +sample; the sub-period and interaction tests localize the effect to the post-ChatGPT regime; the
72 +placebo rules out a mechanical or generic-disclosure explanation by showing the opposite sign for ESG
73 +and climate; the event study, using daily abnormal returns purged of beta, provides cleanly-timed,
74 +cross-sectional confirmation within months of the catalyst; and the fixed-effects and
75 +difference-in-differences estimates pin down that the priced object is persistent firm- and
76 +sector-level exposure, not incremental wording. No single design is decisive, but their
77 +convergence---on the same sign, the same timing, and a consistent economic story---is what gives us
78 +confidence in the conclusion.
79 +
80 +\subsection{Limitations}
81 +\label{subsec:limits}
82 +Several caveats temper our conclusions. \emph{First}, the post-2022 window contains only three
83 +formation cohorts, and the size-controlled premium is concentrated in the most recent (2024) cohort,
84 +which captures the 2024--2025 AI-infrastructure capital-expenditure boom. The regime result is
85 +economically large and consistent across designs, but its post-period rests on a short sample and
86 +could in principle reflect a single extraordinary episode rather than a durable new regime; only
87 +future data can settle this. \emph{Second}, our universe is current S\&P~500 membership, which
88 +introduces survivorship and look-ahead-at-the-index-level bias. This biases the level of returns
89 +upward but is less likely to drive the \emph{cross-sectional} AI--return relation that is our focus.
90 +\emph{Third}, the market-capitalization proxy holds shares outstanding at their latest value,
91 +approximating historical size with error. \emph{Fourth}, the semantic anchors, though carefully
92 +written, embed the authors' definitional choices; different anchor wording would yield somewhat
93 +different scores, although the robustness to mean/tail aggregations and to PCA mitigates this concern.
94 +\emph{Fifth}, disclosure intensity is correlated with sector, and while our within-year, size-,
95 +momentum-, and volatility-controlled tests and the sector-FE event study address this, we cannot fully
96 +separate ``AI exposure'' from ``technology sector'' as the priced characteristic. \emph{Finally}, our
97 +designs establish a robust association and an event-study-based timing argument, but not strict
98 +causality; the attention-repricing interpretation is the most consistent with the evidence rather than
99 +the only logically possible one.
added paper/sections/introduction.tex +121 −0
@@ -0,0 +1,121 @@
1 +% ============================================================================
2 +\section{Introduction}
3 +\label{sec:introduction}
4 +% ============================================================================
5 +
6 +The arrival of generative artificial intelligence has been the defining corporate-narrative shift
7 +of the 2020s. In the span of barely three years following the public launch of ChatGPT in late
8 +2022, the market capitalization of AI-linked firms swelled by trillions of dollars, ``AI'' vaulted
9 +past every other theme in frequency on earnings calls, and the language of corporate disclosure
10 +filled with references to large language models, generative tools, intelligent automation, and the
11 +compute infrastructure that powers them. A technology that had been the preserve of research labs
12 +and back-office analytics suddenly became the organizing story of public equity markets. This paper
13 +asks a question that is simple to state but surprisingly demanding to answer well: did the
14 +\emph{language} of AI in firms' mandatory disclosures carry information about their subsequent stock
15 +returns---and if so, when did that information begin to be priced, and through what economic channel?
16 +
17 +Answering the question convincingly requires three ingredients that have only recently become jointly
18 +feasible. The first is a large, machine-readable corpus of corporate disclosure. The second is a
19 +measurement technology that captures the \emph{meaning} of text rather than the mere frequency of
20 +keywords---one that recognizes that a firm describing how it ``deploys machine-learning models to
21 +optimize its supply chain'' is talking about AI even when the three-letter acronym never appears. The
22 +third is a clean, look-ahead-free mapping from disclosure to tradeable returns. We bring all three to
23 +bear. Our laboratory is the universe of S\&P~500 constituents over fiscal years 2010--2026. Our raw
24 +material is the full text of their annual reports (Form~10-K), parsed section by section. Our
25 +measurement engine is the EDGAR Research Database, which embeds every text chunk with the
26 +\texttt{all-MiniLM-L6-v2} sentence transformer and scores it by cosine similarity to a set of
27 +carefully written ``anchor'' passages that define eight economic concepts. Three of these anchors
28 +isolate distinct facets of AI engagement, each corresponding to a different way the technology bears
29 +on firm value: \emph{internal AI adoption} (using AI to run the business more productively),
30 +\emph{AI infrastructure exposure} (capital and revenue tied to the compute build-out), and \emph{AI
31 +product-disruption risk} (the danger that AI commoditizes or displaces the firm's own offerings). The
32 +result is a continuous, comparable, firm-year measure of how intensively---and in what sense---each
33 +firm engages with AI in its own words, available for the entire index and spanning a decade and a
34 +half.
35 +
36 +We pair these semantic scores with monthly adjusted prices for all 500 tickers from Yahoo Finance
37 +and with the Fama--French five factors plus momentum. To avoid look-ahead bias we adopt the standard
38 +portfolio-formation convention. Because a 10-K covering fiscal year $Y$ is filed and public by early
39 +in year $Y{+}1$, we form signals at the end of June of $Y{+}1$ and measure the forward twelve-month
40 +return from July of $Y{+}1$ to June of $Y{+}2$. The roughly three-month cushion between the typical
41 +filing date and portfolio formation guarantees that the signal is in the public information set
42 +before the holding period begins, even for late filers. This yields 6{,}852 firm-years with a
43 +strictly tradeable forward return, spanning formation years 2010 through 2024.
44 +
45 +Our headline finding is that the pricing of AI language is \emph{not} a stable factor premium but a
46 +regime-dependent re-rating that switched on with the generative-AI boom. For most of the 2010s,
47 +sorting S\&P~500 firms on the intensity of their AI disclosure produced only a faint return pattern:
48 +the equal-weighted spread between the highest and lowest quintiles averaged about $+2.4$ percentage
49 +points per year---economically modest and statistically fragile---and a risk-adjusted long--short
50 +portfolio earned an alpha that was both small and statistically insignificant. The information was
51 +there in the filings, but the market was not paying for it. After the launch of ChatGPT in November
52 +2022, the very same sort produced a spread of $+14.6$ percentage points per year, a more than sixfold
53 +jump. This is not a subtle tilt buried in a long-run average; it is a sharp, datable change in how
54 +the cross-section prices a fixed characteristic. The re-rating is visible from three independent
55 +angles: it appears in every post-2022 formation cohort taken on its own, in a cumulative long--short
56 +wealth curve that drifts sideways for a decade and then inflects sharply upward at the end of 2022,
57 +and in a year-by-year Fama--MacBeth slope that hovers near zero through 2021 before turning large and
58 +positive.
59 +
60 +A natural worry is that this pattern simply reflects the well-known rally of a handful of technology
61 +mega-caps---that we have rediscovered the Magnificent~7 dressed in textual clothing. We confront this
62 +concern head-on and reject it. The post-2022 spread is $+14.1$ percentage points \tstat{1.9} when the
63 +``Magnificent~7'' are excluded and $+14.5$ points when the ten largest firms by market capitalization
64 +are dropped: removing the very names that dominate the headline rally barely moves the estimate, so
65 +the effect is broad-based across the index rather than an artifact of Nvidia, Microsoft, or their
66 +peers. It is equally robust to how the signal is built and measured---to using the simple mean, the
67 +section-weighted mean, or the top-5\% tail of similarity scores; to six-, twelve-, and twenty-four-month
68 +holding horizons; and to replacing the three correlated AI signals with their first principal
69 +component, a single index that alone explains 87\% of their common variation.
70 +
71 +Establishing that the spread is large and well-timed is only half the task; we then deploy three
72 +complementary tests to pin down what the result is---and, equally important, what it is not. The
73 +first is a \emph{placebo} exercise that re-runs the entire research design on the five non-AI semantic
74 +factors in the database (ESG, climate, cybersecurity, automation/labor, and macro risk). The logic is
75 +simple: if the post-2022 jump merely reflected a generic ``more disclosure earns more'' phenomenon, or
76 +a mechanical artifact of our embedding-and-sorting pipeline, every factor should display the same break.
77 +They do not. The post-2022 spread is large and positive for the AI factors, essentially zero for
78 +macro-risk language, and---most tellingly---\emph{negative} for ESG and climate disclosure, meaning
79 +high-ESG firms \emph{under}performed after 2022. The post-ChatGPT re-rating is specific to AI-related
80 +content, not a property of disclosure intensity in general. The second test is a market-model
81 +\emph{event study} around the 30~November 2022 ChatGPT launch. Firms in the top tercile of pre-event
82 +AI disclosure---measured from their FY2021 10-K, the last report filed before anyone could have
83 +anticipated the event---earned cumulative abnormal returns $+10.1$ percentage points higher than the
84 +bottom tercile over the following year \tstat{1.97} and $+14.6$ points higher over eighteen months.
85 +Because abnormal returns are purged of each firm's market-beta exposure, this is a clean
86 +cross-sectional response to an unanticipated narrative shock rather than a reflection of high-AI firms
87 +simply being higher-beta in a recovering market. The third test uses two-way fixed effects and
88 +difference-in-differences to localize the mechanism within the cross-section. The premium is fully
89 +absorbed by firm fixed effects and roughly halved by sector fixed effects, which tells us that the
90 +durable, priced signal is the persistent \emph{level} of a firm's (and its sector's) AI exposure
91 +relative to peers, not the year-to-year wiggle in its wording.
92 +
93 +Taken together, the four pieces of evidence---the datable break, the AI-specific placebo, the
94 +event-study timing, and the fixed-effects anatomy---converge on a single interpretation: an
95 +attention- and narrative-driven repricing. The textual evidence of firms' AI engagement accumulated
96 +quietly in their filings for a decade and was barely priced. A salient catalyst---the consumer
97 +breakthrough of generative AI---then drew investor attention to that pre-existing information, and
98 +capital flowed toward the firms and sectors whose disclosures had already revealed the greatest AI
99 +exposure. What looks like new information was in large part old information newly attended to. This is
100 +the asset-pricing signature of limited attention and narrative economics, observed here not through an
101 +indirect sentiment proxy but directly in the semantic content of mandatory disclosure.
102 +
103 +\paragraph{Contribution.} We make four contributions. \emph{First}, methodologically, we
104 +demonstrate the value of embedding-based semantic measurement of disclosure for asset pricing: a
105 +cosine-similarity-to-anchor design captures economically meaningful, multi-faceted exposure
106 +(adoption vs.\ infrastructure vs.\ risk) that keyword counts cannot, and it does so at scale across
107 +the entire S\&P~500 and a decade and a half of filings. \emph{Second}, substantively, we provide
108 +text-based, look-ahead-free evidence that the cross-sectional pricing of AI exposure is a post-2022
109 +regime phenomenon rather than a long-standing premium. \emph{Third}, we discipline the finding with
110 +a placebo across non-AI factors and an event study, distinguishing a genuine AI-specific repricing
111 +from a mechanical or market-wide artifact. \emph{Fourth}, we document the \emph{anatomy} of the
112 +effect---its concentration in smaller firms, its operation substantially through a sector channel,
113 +and its disappearance under firm fixed effects---which sharpens the economic interpretation and
114 +warns against naive trading strategies.
115 +
116 +The remainder of the paper is organized as follows. Section~\ref{sec:literature} situates the study
117 +in five literatures and states our hypotheses. Section~\ref{sec:data} describes the data and the
118 +construction of the semantic measures. Section~\ref{sec:methodology} lays out the empirical
119 +methodology. Section~\ref{sec:results} presents the main results, and Section~\ref{sec:robustness}
120 +the robustness and identification tests. Section~\ref{sec:discussion} discusses mechanisms and
121 +limitations, and Section~\ref{sec:conclusion} concludes.
added paper/sections/literature.tex +107 −0
@@ -0,0 +1,107 @@
1 +% ============================================================================
2 +\section{Related Literature and Hypotheses}
3 +\label{sec:literature}
4 +% ============================================================================
5 +
6 +Our study sits at the intersection of five strands of research: textual analysis in finance, the
7 +pricing of corporate disclosure, technology and innovation in asset pricing, investor attention and
8 +narrative economics, and the nascent literature on the economics of artificial intelligence. Each
9 +contributes a building block---a measurement tool, an object of study, a candidate risk factor, a
10 +behavioral mechanism, and a comparison case---and our contribution is to combine them: we measure a
11 +technology theme from firms' own words, price it in the cross-section, and show that its pricing turns
12 +on precisely when a behavioral mechanism predicts it should. We take the strands in turn and close
13 +with the hypotheses they jointly motivate.
14 +
15 +\subsection{Textual analysis and natural language processing in finance}
16 +A now-large literature extracts economic signals from financial text. The foundational work of
17 +\citet{tetlock2007} showed that the tone of a \textit{Wall Street Journal} column forecasts
18 +aggregate returns, and \citet{tetlock2008} extended this to firm-level news. \citet{lm2011}
19 +demonstrated that finance-specific sentiment dictionaries materially outperform general-purpose word
20 +lists in 10-K analysis, launching a wave of dictionary-based studies and the widely used
21 +Loughran--McDonald word lists; \citet{lm2016} survey this field. A second generation moved from
22 +counting words to modeling them: \citet{gentzkow2019} review text-as-data methods in economics,
23 +while \citet{kelly2019textregression} and \citet{bybee2024narrative} use machine-learning
24 +representations of news to construct interpretable factors and a ``state of the economy'' from text.
25 +Our paper belongs to the most recent, embedding-based generation of this work. The limitations of
26 +keyword counting are acute for a theme like AI: a naive count cannot tell ``we do not currently use
27 +artificial intelligence'' apart from ``we are an artificial-intelligence leader,'' it misses the
28 +paraphrase of a firm that describes machine learning without ever writing ``AI,'' and it treats
29 +boilerplate and substance identically. We instead measure the \emph{semantic similarity} of
30 +disclosure to anchor concepts using a sentence transformer \citep{reimers2019sbert}, which maps
31 +passages into a vector space where meaning, not surface form, governs proximity. This follows a
32 +growing practice of using contextual embeddings to quantify disclosure content
33 +\citep{cong2022textfactor}, and is closest in spirit to similarity-to-concept designs that score
34 +documents against curated reference passages.
35 +
36 +\subsection{The pricing of corporate disclosure}
37 +A parallel literature asks whether the \emph{content} and \emph{changes} of mandatory disclosure
38 +predict returns. \citet{cohen2020lazy} show that firms that change the language of their 10-K
39 +relative to the prior year (``lazy prices'' when they do not) experience predictable future returns
40 +and operating outcomes. \citet{hoberg2010product} and \citet{hobergphillips2016} use 10-K product
41 +descriptions to build text-based industry classifications and measures of product-market fluidity
42 +that carry asset-pricing content. \citet{lopezlira2023risk} extracts risk exposures from 10-K
43 +risk-factor sections. The general lesson is that the qualitative portions of filings contain
44 +value-relevant information that markets process incompletely and with delay. We contribute a
45 +focused, concept-level measure---AI engagement---and show that its pricing is strongly
46 +state-dependent, a dimension the disclosure-pricing literature has largely left implicit.
47 +
48 +\subsection{Technology, innovation, and the cross-section of returns}
49 +Asset pricing has long sought to connect technological change to risk and return.
50 +\citet{hirshleifer2013innovative} show that innovative efficiency predicts returns;
51 +\citet{kogan2017technological} build market-based measures of innovation from patents and link them
52 +to growth and reallocation; \citet{koganpapanikolaou2014} show that investment-specific technology
53 +shocks shape the cross-section. A more recent literature studies AI exposure directly:
54 +\citet{babina2024aiinvestment} measure firm-level AI investment from job-posting and resume data and
55 +document faster growth among AI-adopting firms; \citet{eisfeldt2023generative} construct a
56 +firm-level measure of \emph{generative}-AI exposure from the task content of occupations and show
57 +that a generative-AI factor was priced precisely in the weeks around ChatGPT's release.
58 +\citet{acemoglu2020wrong} and \citet{webb2020} study the labor-market exposure of firms to AI and
59 +automation. Our contribution relative to this work is to measure AI exposure from the firm's
60 +\emph{own disclosure}---a self-reported, narrative signal available for the entire index at annual
61 +frequency---and to characterize the full time profile of its pricing across a decade and a half, not
62 +only the event window. Where \citet{eisfeldt2023generative} use occupation-task exposure, we use the
63 +language firms choose, providing a complementary and highly granular measure.
64 +
65 +\subsection{Investor attention, salience, and narrative economics}
66 +Why might value-relevant disclosure be priced only after a catalyst? The behavioral literature
67 +offers a clear mechanism: limited investor attention. \citet{barberodean2008} show that retail
68 +investors are drawn to attention-grabbing stocks; \citet{da2011} construct a direct attention proxy
69 +from Google search and link it to prices; \citet{dellavigna2009} document under-reaction to
70 +information released when attention is low; and \citet{hirshleifer2009driven} show that earnings news
71 +is underweighted when investors are distracted. \citet{shiller2017narrative} argues that contagious
72 +narratives drive major asset-price movements, and \citet{bakerwurgler2006} show that sentiment
73 +differentially affects hard-to-value, speculative stocks. Our results provide a sharp illustration:
74 +the information about firms' AI engagement existed in filings for years but was repriced abruptly
75 +when a salient consumer event---ChatGPT---focused investor attention on AI. The asymmetry we document
76 +(AI rewarded, ESG penalized after 2022) is itself consistent with a shift in the prevailing market
77 +narrative.
78 +
79 +\subsection{ESG and climate disclosure as a comparison case}
80 +Finally, our placebo design connects to the literature on the pricing of ESG and climate disclosure.
81 +\citet{pastor2021sustainable} model how sustainability preferences depress the expected returns of
82 +green assets in equilibrium, and \citet{pastor2022dissecting} show that green stocks' strong
83 +\emph{realized} returns through 2021 reflected unexpected increases in climate concern rather than
84 +high expected returns. \citet{bolton2021risk} document a carbon premium. Consistent with the
85 +post-2021 reversal in this literature, we find that high-ESG and high-climate disclosure earned
86 +\emph{negative} spreads after 2022, exactly when AI disclosure began to earn large positive
87 +ones---underscoring that the post-2022 re-rating reflects a thematic rotation toward AI rather than a
88 +generic disclosure effect.
89 +
90 +\subsection{Hypotheses}
91 +\label{subsec:hypotheses}
92 +Our analysis is organized around four hypotheses.
93 +\begin{description}[leftmargin=2.4em,style=nextline]
94 +\item[H1 (Unconditional pricing).] If AI exposure carries a stable risk premium or persistent
95 +mispricing, then sorting on AI-disclosure intensity yields a positive and significant risk-adjusted
96 +return spread over the full 2010--2026 sample.
97 +\item[H2 (Regime dependence).] If instead AI exposure is repriced only once AI becomes salient, the
98 +return spread is small before and large after the late-2022 generative-AI catalyst, with a
99 +detectable structural break.
100 +\item[H3 (AI-specificity).] If the post-2022 spread reflects a genuine AI repricing rather than a
101 +mechanical or market-wide artifact, it appears for AI-related semantic factors but not for unrelated
102 +factors (e.g.\ ESG, climate, macro risk).
103 +\item[H4 (Cross-sectional, not within-firm).] If the market repriced \emph{which} firms are
104 +AI-exposed rather than rewarding incremental wording, the effect is concentrated in the
105 +cross-section and attenuates under firm and sector fixed effects.
106 +\end{description}
107 +\noindent The data, as we show, decisively favor H2--H4 over H1.
added paper/sections/methodology.tex +81 −0
@@ -0,0 +1,81 @@
1 +% ============================================================================
2 +\section{Methodology}
3 +\label{sec:methodology}
4 +% ============================================================================
5 +
6 +We bring six complementary research designs to bear, ranging from simple portfolio sorts to a
7 +market-model event study. Each carries its own identifying assumptions and its own vulnerabilities: a
8 +sort is transparent but model-free and silent on risk; a factor regression adjusts for risk but
9 +imposes a linear factor structure; a panel with fixed effects controls for unobserved heterogeneity
10 +but discards the cross-sectional variation that may matter most; an event study buys clean timing at
11 +the cost of a single window. By design these weaknesses do not overlap, so a conclusion that survives
12 +all six is far more credible than one resting on any one. Using the battery together lets us
13 +triangulate the economic interpretation rather than lean on a single estimate.
14 +
15 +\subsection{Portfolio sorts}
16 +Each formation year we sort firms into quintiles on a given (within-year standardized) AI signal and
17 +compute the equal-weighted (EW) and value-weighted (VW) forward return of each quintile, along with the
18 +high-minus-low (Q5$-$Q1) spread that a self-financing long--short investor would have earned. We report
19 +the time-series average of the annual spreads and test its significance with Newey--West
20 +\citep{neweywest1987} standard errors (three lags) to account for any serial correlation induced by the
21 +overlapping return windows. The appeal of the sort is that it imposes no model and makes no functional-form
22 +assumption---it simply asks what high-AI firms earned relative to low-AI firms---and the EW--VW comparison
23 +is itself informative: when the equal-weighted spread exceeds the value-weighted one, the effect is
24 +concentrated in smaller index members rather than driven by the largest names.
25 +
26 +\subsection{Factor-model spanning of a long--short portfolio}
27 +A raw spread could in principle be no more than compensation for bearing known risks. To ask whether
28 +the AI spread survives risk adjustment, we build an annually rebalanced, equal-weighted, self-financing
29 +long--short portfolio (top minus bottom quintile), record its monthly return, and regress it on
30 +(i)~the CAPM market factor and (ii)~the Fama--French five factors plus momentum (FF6). The intercept
31 +(alpha) measures the average return the portfolio earned beyond what its loadings on these established
32 +factors can explain, and the slopes reveal which risks the strategy is implicitly taking; we use
33 +heteroskedasticity- and autocorrelation-consistent (HAC) standard errors throughout. A significant
34 +alpha would indicate that AI disclosure is priced over and above standard exposures, while an
35 +insignificant one would say the spread is spanned by known factors.
36 +
37 +\subsection{Two-way fixed-effects panel regressions}
38 +We estimate
39 +\begin{equation}
40 + r_{i,t\to t+12} = \beta\, \text{AI}_{i,t} + \gamma' X_{i,t} + \alpha_i + \delta_t + \varepsilon_{i,t},
41 + \label{eq:panel}
42 +\end{equation}
43 +where $r$ is the winsorized forward return, $\text{AI}_{i,t}$ the standardized signal, $X$ the
44 +controls, and $\alpha_i,\delta_t$ firm and year fixed effects. Standard errors are double-clustered by
45 +firm and year \citep{petersen2009,cameron2011}. Firm fixed effects absorb all time-invariant
46 +cross-firm differences, so $\beta$ identifies whether \emph{within-firm} changes in AI language
47 +predict returns; year fixed effects absorb common shocks. Contrasting this estimate with the
48 +cross-sectional ones isolates whether the signal lives across or within firms (H4).
49 +
50 +\subsection{Fama--MacBeth regressions}
51 +We also run annual cross-sectional regressions of the forward return on the AI signal and controls and
52 +average the slopes following \citet{famamacbeth1973}, with Newey--West errors on the time series of
53 +coefficients. This estimator weights each year equally and yields an interpretable
54 +per-standard-deviation premium; plotting the annual slopes reveals the time profile of the premium
55 +directly.
56 +
57 +\subsection{Structural-break and difference-in-differences designs}
58 +To test regime dependence (H2) we split the sample at the 30~November 2022 ChatGPT launch and compare
59 +sub-period spreads, and we estimate pooled interaction models of the form
60 +$r = \beta_1 \text{AI} + \beta_2 (\text{AI}\times \text{Post}) + \gamma' X + \varepsilon$, where
61 +$\text{Post}=\mathbb{1}[\text{formation year}\ge 2022]$ and $\beta_2$ captures the change in the
62 +premium. We complement this with a difference-in-differences design in which treatment is the firm's
63 +\emph{pre-determined} AI exposure---fixed at its 2019--2021 average so it cannot respond to the
64 +event---interacted with Post, within firm and year fixed effects. An event-time version interacts
65 +pre-determined exposure with each year dummy (relative to 2021) to trace the dynamic response.
66 +
67 +\subsection{Market-model event study}
68 +Finally, we run a classic event study \citep{mackinlay1997} around the ChatGPT launch, which converts
69 +the annual-frequency portfolio evidence into a high-frequency, cleanly dated test. The launch is close
70 +to an ideal natural experiment for our purposes: it was a consumer-product event, unanticipated by
71 +equity markets, that sharply raised the salience of AI without itself changing any firm's
72 +fundamentals overnight. For each stock we estimate a market model ($r_{i,d}=a_i+b_i r^{m}_{d}+e_{i,d}$)
73 +over the estimation window January--October 2022 and compute daily abnormal returns
74 +$\text{AR}_{i,d}=r_{i,d}-(\hat a_i+\hat b_i r^m_d)$ over the event window November 2022--June 2024.
75 +Cumulative abnormal returns (CAR) are compared across terciles of \emph{pre-event} AI disclosure---taken
76 +from the FY2021 10-K, the last report filed before the launch and therefore immune to any reaction to
77 +it---and we regress firm-level CAR on pre-event exposure with size, beta, and sector controls. Because
78 +abnormal returns net out each firm's market-beta exposure, the event study isolates the
79 +cross-sectional response to the AI-narrative shock from the contemporaneous (and initially negative)
80 +market drift of 2022--2023, addressing the natural objection that high-AI firms simply rode a
81 +beta-driven recovery.
added paper/sections/results.tex +172 −0
@@ -0,0 +1,172 @@
1 +% ============================================================================
2 +\section{Results}
3 +\label{sec:results}
4 +% ============================================================================
5 +
6 +\subsection{Portfolio sorts: a weak unconditional relation}
7 +Table~\ref{tab:sorts} reports the quintile sorts over the full sample. The relation between AI
8 +disclosure and future returns is positive and broadly monotone but economically modest. The
9 +equal-weighted Q5$-$Q1 spread is $+4.6$ percentage points per year for AI adoption \tstat{1.83},
10 +$+3.9$ for AI infrastructure \tstat{1.58}, $+5.3$ for AI disruption risk \tstat{2.27}, and $+4.9$ for
11 +the composite \tstat{1.88}. Value-weighting attenuates the adoption and composite spreads, indicating
12 +the effect is stronger among smaller index members. The left panel of Figure~\ref{fig:quint} displays
13 +the full-sample pattern: returns rise gently from the lowest to the highest AI quintile. On its own,
14 +this is suggestive but far from decisive evidence---and, as we now show, it averages over two very
15 +different regimes.
16 +
17 +\input{tables/tab_sorts}
18 +
19 +\subsection{Does AI disclosure earn risk-adjusted alpha unconditionally? (H1)}
20 +Table~\ref{tab:alpha} reports CAPM and FF6 alphas of the long--short portfolios. The AI-opportunity
21 +composite earns a raw spread of about $+2.3\%$ per year, of which the FF6 alpha is $+1.9\%$---but
22 +statistically insignificant \tstat{1.24}. The AI-adoption and AI-infrastructure long--shorts are
23 +similarly insignificant after risk adjustment. The one exception is the AI-disruption-risk spread,
24 +whose FF6 alpha of $+2.8\%$ per year is marginally significant \tstat{2.10}, hinting at a small risk
25 +premium for firms that flag AI as a competitive threat. The factor loadings (not the focus here) show
26 +the AI long--short is roughly market-neutral with modest negative profitability (RMW) and investment
27 +(CMA) tilts, consistent with a growth-oriented long leg. The verdict on H1 is clear:
28 +\textbf{unconditionally, AI disclosure is at best weakly priced.} This is not the end of the story but
29 +the beginning of it.
30 +
31 +\input{tables/tab_alpha}
32 +
33 +\subsection{Panel and Fama--MacBeth estimates}
34 +Table~\ref{tab:panel} juxtaposes the two-way fixed-effects panel with the Fama--MacBeth estimator. The
35 +contrast is instructive. In the Fama--MacBeth (cross-sectional) regressions, the AI-adoption and
36 +AI-infrastructure premia are positive---$+1.3$ and $+1.6$ percentage points per standard
37 +deviation---with \textit{t}-statistics near 1.6--1.7, indicating a weak but positive cross-sectional
38 +premium on average. In the two-way fixed-effects panel, however, every AI coefficient collapses to
39 +essentially zero. Because firm fixed effects remove all permanent cross-firm differences, this tells
40 +us the signal lives \emph{across} firms, not \emph{within} them: a given firm writing relatively more
41 +about AI from one year to the next does not predict its own subsequent return (anticipating H4).
42 +Throughout, size carries the familiar negative premium ($t\approx-8$) and volatility a positive one,
43 +consistent with the broader cross-sectional literature in this large-cap universe.
44 +
45 +\input{tables/tab_panel}
46 +
47 +\subsection{The structural break: AI pricing switched on after ChatGPT (H2)}
48 +The full-sample averages are not so much wrong as misleading: they blend two regimes that look
49 +nothing alike, and in doing so they understate the post-2022 effect as badly as they overstate the
50 +pre-2022 one. This regime change is the paper's central result. Splitting the sample at the November
51 +2022 ChatGPT launch, the center and right panels of Figure~\ref{fig:quint} reveal a striking
52 +transformation. Before 2022 the relationship between AI quintile and forward return is nearly flat---a
53 +firm in the top AI quintile earned little more than one in the bottom quintile. After 2022 the same
54 +schedule tilts steeply upward, rising monotonically from the lowest to the highest quintile. The
55 +high-minus-low composite spread is $+2.4$ percentage points per year pre-ChatGPT but $+14.6$ points
56 +per year post-ChatGPT---a more than sixfold increase in the price of an essentially unchanged
57 +characteristic.
58 +
59 +\begin{figure}[htbp]\centering
60 +\includegraphics[width=\textwidth]{fig1_quintile_returns.png}
61 +\caption{\textbf{Forward returns by AI-disclosure quintile, before and after ChatGPT.} Each panel
62 +plots the mean forward twelve-month return across quintiles of the AI-disclosure composite: the left
63 +panel pools the full sample, the center panel covers the pre-ChatGPT period (2010--2021), and the
64 +right panel the post-ChatGPT period (2022--2024). The quintile schedule is nearly flat before 2022 and
65 +steeply increasing afterward; the high-minus-low (Q5$-$Q1) spread rises from $+2.4$ percentage points
66 +per year before ChatGPT to $+14.6$ points after.}\label{fig:quint}
67 +\end{figure}
68 +
69 +Table~\ref{tab:break} quantifies the break two ways. In sub-period sorts, the AI-adoption Q5$-$Q1
70 +spread rises from $+2.2\%$ per year \tstat{2.04} pre-2022 to $+14.3\%$ \tstat{2.15} post-2022; the
71 +composite rises from $+2.5\%$ to $+14.6\%$; AI infrastructure from $+1.4\%$ to $+13.6\%$. In the
72 +pooled interaction regressions, the post-2022 incremental slope is positive for all three signals and
73 +statistically significant for AI infrastructure \tstat{2.63}---the facet most directly tied to the
74 +chip, cloud, data-center, and power firms that led the 2023--2025 rally. Figure~\ref{fig:spread} shows
75 +the annual spreads: small and mixed-sign through 2021, uniformly large and positive for every
76 +post-2022 cohort.
77 +
78 +\input{tables/tab_break}
79 +
80 +\begin{figure}[htbp]\centering
81 +\includegraphics[width=0.9\textwidth]{fig3_annual_spread.png}
82 +\caption{\textbf{Annual AI-disclosure return spreads by cohort.} The figure plots the annual
83 +high-minus-low (Q5$-$Q1) forward-return spread on the AI-disclosure composite, by 10-K fiscal (formation)
84 +year. Spreads are small and of mixed sign through 2021, whereas the post-ChatGPT cohorts (shown in red)
85 +are uniformly and substantially positive---showing that the regime change appears in every post-2022
86 +cohort taken on its own, not only in the period average.}
87 +\label{fig:spread}
88 +\end{figure}
89 +
90 +The same regime change is visible in two further lenses. Figure~\ref{fig:cum} plots the cumulative
91 +value of one dollar invested in the equal-weighted, annually rebalanced, self-financing
92 +high-minus-low portfolio: it drifts sideways-to-up for a decade and then inflects upward after the
93 +dashed ChatGPT line. Figure~\ref{fig:fmyear} plots the year-by-year Fama--MacBeth slope on the AI
94 +composite (with controls): it hovers near zero for the entire 2010s and then turns sharply positive,
95 +peaking in the 2024 cohort. The latter figure also delivers an important nuance: the size-controlled
96 +premium is largest in the most recent cohort, consistent with the AI \emph{infrastructure}
97 +super-cycle of 2024--2025 (the build-out of data centers and accelerated compute). We return to this
98 +concentration when discussing limitations.
99 +
100 +\begin{figure}[htbp]\centering
101 +\includegraphics[width=0.86\textwidth]{fig2_cumulative_ls.png}
102 +\caption{\textbf{Cumulative performance of the AI long--short portfolio.} The figure plots the
103 +cumulative value of \$1 invested in the equal-weighted, annually rebalanced, self-financing
104 +high-minus-low AI-disclosure portfolio, shown for both the AI-opportunity composite and AI
105 +disruption-risk signals. Both curves drift sideways-to-up for a decade and then inflect sharply upward
106 +after the dashed ChatGPT line, visualizing the regime change as a kink in accumulated wealth.}
107 +\label{fig:cum}
108 +\end{figure}
109 +
110 +\begin{figure}[htbp]\centering
111 +\includegraphics[width=0.9\textwidth]{fig6_fm_byyear.png}
112 +\caption{\textbf{The AI premium over time: year-by-year Fama--MacBeth slopes.} The figure plots the
113 +annual Fama--MacBeth slope on the AI-disclosure composite---the forward return earned per
114 +cross-sectional standard deviation of AI disclosure---controlling for size, momentum, and volatility,
115 +with error bars of $\pm1$ standard error. The slope hovers near zero throughout the 2010s and turns
116 +sharply positive after ChatGPT, peaking in the 2024 cohort, consistent with the 2024--2025
117 +AI-infrastructure super-cycle.}\label{fig:fmyear}
118 +\end{figure}
119 +
120 +Finally, Figure~\ref{fig:bin} confirms the pattern is not an artifact of a few influential
121 +observations: the binned relation between the AI composite and forward returns is essentially flat in
122 +the pre-ChatGPT sub-period and distinctly upward-sloping afterward, across the entire distribution of
123 +AI disclosure rather than only at the extreme quintiles.
124 +
125 +\begin{figure}[htbp]\centering
126 +\includegraphics[width=\textwidth]{fig5_binscatter.png}
127 +\caption{\textbf{Binned relation between AI disclosure and returns, by sub-period.} The figure shows a
128 +binned scatter of the forward twelve-month return against the AI-disclosure composite, plotted
129 +separately for the pre- and post-ChatGPT periods. Each point is a portfolio of firms within a bin of
130 +the AI signal and the line is an OLS fit. The conditional relation is essentially flat before ChatGPT
131 +and distinctly upward-sloping afterward, across the entire distribution of AI disclosure rather than
132 +only at the extreme quintiles---confirming that the effect is not driven by a few influential
133 +observations.}\label{fig:bin}
134 +\end{figure}
135 +
136 +\subsection{The anatomy of the premium: size and sector}
137 +Where in the cross-section does the post-2022 premium concentrate? Table~\ref{tab:doublesort} and
138 +Figure~\ref{fig:double} report an AI~$\times$~size double sort. Before 2022 the AI gradient is flat
139 +within both size halves. After 2022 it is steep, and dramatically so among smaller firms: small,
140 +high-AI firms earned a mean forward return of 34.6\%, versus 19.5\% for small, low-AI firms---a
141 +15-point gap---while the corresponding gap among large firms is 7 points. The premium is thus
142 +\emph{not} merely a mega-cap phenomenon (a point we reinforce in Section~\ref{sec:robustness}); if
143 +anything it is strongest among the smaller, less-followed names, consistent with an attention-based
144 +mechanism in which information diffuses more slowly into smaller stocks.
145 +
146 +\input{tables/tab_doublesort}
147 +
148 +\begin{figure}[htbp]\centering
149 +\includegraphics[width=\textwidth]{fig9_double_sort.png}
150 +\caption{\textbf{AI disclosure $\times$ firm-size double sort.} The figure plots the mean forward
151 +twelve-month return by AI tercile within small and large firms, separately for the pre- and
152 +post-ChatGPT periods. The post-2022 AI gradient is steep in both size groups but dramatically steeper
153 +among small firms, where high-AI firms outperform low-AI firms by roughly 15 percentage points,
154 +consistent with an attention-based mechanism that operates most strongly in less-followed
155 +stocks.}\label{fig:double}
156 +\end{figure}
157 +
158 +\subsection{Economic significance}
159 +The statistical break is matched by an economic one, and it is worth dwelling on the magnitudes
160 +because they are unusual. The Sharpe ratio of the equal-weighted AI-composite long--short
161 +portfolio---a direct gauge of return earned per unit of risk borne---rises from 0.15 in the
162 +pre-ChatGPT decade to 1.33 afterward; for the AI-disruption-risk spread it rises from 0.33 to 1.15. To
163 +put the post-2022 figure in perspective, the broad U.S.\ equity market has historically delivered a
164 +Sharpe ratio in the neighborhood of 0.4, so a value above one for a single-characteristic,
165 +self-financing strategy is exceptional, and its emergence precisely at the ChatGPT boundary---rather
166 +than gradually, as a slowly learned risk premium would---is hard to reconcile with a constant risk
167 +premium. The point estimates in the quintile sorts are equally vivid: a 14-point annual spread
168 +between the top and bottom AI quintiles is roughly three times the unconditional equity risk premium
169 +and an order of magnitude larger than the pre-2022 spread. Even acknowledging that a portion of this
170 +reflects the higher realized volatility of AI-exposed firms (documented in Section~\ref{sec:robustness})
171 +and the broad technology rally, the magnitude of the post-2022 re-rating is among the largest
172 +single-theme cross-sectional effects in the recent asset-pricing record.
added paper/sections/robustness.tex +134 −0
@@ -0,0 +1,134 @@
1 +% ============================================================================
2 +\section{Robustness and Identification}
3 +\label{sec:robustness}
4 +% ============================================================================
5 +
6 +The structural break is economically large---and large effects invite scrutiny, since they are also
7 +the ones most likely to be artifacts. This section therefore asks how much we should believe it,
8 +confronting the result with the alternative explanations a skeptical reader would raise: that the
9 +break is mechanical, that it is a mega-cap rally in disguise, that it is sensitive to how the signal
10 +is built, or that it merely tracks the technology sector. We subject it in turn to a placebo across
11 +non-AI factors, an event study, a difference-in-differences design, and a battery of construction and
12 +universe robustness checks. The result withstands each.
13 +
14 +\subsection{Placebo: is the effect specific to AI? (H3)}
15 +If the post-2022 spread were a mechanical artifact of our pipeline---or a generic ``high-disclosure
16 +firms did well'' phenomenon---it should appear for any semantic factor. Table~\ref{tab:placebo} and
17 +Figure~\ref{fig:placebo} re-run the entire sub-period and interaction design on all eight factors. The
18 +result strongly supports AI-specificity. The three AI factors show large positive post-2022 spreads
19 +($+13.6$ to $+14.3$ points). Macro-risk language shows essentially no spread ($-0.5$, $t=-0.1$). And,
20 +strikingly, ESG-commitment and climate-risk disclosure earn \emph{negative} post-2022 spreads
21 +($-8.8$ and $-5.0$ points, both significant)---high-ESG firms \emph{underperformed} after 2022, in
22 +line with the post-2021 reversal in the sustainable-investing literature \citep{pastor2022dissecting}.
23 +The one non-AI factor that does show a large positive post-2022 spread is cybersecurity ($+13.5$); we
24 +read this not as a violation but as confirmation, since cybersecurity disclosure is tightly bundled
25 +with technology exposure and is itself increasingly AI-related. The cleanest contrast---AI rewarded,
26 +ESG and climate penalized---makes a powerful case that the post-ChatGPT re-rating reflects a thematic
27 +rotation \emph{toward AI}, not a generic disclosure effect.
28 +
29 +\input{tables/tab_placebo}
30 +
31 +\begin{figure}[htbp]\centering
32 +\includegraphics[width=0.92\textwidth]{fig7_placebo.png}
33 +\caption{\textbf{Placebo test across semantic factors.} The figure plots the post-ChatGPT
34 +high-minus-low (Q5$-$Q1) return spread for each of the eight semantic factors. The AI-related factors
35 +(in red) cluster at the top with large positive spreads, while ESG-commitment and climate-risk
36 +disclosure earn \emph{negative} spreads and macro-risk disclosure earns essentially none. The contrast
37 +shows the post-2022 re-rating is a thematic rotation toward AI, not a generic disclosure
38 +effect.}\label{fig:placebo}
39 +\end{figure}
40 +
41 +\subsection{Event study around ChatGPT}
42 +The portfolio results use annual formation and forward returns; the event study provides a
43 +higher-frequency, cleanly identified complement. Table~\ref{tab:event} and Figure~\ref{fig:event}
44 +report market-model cumulative abnormal returns by pre-event AI tercile. The ordering is monotone at
45 +every horizon and widens steadily over time. The High-minus-Low CAR difference is $+2.9$ points at 60
46 +trading days \tstat{1.77}, $+10.1$ points at one year \tstat{1.97}, and $+14.6$ points at eighteen
47 +months \tstat{1.89}. Because these are abnormal returns---purged of each firm's market beta---the
48 +spread cannot be attributed to high-AI firms simply being higher-beta in a recovering market. A
49 +cross-sectional regression of one-year CAR on pre-event AI exposure yields $+3.1$ points per standard
50 +deviation \tstat{1.39}; adding sector fixed effects halves it to $+2.1$ points \tstat{0.99}, again
51 +locating much---but not all---of the effect in a sector channel. Figure~\ref{fig:eventbin} shows the
52 +relation is smooth across the exposure distribution, not driven by a few outliers.
53 +
54 +\input{tables/tab_event}
55 +
56 +\begin{figure}[htbp]\centering
57 +\includegraphics[width=\textwidth]{fig8_event_car.png}
58 +\caption{\textbf{Cumulative abnormal returns around ChatGPT.} The left panel plots the mean
59 +market-model cumulative abnormal return (CAR) by pre-event AI-disclosure tercile over the event window;
60 +the right panel plots the High$-$Low CAR spread. The tercile ordering is monotone at every horizon and
61 +widens steadily, reaching roughly $+10$ percentage points one year after the launch. Because abnormal
62 +returns are purged of market beta, the spread reflects a cross-sectional response to the AI-narrative
63 +shock.}\label{fig:event}
64 +\end{figure}
65 +
66 +\begin{figure}[htbp]\centering
67 +\includegraphics[width=0.66\textwidth]{fig13_event_binscatter.png}
68 +\caption{\textbf{One-year abnormal return versus pre-event AI exposure.} The figure plots a binned
69 +scatter, with fitted line, of each firm's one-year cumulative abnormal return after ChatGPT against its
70 +pre-event AI exposure (measured from the FY2021 10-K). The relation is positive and smooth across the
71 +exposure distribution, confirming that the event-study spread is not driven by a handful of
72 +outliers.}\label{fig:eventbin}
73 +\end{figure}
74 +
75 +\subsection{Difference-in-differences and the cross-sectional nature of the effect (H4)}
76 +Table~\ref{tab:did} reports difference-in-differences estimates in which treatment is the firm's
77 +pre-determined (2019--2021) AI exposure interacted with the post-2022 indicator, within firm and year
78 +fixed effects. The continuous-exposure DiD coefficient is $+2.7$ percentage points per standard
79 +deviation \tstat{1.51}; the binary version is $+1.7$ points \tstat{0.78}. These are positive and
80 +economically meaningful but weaker than the cross-sectional estimates---exactly the pattern predicted
81 +by H4. Once firm fixed effects absorb the permanent component of AI exposure, only the residual
82 +within-firm variation identifies the effect, and that variation is small. The event-time profile in
83 +Figure~\ref{fig:eventtime} reinforces this reading: the return premium on a firm's \emph{fixed}
84 +pre-event AI exposure is flat and near zero through 2021 and jumps after 2022, peaking in 2024. The
85 +market did not reward firms for adding AI sentences to their filings; it repriced the firms whose
86 +pre-existing, persistent exposure made them AI winners once the narrative turned.
87 +
88 +\input{tables/tab_did}
89 +
90 +\begin{figure}[htbp]\centering
91 +\includegraphics[width=0.82\textwidth]{fig11_eventtime.png}
92 +\caption{\textbf{Event-time profile of the AI premium.} The figure plots the estimated return premium
93 +on firms' pre-determined (2019--2021) AI exposure by year, with 95\% confidence intervals, measured
94 +relative to the 2021 base year and within firm and year fixed effects. The premium is flat and near
95 +zero through 2021 and activates after ChatGPT, peaking in 2024---evidence that the market repriced
96 +persistent pre-existing exposure rather than rewarding incremental wording.}
97 +\label{fig:eventtime}
98 +\end{figure}
99 +
100 +\subsection{Construction, horizon, and universe robustness}
101 +Table~\ref{tab:robust} collects the remaining checks. The post-2022 spread is essentially unchanged
102 +whether the signal is the section-weighted mean (base, $+14.6$), the simple mean ($+13.4$), or the
103 +top-5\% tail ($+14.9$). It holds at six-, twelve-, and twenty-four-month horizons (growing with the
104 +horizon, as a persistent premium should). It survives replacing the three AI signals with their first
105 +principal component---which alone explains 86.8\% of their common variance, confirming the ``single
106 +latent AI construct'' interpretation---yielding a post-2022 PC1 spread of $+13.4$ points \tstat{1.97}.
107 +Most importantly for the mega-cap concern, the spread is $+14.1$ points \tstat{1.92} when the
108 +Magnificent~7 are excluded and $+14.5$ points \tstat{1.93} when the ten largest firms are dropped
109 +(Figure~\ref{fig:mag7}). The AI re-rating is a broad-based feature of the index, not the mechanical
110 +footprint of a handful of trillion-dollar winners. Finally, the sector-neutral composite---which
111 +compares firms only to others \emph{within} their GICS sector---produces a much smaller and
112 +insignificant post-2022 spread ($+3.8$ points, $t=0.84$). This is not a failure of the result but a
113 +sharpening of it: a large share of the AI premium operates through a \emph{between-sector} channel, as
114 +the market re-rated AI-exposed sectors (technology above all) relative to others, with a smaller
115 +within-sector residual.
116 +
117 +\input{tables/tab_robust}
118 +
119 +\begin{figure}[htbp]\centering
120 +\includegraphics[width=0.78\textwidth]{fig10_mag7.png}
121 +\caption{\textbf{The AI spread is not a mega-cap artifact.} The figure compares the post-2022
122 +composite Q5$-$Q1 return spread for the full index against the spread computed after excluding the
123 +Magnificent~7 and after excluding the ten largest firms by market capitalization. The spread is
124 +essentially unchanged in both cases, showing that the AI re-rating is a broad-based feature of the
125 +index rather than the footprint of a handful of trillion-dollar winners.}\label{fig:mag7}
126 +\end{figure}
127 +
128 +\subsection{An alternative performance outcome: risk}
129 +Performance is not only about mean returns. We also relate AI disclosure to subsequent realized
130 +volatility. High-AI firms exhibit modestly higher forward volatility, and the gap widens after 2022 (a
131 +Q5$-$Q1 difference of about 2.9 annualized volatility points, $t=3.1$). The post-2022 AI premium
132 +therefore came bundled with somewhat higher risk---part, though by no means all, of the elevated
133 +returns is compensation for the greater volatility of AI-exposed firms during a period of rapid
134 +technological repricing.
added paper/sections/titlepage.tex +77 −0
@@ -0,0 +1,77 @@
1 +% ============================================================================
2 +% Title Page
3 +% ============================================================================
4 +\thispagestyle{empty}
5 +
6 +\begin{center}
7 +
8 +% --- Logo ---
9 +\includegraphics[width=3.5cm]{uq_logo.jpg}
10 +
11 +\vspace{0.6cm}
12 +
13 +{\footnotesize\textsc{Université du Québec en Outaouais}}\\[0.15cm]
14 +{\footnotesize\textsc{Département des sciences administratives}}
15 +
16 +\vspace{0.8cm}
17 +
18 +{\footnotesize\textsc{Working Paper No.~\WPnumber}}
19 +
20 +\vspace{1.2cm}
21 +
22 +% --- Title ---
23 +{\LARGE\bfseries \WPtitle\par}
24 +
25 +\ifx\WPsubtitle\empty\else
26 + \vspace{0.3cm}
27 + {\large\itshape \WPsubtitle\par}
28 +\fi
29 +
30 +\vspace{1.2cm}
31 +
32 +% --- Author ---
33 +{\large \WPauthor}\\[0.3cm]
34 +{\normalsize \WPaffiliation}\\[0.15cm]
35 +{\normalsize \WPemail}\\[0.15cm] % WP 17: trois courriels (dérogation au gabarit, voir README Notes)
36 +{\small \WPaddress}
37 +
38 +\vspace{0.8cm}
39 +
40 +% --- Date & Version ---
41 +{\normalsize \WPdate}\\[0.1cm]
42 +{\small Version~\WPversion}
43 +
44 +\end{center}
45 +
46 +\vfill
47 +
48 +\newpage
49 +
50 +% ============================================================================
51 +% Abstract Page
52 +% ============================================================================
53 +\thispagestyle{empty}
54 +
55 +\vspace*{1cm}
56 +
57 +\noindent\rule{\textwidth}{0.4pt}
58 +\vspace{0.3cm}
59 +
60 +\noindent\textbf{Abstract}
61 +
62 +\vspace{0.15cm}
63 +
64 +\noindent\WPabstract
65 +
66 +\vspace{0.4cm}
67 +
68 +\noindent\textbf{Keywords:} \WPkeywords
69 +
70 +\vspace{0.15cm}
71 +
72 +\noindent\textbf{JEL Classification:} \WPjel
73 +
74 +\vspace{0.3cm}
75 +\noindent\rule{\textwidth}{0.4pt}
76 +
77 +\newpage
added paper/tables/regression.tex +37 −0
@@ -0,0 +1,37 @@
1 +% ============================================================================
2 +% Table: Regression Results
3 +% ============================================================================
4 +\begin{table}[htbp]
5 + \centering
6 + \begin{threeparttable}
7 + \caption{Baseline Regression Results}
8 + \label{tab:regression}
9 + \begin{tabular}{@{}lcccc@{}}
10 + \toprule
11 + & (1) & (2) & (3) & (4) \\
12 + \midrule
13 + $X_{i,t}$ & 0.245$^{***}$ & 0.198$^{***}$ & 0.183$^{***}$ & 0.172$^{***}$ \\
14 + & (0.042) & (0.038) & (0.035) & (0.033) \\[6pt]
15 + Size & & & $-$0.032$^{**}$ & $-$0.028$^{**}$ \\
16 + & & & (0.014) & (0.013) \\[6pt]
17 + Book-to-Market & & & 0.051$^{***}$ & 0.047$^{***}$ \\
18 + & & & (0.018) & (0.017) \\[6pt]
19 + Leverage & & & & $-$0.089$^{**}$ \\
20 + & & & & (0.041) \\[6pt]
21 + ROA & & & & 0.015$^{*}$ \\
22 + & & & & (0.008) \\[6pt]
23 + \midrule
24 + Firm FE & No & Yes & Yes & Yes \\
25 + Time FE & No & No & Yes & Yes \\
26 + Controls & No & No & Yes & Yes \\[3pt]
27 + Observations & 125{,}400 & 125{,}400 & 125{,}400 & 125{,}400 \\
28 + $R^2$ & 0.032 & 0.148 & 0.215 & 0.228 \\
29 + Adjusted $R^2$ & 0.031 & 0.112 & 0.178 & 0.190 \\
30 + \bottomrule
31 + \end{tabular}
32 + \begin{tablenotes}[flushleft]
33 + \footnotesize
34 + \item \textit{Notes:} This table reports OLS estimates of Equation~\eqref{eq:baseline}. The dependent variable is $y_{i,t}$. $X_{i,t}$ is the main explanatory variable. Control variables include firm size, book-to-market ratio, leverage, and return on assets. Standard errors clustered at the firm level are reported in parentheses. $^{***}$, $^{**}$, and $^{*}$ denote statistical significance at the 1\%, 5\%, and 10\% levels, respectively.
35 + \end{tablenotes}
36 + \end{threeparttable}
37 +\end{table}
added paper/tables/summary_stats.tex +29 −0
@@ -0,0 +1,29 @@
1 +% ============================================================================
2 +% Table: Summary Statistics
3 +% ============================================================================
4 +\begin{table}[htbp]
5 + \centering
6 + \begin{threeparttable}
7 + \caption{Summary Statistics}
8 + \label{tab:summary_stats}
9 + \begin{tabular}{@{}lcccccc@{}}
10 + \toprule
11 + Variable & $N$ & Mean & Std.\ Dev. & $p_{25}$ & Median & $p_{75}$ \\
12 + \midrule
13 + \multicolumn{7}{@{}l}{\textit{Panel A: Dependent Variables}} \\[3pt]
14 + $r_{i,t}$ (\%) & 125{,}400 & 0.82 & 4.35 & $-$1.92 & 0.65 & 3.48 \\
15 + $\sigma_{i,t}$ (\%) & 125{,}400 & 2.14 & 1.87 & 0.98 & 1.65 & 2.78 \\[6pt]
16 + \multicolumn{7}{@{}l}{\textit{Panel B: Explanatory Variables}} \\[3pt]
17 + $X_{i,t}$ & 125{,}400 & 0.45 & 0.32 & 0.21 & 0.40 & 0.65 \\
18 + Size (log) & 125{,}400 & 7.23 & 1.85 & 5.92 & 7.15 & 8.47 \\
19 + Book-to-Market & 125{,}400 & 0.68 & 0.54 & 0.30 & 0.56 & 0.91 \\
20 + Leverage & 125{,}400 & 0.34 & 0.21 & 0.17 & 0.32 & 0.48 \\
21 + ROA (\%) & 125{,}400 & 3.15 & 8.42 & 0.52 & 3.28 & 6.74 \\
22 + \bottomrule
23 + \end{tabular}
24 + \begin{tablenotes}[flushleft]
25 + \footnotesize
26 + \item \textit{Notes:} This table reports summary statistics for the main variables used in the analysis. The sample covers the period January~1990 to December~2023. $r_{i,t}$ is the monthly return of firm~$i$. $\sigma_{i,t}$ is the realized volatility computed from daily returns within the month. $X_{i,t}$ is the main explanatory variable. Size is the natural logarithm of market capitalization. Book-to-Market is the ratio of book equity to market equity. Leverage is total debt over total assets. ROA is return on assets. All continuous variables are winsorized at the 1st and 99th percentiles.
27 + \end{tablenotes}
28 + \end{threeparttable}
29 +\end{table}
added paper/tables/tab_alpha.tex +14 −0
@@ -0,0 +1,14 @@
1 +\begin{table}[H]\centering
2 +\caption{Risk-Adjusted Performance of the AI Long--Short Portfolio}\label{tab:alpha}
3 +\small
4 +\begin{tabular}{lrrrrr}\toprule
5 +& Mean LS & CAPM $\alpha$ & \textit{t} & FF6 $\alpha$ & \textit{t} \\
6 +Signal & (\%/yr) & (\%/yr) & & (\%/yr) & \\\midrule
7 +AI adoption & +2.1 & +1.5 & 1.08 & +2.0 & 1.46 \\
8 +AI infrastructure & +1.7 & +0.9 & 0.61 & +1.1 & 0.84 \\
9 +AI composite & +2.3 & +1.4 & 0.85 & +1.9 & 1.24 \\
10 +AI disruption risk & +3.0 & +2.1 & 1.38 & +2.8 & 2.10 \\
11 +\bottomrule
12 +\end{tabular}
13 +\tablelegend{This table reports the risk-adjusted performance of the equal-weighted high-minus-low (Q5$-$Q1) long--short portfolio formed on each AI signal and rebalanced annually, over the full sample (178 monthly return observations). \emph{Mean LS} is the average raw long--short return; \emph{CAPM}~$\alpha$ and \emph{FF6}~$\alpha$ are the intercepts from time-series regressions of the long--short return on the CAPM market factor and on the Fama--French five factors plus momentum, respectively. All means and alphas are annualized and expressed in percent per year. The $t$-statistics are based on Newey--West (three-lag) heteroskedasticity- and autocorrelation-consistent standard errors. Over the full sample the alphas are economically small and, with the marginal exception of AI disruption risk, statistically insignificant.}
14 +\end{table}
added paper/tables/tab_break.tex +14 −0
@@ -0,0 +1,14 @@
1 +\begin{table}[H]\centering
2 +\caption{The Post-ChatGPT Structural Break}\label{tab:break}
3 +\small
4 +\begin{tabular}{lccc}\toprule
5 +& \multicolumn{2}{c}{Q5$-$Q1 spread} & Interaction \\
6 +\cmidrule(lr){2-3}
7 +Signal & Pre (2010--21) & Post (2022--24) & AI$\times$Post \\\midrule
8 +AI adoption & +2.2 \tstat{2.04} & +14.3 \tstat{2.15} & +0.0199 \tstat{1.17} \\
9 +AI infrastructure & +1.4 \tstat{0.91} & +13.6 \tstat{2.44} & +0.0277 \tstat{2.63} \\
10 +AI composite & +2.5 \tstat{1.58} & +14.6 \tstat{2.07} & +0.0270 \tstat{1.78} \\
11 +\bottomrule
12 +\end{tabular}
13 +\tablelegend{This table quantifies the change in the pricing of AI disclosure around the November 2022 launch of ChatGPT. Columns~2--3 report the equal-weighted Q5$-$Q1 forward-return spread (in percent per year, with Newey--West $t$-statistics in parentheses) separately for the pre-period (formation years 2010--2021) and the post-period (2022--2024). Column~4 reports the coefficient on the interaction of the within-year standardized AI signal with the post-2022 indicator from a pooled OLS regression that includes size and momentum controls and year-clustered standard errors. The spread rises roughly sixfold across the break for every AI signal, and the interaction term is positive throughout---most strongly for AI infrastructure, the facet tied to the compute build-out.}
14 +\end{table}
added paper/tables/tab_corr.tex +15 −0
@@ -0,0 +1,15 @@
1 +\begin{table}[H]\centering
2 +\caption{Correlations among Signals, Controls, and Returns}\label{tab:corr}
3 +\small
4 +\begin{tabular}{lrrrrrr}\toprule
5 +& (1) & (2) & (3) & (4) & (5) & (6) \\\midrule
6 +(1) AI adoption & 1.00 & 0.80 & 0.86 & 0.07 & 0.01 & 0.04 \\
7 +(2) AI infrastructure & 0.80 & 1.00 & 0.74 & 0.11 & 0.02 & 0.04 \\
8 +(3) AI disruption risk & 0.86 & 0.74 & 1.00 & 0.07 & 0.02 & 0.04 \\
9 +(4) Size & 0.07 & 0.11 & 0.07 & 1.00 & 0.08 & -0.10 \\
10 +(5) Momentum & 0.01 & 0.02 & 0.02 & 0.08 & 1.00 & 0.00 \\
11 +(6) Forward return & 0.04 & 0.04 & 0.04 & -0.10 & 0.00 & 1.00 \\
12 +\bottomrule
13 +\end{tabular}
14 +\tablelegend{This table reports Pearson correlation coefficients among the three within-year standardized AI signals, the size and momentum controls, and the forward 12-month return, computed over the estimation panel. Columns (1)--(6) correspond to the row variables in the same order. The three AI signals are mutually highly correlated (pairwise $\rho$ between 0.74 and 0.86), consistent with their being three lenses on a single latent ``AI salience'' construct, whereas each AI signal's unconditional correlation with the forward return is small ($\approx 0.04$), foreshadowing that the action lies in the time variation of the relation rather than its unconditional level.}
15 +\end{table}
added paper/tables/tab_did.tex +13 −0
@@ -0,0 +1,13 @@
1 +\begin{table}[H]\centering
2 +\caption{Difference-in-Differences around ChatGPT}\label{tab:did}
3 +\small
4 +\begin{tabular}{lcc}\toprule
5 +& Treated$\times$Post & Exposure$\times$Post \\
6 +& (binary) & (continuous, per SD) \\\midrule
7 +Coefficient & 0.0170 & 0.0269 \\
8 +\textit{t}-statistic & (0.78) & (1.51) \\
9 +N (firm-years) & 6790 & 6790 \\
10 +Firm \& Year FE & Yes & Yes \\\bottomrule
11 +\end{tabular}
12 +\tablelegend{This table reports difference-in-differences estimates of the effect of pre-determined AI exposure on returns around ChatGPT. The dependent variable is the winsorized forward 12-month return, and all specifications include firm and year fixed effects with standard errors double-clustered by firm and year. Treatment is fixed at each firm's pre-event (2019--2021) average AI exposure, so it cannot respond to the event: the first column uses a binary treated indicator (above-median pre-event exposure) interacted with the post-2022 indicator, and the second uses continuous pre-event exposure (per standard deviation) interacted with Post. Both coefficients are positive but weaker than the cross-sectional estimates, the pattern expected once firm fixed effects absorb the persistent component of AI exposure and only within-firm variation remains to identify the effect.}
13 +\end{table}
added paper/tables/tab_doublesort.tex +16 −0
@@ -0,0 +1,16 @@
1 +\begin{table}[H]\centering
2 +\caption{AI Disclosure $\times$ Size Double Sort}\label{tab:doublesort}
3 +\small
4 +\begin{tabular}{lcccc}\toprule
5 +& Low AI & Mid AI & High AI & Hi$-$Lo \\\midrule
6 +\multicolumn{5}{l}{\textit{Panel A. Pre-ChatGPT (2010--2021)}}\\
7 +Small & 19.7 & 21.9 & 23.6 & +3.9 \\
8 +Large & 13.8 & 14.3 & 13.6 & -0.1 \\
9 +\midrule
10 +\multicolumn{5}{l}{\textit{Panel B. Post-ChatGPT (2022--2024)}}\\
11 +Small & 19.5 & 19.2 & 34.5 & +15.1 \\
12 +Large & 15.8 & 18.3 & 22.9 & +7.1 \\
13 +\bottomrule
14 +\end{tabular}
15 +\tablelegend{This table reports mean forward 12-month returns (in percent) from an independent double sort on AI disclosure and firm size. In each formation year firms are split into a small and a large half by the market-capitalization proxy, and within each half into AI terciles (Low, Mid, High); the column Hi$-$Lo is the high-minus-low AI return within each size group. Panel~A covers the pre-ChatGPT period (formation years 2010--2021) and Panel~B the post-ChatGPT period (2022--2024). The AI gradient is flat in both size halves before 2022 and steep afterward, and dramatically steeper among small firms---consistent with an attention-based mechanism in which information diffuses more slowly into smaller, less-followed stocks.}
16 +\end{table}
added paper/tables/tab_event.tex +17 −0
@@ -0,0 +1,17 @@
1 +\begin{table}[H]\centering
2 +\caption{ChatGPT Event Study}\label{tab:event}
3 +\small
4 +\begin{tabular}{lrrrrrr}\toprule
5 +Horizon & High & Mid & Low & High$-$Low & \textit{t} & \textit{p} \\\midrule
6 ++60 trading days & +1.89 & +1.79 & -1.04 & +2.93 & 1.77 & 0.077 \\
7 ++6 months & -2.72 & -5.17 & -7.25 & +4.53 & 1.60 & 0.110 \\
8 ++1 year & -6.38 & -11.80 & -16.46 & +10.08 & 1.97 & 0.050 \\
9 ++18 months & -8.46 & -16.03 & -23.05 & +14.59 & 1.89 & 0.060 \\
10 +\midrule
11 +\multicolumn{7}{l}{\footnotesize Cross-sectional regression, CAR(+1y) on pre-event AI exposure (per SD):}\\
12 +\multicolumn{7}{l}{\footnotesize\quad No sector FE: $+3.13$\% \tstat{1.39}, $n=483$, $R^2=0.160$ \quad
13 +With sector FE: $+2.09$\% \tstat{0.99}}\\
14 +\bottomrule
15 +\end{tabular}
16 +\tablelegend{This table reports market-model cumulative abnormal returns (CAR, in percent) around the launch of ChatGPT on 30~November 2022. For each stock the market model is estimated over the January--October 2022 window, and abnormal returns are cumulated over horizons of 60 trading days, six months, one year, and 18 months. Firms are grouped into terciles of \emph{pre-event} AI disclosure measured from the FY2021 10-K---the last report filed before the event---and the table reports the mean CAR for the High, Mid, and Low terciles, the High$-$Low difference, and a Welch $t$-test (with $p$-value) of that difference. The bottom rows report a cross-sectional regression of one-year CAR on pre-event AI exposure (per standard deviation), with and without sector fixed effects. Because abnormal returns are purged of each firm's market beta, the spread reflects a cross-sectional response to the AI-narrative shock rather than differential beta exposure.}
17 +\end{table}
added paper/tables/tab_panel.tex +19 −0
@@ -0,0 +1,19 @@
1 +\begin{table}[H]\centering
2 +\caption{Panel and Fama--MacBeth Return Regressions}\label{tab:panel}
3 +\small
4 +\begin{tabular}{lcc}\toprule
5 +& (1) Two-way FE & (2) Fama--MacBeth \\\midrule
6 +AI adoption ($z$) & -0.0047 \tstat{-0.24} & -0.0000 \tstat{-0.00} \\
7 +AI infrastructure ($z$) & +0.0134 \tstat{0.61} & +0.0158 \tstat{1.54} \\
8 +AI disruption risk ($z$) & -0.0153 \tstat{-1.00} & +0.0001 \tstat{0.01} \\
9 +Size ($z$) & -0.2242 \tstat{-7.17} & -0.0330 \tstat{-8.21} \\
10 +Momentum ($z$) & -0.0024 \tstat{-0.25} & +0.0081 \tstat{1.08} \\
11 +Volatility ($z$) & +0.0197 \tstat{2.12} & +0.0687 \tstat{3.56} \\
12 +\midrule
13 +Firm FE & Yes & No \\
14 +Year FE & Yes & (by construction) \\
15 +N (obs / years) & 6811 & 15 \\
16 +\bottomrule
17 +\end{tabular}
18 +\tablelegend{This table reports forward-return regressions estimated two ways. Column~(1) is a two-way (firm~$\times$~year) fixed-effects panel with standard errors double-clustered by firm and year; the firm fixed effects absorb all permanent cross-firm differences, so the AI coefficients identify whether \emph{within-firm} changes in AI language predict returns. Column~(2) is the Fama--MacBeth estimator---the average of annual cross-sectional slopes---with Newey--West $t$-statistics on the time series of coefficients. The dependent variable is the winsorized forward 12-month return, and all signals and controls are within-year cross-sectional $z$-scores, so coefficients are expressed per cross-sectional standard deviation. The contrast between the two columns is the object of interest: the cross-sectional (Fama--MacBeth) AI premia are positive while the within-firm (panel) coefficients collapse to zero, locating the signal across rather than within firms.}
19 +\end{table}
added paper/tables/tab_placebo.tex +18 −0
@@ -0,0 +1,18 @@
1 +\begin{table}[H]\centering
2 +\caption{Placebo Tests across Semantic Factors}\label{tab:placebo}
3 +\small
4 +\begin{tabular}{lccc}\toprule
5 +& \multicolumn{2}{c}{Q5$-$Q1 spread (\%/yr)} & Interaction \\\cmidrule(lr){2-3}
6 +Semantic factor & Pre (2010--21) & Post (2022--24) & $z\times$Post \\\midrule
7 +AI adoption$^{\dagger}$ & +2.2 \tstat{2.04} & +14.3 \tstat{2.15} & +0.0199 \tstat{1.17} \\
8 +AI infrastructure$^{\dagger}$ & +1.4 \tstat{0.91} & +13.6 \tstat{2.44} & +0.0277 \tstat{2.63} \\
9 +AI disruption risk$^{\dagger}$ & +3.1 \tstat{2.47} & +14.1 \tstat{2.07} & +0.0108 \tstat{0.60} \\
10 +ESG commitment & -2.5 \tstat{-2.82} & -8.8 \tstat{-2.27} & -0.0055 \tstat{-0.76} \\
11 +Climate risk & -0.8 \tstat{-1.38} & -5.0 \tstat{-2.48} & +0.0008 \tstat{0.17} \\
12 +Cybersecurity & +2.6 \tstat{1.96} & +13.5 \tstat{2.12} & +0.0090 \tstat{0.64} \\
13 +Automation/labor & +2.1 \tstat{1.91} & +7.2 \tstat{1.29} & +0.0002 \tstat{0.01} \\
14 +Macro risk & -1.6 \tstat{-2.02} & -0.5 \tstat{-0.11} & +0.0125 \tstat{1.06} \\
15 +\bottomrule
16 +\end{tabular}
17 +\tablelegend{This table re-runs the structural-break design on all eight semantic factors in the database to test whether the post-2022 re-rating is specific to AI. For each factor it reports the equal-weighted Q5$-$Q1 forward-return spread (in percent per year, with Newey--West $t$-statistics) in the pre-period (2010--2021) and post-period (2022--2024), together with the coefficient on the interaction of the factor's within-year $z$-score with the post-2022 indicator (size and momentum controls, year-clustered standard errors). The post-ChatGPT jump is concentrated in the AI-related factors, marked with a dagger ($\dagger$); cybersecurity, which is bundled with technology exposure, also rises, whereas ESG-commitment and climate-risk disclosure earn \emph{negative} post-2022 spreads and macro-risk disclosure shows essentially none.}
18 +\end{table}
added paper/tables/tab_robust.tex +21 −0
@@ -0,0 +1,21 @@
1 +\begin{table}[H]\centering
2 +\caption{Robustness of the AI Return Spread}\label{tab:robust}
3 +\small
4 +\begin{tabular}{lcc}\toprule
5 +& Pre (2010--21) & Post (2022--24) \\\midrule
6 +\multicolumn{3}{l}{\textit{Panel A. Alternative signal definition (composite)}}\\
7 +Section-weighted (base) & +2.5 \tstat{1.58} & +14.6 \tstat{2.07} \\
8 +Simple mean & +2.3 \tstat{1.50} & +13.4 \tstat{2.23} \\
9 +Top-5\% tail & +1.5 \tstat{1.04} & +14.9 \tstat{2.47} \\
10 +\midrule\multicolumn{3}{l}{\textit{Panel B. Alternative holding horizon}}\\
11 +6-month forward return & -0.1 \tstat{-0.10} & +1.1 \\
12 +24-month forward return & +9.3 \tstat{2.86} & +23.0 \\
13 +\midrule\multicolumn{3}{l}{\textit{Panel C. Construction / universe}}\\
14 +Sector-neutral composite & +2.3 \tstat{3.35} & +3.8 \tstat{0.84} \\
15 +First principal component & +2.6 \tstat{2.25} & +13.4 \tstat{1.97} \\
16 +Excl.\ Magnificent-7 & +1.7 \tstat{1.07} & +14.1 \tstat{1.92} \\
17 +Excl.\ top-10 by market cap & --- & +14.5 \tstat{1.93} \\
18 +\bottomrule
19 +\end{tabular}
20 +\tablelegend{This table assesses the robustness of the AI composite Q5$-$Q1 forward-return spread (in percent per year, with Newey--West $t$-statistics) across alternative research-design choices, reported separately for the pre-period (2010--2021) and post-period (2022--2024). Panel~A varies the signal definition (section-weighted mean, simple mean, top-5\% tail); Panel~B varies the holding horizon (6- and 24-month forward returns); and Panel~C varies the construction and universe (sector-neutralization, replacing the three signals with their first principal component, and excluding the Magnificent~7 or the ten largest firms by market capitalization). The post-ChatGPT spread is stable across signal definitions, grows with the horizon, survives the exclusion of mega-cap winners, and shrinks markedly only under sector-neutralization---locating much of the premium in a between-sector channel.}
21 +\end{table}
added paper/tables/tab_sorts.tex +18 −0
@@ -0,0 +1,18 @@
1 +\begin{table}[H]\centering
2 +\caption{Portfolio Sorts on AI Disclosure}\label{tab:sorts}
3 +\small
4 +\begin{tabular}{lrrrrrrr}\toprule
5 +Signal (weighting) & Q1 & Q2 & Q3 & Q4 & Q5 & Q5$-$Q1 & \textit{t} \\\midrule
6 +AI adoption (EW) & 16.2 & 17.9 & 19.1 & 18.6 & 20.8 & +4.6 & 1.83 \\
7 +\quad value-weighted & 12.8 & 15.6 & 19.1 & 16.9 & 15.4 & +2.6 & 0.84 \\
8 +AI infrastructure (EW) & 16.8 & 18.4 & 17.3 & 19.6 & 20.6 & +3.9 & 1.58 \\
9 +\quad value-weighted & 11.4 & 18.2 & 15.0 & 20.0 & 16.9 & +5.5 & 2.01 \\
10 +AI disruption risk (EW) & 16.1 & 18.7 & 17.2 & 19.2 & 21.4 & +5.3 & 2.27 \\
11 +\quad value-weighted & 13.7 & 17.6 & 16.7 & 17.1 & 17.6 & +3.9 & 1.74 \\
12 +\midrule
13 +AI composite (EW) & 16.1 & 19.0 & 17.3 & 19.2 & 21.0 & +4.9 & 1.88 \\
14 +\quad value-weighted & 11.7 & 17.8 & 16.2 & 19.5 & 16.6 & +4.9 & 1.61 \\
15 +\bottomrule
16 +\end{tabular}
17 +\tablelegend{This table reports mean forward 12-month returns (in percent) for portfolios sorted into quintiles on each within-year standardized AI-disclosure signal, over the full sample of formation years 2010--2024. For each signal we report both the equal-weighted (EW) and value-weighted portfolio returns; Q1 is the lowest-disclosure quintile and Q5 the highest. The column Q5$-$Q1 is the high-minus-low spread, and \textit{t} is its Newey--West (three-lag) $t$-statistic computed on the time series of 15 annual spreads. Equal-weighted spreads that exceed their value-weighted counterparts indicate that the relation is stronger among smaller index members.}
18 +\end{table}
added paper/tables/tab_summary.tex +17 −0
@@ -0,0 +1,17 @@
1 +\begin{table}[H]\centering
2 +\caption{Summary Statistics}\label{tab:summ}
3 +\small
4 +\begin{tabular}{lrrrrr}\toprule
5 +Variable & Mean & SD & p5 & Median & p95 \\\midrule
6 +AI adoption (wmean) & 0.040 & 0.028 & -0.000 & 0.038 & 0.089 \\
7 +AI infrastructure (wmean) & -0.023 & 0.033 & -0.073 & -0.024 & 0.033 \\
8 +AI disruption risk (wmean) & 0.026 & 0.030 & -0.018 & 0.024 & 0.080 \\
9 +Forward 12m return & 0.186 & 0.415 & -0.279 & 0.142 & 0.735 \\
10 +Forward return, mkt-adj. & 0.036 & 0.395 & -0.401 & -0.005 & 0.537 \\
11 +Momentum (12m) & 0.178 & 0.337 & -0.257 & 0.141 & 0.728 \\
12 +Volatility (ann.) & 0.269 & 0.144 & 0.126 & 0.240 & 0.492 \\
13 +Log market cap & 23.725 & 1.178 & 21.942 & 23.636 & 25.741 \\
14 +\bottomrule
15 +\end{tabular}
16 +\tablelegend{This table reports distributional statistics for the firm-year estimation panel, which comprises 6{,}852 firm-years (497 firms) over formation years 2010--2024 with a tradeable forward return. The three AI signals---\emph{AI adoption}, \emph{AI infrastructure}, and \emph{AI disruption risk}---are section-weighted mean cosine similarities (\texttt{wmean}) of a firm's 10-K text to the corresponding anchor concept. \emph{Forward 12m return} is the buy-and-hold return from July of fiscal year $Y{+}1$ through June of $Y{+}2$; the market-adjusted variant nets out the contemporaneous return on the S\&P~500 ETF (SPY). \emph{Momentum} is the firm's trailing 12-month own return, \emph{volatility} the annualized standard deviation of its monthly returns, and \emph{log market cap} the natural logarithm of the market-capitalization proxy. For each variable the table reports the mean, standard deviation (SD), and the 5th, 50th (median), and 95th percentiles.}
17 +\end{table}
added paper/tables/tab_topfirms.tex +19 −0
@@ -0,0 +1,19 @@
1 +\begin{table}[H]\centering
2 +\caption{The Most AI-Intensive S\&P~500 Firms}\label{tab:topfirms}
3 +\small
4 +\begin{tabular}{lllr}\toprule
5 +Ticker & Company & Sector & Avg.\ AI-adoption \\\midrule
6 +HPE & Hewlett Packard Enterprise & Information Technology & 0.126 \\
7 +UBER & Uber & Industrials & 0.123 \\
8 +INTC & Intel & Information Technology & 0.121 \\
9 +IBM & IBM & Information Technology & 0.113 \\
10 +TYL & Tyler Technologies & Information Technology & 0.108 \\
11 +BNY & BNY Mellon & Financials & 0.106 \\
12 +BRK.B & Berkshire Hathaway & Financials & 0.104 \\
13 +ADSK & Autodesk & Information Technology & 0.103 \\
14 +CMI & Cummins & Industrials & 0.096 \\
15 +EOG & EOG Resources & Energy & 0.095 \\
16 +\bottomrule
17 +\end{tabular}
18 +\tablelegend{This table lists the ten S\&P~500 firms with the highest average AI-adoption disclosure score---the section-weighted mean cosine similarity of their 10-K text to the AI-internal-adoption anchor---computed over fiscal years 2010--2026. For each firm the table reports its ticker, company name, GICS sector, and average AI-adoption score. The ranking has strong face validity, featuring enterprise-technology and software firms alongside an algorithm-centric platform and data-intensive financials; importantly, it is not confined to the Information Technology sector, with industrials and energy firms also appearing---evidence that intensive AI disclosure cuts across the sector taxonomy that a categorical control would impose.}
19 +\end{table}
added paper/uq_logo.jpg +0 −0

Binary file not shown.

added requirements.txt +7 −0
@@ -0,0 +1,7 @@
1 +pandas>=2.2
2 +numpy>=2.0
3 +pyarrow>=17
4 +statsmodels>=0.14
5 +linearmodels>=6.0
6 +matplotlib>=3.9
7 +yfinance>=0.2
added results/tables/results.json +465 −0
@@ -0,0 +1,465 @@
1 +{
2 + "n_obs": 6852,
3 + "n_firms": 497,
4 + "yrs": "2010-2024",
5 + "sorts": {
6 + "AI_ADOPT_EW": {
7 + "Q1": 0.1622,
8 + "Q2": 0.1789,
9 + "Q3": 0.1907,
10 + "Q4": 0.1862,
11 + "Q5": 0.2081,
12 + "Q5_minus_Q1": 0.0458,
13 + "t_stat": 1.8344,
14 + "n_years": 15.0
15 + },
16 + "AI_ADOPT_VW": {
17 + "Q1": 0.1283,
18 + "Q2": 0.1557,
19 + "Q3": 0.1915,
20 + "Q4": 0.1688,
21 + "Q5": 0.1543,
22 + "Q5_minus_Q1": 0.026,
23 + "t_stat": 0.8402,
24 + "n_years": 15.0
25 + },
26 + "AI_ADOPT_EW_madj": {
27 + "Q1": 0.0134,
28 + "Q2": 0.03,
29 + "Q3": 0.0419,
30 + "Q4": 0.0374,
31 + "Q5": 0.0592,
32 + "Q5_minus_Q1": 0.0458,
33 + "t_stat": 1.8344,
34 + "n_years": 15.0
35 + },
36 + "AI_INFRA_EW": {
37 + "Q1": 0.1676,
38 + "Q2": 0.1838,
39 + "Q3": 0.1727,
40 + "Q4": 0.1958,
41 + "Q5": 0.2062,
42 + "Q5_minus_Q1": 0.0386,
43 + "t_stat": 1.5759,
44 + "n_years": 15.0
45 + },
46 + "AI_INFRA_VW": {
47 + "Q1": 0.1142,
48 + "Q2": 0.1823,
49 + "Q3": 0.1498,
50 + "Q4": 0.1996,
51 + "Q5": 0.1688,
52 + "Q5_minus_Q1": 0.0546,
53 + "t_stat": 2.0117,
54 + "n_years": 15.0
55 + },
56 + "AI_INFRA_EW_madj": {
57 + "Q1": 0.0188,
58 + "Q2": 0.0349,
59 + "Q3": 0.0238,
60 + "Q4": 0.047,
61 + "Q5": 0.0573,
62 + "Q5_minus_Q1": 0.0386,
63 + "t_stat": 1.5759,
64 + "n_years": 15.0
65 + },
66 + "AI_RISK_EW": {
67 + "Q1": 0.161,
68 + "Q2": 0.1872,
69 + "Q3": 0.1722,
70 + "Q4": 0.1917,
71 + "Q5": 0.2142,
72 + "Q5_minus_Q1": 0.0532,
73 + "t_stat": 2.2678,
74 + "n_years": 15.0
75 + },
76 + "AI_RISK_VW": {
77 + "Q1": 0.1369,
78 + "Q2": 0.1756,
79 + "Q3": 0.1671,
80 + "Q4": 0.1707,
81 + "Q5": 0.1757,
82 + "Q5_minus_Q1": 0.0389,
83 + "t_stat": 1.745,
84 + "n_years": 15.0
85 + },
86 + "AI_RISK_EW_madj": {
87 + "Q1": 0.0121,
88 + "Q2": 0.0384,
89 + "Q3": 0.0233,
90 + "Q4": 0.0429,
91 + "Q5": 0.0653,
92 + "Q5_minus_Q1": 0.0532,
93 + "t_stat": 2.2678,
94 + "n_years": 15.0
95 + },
96 + "AI_COMPOS_EW": {
97 + "Q1": 0.1614,
98 + "Q2": 0.1898,
99 + "Q3": 0.173,
100 + "Q4": 0.1916,
101 + "Q5": 0.2101,
102 + "Q5_minus_Q1": 0.0487,
103 + "t_stat": 1.8805,
104 + "n_years": 15.0
105 + },
106 + "AI_COMPOS_VW": {
107 + "Q1": 0.1167,
108 + "Q2": 0.1777,
109 + "Q3": 0.1621,
110 + "Q4": 0.1953,
111 + "Q5": 0.1661,
112 + "Q5_minus_Q1": 0.0494,
113 + "t_stat": 1.6136,
114 + "n_years": 15.0
115 + },
116 + "AI_COMPOS_EW_madj": {
117 + "Q1": 0.0126,
118 + "Q2": 0.041,
119 + "Q3": 0.0242,
120 + "Q4": 0.0428,
121 + "Q5": 0.0613,
122 + "Q5_minus_Q1": 0.0487,
123 + "t_stat": 1.8805,
124 + "n_years": 15.0
125 + }
126 + },
127 + "ls_alpha": {
128 + "AI_ADOPT": {
129 + "capm_alpha_m": 0.00126,
130 + "capm_alpha_t": 1.081,
131 + "ff6_alpha_m": 0.00163,
132 + "ff6_alpha_t": 1.45803,
133 + "ff6_alpha_ann": 0.01977,
134 + "mean_ls_m": 0.00177,
135 + "mean_ls_ann": 0.02141,
136 + "n_months": 178,
137 + "betas": {
138 + "MktRF": 0.035,
139 + "SMB": -0.046,
140 + "HML": -0.038,
141 + "RMW": -0.132,
142 + "CMA": -0.076,
143 + "MOM": -0.028
144 + }
145 + },
146 + "AI_INFRA": {
147 + "capm_alpha_m": 0.00078,
148 + "capm_alpha_t": 0.61406,
149 + "ff6_alpha_m": 0.00094,
150 + "ff6_alpha_t": 0.83799,
151 + "ff6_alpha_ann": 0.01139,
152 + "mean_ls_m": 0.00144,
153 + "mean_ls_ann": 0.01744,
154 + "n_months": 178,
155 + "betas": {
156 + "MktRF": 0.064,
157 + "SMB": -0.13,
158 + "HML": -0.036,
159 + "RMW": -0.166,
160 + "CMA": -0.068,
161 + "MOM": -0.035
162 + }
163 + },
164 + "AI_COMPOS": {
165 + "capm_alpha_m": 0.00118,
166 + "capm_alpha_t": 0.84864,
167 + "ff6_alpha_m": 0.00155,
168 + "ff6_alpha_t": 1.23822,
169 + "ff6_alpha_ann": 0.01874,
170 + "mean_ls_m": 0.00193,
171 + "mean_ls_ann": 0.02344,
172 + "n_months": 178,
173 + "betas": {
174 + "MktRF": 0.063,
175 + "SMB": -0.102,
176 + "HML": -0.051,
177 + "RMW": -0.154,
178 + "CMA": -0.054,
179 + "MOM": -0.061
180 + }
181 + },
182 + "AI_RISK": {
183 + "capm_alpha_m": 0.00176,
184 + "capm_alpha_t": 1.3754,
185 + "ff6_alpha_m": 0.00234,
186 + "ff6_alpha_t": 2.10079,
187 + "ff6_alpha_ann": 0.0284,
188 + "mean_ls_m": 0.00249,
189 + "mean_ls_ann": 0.03033,
190 + "n_months": 178,
191 + "betas": {
192 + "MktRF": 0.049,
193 + "SMB": -0.023,
194 + "HML": -0.13,
195 + "RMW": -0.153,
196 + "CMA": -0.054,
197 + "MOM": -0.048
198 + }
199 + }
200 + },
201 + "panel_fe": {
202 + "M1_adopt": {
203 + "coefs": {
204 + "z_AI_ADOPT": {
205 + "coef": -0.0021,
206 + "t": -0.3,
207 + "p": 0.7626
208 + }
209 + },
210 + "n": 6811,
211 + "r2_within": 0.0
212 + },
213 + "M2_adopt_ctrl": {
214 + "coefs": {
215 + "z_AI_ADOPT": {
216 + "coef": -0.0055,
217 + "t": -0.84,
218 + "p": 0.4034
219 + },
220 + "z_size": {
221 + "coef": -0.224,
222 + "t": -7.17,
223 + "p": 0.0
224 + },
225 + "z_mom": {
226 + "coef": -0.0024,
227 + "t": -0.25,
228 + "p": 0.8062
229 + },
230 + "z_vol": {
231 + "coef": 0.0195,
232 + "t": 2.12,
233 + "p": 0.0341
234 + }
235 + },
236 + "n": 6811,
237 + "r2_within": 0.0738
238 + },
239 + "M3_infra_ctrl": {
240 + "coefs": {
241 + "z_AI_INFRA": {
242 + "coef": -0.0007,
243 + "t": -0.07,
244 + "p": 0.9424
245 + },
246 + "z_size": {
247 + "coef": -0.2239,
248 + "t": -7.17,
249 + "p": 0.0
250 + },
251 + "z_mom": {
252 + "coef": -0.0023,
253 + "t": -0.24,
254 + "p": 0.8082
255 + },
256 + "z_vol": {
257 + "coef": 0.0194,
258 + "t": 2.1,
259 + "p": 0.036
260 + }
261 + },
262 + "n": 6811,
263 + "r2_within": 0.0737
264 + },
265 + "M4_risk_ctrl": {
266 + "coefs": {
267 + "z_AI_RISK": {
268 + "coef": -0.0093,
269 + "t": -1.24,
270 + "p": 0.2149
271 + },
272 + "z_size": {
273 + "coef": -0.2241,
274 + "t": -7.17,
275 + "p": 0.0
276 + },
277 + "z_mom": {
278 + "coef": -0.0023,
279 + "t": -0.24,
280 + "p": 0.8089
281 + },
282 + "z_vol": {
283 + "coef": 0.0197,
284 + "t": 2.12,
285 + "p": 0.0339
286 + }
287 + },
288 + "n": 6811,
289 + "r2_within": 0.074
290 + },
291 + "M5_all": {
292 + "coefs": {
293 + "z_AI_ADOPT": {
294 + "coef": -0.0047,
295 + "t": -0.24,
296 + "p": 0.809
297 + },
298 + "z_AI_INFRA": {
299 + "coef": 0.0134,
300 + "t": 0.61,
301 + "p": 0.5413
302 + },
303 + "z_AI_RISK": {
304 + "coef": -0.0153,
305 + "t": -1.0,
306 + "p": 0.3186
307 + },
308 + "z_size": {
309 + "coef": -0.2242,
310 + "t": -7.17,
311 + "p": 0.0
312 + },
313 + "z_mom": {
314 + "coef": -0.0024,
315 + "t": -0.25,
316 + "p": 0.8024
317 + },
318 + "z_vol": {
319 + "coef": 0.0197,
320 + "t": 2.12,
321 + "p": 0.0337
322 + }
323 + },
324 + "n": 6811,
325 + "r2_within": 0.0741
326 + }
327 + },
328 + "fama_macbeth": {
329 + "adopt": {
330 + "const": {
331 + "mean_coef": 0.1848,
332 + "t": 11.94
333 + },
334 + "z_AI_ADOPT": {
335 + "mean_coef": 0.0126,
336 + "t": 1.63
337 + },
338 + "z_size": {
339 + "mean_coef": -0.032,
340 + "t": -8.53
341 + },
342 + "z_mom": {
343 + "mean_coef": 0.0077,
344 + "t": 1.04
345 + },
346 + "z_vol": {
347 + "mean_coef": 0.0685,
348 + "t": 3.63
349 + },
350 + "n_years": 15
351 + },
352 + "infra": {
353 + "const": {
354 + "mean_coef": 0.1848,
355 + "t": 11.94
356 + },
357 + "z_AI_INFRA": {
358 + "mean_coef": 0.016,
359 + "t": 1.71
360 + },
361 + "z_size": {
362 + "mean_coef": -0.0333,
363 + "t": -8.2
364 + },
365 + "z_mom": {
366 + "mean_coef": 0.0069,
367 + "t": 0.93
368 + },
369 + "z_vol": {
370 + "mean_coef": 0.0685,
371 + "t": 3.59
372 + },
373 + "n_years": 15
374 + },
375 + "all": {
376 + "const": {
377 + "mean_coef": 0.1848,
378 + "t": 11.95
379 + },
380 + "z_AI_ADOPT": {
381 + "mean_coef": -0.0,
382 + "t": -0.0
383 + },
384 + "z_AI_INFRA": {
385 + "mean_coef": 0.0158,
386 + "t": 1.54
387 + },
388 + "z_AI_RISK": {
389 + "mean_coef": 0.0001,
390 + "t": 0.01
391 + },
392 + "z_size": {
393 + "mean_coef": -0.033,
394 + "t": -8.21
395 + },
396 + "z_mom": {
397 + "mean_coef": 0.0081,
398 + "t": 1.08
399 + },
400 + "z_vol": {
401 + "mean_coef": 0.0687,
402 + "t": 3.56
403 + },
404 + "n_years": 15
405 + }
406 + },
407 + "structural_break": {
408 + "AI_ADOPT": {
409 + "pre_slope": 0.0074,
410 + "interaction": 0.0199,
411 + "interaction_t": 1.17,
412 + "post_slope": 0.0273
413 + },
414 + "AI_INFRA": {
415 + "pre_slope": 0.0067,
416 + "interaction": 0.0277,
417 + "interaction_t": 2.63,
418 + "post_slope": 0.0344
419 + },
420 + "AI_COMPOS": {
421 + "pre_slope": 0.0078,
422 + "interaction": 0.027,
423 + "interaction_t": 1.78,
424 + "post_slope": 0.0348
425 + }
426 + },
427 + "subperiod_spread": {
428 + "AI_ADOPT": {
429 + "pre_2010_2021": [
430 + 0.0216,
431 + 2.04,
432 + 12
433 + ],
434 + "post_2022_2024": [
435 + 0.1427,
436 + 2.15,
437 + 3
438 + ]
439 + },
440 + "AI_INFRA": {
441 + "pre_2010_2021": [
442 + 0.0143,
443 + 0.91,
444 + 12
445 + ],
446 + "post_2022_2024": [
447 + 0.1355,
448 + 2.44,
449 + 3
450 + ]
451 + },
452 + "AI_COMPOS": {
453 + "pre_2010_2021": [
454 + 0.0245,
455 + 1.58,
456 + 12
457 + ],
458 + "post_2022_2024": [
459 + 0.1457,
460 + 2.07,
461 + 3
462 + ]
463 + }
464 + }
465 +}
\ No newline at end of file
added results/tables/results2.json +445 −0
@@ -0,0 +1,445 @@
1 +{
2 + "placebo": {
3 + "AI adoption": {
4 + "pre": [
5 + 0.0216,
6 + 2.04,
7 + 12
8 + ],
9 + "post": [
10 + 0.1427,
11 + 2.15,
12 + 3
13 + ],
14 + "interaction": 0.0199,
15 + "interaction_t": 1.17,
16 + "is_ai": true
17 + },
18 + "AI infrastructure": {
19 + "pre": [
20 + 0.0143,
21 + 0.91,
22 + 12
23 + ],
24 + "post": [
25 + 0.1355,
26 + 2.44,
27 + 3
28 + ],
29 + "interaction": 0.0277,
30 + "interaction_t": 2.63,
31 + "is_ai": true
32 + },
33 + "AI disruption risk": {
34 + "pre": [
35 + 0.0313,
36 + 2.47,
37 + 12
38 + ],
39 + "post": [
40 + 0.1407,
41 + 2.07,
42 + 3
43 + ],
44 + "interaction": 0.0108,
45 + "interaction_t": 0.6,
46 + "is_ai": true
47 + },
48 + "ESG commitment": {
49 + "pre": [
50 + -0.0248,
51 + -2.82,
52 + 12
53 + ],
54 + "post": [
55 + -0.0878,
56 + -2.27,
57 + 3
58 + ],
59 + "interaction": -0.0055,
60 + "interaction_t": -0.76,
61 + "is_ai": false
62 + },
63 + "Climate risk": {
64 + "pre": [
65 + -0.0079,
66 + -1.38,
67 + 12
68 + ],
69 + "post": [
70 + -0.0495,
71 + -2.48,
72 + 3
73 + ],
74 + "interaction": 0.0008,
75 + "interaction_t": 0.17,
76 + "is_ai": false
77 + },
78 + "Cybersecurity": {
79 + "pre": [
80 + 0.0261,
81 + 1.96,
82 + 12
83 + ],
84 + "post": [
85 + 0.1347,
86 + 2.12,
87 + 3
88 + ],
89 + "interaction": 0.009,
90 + "interaction_t": 0.64,
91 + "is_ai": false
92 + },
93 + "Automation/labor": {
94 + "pre": [
95 + 0.0209,
96 + 1.91,
97 + 12
98 + ],
99 + "post": [
100 + 0.0722,
101 + 1.29,
102 + 3
103 + ],
104 + "interaction": 0.0002,
105 + "interaction_t": 0.01,
106 + "is_ai": false
107 + },
108 + "Macro risk": {
109 + "pre": [
110 + -0.0157,
111 + -2.02,
112 + 12
113 + ],
114 + "post": [
115 + -0.005,
116 + -0.11,
117 + 3
118 + ],
119 + "interaction": 0.0125,
120 + "interaction_t": 1.06,
121 + "is_ai": false
122 + }
123 + },
124 + "sector_neutral": {
125 + "full": [
126 + 0.0258,
127 + 2.55,
128 + 15
129 + ],
130 + "pre": [
131 + 0.0228,
132 + 3.35,
133 + 12
134 + ],
135 + "post": [
136 + 0.0377,
137 + 0.84,
138 + 3
139 + ]
140 + },
141 + "double_sort_post": {
142 + "Lo": {
143 + "Small": 19.46,
144 + "Large": 15.75
145 + },
146 + "Mid": {
147 + "Small": 19.25,
148 + "Large": 18.34
149 + },
150 + "Hi": {
151 + "Small": 34.55,
152 + "Large": 22.87
153 + }
154 + },
155 + "double_sort_pre": {
156 + "Lo": {
157 + "Small": 19.68,
158 + "Large": 13.78
159 + },
160 + "Mid": {
161 + "Small": 21.92,
162 + "Large": 14.32
163 + },
164 + "Hi": {
165 + "Small": 23.59,
166 + "Large": 13.63
167 + }
168 + },
169 + "mag7": {
170 + "baseline_post": [
171 + 0.1457,
172 + 2.07,
173 + 3
174 + ],
175 + "ex_mag7_post": [
176 + 0.1408,
177 + 1.92,
178 + 3
179 + ],
180 + "ex_top10_post": [
181 + 0.1446,
182 + 1.93,
183 + 3
184 + ],
185 + "ex_mag7_pre": [
186 + 0.0172,
187 + 1.07,
188 + 12
189 + ]
190 + },
191 + "alt_signal": {
192 + "wmean(base)": {
193 + "pre": [
194 + 0.0245,
195 + 1.58,
196 + 12
197 + ],
198 + "post": [
199 + 0.1457,
200 + 2.07,
201 + 3
202 + ]
203 + },
204 + "mean": {
205 + "pre": [
206 + 0.0228,
207 + 1.5,
208 + 12
209 + ],
210 + "post": [
211 + 0.134,
212 + 2.23,
213 + 3
214 + ]
215 + },
216 + "top5pct": {
217 + "pre": [
218 + 0.0145,
219 + 1.04,
220 + 12
221 + ],
222 + "post": [
223 + 0.1493,
224 + 2.47,
225 + 3
226 + ]
227 + }
228 + },
229 + "alt_horizon": {
230 + "6m": {
231 + "pre": [
232 + -0.0008,
233 + -0.1,
234 + 12
235 + ],
236 + "post": [
237 + 0.0113,
238 + NaN,
239 + 2
240 + ]
241 + },
242 + "24m": {
243 + "pre": [
244 + 0.0935,
245 + 2.86,
246 + 12
247 + ],
248 + "post": [
249 + 0.2297,
250 + NaN,
251 + 2
252 + ]
253 + }
254 + },
255 + "fm_byyear": [
256 + {
257 + "year": 2010,
258 + "coef": -0.018654282938673935,
259 + "se": 0.009695472645955532,
260 + "t": -1.924019964767326
261 + },
262 + {
263 + "year": 2011,
264 + "coef": 0.001435148364027878,
265 + "se": 0.01438043334007432,
266 + "t": 0.09979868687465165
267 + },
268 + {
269 + "year": 2012,
270 + "coef": 0.035395857398994084,
271 + "se": 0.013905930789781204,
272 + "t": 2.5453785103694595
273 + },
274 + {
275 + "year": 2013,
276 + "coef": -0.03282015610944249,
277 + "se": 0.010621142759634808,
278 + "t": -3.090077673578974
279 + },
280 + {
281 + "year": 2014,
282 + "coef": 0.010841711196201715,
283 + "se": 0.0118676603547193,
284 + "t": 0.9135508492952779
285 + },
286 + {
287 + "year": 2015,
288 + "coef": 0.006479326366460463,
289 + "se": 0.013412889918344228,
290 + "t": 0.4830671395877908
291 + },
292 + {
293 + "year": 2016,
294 + "coef": 0.027079840054787516,
295 + "se": 0.012550003254423658,
296 + "t": 2.1577556201224364
297 + },
298 + {
299 + "year": 2017,
300 + "coef": 0.0034972629856182694,
301 + "se": 0.011850963686757185,
302 + "t": 0.29510367916545666
303 + },
304 + {
305 + "year": 2018,
306 + "coef": 0.020546311066695522,
307 + "se": 0.015297392093211267,
308 + "t": 1.343125085733642
309 + },
310 + {
311 + "year": 2019,
312 + "coef": 0.0037012299178389874,
313 + "se": 0.0165908689232616,
314 + "t": 0.22308837077542062
315 + },
316 + {
317 + "year": 2020,
318 + "coef": -0.009948325957169284,
319 + "se": 0.01076988640073044,
320 + "t": -0.9237168886474573
321 + },
322 + {
323 + "year": 2021,
324 + "coef": 0.031487333586654294,
325 + "se": 0.030271538243484206,
326 + "t": 1.0401629852236458
327 + },
328 + {
329 + "year": 2022,
330 + "coef": 0.02932795595191836,
331 + "se": 0.01845057569643446,
332 + "t": 1.5895415099478947
333 + },
334 + {
335 + "year": 2023,
336 + "coef": -0.011106516046450734,
337 + "se": 0.022395723028705683,
338 + "t": -0.4959212985539683
339 + },
340 + {
341 + "year": 2024,
342 + "coef": 0.1433682452091106,
343 + "se": 0.05192664084428197,
344 + "t": 2.7609766947768577
345 + }
346 + ],
347 + "pca": {
348 + "explained_var_ratio": [
349 + 0.868,
350 + 0.087,
351 + 0.045
352 + ],
353 + "loadings_pc1": [
354 + -0.591,
355 + -0.564,
356 + -0.577
357 + ],
358 + "pre": [
359 + 0.026,
360 + 2.25,
361 + 12
362 + ],
363 + "post": [
364 + 0.134,
365 + 1.97,
366 + 3
367 + ]
368 + },
369 + "did": {
370 + "binary": {
371 + "coef": 0.017,
372 + "t": 0.78,
373 + "n": 6790
374 + },
375 + "continuous": {
376 + "coef": 0.0269,
377 + "t": 1.51,
378 + "n": 6790
379 + }
380 + },
381 + "did_eventtime": [
382 + {
383 + "year": 2015,
384 + "coef": 0.03850249557447814,
385 + "se": 0.0013847785818818304
386 + },
387 + {
388 + "year": 2016,
389 + "coef": 0.029540519812011792,
390 + "se": 0.003984829195566341
391 + },
392 + {
393 + "year": 2017,
394 + "coef": 0.0020874489718797178,
395 + "se": 0.003401459013410779
396 + },
397 + {
398 + "year": 2018,
399 + "coef": 0.022522749526366223,
400 + "se": 0.001059669525518878
401 + },
402 + {
403 + "year": 2019,
404 + "coef": -0.0027932633763402374,
405 + "se": 0.002102424960501601
406 + },
407 + {
408 + "year": 2020,
409 + "coef": -0.011764718161458246,
410 + "se": 0.0011151327454620148
411 + },
412 + {
413 + "year": 2021,
414 + "coef": 0.015693415374462505,
415 + "se": 0.0012102032110539297
416 + },
417 + {
418 + "year": 2022,
419 + "coef": 0.03381454132319204,
420 + "se": 0.0019458437808454545
421 + },
422 + {
423 + "year": 2023,
424 + "coef": 0.005122643968623584,
425 + "se": 0.002502640547920803
426 + },
427 + {
428 + "year": 2024,
429 + "coef": 0.06760337692913147,
430 + "se": 0.001162772256778745
431 + }
432 + ],
433 + "fwd_vol": {
434 + "pre": [
435 + 0.0202,
436 + 2.4,
437 + 12
438 + ],
439 + "post": [
440 + 0.0285,
441 + 3.09,
442 + 3
443 + ]
444 + }
445 +}
\ No newline at end of file
added results/tables/results_event.json +45 −0
@@ -0,0 +1,45 @@
1 +{
2 + "car_60d": {
3 + "High": 1.89,
4 + "Mid": 1.79,
5 + "Low": -1.04,
6 + "H_minus_L": 2.93,
7 + "t": 1.77,
8 + "p": 0.0775
9 + },
10 + "car_6m": {
11 + "High": -2.72,
12 + "Mid": -5.17,
13 + "Low": -7.25,
14 + "H_minus_L": 4.53,
15 + "t": 1.6,
16 + "p": 0.1102
17 + },
18 + "car_1y": {
19 + "High": -6.38,
20 + "Mid": -11.8,
21 + "Low": -16.46,
22 + "H_minus_L": 10.08,
23 + "t": 1.97,
24 + "p": 0.0501
25 + },
26 + "car_18m": {
27 + "High": -8.46,
28 + "Mid": -16.03,
29 + "Low": -23.05,
30 + "H_minus_L": 14.59,
31 + "t": 1.89,
32 + "p": 0.0597
33 + },
34 + "xsec_reg_1y": {
35 + "ai_pre_coef": 3.132,
36 + "ai_pre_t": 1.39,
37 + "n": 483,
38 + "r2": 0.16
39 + },
40 + "xsec_reg_1y_sectfe": {
41 + "ai_pre_coef": 2.089,
42 + "ai_pre_t": 0.99,
43 + "n": 480
44 + }
45 +}
\ No newline at end of file
added results/tables/results_extra.json +23 −0
@@ -0,0 +1,23 @@
1 +{
2 + "AI_COMPOS": {
3 + "sharpe_full": 0.45,
4 + "sharpe_pre": 0.15,
5 + "sharpe_post": 1.33,
6 + "mean_post_ann": 7.9,
7 + "mean_pre_ann": 0.8
8 + },
9 + "AI_ADOPT": {
10 + "sharpe_full": 0.45,
11 + "sharpe_pre": 0.18,
12 + "sharpe_post": 1.09,
13 + "mean_post_ann": 6.8,
14 + "mean_pre_ann": 0.8
15 + },
16 + "AI_RISK": {
17 + "sharpe_full": 0.56,
18 + "sharpe_pre": 0.33,
19 + "sharpe_post": 1.15,
20 + "mean_post_ann": 8.0,
21 + "mean_pre_ann": 1.7
22 + }
23 +}
\ No newline at end of file
added results/tables/t1_summary_stats.csv +9 −0
@@ -0,0 +1,9 @@
1 +,count,mean,std,min,5%,25%,50%,75%,95%,max
2 +ai_adoption_wmean,6852.0,0.04040704767452049,0.027704389111904586,-0.056319814873859286,-0.00045399398615700206,0.021706347918992817,0.03825762326768772,0.057046582582794755,0.08914015149574776,0.2079532867181737
3 +ai_infrastructure_wmean,6852.0,-0.02254669374843961,0.03294147223493173,-0.1177054613828659,-0.07338625603498748,-0.04529579788764157,-0.02410552414907405,-0.0022299304271289552,0.033283630111776624,0.14735987800651673
4 +ai_disruption_risk_wmean,6852.0,0.02633091823215321,0.030062626441902614,-0.06547456295652823,-0.018333885602243923,0.0060464890118431406,0.024132239894242957,0.04438341066221862,0.07955411340373879,0.2425726144961797
5 +fwd_ret,6852.0,0.18562769794494405,0.41526080598677184,-0.9251871991132491,-0.27895959820939353,-0.02944343325478002,0.14176824836965507,0.33105645663440675,0.7354551303240766,9.6922679135916
6 +fwd_ret_mktadj,6852.0,0.035613980108536974,0.3952743682992905,-0.9649727639936845,-0.4012303963502157,-0.16493167984377916,-0.004805007217852486,0.17424373816732153,0.5367735126868064,9.463925242012259
7 +mom_12m,6841.0,0.17826585822519864,0.3368432194825761,-0.905042715552163,-0.2565971729903387,-0.01914154292929271,0.14115163235752348,0.32159023437660483,0.7275220456795188,4.550186196940489
8 +vol_12m,6846.0,0.2689065796019047,0.1439449223047308,0.02317358321809037,0.12649235407123302,0.18157119390938492,0.24009984221686909,0.3214817091702843,0.49216633019660894,5.018534013072863
9 +log_mktcap,6821.0,23.724515504845186,1.1784652203748467,19.259026123015865,21.94234087982483,22.940865415123813,23.63646066891196,24.439404645819696,25.74148773134101,28.971617202227232
added results/tables/t1b_correlations.csv +7 −0
@@ -0,0 +1,7 @@
1 +,z_AI_ADOPT,z_AI_INFRA,z_AI_RISK,z_size,z_mom,fwd_ret
2 +z_AI_ADOPT,1.0,0.8028180743908747,0.8556698643926306,0.07386647791246725,0.012900921152116643,0.03839523736527145
3 +z_AI_INFRA,0.8028180743908747,1.0,0.7448553806384606,0.11281920571617303,0.015916623284046038,0.0387725086601581
4 +z_AI_RISK,0.8556698643926306,0.7448553806384606,1.0,0.07004688187075038,0.024482759917698875,0.04093002350127511
5 +z_size,0.07386647791246725,0.11281920571617303,0.07004688187075038,1.0,0.08123702432654031,-0.09983064254511786
6 +z_mom,0.012900921152116643,0.015916623284046038,0.024482759917698875,0.08123702432654031,1.0,0.002687540308310858
7 +fwd_ret,0.03839523736527145,0.0387725086601581,0.04093002350127511,-0.09983064254511786,0.002687540308310858,1.0
added results/tables/t2_portfolio_sorts.csv +13 −0
@@ -0,0 +1,13 @@
1 +,Q1,Q2,Q3,Q4,Q5,Q5_minus_Q1,t_stat,n_years
2 +AI_ADOPT_EW,0.1622304630117248,0.17886846646640162,0.19069437298870417,0.18623303899400476,0.20805781556569006,0.0458273525539652,1.8344173966494013,15.0
3 +AI_ADOPT_VW,0.12831377593993618,0.1557223873251349,0.19147970696478472,0.16880113589739823,0.15432597813353918,0.026012202193603017,0.8401878372773768,15.0
4 +AI_ADOPT_EW_madj,0.013396968953489208,0.030034972408165998,0.04186087893046856,0.03739954493576918,0.05922432150745444,0.04582735255396522,1.8344173966494022,15.0
5 +AI_INFRA_EW,0.16761949628781805,0.18375829663607343,0.1726811642253529,0.19582998930527162,0.20617918744729322,0.038559691159475155,1.5759481870672352,15.0
6 +AI_INFRA_VW,0.11420660111070716,0.18232669890499462,0.14977675214011021,0.19960199509940954,0.16878266539147102,0.054576064280763885,2.0116567868680635,15.0
7 +AI_INFRA_EW_madj,0.018786002229582443,0.034924802577837845,0.0238476701671173,0.04699649524703602,0.057345693389057595,0.03855969115947514,1.5759481870672343,15.0
8 +AI_RISK_EW,0.16097462919803554,0.18721102049997332,0.17215092733224252,0.19171468294944655,0.21417665878136977,0.05320202958333426,2.2677789301974602,15.0
9 +AI_RISK_VW,0.13685529597814955,0.17559429578035574,0.1670742868974344,0.1707231690902548,0.17571432554593788,0.03885902956778835,1.7449700422295356,15.0
10 +AI_RISK_EW_madj,0.012141135139799896,0.03837752644173772,0.023317433274006948,0.04288118889121095,0.06534316472313416,0.053202029583334275,2.2677789301974607,15.0
11 +AI_COMPOS_EW,0.16140163539436944,0.18984942045377656,0.17304828040655293,0.19163129018677777,0.21010947015379966,0.04870783475943023,1.8804662880967138,15.0
12 +AI_COMPOS_VW,0.11666185798625865,0.17771688317979492,0.16210859240952458,0.1953418062966366,0.16609095998321985,0.04942910199696119,1.6135763562374619,15.0
13 +AI_COMPOS_EW_madj,0.012568141336133836,0.041015926395540955,0.024214786348317377,0.042797796128542155,0.06127597609556406,0.04870783475943024,1.880466288096714,15.0
added results/tables/t6_did_eventtime.csv +11 −0
@@ -0,0 +1,11 @@
1 +year,coef,se
2 +2015,0.03850249557447814,0.0013847785818818304
3 +2016,0.029540519812011792,0.003984829195566341
4 +2017,0.0020874489718797178,0.003401459013410779
5 +2018,0.022522749526366223,0.001059669525518878
6 +2019,-0.0027932633763402374,0.002102424960501601
7 +2020,-0.011764718161458246,0.0011151327454620148
8 +2021,0.015693415374462505,0.0012102032110539297
9 +2022,0.03381454132319204,0.0019458437808454545
10 +2023,0.005122643968623584,0.002502640547920803
11 +2024,0.06760337692913147,0.001162772256778745
added results/tables/t6_double_sort_post.csv +3 −0
@@ -0,0 +1,3 @@
1 +sz,Lo,Mid,Hi
2 +Small,19.46,19.25,34.55
3 +Large,15.75,18.34,22.87
added results/tables/t6_double_sort_pre.csv +3 −0
@@ -0,0 +1,3 @@
1 +sz,Lo,Mid,Hi
2 +Small,19.68,21.92,23.59
3 +Large,13.78,14.32,13.63
added results/tables/t6_fm_byyear.csv +16 −0
@@ -0,0 +1,16 @@
1 +year,coef,se,t
2 +2010,-0.018654282938673935,0.009695472645955532,-1.924019964767326
3 +2011,0.001435148364027878,0.01438043334007432,0.09979868687465165
4 +2012,0.035395857398994084,0.013905930789781204,2.5453785103694595
5 +2013,-0.03282015610944249,0.010621142759634808,-3.090077673578974
6 +2014,0.010841711196201715,0.0118676603547193,0.9135508492952779
7 +2015,0.006479326366460463,0.013412889918344228,0.4830671395877908
8 +2016,0.027079840054787516,0.012550003254423658,2.1577556201224364
9 +2017,0.0034972629856182694,0.011850963686757185,0.29510367916545666
10 +2018,0.020546311066695522,0.015297392093211267,1.343125085733642
11 +2019,0.0037012299178389874,0.0165908689232616,0.22308837077542062
12 +2020,-0.009948325957169284,0.01076988640073044,-0.9237168886474573
13 +2021,0.031487333586654294,0.030271538243484206,1.0401629852236458
14 +2022,0.02932795595191836,0.01845057569643446,1.5895415099478947
15 +2023,-0.011106516046450734,0.022395723028705683,-0.4959212985539683
16 +2024,0.1433682452091106,0.05192664084428197,2.7609766947768577
added results/tables/t6_sector_aieffect_post.csv +12 −0
@@ -0,0 +1,12 @@
1 +sector,hi_minus_lo,n
2 +Communication Services,-8.60947302938111,47
3 +Consumer Discretionary,-17.886184447154747,144
4 +Consumer Staples,12.031664574617004,106
5 +Energy,1.0290573232628804,63
6 +Financials,-0.6097091944392952,226
7 +Health Care,-4.104118311728325,175
8 +Industrials,6.5747542515010915,234
9 +Information Technology,21.65182888956012,213
10 +Materials,-2.927118293840128,74
11 +Real Estate,7.551372323534042,93
12 +Utilities,-4.630430242472372,93
added scripts/01_download_prices.py +85 −0
@@ -0,0 +1,85 @@
1 +"""
2 +01_download_prices.py
3 +Download monthly + daily adjusted prices from Yahoo Finance for all S&P 500
4 +tickers present in the semantic panel, plus the SPY market benchmark and the
5 +risk-free proxy (^IRX, 13-week T-bill). Produces:
6 + data/processed/prices_monthly.parquet (long: ticker, date, adj_close)
7 + data/processed/marketcap.parquet (ticker, sharesOutstanding, marketCap snapshot)
8 + data/processed/spy_monthly.parquet
9 +"""
10 +import time, json, warnings
11 +import pandas as pd
12 +import numpy as np
13 +import yfinance as yf
14 +
15 +warnings.filterwarnings("ignore")
16 +PANEL = "data/parquet/annual_final/annual_final.parquet"
17 +OUT = "data/processed"
18 +
19 +panel = pd.read_parquet(PANEL)
20 +tickers = sorted(panel.ticker.dropna().unique().tolist())
21 +print(f"{len(tickers)} tickers to download")
22 +
23 +START, END = "2009-06-01", "2026-06-17"
24 +
25 +def dl_batch(tks, **kw):
26 + for attempt in range(3):
27 + try:
28 + df = yf.download(tks, start=START, end=END, auto_adjust=True,
29 + progress=False, group_by="ticker", threads=True, **kw)
30 + return df
31 + except Exception as e:
32 + print(" retry", attempt, e); time.sleep(3)
33 + return None
34 +
35 +# --- monthly prices, batched ---
36 +all_monthly = []
37 +BATCH = 50
38 +for i in range(0, len(tickers), BATCH):
39 + batch = tickers[i:i+BATCH]
40 + print(f"batch {i//BATCH+1}: {batch[0]}..{batch[-1]}")
41 + df = dl_batch(batch, interval="1mo")
42 + if df is None:
43 + continue
44 + for t in batch:
45 + try:
46 + sub = df[t] if isinstance(df.columns, pd.MultiIndex) else df
47 + s = sub["Close"].dropna()
48 + if len(s) == 0:
49 + continue
50 + tmp = s.reset_index()
51 + tmp.columns = ["date", "adj_close"]
52 + tmp["ticker"] = t
53 + all_monthly.append(tmp)
54 + except Exception:
55 + pass
56 + time.sleep(1)
57 +
58 +monthly = pd.concat(all_monthly, ignore_index=True)
59 +monthly["date"] = pd.to_datetime(monthly["date"])
60 +monthly = monthly.sort_values(["ticker", "date"])
61 +monthly.to_parquet(f"{OUT}/prices_monthly.parquet", index=False)
62 +got = monthly.ticker.nunique()
63 +print(f"monthly: {len(monthly)} rows, {got}/{len(tickers)} tickers")
64 +
65 +# --- benchmark + risk free ---
66 +spy = dl_batch(["SPY"], interval="1mo")
67 +spy_close = (spy["SPY"]["Close"] if isinstance(spy.columns, pd.MultiIndex) else spy["Close"]).dropna()
68 +spy_df = spy_close.reset_index(); spy_df.columns = ["date", "spy_adj_close"]
69 +spy_df.to_parquet(f"{OUT}/spy_monthly.parquet", index=False)
70 +print("spy rows:", len(spy_df))
71 +
72 +# --- market cap snapshot (best effort) ---
73 +rows = []
74 +for i, t in enumerate(tickers):
75 + try:
76 + fi = yf.Ticker(t).fast_info
77 + rows.append({"ticker": t,
78 + "market_cap": getattr(fi, "market_cap", None),
79 + "shares": getattr(fi, "shares", None)})
80 + except Exception:
81 + rows.append({"ticker": t, "market_cap": None, "shares": None})
82 + if i % 50 == 0:
83 + print(" mktcap", i)
84 +pd.DataFrame(rows).to_parquet(f"{OUT}/marketcap.parquet", index=False)
85 +print("done")
added scripts/02_build_panel.py +88 −0
@@ -0,0 +1,88 @@
1 +"""
2 +02_build_panel.py
3 +Merge the semantic factor panel (annual_final) with realized stock performance.
4 +
5 +Timing convention (avoids look-ahead bias):
6 + A 10-K for fiscal year Y is public by ~Feb-Mar of Y+1. We therefore form
7 + signals at the END OF JUNE of year Y+1 and measure the FORWARD 12-month
8 + return over July(Y+1) -> June(Y+2). This is the Fama-French portfolio
9 + convention: the signal is strictly known before the holding period starts.
10 +
11 +Outputs:
12 + data/processed/monthly_returns.parquet ticker, date, ret, mktcap_proxy
13 + data/processed/merged_panel.parquet firm-year panel: AI scores (FY=Y) + fwd returns + controls
14 +"""
15 +import numpy as np
16 +import pandas as pd
17 +
18 +D = "data/processed"
19 +px = pd.read_parquet(f"{D}/prices_monthly.parquet")
20 +spy = pd.read_parquet(f"{D}/spy_monthly.parquet")
21 +mc = pd.read_parquet(f"{D}/marketcap.parquet")
22 +panel = pd.read_parquet("data/parquet/annual_final/annual_final.parquet")
23 +
24 +# ---- monthly simple returns ----
25 +px = px.sort_values(["ticker", "date"]).copy()
26 +px["date"] = pd.to_datetime(px["date"]).dt.to_period("M").dt.to_timestamp("M") # month-end stamp
27 +px["ret"] = px.groupby("ticker")["adj_close"].pct_change()
28 +
29 +spy["date"] = pd.to_datetime(spy["date"]).dt.to_period("M").dt.to_timestamp("M")
30 +spy = spy.sort_values("date")
31 +spy["spy_ret"] = spy["spy_adj_close"].pct_change()
32 +
33 +# market-cap proxy = current shares * historical price (shares held constant approximation)
34 +mc_map = mc.set_index("ticker")["shares"].to_dict()
35 +px["shares"] = px["ticker"].map(mc_map)
36 +px["mktcap_proxy"] = px["shares"] * px["adj_close"]
37 +px.to_parquet(f"{D}/monthly_returns.parquet", index=False)
38 +
39 +# ---- helper: cumulative return over [start, end] inclusive month-ends ----
40 +def cum_ret(df_t, start, end):
41 + m = df_t[(df_t.date > start) & (df_t.date <= end)]
42 + if m.empty or m["ret"].isna().all():
43 + return np.nan
44 + r = (1 + m["ret"].fillna(0)).prod() - 1
45 + # require reasonable coverage
46 + return r if m["ret"].notna().sum() >= 6 else np.nan
47 +
48 +spy_ix = spy.set_index("date")["spy_ret"]
49 +def cum_spy(start, end):
50 + m = spy_ix[(spy_ix.index > start) & (spy_ix.index <= end)]
51 + return (1 + m.fillna(0)).prod() - 1 if len(m) else np.nan
52 +
53 +rows = []
54 +px_by = {t: d.sort_values("date") for t, d in px.groupby("ticker")}
55 +for _, r in panel.iterrows():
56 + t = r["ticker"]; Y = int(r["fiscal_year"])
57 + d = px_by.get(t)
58 + if d is None:
59 + continue
60 + form = pd.Timestamp(year=Y+1, month=6, day=30) + pd.offsets.MonthEnd(0)
61 + end1 = pd.Timestamp(year=Y+2, month=6, day=30) + pd.offsets.MonthEnd(0)
62 + # controls measured AT formation (strictly known):
63 + mom_start = pd.Timestamp(year=Y, month=6, day=30) + pd.offsets.MonthEnd(0) # 12m momentum to formation
64 + # forward 12m return
65 + fwd = cum_ret(d, form, end1)
66 + spy_fwd = cum_spy(form, end1)
67 + # momentum (past 12m, formation-12 .. formation, skip last month)
68 + mom = cum_ret(d, mom_start, form - pd.offsets.MonthEnd(1))
69 + # trailing vol & size at formation
70 + win = d[(d.date > mom_start) & (d.date <= form)]
71 + vol = win["ret"].std() * np.sqrt(12) if win["ret"].notna().sum() >= 6 else np.nan
72 + cap = d.loc[d.date <= form, "mktcap_proxy"].dropna()
73 + cap = cap.iloc[-1] if len(cap) else np.nan
74 + rows.append({"ticker": t, "fiscal_year": Y,
75 + "fwd_ret": fwd, "spy_fwd": spy_fwd,
76 + "fwd_ret_mktadj": fwd - spy_fwd if pd.notna(fwd) and pd.notna(spy_fwd) else np.nan,
77 + "mom_12m": mom, "vol_12m": vol, "mktcap": cap,
78 + "log_mktcap": np.log(cap) if pd.notna(cap) and cap > 0 else np.nan})
79 +
80 +ret_panel = pd.DataFrame(rows)
81 +merged = panel.merge(ret_panel, on=["ticker", "fiscal_year"], how="left")
82 +merged.to_parquet(f"{D}/merged_panel.parquet", index=False)
83 +
84 +n_ret = merged["fwd_ret"].notna().sum()
85 +print(f"merged: {merged.shape}, firm-years with fwd return: {n_ret}")
86 +print("fwd_ret by year (count):")
87 +print(merged[merged.fwd_ret.notna()].groupby("fiscal_year").size().to_string())
88 +print("\nfwd_ret describe:\n", merged["fwd_ret"].describe())
added scripts/03_analysis.py +277 −0
@@ -0,0 +1,277 @@
1 +"""
2 +03_analysis.py -- Empirical asset-pricing analysis
3 +Does the SEMANTIC INTENSITY of AI disclosure in 10-K filings explain the
4 +cross-section of subsequent S&P 500 stock returns?
5 +
6 +Signals (from fiscal year Y, section-weighted cosine similarity to AI anchors):
7 + AI_ADOPT = ai_adoption_wmean (internal AI use)
8 + AI_INFRA = ai_infrastructure_wmean (AI compute / capex exposure)
9 + AI_RISK = ai_disruption_risk_wmean(AI product-disruption risk)
10 + AI_COMPOS = z(AI_ADOPT)+z(AI_INFRA) (standardized opportunity composite)
11 +
12 +Outcome: forward 12-month return, July(Y+1)->June(Y+2) [strictly tradeable].
13 +
14 +Methods: (1) cross-sectional z-scoring within year; (2) quintile portfolio
15 +sorts (EW & VW, raw & market-adjusted) with Newey-West t-stats; (3) long-short
16 +spread regressed on FF5+Momentum to test for alpha; (4) two-way fixed-effects
17 +panel regressions with double-clustered SE; (5) Fama-MacBeth; (6) a
18 +post-ChatGPT (Nov-2022) structural-break interaction.
19 +"""
20 +import json, warnings
21 +import numpy as np
22 +import pandas as pd
23 +import statsmodels.api as sm
24 +import statsmodels.formula.api as smf
25 +from statsmodels.stats.sandwich_covariance import cov_hac
26 +
27 +warnings.filterwarnings("ignore")
28 +D = "data/processed"; T = "results/tables"
29 +m = pd.read_parquet(f"{D}/merged_panel.parquet")
30 +ret = pd.read_parquet(f"{D}/monthly_returns.parquet")
31 +ff = pd.read_parquet(f"{D}/ff5_monthly.parquet")
32 +mom = pd.read_parquet(f"{D}/mom_monthly.parquet")
33 +RES = {}
34 +
35 +SIGNALS = {"AI_ADOPT": "ai_adoption_wmean",
36 + "AI_INFRA": "ai_infrastructure_wmean",
37 + "AI_RISK": "ai_disruption_risk_wmean"}
38 +
39 +df = m[m.fwd_ret.notna()].copy()
40 +
41 +# winsorize returns & controls at 1/99 within sample for regressions
42 +def wins(s, lo=.01, hi=.99):
43 + ql, qh = s.quantile(lo), s.quantile(hi)
44 + return s.clip(ql, qh)
45 +df["fwd_w"] = wins(df["fwd_ret"])
46 +df["fwd_madj_w"] = wins(df["fwd_ret_mktadj"])
47 +df["mom_w"] = wins(df["mom_12m"])
48 +df["vol_w"] = wins(df["vol_12m"])
49 +
50 +# cross-sectional z-scores within formation year
51 +def zscore(g):
52 + return (g - g.mean()) / g.std(ddof=0)
53 +for k, col in SIGNALS.items():
54 + df[f"z_{k}"] = df.groupby("fiscal_year")[col].transform(zscore)
55 +df["z_size"] = df.groupby("fiscal_year")["log_mktcap"].transform(zscore)
56 +df["z_mom"] = df.groupby("fiscal_year")["mom_w"].transform(zscore)
57 +df["z_vol"] = df.groupby("fiscal_year")["vol_w"].transform(zscore)
58 +df["z_AI_COMPOS"] = df[["z_AI_ADOPT", "z_AI_INFRA"]].mean(axis=1)
59 +
60 +# ============================================================
61 +# 1. SUMMARY STATISTICS
62 +# ============================================================
63 +summ_cols = list(SIGNALS.values()) + ["fwd_ret", "fwd_ret_mktadj", "mom_12m", "vol_12m", "log_mktcap"]
64 +summary = df[summ_cols].describe(percentiles=[.05,.25,.5,.75,.95]).T
65 +summary.to_csv(f"{T}/t1_summary_stats.csv")
66 +RES["n_obs"] = int(len(df))
67 +RES["n_firms"] = int(df.ticker.nunique())
68 +RES["yrs"] = f"{int(df.fiscal_year.min())}-{int(df.fiscal_year.max())}"
69 +print("N obs", len(df), "| firms", df.ticker.nunique(), "| formation yrs", RES["yrs"])
70 +
71 +# correlation among signals & with outcome
72 +corr = df[["z_AI_ADOPT","z_AI_INFRA","z_AI_RISK","z_size","z_mom","fwd_ret"]].corr()
73 +corr.to_csv(f"{T}/t1b_correlations.csv")
74 +
75 +# ============================================================
76 +# 2. QUINTILE PORTFOLIO SORTS
77 +# ============================================================
78 +def newey_mean_t(x, lags=3):
79 + x = x.dropna().values
80 + if len(x) < 3: return np.nan, np.nan
81 + X = np.ones((len(x),1))
82 + res = sm.OLS(x, X).fit()
83 + se = np.sqrt(cov_hac(res, nlags=lags)[0,0])
84 + return x.mean(), x.mean()/se
85 +
86 +def sort_table(signal_z, weight=None, outcome="fwd_ret"):
87 + rows = []
88 + ann_means = {q: [] for q in range(1,6)}
89 + ann_ls = []
90 + for yr, g in df.groupby("fiscal_year"):
91 + g = g.dropna(subset=[signal_z, outcome])
92 + if len(g) < 25: continue
93 + g = g.copy()
94 + g["q"] = pd.qcut(g[signal_z], 5, labels=False, duplicates="drop") + 1
95 + for q in range(1,6):
96 + sub = g[g.q==q]
97 + if sub.empty: continue
98 + if weight is None:
99 + ann_means[q].append(sub[outcome].mean())
100 + else:
101 + w = sub[weight].clip(lower=0).fillna(0)
102 + ann_means[q].append(np.average(sub[outcome], weights=w) if w.sum()>0 else sub[outcome].mean())
103 + if ann_means[5] and ann_means[1]:
104 + ann_ls.append(ann_means[5][-1] - ann_means[1][-1])
105 + out = {}
106 + for q in range(1,6):
107 + mu, t = newey_mean_t(pd.Series(ann_means[q]))
108 + out[f"Q{q}"] = mu
109 + mu_ls, t_ls = newey_mean_t(pd.Series(ann_ls))
110 + out["Q5_minus_Q1"] = mu_ls
111 + out["t_stat"] = t_ls
112 + out["n_years"] = len(ann_ls)
113 + return out
114 +
115 +sorts = {}
116 +for k in ["AI_ADOPT","AI_INFRA","AI_RISK","AI_COMPOS"]:
117 + sorts[f"{k}_EW"] = sort_table(f"z_{k}", None, "fwd_ret")
118 + sorts[f"{k}_VW"] = sort_table(f"z_{k}", "mktcap", "fwd_ret")
119 + sorts[f"{k}_EW_madj"] = sort_table(f"z_{k}", None, "fwd_ret_mktadj")
120 +sort_df = pd.DataFrame(sorts).T
121 +sort_df.to_csv(f"{T}/t2_portfolio_sorts.csv")
122 +RES["sorts"] = sort_df.round(4).to_dict("index")
123 +print("\n=== Quintile sorts (forward 12m return) ===")
124 +print(sort_df.round(4).to_string())
125 +
126 +# ============================================================
127 +# 3. LONG-SHORT MONTHLY TIME SERIES + FACTOR ALPHA
128 +# ============================================================
129 +ff = ff.merge(mom[["date","MOM"]], on="date", how="left")
130 +ff["date"] = pd.to_datetime(ff["date"]).dt.to_period("M").dt.to_timestamp("M")
131 +ff_ix = ff.set_index("date")
132 +ret = ret.copy(); ret["date"] = pd.to_datetime(ret["date"]).dt.to_period("M").dt.to_timestamp("M")
133 +ret_by = {t: d.set_index("date")["ret"] for t, d in ret.groupby("ticker")}
134 +
135 +def ls_monthly(signal_z, n_groups=5):
136 + """Annually-rebalanced EW quintile portfolios, monthly returns."""
137 + monthly = {} # date -> dict(q->list of rets)
138 + for yr, g in df.groupby("fiscal_year"):
139 + g = g.dropna(subset=[signal_z])
140 + if len(g) < 25: continue
141 + g = g.copy(); g["q"] = pd.qcut(g[signal_z], n_groups, labels=False, duplicates="drop")+1
142 + hold = pd.date_range(pd.Timestamp(yr+1,7,31), pd.Timestamp(yr+2,6,30), freq="ME")
143 + for q in [1, n_groups]:
144 + tks = g[g.q==q].ticker.tolist()
145 + for dt in hold:
146 + r = [ret_by[t].get(dt, np.nan) for t in tks if t in ret_by]
147 + r = [x for x in r if pd.notna(x)]
148 + if r:
149 + monthly.setdefault(dt, {}).setdefault(q, []).append(np.mean(r))
150 + recs = []
151 + for dt, qd in sorted(monthly.items()):
152 + if 1 in qd and n_groups in qd:
153 + recs.append({"date": dt, "lo": np.mean(qd[1]), "hi": np.mean(qd[n_groups])})
154 + ts = pd.DataFrame(recs)
155 + ts["ls"] = ts["hi"] - ts["lo"]
156 + return ts
157 +
158 +def factor_alpha(ts, label):
159 + s = ts.merge(ff_ix.reset_index(), on="date", how="inner").dropna(subset=["ls","MktRF","SMB","HML","RMW","CMA","MOM"])
160 + y = s["ls"] - 0 # long-short is already self-financing (RF nets out)
161 + out = {}
162 + # CAPM
163 + X1 = sm.add_constant(s[["MktRF"]]); r1 = sm.OLS(y, X1).fit(cov_type="HAC", cov_kwds={"maxlags":3})
164 + out["capm_alpha_m"] = r1.params["const"]; out["capm_alpha_t"] = r1.tvalues["const"]
165 + # FF5+MOM
166 + X2 = sm.add_constant(s[["MktRF","SMB","HML","RMW","CMA","MOM"]]); r2 = sm.OLS(y, X2).fit(cov_type="HAC", cov_kwds={"maxlags":3})
167 + out["ff6_alpha_m"] = r2.params["const"]; out["ff6_alpha_t"] = r2.tvalues["const"]
168 + out["ff6_alpha_ann"] = (1+r2.params["const"])**12 - 1
169 + out["mean_ls_m"] = y.mean(); out["mean_ls_ann"] = (1+y.mean())**12-1
170 + out["n_months"] = len(s)
171 + out["betas"] = {k: round(r2.params[k],3) for k in ["MktRF","SMB","HML","RMW","CMA","MOM"]}
172 + RES.setdefault("ls_alpha", {})[label] = {k:(round(v,5) if isinstance(v,float) else v) for k,v in out.items()}
173 + print(f"\n[{label}] mean LS {out['mean_ls_ann']*100:.2f}%/yr | CAPM a={out['capm_alpha_m']*1200:.2f}%/yr (t={out['capm_alpha_t']:.2f}) "
174 + f"| FF6 a={out['ff6_alpha_ann']*100:.2f}%/yr (t={out['ff6_alpha_t']:.2f}) | n={out['n_months']}m")
175 + return ts, out
176 +
177 +ls_results = {}
178 +for k in ["AI_ADOPT","AI_INFRA","AI_COMPOS","AI_RISK"]:
179 + ts = ls_monthly(f"z_{k}")
180 + ts.to_parquet(f"{D}/ls_ts_{k}.parquet", index=False)
181 + factor_alpha(ts, k)
182 +
183 +# ============================================================
184 +# 4. TWO-WAY FIXED-EFFECTS PANEL REGRESSIONS (double-clustered SE)
185 +# ============================================================
186 +from linearmodels.panel import PanelOLS
187 +pdf = df.dropna(subset=["fwd_w","z_AI_ADOPT","z_AI_INFRA","z_AI_RISK","z_size","z_mom","z_vol"]).copy()
188 +pdf = pdf.set_index(["ticker","fiscal_year"])
189 +
190 +def fe_reg(formula, label):
191 + res = PanelOLS.from_formula(formula + " + EntityEffects + TimeEffects", data=pdf,
192 + drop_absorbed=True).fit(cov_type="clustered", cluster_entity=True, cluster_time=True)
193 + return res
194 +
195 +panel_specs = {
196 + "M1_adopt": "fwd_w ~ z_AI_ADOPT",
197 + "M2_adopt_ctrl": "fwd_w ~ z_AI_ADOPT + z_size + z_mom + z_vol",
198 + "M3_infra_ctrl": "fwd_w ~ z_AI_INFRA + z_size + z_mom + z_vol",
199 + "M4_risk_ctrl": "fwd_w ~ z_AI_RISK + z_size + z_mom + z_vol",
200 + "M5_all": "fwd_w ~ z_AI_ADOPT + z_AI_INFRA + z_AI_RISK + z_size + z_mom + z_vol",
201 +}
202 +print("\n=== Two-way FE panel (DV=forward 12m return, winsorized) ===")
203 +panel_out = {}
204 +for lab, f in panel_specs.items():
205 + r = fe_reg(f, lab)
206 + coefs = {}
207 + for v in r.params.index:
208 + coefs[v] = {"coef": round(r.params[v],4), "t": round(r.tstats[v],2), "p": round(r.pvalues[v],4)}
209 + panel_out[lab] = {"coefs": coefs, "n": int(r.nobs), "r2_within": round(r.rsquared_within,4)}
210 + key = [v for v in r.params.index if v.startswith("z_AI")]
211 + print(f"{lab}: " + ", ".join(f"{v}={r.params[v]:+.4f}(t={r.tstats[v]:.2f})" for v in key) + f" [n={int(r.nobs)}]")
212 +RES["panel_fe"] = panel_out
213 +
214 +# ============================================================
215 +# 5. FAMA-MACBETH
216 +# ============================================================
217 +def fama_macbeth(xvars, label):
218 + coefs = {v: [] for v in ["const"]+xvars}
219 + for yr, g in df.groupby("fiscal_year"):
220 + g = g.dropna(subset=["fwd_ret"]+xvars)
221 + if len(g) < 30: continue
222 + X = sm.add_constant(g[xvars]); y = g["fwd_ret"]
223 + r = sm.OLS(y, X).fit()
224 + for v in ["const"]+xvars:
225 + coefs[v].append(r.params.get(v, np.nan))
226 + out = {}
227 + for v in ["const"]+xvars:
228 + mu, t = newey_mean_t(pd.Series(coefs[v]))
229 + out[v] = {"mean_coef": round(mu,4), "t": round(t,2)}
230 + out["n_years"] = len(coefs["const"])
231 + RES.setdefault("fama_macbeth", {})[label] = out
232 + print(f"\n[FM {label}] " + ", ".join(f"{v}={out[v]['mean_coef']:+.4f}(t={out[v]['t']:.2f})" for v in xvars))
233 + return out
234 +
235 +print("\n=== Fama-MacBeth (DV=forward 12m return) ===")
236 +fama_macbeth(["z_AI_ADOPT","z_size","z_mom","z_vol"], "adopt")
237 +fama_macbeth(["z_AI_INFRA","z_size","z_mom","z_vol"], "infra")
238 +fama_macbeth(["z_AI_ADOPT","z_AI_INFRA","z_AI_RISK","z_size","z_mom","z_vol"], "all")
239 +
240 +# ============================================================
241 +# 6. POST-CHATGPT STRUCTURAL BREAK (formation years >= 2022)
242 +# ============================================================
243 +df["post"] = (df.fiscal_year >= 2022).astype(int)
244 +print("\n=== Post-ChatGPT interaction (pooled OLS, year-clustered) ===")
245 +brk = {}
246 +for k in ["AI_ADOPT","AI_INFRA","AI_COMPOS"]:
247 + d2 = df.dropna(subset=["fwd_w",f"z_{k}","z_size","z_mom"]).copy()
248 + r = smf.ols(f"fwd_w ~ z_{k} * post + z_size + z_mom", data=d2).fit(
249 + cov_type="cluster", cov_kwds={"groups": d2["fiscal_year"]})
250 + iv = f"z_{k}:post"
251 + brk[k] = {"pre_slope": round(r.params[f"z_{k}"],4),
252 + "interaction": round(r.params[iv],4),
253 + "interaction_t": round(r.tvalues[iv],2),
254 + "post_slope": round(r.params[f"z_{k}"]+r.params[iv],4)}
255 + print(f"{k}: pre={brk[k]['pre_slope']:+.4f} | post-2022 extra={brk[k]['interaction']:+.4f} (t={brk[k]['interaction_t']:.2f}) | post total={brk[k]['post_slope']:+.4f}")
256 +RES["structural_break"] = brk
257 +
258 +# pre/post quintile spread comparison for headline
259 +def spread_subperiod(signal_z, yrs):
260 + sp=[]
261 + for yr,g in df[df.fiscal_year.isin(yrs)].groupby("fiscal_year"):
262 + g=g.dropna(subset=[signal_z,"fwd_ret"])
263 + if len(g)<25: continue
264 + g=g.copy(); g["q"]=pd.qcut(g[signal_z],5,labels=False,duplicates="drop")+1
265 + sp.append(g[g.q==5].fwd_ret.mean()-g[g.q==1].fwd_ret.mean())
266 + mu,t=newey_mean_t(pd.Series(sp)); return round(mu,4),round(t,2),len(sp)
267 +RES["subperiod_spread"]={}
268 +for k in ["AI_ADOPT","AI_INFRA","AI_COMPOS"]:
269 + pre=spread_subperiod(f"z_{k}", range(2010,2022))
270 + post=spread_subperiod(f"z_{k}", range(2022,2025))
271 + RES["subperiod_spread"][k]={"pre_2010_2021":pre,"post_2022_2024":post}
272 + print(f"{k} Q5-Q1: pre(10-21)={pre[0]:+.4f}(t={pre[1]}) | post(22-24)={post[0]:+.4f}(t={post[1]})")
273 +
274 +with open(f"{T}/results.json","w") as fh:
275 + json.dump(RES, fh, indent=2, default=str)
276 +df.to_parquet(f"{D}/analysis_panel.parquet")
277 +print("\nSaved results.json and analysis_panel.parquet")
added scripts/04_figures.py +106 −0
@@ -0,0 +1,106 @@
1 +"""04_figures.py -- publication figures for the AI-disclosure / returns study."""
2 +import json
3 +import numpy as np
4 +import pandas as pd
5 +import matplotlib.pyplot as plt
6 +import matplotlib as mpl
7 +
8 +mpl.rcParams.update({"font.size":11,"axes.spines.top":False,"axes.spines.right":False,
9 + "figure.dpi":140,"savefig.dpi":200,"axes.grid":True,"grid.alpha":.25,
10 + "font.family":"DejaVu Sans"})
11 +D="data/processed"; F="figures"
12 +df=pd.read_parquet(f"{D}/analysis_panel.parquet")
13 +RES=json.load(open("results/tables/results.json"))
14 +NAVY="#1b3a6b"; RED="#b22222"; GREY="#8a8a8a"; GREEN="#2e7d32"
15 +
16 +# ---- Fig 1: forward return by AI quintile, full / pre / post ----
17 +def qmeans(d, sig):
18 + out={}
19 + for q in range(1,6):
20 + out[q]=[]
21 + for yr,g in d.groupby("fiscal_year"):
22 + g=g.dropna(subset=[sig,"fwd_ret"])
23 + if len(g)<25: continue
24 + g=g.copy(); g["q"]=pd.qcut(g[sig],5,labels=False,duplicates="drop")+1
25 + for q in range(1,6): out[q].append(g[g.q==q].fwd_ret.mean())
26 + return [np.mean(out[q]) for q in range(1,6)]
27 +
28 +fig,axes=plt.subplots(1,3,figsize=(13,4.2),sharey=True)
29 +panels=[("Full sample (2010-2024)",df),("Pre-ChatGPT (2010-2021)",df[df.fiscal_year<2022]),
30 + ("Post-ChatGPT (2022-2024)",df[df.fiscal_year>=2022])]
31 +for ax,(title,d) in zip(axes,panels):
32 + v=qmeans(d,"z_AI_COMPOS")
33 + bars=ax.bar(range(1,6),[x*100 for x in v],color=[GREY,GREY,GREY,GREY,NAVY],edgecolor="k",lw=.5)
34 + ax.set_title(title,fontsize=11); ax.set_xlabel("AI-disclosure quintile (1=low, 5=high)")
35 + ax.set_xticks(range(1,6))
36 + sp=(v[4]-v[0])*100
37 + ax.annotate(f"Q5−Q1 = {sp:+.1f} pp",xy=(.5,.93),xycoords="axes fraction",ha="center",
38 + fontsize=10,fontweight="bold",color=RED if sp>3 else "k")
39 +axes[0].set_ylabel("Mean forward 12-month return (%)")
40 +fig.suptitle("AI-Disclosure Intensity and Subsequent S&P 500 Returns",fontsize=13,fontweight="bold",y=1.02)
41 +fig.tight_layout(); fig.savefig(f"{F}/fig1_quintile_returns.png",bbox_inches="tight"); plt.close()
42 +
43 +# ---- Fig 2: cumulative long-short (AI composite) ----
44 +fig,ax=plt.subplots(figsize=(11,5))
45 +for k,col,lab in [("AI_COMPOS",NAVY,"AI opportunity (adoption+infra)"),("AI_RISK",GREEN,"AI disruption-risk salience")]:
46 + ts=pd.read_parquet(f"{D}/ls_ts_{k}.parquet").sort_values("date")
47 + ts["cum"]=(1+ts["ls"]).cumprod()
48 + ax.plot(ts["date"],ts["cum"],color=col,lw=1.8,label=lab)
49 +ax.axhline(1,color="k",lw=.7)
50 +ax.axvline(pd.Timestamp("2022-11-30"),color=RED,ls="--",lw=1.3)
51 +ax.annotate("ChatGPT\n(Nov 2022)",xy=(pd.Timestamp("2022-11-30"),ax.get_ylim()[1]*.6),
52 + color=RED,fontsize=9,ha="right")
53 +ax.set_title("Cumulative Value of $1 in the High-minus-Low AI Disclosure Portfolio\n(equal-weight, annually rebalanced, self-financing)",fontweight="bold")
54 +ax.set_ylabel("Growth of $1 (long-short)"); ax.legend(frameon=False,loc="upper left")
55 +fig.tight_layout(); fig.savefig(f"{F}/fig2_cumulative_ls.png",bbox_inches="tight"); plt.close()
56 +
57 +# ---- Fig 3: annual Q5-Q1 spread bars ----
58 +def annual_spread(sig):
59 + rec=[]
60 + for yr,g in df.groupby("fiscal_year"):
61 + g=g.dropna(subset=[sig,"fwd_ret"])
62 + if len(g)<25: continue
63 + g=g.copy(); g["q"]=pd.qcut(g[sig],5,labels=False,duplicates="drop")+1
64 + rec.append((yr,(g[g.q==5].fwd_ret.mean()-g[g.q==1].fwd_ret.mean())*100))
65 + return pd.DataFrame(rec,columns=["year","sp"])
66 +sp=annual_spread("z_AI_COMPOS")
67 +fig,ax=plt.subplots(figsize=(11,4.6))
68 +cols=[RED if y>=2022 else NAVY for y in sp.year]
69 +ax.bar(sp.year,sp.sp,color=cols,edgecolor="k",lw=.5)
70 +ax.axhline(0,color="k",lw=.8)
71 +ax.set_title("Annual High-minus-Low AI-Disclosure Return Spread by Formation Year",fontweight="bold")
72 +ax.set_ylabel("Q5 − Q1 forward 12m return (pp)"); ax.set_xlabel("Fiscal year of 10-K (signal)")
73 +ax.set_xticks(sp.year); ax.tick_params(axis="x",rotation=45)
74 +from matplotlib.patches import Patch
75 +ax.legend(handles=[Patch(color=NAVY,label="Pre-ChatGPT (2010-2021)"),Patch(color=RED,label="Post-ChatGPT (2022-2024)")],frameon=False)
76 +fig.tight_layout(); fig.savefig(f"{F}/fig3_annual_spread.png",bbox_inches="tight"); plt.close()
77 +
78 +# ---- Fig 4: secular rise of AI language (context) ----
79 +fig,ax=plt.subplots(figsize=(11,4.6))
80 +for col,c,lab in [("ai_adoption_wmean",NAVY,"AI adoption"),("ai_infrastructure_wmean",RED,"AI infrastructure"),
81 + ("ai_disruption_risk_wmean",GREEN,"AI disruption risk")]:
82 + g=df.groupby("fiscal_year")[col].mean()
83 + ax.plot(g.index,g.values,marker="o",color=c,label=lab,lw=1.8)
84 +ax.axvline(2022,color="grey",ls="--",lw=1)
85 +ax.set_title("Rising AI Language Across S&P 500 10-K Filings (cross-sectional mean similarity)",fontweight="bold")
86 +ax.set_ylabel("Section-weighted cosine similarity to AI anchor"); ax.set_xlabel("Fiscal year")
87 +ax.legend(frameon=False)
88 +fig.tight_layout(); fig.savefig(f"{F}/fig4_ai_language_trend.png",bbox_inches="tight"); plt.close()
89 +
90 +# ---- Fig 5: binscatter AI score vs forward return, pre vs post ----
91 +fig,axes=plt.subplots(1,2,figsize=(12,4.6),sharey=True)
92 +for ax,(title,d) in zip(axes,[("Pre-ChatGPT (2010-2021)",df[df.fiscal_year<2022]),
93 + ("Post-ChatGPT (2022-2024)",df[df.fiscal_year>=2022])]):
94 + d=d.dropna(subset=["z_AI_COMPOS","fwd_ret"])
95 + d=d.copy(); d["bin"]=pd.qcut(d.z_AI_COMPOS,12,labels=False,duplicates="drop")
96 + b=d.groupby("bin").agg(x=("z_AI_COMPOS","mean"),y=("fwd_ret","mean"))
97 + ax.scatter(b.x,b.y*100,color=NAVY,s=45,zorder=3)
98 + z=np.polyfit(b.x,b.y*100,1); xs=np.linspace(b.x.min(),b.x.max(),50)
99 + ax.plot(xs,np.polyval(z,xs),color=RED,lw=2)
100 + ax.set_title(f"{title}\nslope={z[0]:.2f} pp / SD",fontsize=10)
101 + ax.set_xlabel("AI-disclosure composite (z-score)")
102 +axes[0].set_ylabel("Mean forward 12m return (%)")
103 +fig.suptitle("AI Disclosure vs. Subsequent Return: Binned Scatter",fontweight="bold",y=1.02)
104 +fig.tight_layout(); fig.savefig(f"{F}/fig5_binscatter.png",bbox_inches="tight"); plt.close()
105 +
106 +print("figures written:", [f"fig{i}" for i in range(1,6)])
added scripts/05_make_tables.py +102 −0
@@ -0,0 +1,102 @@
1 +"""05_make_tables.py -- emit LaTeX table fragments for the report."""
2 +import json, pandas as pd, numpy as np
3 +T="results/tables"; R="paper/tables"
4 +RES=json.load(open(f"{T}/results.json"))
5 +
6 +def w(name, body): open(f"{R}/{name}.tex","w").write(body)
7 +
8 +# --- Table 1: summary stats ---
9 +s=pd.read_csv(f"{T}/t1_summary_stats.csv",index_col=0)
10 +nice={"ai_adoption_wmean":"AI adoption (wmean)","ai_infrastructure_wmean":"AI infrastructure (wmean)",
11 + "ai_disruption_risk_wmean":"AI disruption risk (wmean)","fwd_ret":"Forward 12m return",
12 + "fwd_ret_mktadj":"Forward return, mkt-adj.","mom_12m":"Momentum (12m)","vol_12m":"Volatility (ann.)",
13 + "log_mktcap":"Log market cap"}
14 +rows="".join(f"{nice.get(i,i)} & {s.loc[i,'mean']:.3f} & {s.loc[i,'std']:.3f} & {s.loc[i,'5%']:.3f} & {s.loc[i,'50%']:.3f} & {s.loc[i,'95%']:.3f} \\\\\n" for i in nice)
15 +w("tab_summary", r"""\begin{table}[H]\centering\small
16 +\caption{Summary statistics, firm-year panel with tradeable forward returns (N=%d firm-years, %d firms, formation years %s).}\label{tab:summ}
17 +\begin{tabular}{lrrrrr}\toprule
18 +Variable & Mean & SD & p5 & Median & p95 \\\midrule
19 +%s\bottomrule
20 +\end{tabular}\end{table}""" % (RES["n_obs"],RES["n_firms"],RES["yrs"],rows))
21 +
22 +# --- Table 2: portfolio sorts ---
23 +sd=pd.read_csv(f"{T}/t2_portfolio_sorts.csv",index_col=0)
24 +def row(key,label):
25 + r=sd.loc[key]
26 + return f"{label} & {r.Q1*100:.1f} & {r.Q2*100:.1f} & {r.Q3*100:.1f} & {r.Q4*100:.1f} & {r.Q5*100:.1f} & {r.Q5_minus_Q1*100:+.1f} & {r.t_stat:.2f} \\\\\n"
27 +body =row("AI_ADOPT_EW","AI adoption (EW)")
28 +body+=row("AI_ADOPT_VW","\\quad value-weighted")
29 +body+=row("AI_INFRA_EW","AI infrastructure (EW)")
30 +body+=row("AI_INFRA_VW","\\quad value-weighted")
31 +body+=row("AI_RISK_EW","AI disruption risk (EW)")
32 +body+=row("AI_RISK_VW","\\quad value-weighted")
33 +body+="\\midrule\n"+row("AI_COMPOS_EW","AI composite (EW)")
34 +body+=row("AI_COMPOS_VW","\\quad value-weighted")
35 +w("tab_sorts", r"""\begin{table}[H]\centering\small
36 +\caption{Forward 12-month returns (\%%) by AI-disclosure quintile. Q5$-$Q1 is the high-minus-low spread; \textit{t} uses Newey--West (3 lag) errors on the 15 annual spreads.}\label{tab:sorts}
37 +\begin{tabular}{lrrrrrrr}\toprule
38 +Signal (weighting) & Q1 & Q2 & Q3 & Q4 & Q5 & Q5$-$Q1 & \textit{t} \\\midrule
39 +%s\bottomrule
40 +\end{tabular}\end{table}""" % body)
41 +
42 +# --- Table 3: factor alphas ---
43 +a=RES["ls_alpha"]
44 +def arow(k,label):
45 + x=a[k]
46 + return (f"{label} & {x['mean_ls_ann']*100:+.1f} & {x['capm_alpha_m']*1200:+.1f} & {x['capm_alpha_t']:.2f} "
47 + f"& {x['ff6_alpha_ann']*100:+.1f} & {x['ff6_alpha_t']:.2f} \\\\\n")
48 +body=arow("AI_ADOPT","AI adoption")+arow("AI_INFRA","AI infrastructure")+arow("AI_COMPOS","AI composite")+arow("AI_RISK","AI disruption risk")
49 +w("tab_alpha", r"""\begin{table}[H]\centering\small
50 +\caption{Risk-adjusted performance of the equal-weight high-minus-low (Q5$-$Q1) long-short portfolio, annually rebalanced (%d monthly observations). Alphas annualized; \textit{t} from Newey--West (3 lag) HAC errors.}\label{tab:alpha}
51 +\begin{tabular}{lrrrrr}\toprule
52 +& Mean LS & CAPM $\alpha$ & \textit{t} & FF6 $\alpha$ & \textit{t} \\
53 +Signal & (\%%/yr) & (\%%/yr) & & (\%%/yr) & \\\midrule
54 +%s\bottomrule
55 +\end{tabular}\end{table}""" % (a["AI_ADOPT"]["n_months"], body))
56 +
57 +# --- Table 4: panel FE + Fama-MacBeth ---
58 +fe=RES["panel_fe"]; fm=RES["fama_macbeth"]
59 +def g(d,v):
60 + return d["coefs"].get(v)
61 +m5=fe["M5_all"]; fmall=fm["all"]
62 +def cell(coef,t): return f"{coef:+.4f} \\tstat{{{t:.2f}}}"
63 +rows=[]
64 +labels=[("z_AI_ADOPT","AI adoption ($z$)"),("z_AI_INFRA","AI infrastructure ($z$)"),
65 + ("z_AI_RISK","AI disruption risk ($z$)"),("z_size","Size ($z$)"),
66 + ("z_mom","Momentum ($z$)"),("z_vol","Volatility ($z$)")]
67 +for v,lab in labels:
68 + fec=m5["coefs"].get(v); fmc=fmall.get(v)
69 + fecell = cell(fec["coef"],fec["t"]) if fec else "---"
70 + fmcell = cell(fmc["mean_coef"],fmc["t"]) if fmc else "---"
71 + rows.append(f"{lab} & {fecell} & {fmcell} \\\\")
72 +body="\n".join(rows)
73 +w("tab_panel", r"""\begin{table}[H]\centering\small
74 +\caption{Forward-return regressions. Column (1): two-way (firm $\times$ year) fixed-effects panel, SE double-clustered by firm and year. Column (2): Fama--MacBeth, Newey--West \textit{t}. Dependent variable is the winsorized forward 12-month return; signals are within-year $z$-scores.}\label{tab:panel}
75 +\begin{tabular}{lcc}\toprule
76 +& (1) Two-way FE & (2) Fama--MacBeth \\\midrule
77 +%s
78 +\midrule
79 +Firm FE & Yes & No \\
80 +Year FE & Yes & (by construction) \\
81 +N (obs / years) & %d & %d \\
82 +\bottomrule
83 +\end{tabular}\end{table}""" % (body, fe["M5_all"]["n"], fmall["n_years"]))
84 +
85 +# --- Table 5: structural break ---
86 +br=RES["structural_break"]; sp=RES["subperiod_spread"]
87 +def brow(k,label):
88 + b=br[k]; s=sp[k]
89 + pre=s["pre_2010_2021"]; post=s["post_2022_2024"]
90 + return (f"{label} & {pre[0]*100:+.1f} \\tstat{{{pre[1]:.2f}}} & {post[0]*100:+.1f} \\tstat{{{post[1]:.2f}}} "
91 + f"& {b['interaction']:+.4f} \\tstat{{{b['interaction_t']:.2f}}} \\\\\n")
92 +body=brow("AI_ADOPT","AI adoption")+brow("AI_INFRA","AI infrastructure")+brow("AI_COMPOS","AI composite")
93 +w("tab_break", r"""\begin{table}[H]\centering\small
94 +\caption{The post-ChatGPT structural break. Columns 2--3: Q5$-$Q1 forward-return spread (\%%/yr, Newey--West \textit{t}) in each sub-period. Column 4: coefficient on AI~$z$\,$\times$\,Post-2022 from a pooled OLS (size and momentum controls, year-clustered SE).}\label{tab:break}
95 +\begin{tabular}{lccc}\toprule
96 +& \multicolumn{2}{c}{Q5$-$Q1 spread} & Interaction \\
97 +\cmidrule(lr){2-3}
98 +Signal & Pre (2010--21) & Post (2022--24) & AI$\times$Post \\\midrule
99 +%s\bottomrule
100 +\end{tabular}\end{table}""" % body)
101 +
102 +print("LaTeX table fragments written.")
added scripts/06_extended.py +274 −0
@@ -0,0 +1,274 @@
1 +"""
2 +06_extended.py -- Extended / rigorous tests for the AI-disclosure return study.
3 +Produces results/tables/results2.json and several CSV/parquet artifacts.
4 +
5 +Blocks:
6 + A. Placebo: replicate the post-2022 break on the 5 NON-AI semantic factors.
7 + B. Sector-neutral sorts and AIxSector / AIxSize double sorts.
8 + C. Magnificent-7 and mega-cap exclusion robustness.
9 + D. Alternative signal definitions (mean, top5pct) and horizons (6m, 24m).
10 + E. Year-by-year Fama-MacBeth slopes (for time-variation figure).
11 + F. PCA of the three AI signals -> AI_PC1; re-test.
12 + G. Difference-in-differences around ChatGPT (binary & continuous treatment).
13 + H. Forward realized volatility as an alternative performance outcome.
14 +"""
15 +import json, warnings
16 +import numpy as np, pandas as pd
17 +import statsmodels.api as sm, statsmodels.formula.api as smf
18 +from statsmodels.stats.sandwich_covariance import cov_hac
19 +warnings.filterwarnings("ignore")
20 +
21 +D="data/processed"; T="results/tables"
22 +df=pd.read_parquet(f"{D}/analysis_panel.parquet")
23 +mret=pd.read_parquet(f"{D}/monthly_returns.parquet")
24 +mret["date"]=pd.to_datetime(mret["date"]).dt.to_period("M").dt.to_timestamp("M")
25 +R2={}
26 +
27 +def nw_t(x,lags=3):
28 + x=pd.Series(x).dropna().values
29 + if len(x)==0: return np.nan,np.nan
30 + if len(x)<3: return float(x.mean()),np.nan
31 + r=sm.OLS(x,np.ones((len(x),1))).fit()
32 + se=np.sqrt(cov_hac(r,nlags=lags)[0,0]); return x.mean(),x.mean()/se
33 +
34 +def zс(g): return (g-g.mean())/g.std(ddof=0)
35 +
36 +def subperiod_spread(d, zcol, yrs, oc="fwd_ret"):
37 + sp=[]
38 + for yr,g in d[d.fiscal_year.isin(list(yrs))].groupby("fiscal_year"):
39 + g=g.dropna(subset=[zcol,oc])
40 + if len(g)<25: continue
41 + g=g.copy(); g["q"]=pd.qcut(g[zcol],5,labels=False,duplicates="drop")+1
42 + sp.append(g[g.q==5][oc].mean()-g[g.q==1][oc].mean())
43 + mu,t=nw_t(sp); return round(mu,4),round(t,2),len(sp)
44 +
45 +# =========================================================
46 +# A. PLACEBO -- all 8 semantic factors, pre vs post + interaction
47 +# =========================================================
48 +FACTORS={"AI adoption":"ai_adoption_wmean","AI infrastructure":"ai_infrastructure_wmean",
49 + "AI disruption risk":"ai_disruption_risk_wmean","ESG commitment":"esg_commitment_wmean",
50 + "Climate risk":"climate_risk_wmean","Cybersecurity":"cybersecurity_wmean",
51 + "Automation/labor":"automation_labor_wmean","Macro risk":"macro_risk_wmean"}
52 +placebo={}
53 +for name,col in FACTORS.items():
54 + z=f"_z_{col}"
55 + df[z]=df.groupby("fiscal_year")[col].transform(zс)
56 + pre=subperiod_spread(df,z,range(2010,2022)); post=subperiod_spread(df,z,range(2022,2025))
57 + d2=df.dropna(subset=["fwd_w",z,"z_size","z_mom"]).copy()
58 + r=smf.ols(f"fwd_w ~ {z} * post + z_size + z_mom",data=d2).fit(cov_type="cluster",cov_kwds={"groups":d2["fiscal_year"]})
59 + iv=f"{z}:post"
60 + placebo[name]={"pre":pre,"post":post,"interaction":round(r.params[iv],4),"interaction_t":round(r.tvalues[iv],2),
61 + "is_ai":name.startswith("AI")}
62 +R2["placebo"]=placebo
63 +print("=== A. PLACEBO (Q5-Q1 spread pre vs post, interaction t) ===")
64 +for n,v in placebo.items():
65 + print(f" {n:20s} pre={v['pre'][0]*100:+5.1f}pp post={v['post'][0]*100:+6.1f}pp(t={v['post'][1]:.2f}) interact_t={v['interaction_t']:+.2f}")
66 +
67 +# =========================================================
68 +# B. SECTOR-NEUTRAL sorts + double sorts
69 +# =========================================================
70 +# sector-neutral: demean AI composite within sector-year, then sort
71 +df["z_AI_sectneu"]=df.groupby(["fiscal_year","sector"])["ai_infrastructure_wmean"].transform(
72 + lambda g: zс(g) if g.std(ddof=0)>0 else g*0)
73 +# use composite of adoption+infra sector-neutral
74 +tmp_a=df.groupby(["fiscal_year","sector"])["ai_adoption_wmean"].transform(lambda g: zс(g) if g.std(ddof=0)>0 else g*0)
75 +tmp_i=df.groupby(["fiscal_year","sector"])["ai_infrastructure_wmean"].transform(lambda g: zс(g) if g.std(ddof=0)>0 else g*0)
76 +df["z_AI_COMPOS_sn"]=(tmp_a+tmp_i)/2
77 +sn={}
78 +sn["full"]=subperiod_spread(df,"z_AI_COMPOS_sn",range(2010,2025))
79 +sn["pre"]=subperiod_spread(df,"z_AI_COMPOS_sn",range(2010,2022))
80 +sn["post"]=subperiod_spread(df,"z_AI_COMPOS_sn",range(2022,2025))
81 +R2["sector_neutral"]=sn
82 +print("\n=== B. SECTOR-NEUTRAL composite Q5-Q1 ===")
83 +print(f" full={sn['full'][0]*100:+.1f}pp pre={sn['pre'][0]*100:+.1f}pp post={sn['post'][0]*100:+.1f}pp(t={sn['post'][1]})")
84 +
85 +# AI x Sector heatmap data: mean fwd_ret of high-AI minus low-AI within each sector, post-period
86 +heat=[]
87 +for (sec),g in df[df.fiscal_year>=2022].groupby("sector"):
88 + g=g.dropna(subset=["z_AI_COMPOS","fwd_ret"])
89 + if len(g)<15: continue
90 + med=g["z_AI_COMPOS"].median()
91 + hi=g[g.z_AI_COMPOS>med].fwd_ret.mean(); lo=g[g.z_AI_COMPOS<=med].fwd_ret.mean()
92 + heat.append({"sector":sec,"hi_minus_lo":(hi-lo)*100,"n":len(g)})
93 +pd.DataFrame(heat).to_csv(f"{T}/t6_sector_aieffect_post.csv",index=False)
94 +
95 +# AI x Size double sort (post-period): 2x3
96 +def double_sort(d,zcol,bycol,oc="fwd_ret"):
97 + d=d.dropna(subset=[zcol,bycol,oc]).copy()
98 + d["sz"]=d.groupby("fiscal_year")[bycol].transform(lambda g: pd.qcut(g,2,labels=["Small","Large"],duplicates="drop"))
99 + d["ai"]=d.groupby("fiscal_year")[zcol].transform(lambda g: pd.qcut(g,3,labels=["Lo","Mid","Hi"],duplicates="drop"))
100 + return d.groupby(["sz","ai"],observed=True)[oc].mean().mul(100).round(2).unstack()
101 +ds_post=double_sort(df[df.fiscal_year>=2022],"z_AI_COMPOS","log_mktcap")
102 +ds_pre=double_sort(df[df.fiscal_year<2022],"z_AI_COMPOS","log_mktcap")
103 +ds_post.to_csv(f"{T}/t6_double_sort_post.csv"); ds_pre.to_csv(f"{T}/t6_double_sort_pre.csv")
104 +R2["double_sort_post"]=ds_post.to_dict(); R2["double_sort_pre"]=ds_pre.to_dict()
105 +print("\n=== B. AIxSize double sort POST (mean fwd ret %) ===\n",ds_post.to_string())
106 +
107 +# =========================================================
108 +# C. MAGNIFICENT-7 / mega-cap exclusion
109 +# =========================================================
110 +MAG7=["AAPL","MSFT","NVDA","AMZN","GOOGL","META","TSLA","GOOG","AVGO"]
111 +def spread_excl(d,zcol,yrs,exclude=None,topn_drop=0):
112 + sp=[]
113 + for yr,g in d[d.fiscal_year.isin(list(yrs))].groupby("fiscal_year"):
114 + g=g.dropna(subset=[zcol,"fwd_ret"]).copy()
115 + if exclude: g=g[~g.ticker.isin(exclude)]
116 + if topn_drop: g=g[g.mktcap < g.mktcap.nlargest(topn_drop).min()]
117 + if len(g)<25: continue
118 + g["q"]=pd.qcut(g[zcol],5,labels=False,duplicates="drop")+1
119 + sp.append(g[g.q==5].fwd_ret.mean()-g[g.q==1].fwd_ret.mean())
120 + mu,t=nw_t(sp); return round(mu,4),round(t,2),len(sp)
121 +excl={"baseline_post":spread_excl(df,"z_AI_COMPOS",range(2022,2025)),
122 + "ex_mag7_post":spread_excl(df,"z_AI_COMPOS",range(2022,2025),exclude=MAG7),
123 + "ex_top10_post":spread_excl(df,"z_AI_COMPOS",range(2022,2025),topn_drop=10),
124 + "ex_mag7_pre":spread_excl(df,"z_AI_COMPOS",range(2010,2022),exclude=MAG7)}
125 +R2["mag7"]=excl
126 +print("\n=== C. Mega-cap exclusion (composite Q5-Q1) ===")
127 +for k,v in excl.items(): print(f" {k:18s} {v[0]*100:+.1f}pp (t={v[1]})")
128 +
129 +# =========================================================
130 +# D. ALTERNATIVE signals & horizons
131 +# =========================================================
132 +# alt signal defs (mean, top5pct) for adoption+infra composite
133 +for suff in ["mean","top5pct"]:
134 + a=df.groupby("fiscal_year")[f"ai_adoption_{suff}"].transform(zс)
135 + i=df.groupby("fiscal_year")[f"ai_infrastructure_{suff}"].transform(zс)
136 + df[f"z_AI_{suff}"]=(a+i)/2
137 +alt_sig={}
138 +for suff in ["wmean(base)","mean","top5pct"]:
139 + col="z_AI_COMPOS" if suff=="wmean(base)" else f"z_AI_{suff}"
140 + alt_sig[suff]={"pre":subperiod_spread(df,col,range(2010,2022)),"post":subperiod_spread(df,col,range(2022,2025))}
141 +R2["alt_signal"]=alt_sig
142 +print("\n=== D. Alt signal defs (composite Q5-Q1 pre|post) ===")
143 +for k,v in alt_sig.items(): print(f" {k:14s} pre={v['pre'][0]*100:+.1f} post={v['post'][0]*100:+.1f}(t={v['post'][1]})")
144 +
145 +# alt horizons: compute 6m and 24m forward returns
146 +px_by={t:g.sort_values("date") for t,g in mret.groupby("ticker")}
147 +def cum(d,start,end,minn):
148 + m=d[(d.date>start)&(d.date<=end)]
149 + if m["ret"].notna().sum()<minn: return np.nan
150 + return (1+m["ret"].fillna(0)).prod()-1
151 +for H,mm,minn in [(6,6,3),(24,24,12)]:
152 + vals=[]
153 + for _,r in df.iterrows():
154 + d=px_by.get(r.ticker)
155 + if d is None: vals.append(np.nan); continue
156 + form=pd.Timestamp(int(r.fiscal_year)+1,6,30)+pd.offsets.MonthEnd(0)
157 + end=form+pd.offsets.MonthEnd(mm)
158 + vals.append(cum(d,form,end,minn))
159 + df[f"fwd_ret_{H}m"]=vals
160 +alt_hor={}
161 +for H in [6,24]:
162 + alt_hor[f"{H}m"]={"pre":subperiod_spread(df,"z_AI_COMPOS",range(2010,2022),oc=f"fwd_ret_{H}m"),
163 + "post":subperiod_spread(df,"z_AI_COMPOS",range(2022,2024),oc=f"fwd_ret_{H}m")}
164 +R2["alt_horizon"]=alt_hor
165 +print("\n=== D. Alt horizons (composite Q5-Q1 pre|post) ===")
166 +for k,v in alt_hor.items(): print(f" {k:4s} pre={v['pre'][0]*100:+.1f} post={v['post'][0]*100:+.1f}(t={v['post'][1]})")
167 +
168 +# =========================================================
169 +# E. YEAR-BY-YEAR Fama-MacBeth slope (AI composite, controls)
170 +# =========================================================
171 +fm_year=[]
172 +for yr,g in df.groupby("fiscal_year"):
173 + g=g.dropna(subset=["fwd_ret","z_AI_COMPOS","z_size","z_mom","z_vol"])
174 + if len(g)<30: continue
175 + X=sm.add_constant(g[["z_AI_COMPOS","z_size","z_mom","z_vol"]])
176 + r=sm.OLS(g["fwd_ret"],X).fit(cov_type="HC1")
177 + fm_year.append({"year":int(yr),"coef":r.params["z_AI_COMPOS"],"se":r.bse["z_AI_COMPOS"],"t":r.tvalues["z_AI_COMPOS"]})
178 +pd.DataFrame(fm_year).to_csv(f"{T}/t6_fm_byyear.csv",index=False)
179 +R2["fm_byyear"]=fm_year
180 +print("\n=== E. Year-by-year FM slope on AI composite ===")
181 +print(" "+", ".join(f"{x['year']}:{x['coef']*100:+.1f}" for x in fm_year))
182 +
183 +# =========================================================
184 +# F. PCA of three AI signals -> AI_PC1
185 +# =========================================================
186 +from numpy.linalg import svd
187 +Z=df[["z_AI_ADOPT","z_AI_INFRA","z_AI_RISK"]].dropna()
188 +Zc=Z-Z.mean()
189 +U,S,Vt=svd(Zc.values,full_matrices=False)
190 +evr=(S**2)/np.sum(S**2)
191 +pc1=Zc.values@Vt[0]
192 +df.loc[Z.index,"z_AI_PC1"]=(pc1-pc1.mean())/pc1.std()
193 +# orient so positive = more AI
194 +if df[["z_AI_PC1","z_AI_ADOPT"]].corr().iloc[0,1]<0: df["z_AI_PC1"]*=-1
195 +df["z_AI_PC1"]=df.groupby("fiscal_year")["z_AI_PC1"].transform(zс)
196 +R2["pca"]={"explained_var_ratio":[round(float(x),3) for x in evr],
197 + "loadings_pc1":[round(float(x),3) for x in Vt[0]],
198 + "pre":subperiod_spread(df,"z_AI_PC1",range(2010,2022)),
199 + "post":subperiod_spread(df,"z_AI_PC1",range(2022,2025))}
200 +print(f"\n=== F. PCA: EVR={R2['pca']['explained_var_ratio']} PC1 loadings={R2['pca']['loadings_pc1']}")
201 +print(f" PC1 Q5-Q1 pre={R2['pca']['pre'][0]*100:+.1f} post={R2['pca']['post'][0]*100:+.1f}(t={R2['pca']['post'][1]})")
202 +
203 +# =========================================================
204 +# G. DIFFERENCE-IN-DIFFERENCES around ChatGPT
205 +# =========================================================
206 +from linearmodels.panel import PanelOLS
207 +# pre-period exposure fixed at firm's mean AI composite over 2019-2021
208 +pre_exp=df[df.fiscal_year.isin([2019,2020,2021])].groupby("ticker")["ai_infrastructure_wmean"].mean()
209 +exp_comp=df[df.fiscal_year.isin([2019,2020,2021])].groupby("ticker")[["ai_adoption_wmean","ai_infrastructure_wmean"]].mean().mean(axis=1)
210 +df["pre_AI_cont"]=df.ticker.map((exp_comp-exp_comp.mean())/exp_comp.std())
211 +df["treated"]=df.ticker.map((exp_comp>exp_comp.median()).astype(float))
212 +did=df.dropna(subset=["fwd_w","pre_AI_cont","z_size","z_mom"]).copy()
213 +did=did.set_index(["ticker","fiscal_year"])
214 +# binary DiD: treated x post with entity+time FE (treated & post absorbed; interaction identified)
215 +did["tp"]=did["treated"]*did["post"]
216 +m_did=PanelOLS.from_formula("fwd_w ~ tp + z_size + z_mom + EntityEffects + TimeEffects",
217 + data=did,drop_absorbed=True).fit(cov_type="clustered",cluster_entity=True,cluster_time=True)
218 +# continuous DiD
219 +did["cp"]=did["pre_AI_cont"]*did["post"]
220 +m_didc=PanelOLS.from_formula("fwd_w ~ cp + z_size + z_mom + EntityEffects + TimeEffects",
221 + data=did,drop_absorbed=True).fit(cov_type="clustered",cluster_entity=True,cluster_time=True)
222 +R2["did"]={"binary":{"coef":round(m_did.params["tp"],4),"t":round(m_did.tstats["tp"],2),"n":int(m_did.nobs)},
223 + "continuous":{"coef":round(m_didc.params["cp"],4),"t":round(m_didc.tstats["cp"],2),"n":int(m_didc.nobs)}}
224 +print("\n=== G. DiD around ChatGPT (firm+year FE, double-clustered) ===")
225 +print(f" binary treated x post = {R2['did']['binary']['coef']:+.4f} (t={R2['did']['binary']['t']})")
226 +print(f" continuous exposure x post = {R2['did']['continuous']['coef']:+.4f} (t={R2['did']['continuous']['t']})")
227 +
228 +# event-time DiD: continuous exposure interacted with each year dummy (ref=2021)
229 +df["pre_AI_cont2"]=df["pre_AI_cont"]
230 +ev=df.dropna(subset=["fwd_w","pre_AI_cont2","z_size","z_mom"]).copy()
231 +ev=ev[ev.fiscal_year.between(2015,2024)]
232 +ev["yr"]=ev.fiscal_year.astype(int).astype(str)
233 +m_ev=smf.ols("fwd_w ~ C(yr, Treatment('2021')):pre_AI_cont2 + C(yr) + z_size + z_mom",data=ev).fit(
234 + cov_type="cluster",cov_kwds={"groups":ev["fiscal_year"]})
235 +evt=[]
236 +for yr in range(2015,2025):
237 + cand=[f"C(yr, Treatment('2021'))[{yr}]:pre_AI_cont2",
238 + f"C(yr, Treatment('2021'))[T.{yr}]:pre_AI_cont2"]
239 + key=next((k for k in cand if k in m_ev.params.index),None)
240 + if key:
241 + evt.append({"year":yr,"coef":m_ev.params[key],"se":m_ev.bse[key]})
242 + elif yr==2021:
243 + evt.append({"year":yr,"coef":0.0,"se":0.0})
244 +pd.DataFrame(evt).to_csv(f"{T}/t6_did_eventtime.csv",index=False)
245 +R2["did_eventtime"]=evt
246 +print(" event-time slopes:", ", ".join(f"{e['year']}:{e['coef']*100:+.1f}" for e in evt))
247 +
248 +# =========================================================
249 +# H. FORWARD VOLATILITY outcome
250 +# =========================================================
251 +fvol=[]
252 +for _,r in df.reset_index(drop=True).iterrows():
253 + d=px_by.get(r.ticker)
254 + if d is None: fvol.append(np.nan); continue
255 + form=pd.Timestamp(int(r.fiscal_year)+1,6,30)+pd.offsets.MonthEnd(0)
256 + end=form+pd.offsets.MonthEnd(12)
257 + w=d[(d.date>form)&(d.date<=end)]
258 + fvol.append(w["ret"].std()*np.sqrt(12) if w["ret"].notna().sum()>=6 else np.nan)
259 +df["fwd_vol"]=fvol
260 +volr={}
261 +for yrs,lab in [(range(2010,2022),"pre"),(range(2022,2025),"post")]:
262 + sp=[]
263 + for yr,g in df[df.fiscal_year.isin(list(yrs))].groupby("fiscal_year"):
264 + g=g.dropna(subset=["z_AI_COMPOS","fwd_vol"])
265 + if len(g)<25: continue
266 + g=g.copy(); g["q"]=pd.qcut(g.z_AI_COMPOS,5,labels=False,duplicates="drop")+1
267 + sp.append(g[g.q==5].fwd_vol.mean()-g[g.q==1].fwd_vol.mean())
268 + mu,t=nw_t(sp); volr[lab]=(round(mu,4),round(t,2),len(sp))
269 +R2["fwd_vol"]=volr
270 +print(f"\n=== H. Forward vol Q5-Q1: pre={volr['pre'][0]:+.3f} post={volr['post'][0]:+.3f}(t={volr['post'][1]})")
271 +
272 +json.dump(R2,open(f"{T}/results2.json","w"),indent=2,default=str)
273 +df.to_parquet(f"{D}/analysis_panel.parquet")
274 +print("\nSaved results2.json and updated analysis_panel.parquet")
added scripts/07_event_study.py +132 −0
@@ -0,0 +1,132 @@
1 +"""
2 +07_event_study.py -- Market-model event study around the public launch of
3 +ChatGPT (30 November 2022). Tests whether firms with HIGHER pre-event AI
4 +disclosure (from their last pre-event 10-K, FY2021) earned higher cumulative
5 +abnormal returns (CAR) after the AI-narrative shock.
6 +
7 +Design:
8 + Event date t0 = 2022-11-30.
9 + Estimation window: 2022-01-03 .. 2022-10-31 (market model AR = r - a - b*rmkt).
10 + Event window: 2022-11-01 .. 2024-06-30.
11 + Treatment: tercile of pre-event AI exposure (composite adoption+infra, FY2021).
12 +Outputs daily CAR paths per tercile + cross-sectional CAR regressions.
13 +"""
14 +import time, warnings
15 +import numpy as np, pandas as pd, yfinance as yf
16 +import statsmodels.api as sm
17 +warnings.filterwarnings("ignore")
18 +D="data/processed"; T="results/tables"
19 +
20 +panel=pd.read_parquet(f"{D}/analysis_panel.parquet")
21 +tickers=sorted(panel.ticker.dropna().unique().tolist())
22 +
23 +# ---- download daily prices (cache) ----
24 +import os
25 +DPATH=f"{D}/prices_daily_event.parquet"
26 +
27 +def extract_close(d, t):
28 + """Return Close series for ticker t from a yf.download frame (any layout)."""
29 + try:
30 + if isinstance(d.columns, pd.MultiIndex):
31 + if t in d.columns.get_level_values(0):
32 + return d[t]["Close"].dropna()
33 + if "Close" in d.columns.get_level_values(0):
34 + return d["Close"][t].dropna()
35 + return d["Close"].dropna()
36 + except Exception:
37 + return None
38 +
39 +if not os.path.exists(DPATH):
40 + frames=[]
41 + for i in range(0,len(tickers),60):
42 + b=tickers[i:i+60]
43 + d=yf.download(b,start="2021-09-01",end="2024-07-15",interval="1d",auto_adjust=True,
44 + progress=False,group_by="ticker",threads=True)
45 + for t in b:
46 + s=extract_close(d,t)
47 + if s is None or len(s)==0: continue
48 + tmp=s.reset_index(); tmp.columns=["date","px"]; tmp["ticker"]=t; frames.append(tmp)
49 + time.sleep(1); print("daily batch",i//60+1, flush=True)
50 + spy=yf.download("SPY",start="2021-09-01",end="2024-07-15",interval="1d",auto_adjust=True,progress=False)
51 + sc=extract_close(spy,"SPY")
52 + sdf=sc.reset_index(); sdf.columns=["date","px"]; sdf["ticker"]="SPY"
53 + frames.append(sdf)
54 + dp=pd.concat(frames,ignore_index=True)
55 + dp.to_parquet(DPATH,index=False)
56 +else:
57 + dp=pd.read_parquet(DPATH)
58 +
59 +dp["date"]=pd.to_datetime(dp["date"])
60 +dp=dp.sort_values(["ticker","date"])
61 +dp["ret"]=dp.groupby("ticker")["px"].pct_change()
62 +spy=dp[dp.ticker=="SPY"][["date","ret"]].rename(columns={"ret":"mkt"})
63 +
64 +t0=pd.Timestamp("2022-11-30")
65 +est0,est1=pd.Timestamp("2022-01-03"),pd.Timestamp("2022-10-31")
66 +ev0,ev1=pd.Timestamp("2022-11-01"),pd.Timestamp("2024-06-30")
67 +
68 +# pre-event AI exposure from FY2021 filing
69 +exp=panel[panel.fiscal_year==2021].copy()
70 +exp["ai_pre"]=(exp.groupby("fiscal_year")["ai_adoption_wmean"].transform(lambda g:(g-g.mean())/g.std())
71 + +exp.groupby("fiscal_year")["ai_infrastructure_wmean"].transform(lambda g:(g-g.mean())/g.std()))/2
72 +exp=exp[["ticker","ai_pre","log_mktcap","sector"]].dropna(subset=["ai_pre"])
73 +exp["tercile"]=pd.qcut(exp.ai_pre,3,labels=["Low","Mid","High"])
74 +
75 +# compute AR per ticker
76 +car_rows=[]; daily_ar={}
77 +beta_map={}
78 +for t,g in dp[dp.ticker!="SPY"].groupby("ticker"):
79 + g=g.merge(spy,on="date",how="left").dropna(subset=["ret","mkt"])
80 + est=g[(g.date>=est0)&(g.date<=est1)]
81 + if len(est)<60: continue
82 + X=sm.add_constant(est["mkt"]); m=sm.OLS(est["ret"],X).fit()
83 + a,b=m.params["const"],m.params["mkt"]; beta_map[t]=b
84 + ev=g[(g.date>=ev0)&(g.date<=ev1)].copy()
85 + ev["ar"]=ev["ret"]-(a+b*ev["mkt"])
86 + ev["car"]=ev["ar"].cumsum()
87 + daily_ar[t]=ev.set_index("date")["car"]
88 + for hz,lab in [(60,"car_60d"),(125,"car_6m"),(250,"car_1y"),(395,"car_18m")]:
89 + sub=ev.iloc[:hz]
90 + car_rows.append({"ticker":t,"hz":lab,"car":sub["ar"].sum()})
91 +car=pd.DataFrame(car_rows).pivot(index="ticker",columns="hz",values="car").reset_index()
92 +car=car.merge(exp,on="ticker",how="inner"); car["beta"]=car.ticker.map(beta_map)
93 +car.to_parquet(f"{D}/event_car.parquet",index=False)
94 +
95 +# mean CAR path by tercile
96 +allc=pd.DataFrame(daily_ar) # cols=tickers, index=date
97 +allc=allc.dropna(how="all")
98 +paths={}
99 +for terc in ["Low","Mid","High"]:
100 + tks=[t for t in exp[exp.tercile==terc].ticker if t in allc.columns]
101 + paths[terc]=allc[tks].mean(axis=1)
102 +path_df=pd.DataFrame(paths)
103 +path_df["High_minus_Low"]=path_df["High"]-path_df["Low"]
104 +path_df.to_parquet(f"{D}/event_car_paths.parquet")
105 +
106 +# tests
107 +RES={}
108 +print("=== ChatGPT event study: mean CAR by pre-event AI tercile ===")
109 +for hz in ["car_60d","car_6m","car_1y","car_18m"]:
110 + hi=car[car.tercile=="High"][hz].dropna(); lo=car[car.tercile=="Low"][hz].dropna()
111 + from scipy import stats
112 + tt=stats.ttest_ind(hi,lo,equal_var=False)
113 + RES[hz]={"High":round(hi.mean()*100,2),"Mid":round(car[car.tercile=='Mid'][hz].mean()*100,2),
114 + "Low":round(lo.mean()*100,2),"H_minus_L":round((hi.mean()-lo.mean())*100,2),
115 + "t":round(tt.statistic,2),"p":round(tt.pvalue,4)}
116 + print(f" {hz:8s} High={RES[hz]['High']:+6.2f}% Low={RES[hz]['Low']:+6.2f}% H-L={RES[hz]['H_minus_L']:+6.2f}% (t={RES[hz]['t']}, p={RES[hz]['p']})")
117 +
118 +# cross-sectional regression: CAR_1y on ai_pre + controls
119 +reg=car.dropna(subset=["car_1y","ai_pre","log_mktcap","beta"]).copy()
120 +X=sm.add_constant(reg[["ai_pre","log_mktcap","beta"]])
121 +m=sm.OLS(reg["car_1y"],X).fit(cov_type="HC1")
122 +RES["xsec_reg_1y"]={"ai_pre_coef":round(m.params["ai_pre"]*100,3),"ai_pre_t":round(m.tvalues["ai_pre"],2),
123 + "n":int(m.nobs),"r2":round(m.rsquared,3)}
124 +# add sector FE version
125 +import statsmodels.formula.api as smf
126 +m2=smf.ols("car_1y ~ ai_pre + log_mktcap + beta + C(sector)",data=reg).fit(cov_type="HC1")
127 +RES["xsec_reg_1y_sectfe"]={"ai_pre_coef":round(m2.params["ai_pre"]*100,3),"ai_pre_t":round(m2.tvalues["ai_pre"],2),"n":int(m2.nobs)}
128 +print(f"\n Cross-sec: CAR_1y on AI_pre: {RES['xsec_reg_1y']['ai_pre_coef']:+.2f}%/SD (t={RES['xsec_reg_1y']['ai_pre_t']}, n={RES['xsec_reg_1y']['n']})")
129 +print(f" + sector FE: {RES['xsec_reg_1y_sectfe']['ai_pre_coef']:+.2f}%/SD (t={RES['xsec_reg_1y_sectfe']['ai_pre_t']})")
130 +
131 +import json; json.dump(RES,open(f"{T}/results_event.json","w"),indent=2,default=str)
132 +print("\nSaved event-study results.")
added scripts/08_figures_ext.py +121 −0
@@ -0,0 +1,121 @@
1 +"""08_figures_ext.py -- additional figures (6-13) for the extended paper."""
2 +import json
3 +import numpy as np, pandas as pd
4 +import matplotlib.pyplot as plt, matplotlib as mpl
5 +from matplotlib.patches import Patch
6 +mpl.rcParams.update({"font.size":11,"axes.spines.top":False,"axes.spines.right":False,
7 + "figure.dpi":140,"savefig.dpi":200,"axes.grid":True,"grid.alpha":.25,
8 + "font.family":"DejaVu Sans"})
9 +D="data/processed"; F="figures"; T="results/tables"
10 +df=pd.read_parquet(f"{D}/analysis_panel.parquet")
11 +R2=json.load(open(f"{T}/results2.json"))
12 +EV=json.load(open(f"{T}/results_event.json"))
13 +NAVY="#1b3a6b"; RED="#b22222"; GREY="#9a9a9a"; GREEN="#2e7d32"; ORANGE="#e08214"
14 +
15 +# --- Fig 6: year-by-year Fama-MacBeth slope on AI composite ---
16 +fm=pd.DataFrame(R2["fm_byyear"])
17 +fig,ax=plt.subplots(figsize=(11,4.8))
18 +cols=[RED if y>=2022 else NAVY for y in fm.year]
19 +ax.bar(fm.year,fm.coef*100,yerr=fm.se*100*1.0,color=cols,edgecolor="k",lw=.5,capsize=3,error_kw={"alpha":.5})
20 +ax.axhline(0,color="k",lw=.8); ax.set_xticks(fm.year); ax.tick_params(axis="x",rotation=45)
21 +ax.set_title("Year-by-Year Fama–MacBeth Slope on the AI-Disclosure Composite\n(forward 12m return per cross-sectional SD, with size/momentum/volatility controls)",fontweight="bold")
22 +ax.set_ylabel("Slope coefficient (pp per SD)"); ax.set_xlabel("Formation year (10-K fiscal year)")
23 +ax.legend(handles=[Patch(color=NAVY,label="Pre-ChatGPT"),Patch(color=RED,label="Post-ChatGPT")],frameon=False)
24 +fig.tight_layout(); fig.savefig(f"{F}/fig6_fm_byyear.png",bbox_inches="tight"); plt.close()
25 +
26 +# --- Fig 7: PLACEBO -- post-2022 Q5-Q1 spread for all 8 factors ---
27 +pb=R2["placebo"]
28 +names=list(pb.keys()); post=[pb[n]["post"][0]*100 for n in names]; isai=[pb[n]["is_ai"] for n in names]
29 +order=np.argsort(post)[::-1]
30 +names=[names[i] for i in order]; post=[post[i] for i in order]; isai=[isai[i] for i in order]
31 +fig,ax=plt.subplots(figsize=(11,5))
32 +cols=[RED if a else GREY for a in isai]
33 +ax.barh(names,post,color=cols,edgecolor="k",lw=.5)
34 +ax.axvline(0,color="k",lw=.8); ax.invert_yaxis()
35 +for i,(n,v) in enumerate(zip(names,post)):
36 + t=pb[n]["post"][1]; ax.annotate(f"{v:+.1f} (t={t})",xy=(v,i),xytext=(4 if v>=0 else -4,0),
37 + textcoords="offset points",va="center",ha="left" if v>=0 else "right",fontsize=8.5)
38 +ax.set_title("Placebo Test: Post-ChatGPT High-minus-Low Return Spread by Semantic Factor\n(AI factors in red; non-AI factors in grey)",fontweight="bold")
39 +ax.set_xlabel("Q5 − Q1 forward 12m return, 2022–2024 (pp)")
40 +ax.legend(handles=[Patch(color=RED,label="AI-related factor"),Patch(color=GREY,label="Non-AI factor")],frameon=False,loc="lower right")
41 +fig.tight_layout(); fig.savefig(f"{F}/fig7_placebo.png",bbox_inches="tight"); plt.close()
42 +
43 +# --- Fig 8: Event-study CAR paths ---
44 +paths=pd.read_parquet(f"{D}/event_car_paths.parquet")
45 +fig,(ax1,ax2)=plt.subplots(1,2,figsize=(13,4.8),gridspec_kw={"width_ratios":[1.4,1]})
46 +for c,col in [("High",RED),("Mid",ORANGE),("Low",NAVY)]:
47 + ax1.plot(paths.index,paths[c]*100,color=col,lw=1.8,label=f"{c} AI tercile")
48 +ax1.axhline(0,color="k",lw=.7); ax1.axvline(pd.Timestamp("2022-11-30"),color="grey",ls="--",lw=1)
49 +ax1.set_title("Cumulative Abnormal Return after ChatGPT,\nby pre-event AI disclosure (market-model)",fontweight="bold",fontsize=11)
50 +ax1.set_ylabel("Mean CAR (%)"); ax1.legend(frameon=False)
51 +ax1.tick_params(axis="x",rotation=30)
52 +# H-L with horizon markers
53 +ax2.plot(paths.index,paths["High_minus_Low"]*100,color="black",lw=2)
54 +ax2.fill_between(paths.index,0,paths["High_minus_Low"]*100,color=RED,alpha=.15)
55 +ax2.axhline(0,color="k",lw=.7); ax2.axvline(pd.Timestamp("2022-11-30"),color="grey",ls="--",lw=1)
56 +ax2.set_title("High − Low AI CAR spread",fontweight="bold",fontsize=11)
57 +ax2.set_ylabel("Spread (pp)"); ax2.tick_params(axis="x",rotation=30)
58 +fig.tight_layout(); fig.savefig(f"{F}/fig8_event_car.png",bbox_inches="tight"); plt.close()
59 +
60 +# --- Fig 9: AI x Size double sort (pre vs post) ---
61 +dpre=pd.read_csv(f"{T}/t6_double_sort_pre.csv",index_col=0)
62 +dpost=pd.read_csv(f"{T}/t6_double_sort_post.csv",index_col=0)
63 +fig,axes=plt.subplots(1,2,figsize=(12,4.6),sharey=True)
64 +x=np.arange(3); w=.35; lab=["Lo","Mid","Hi"]
65 +for ax,(tt,dd) in zip(axes,[("Pre-ChatGPT (2010–2021)",dpre),("Post-ChatGPT (2022–2024)",dpost)]):
66 + ax.bar(x-w/2,dd.loc["Small",lab],w,label="Small firms",color=NAVY,edgecolor="k",lw=.5)
67 + ax.bar(x+w/2,dd.loc["Large",lab],w,label="Large firms",color=ORANGE,edgecolor="k",lw=.5)
68 + ax.set_xticks(x); ax.set_xticklabels(["Low AI","Mid AI","High AI"]); ax.set_title(tt)
69 +axes[0].set_ylabel("Mean forward 12m return (%)"); axes[0].legend(frameon=False)
70 +fig.suptitle("AI Disclosure × Firm Size Double Sort",fontweight="bold",y=1.02)
71 +fig.tight_layout(); fig.savefig(f"{F}/fig9_double_sort.png",bbox_inches="tight"); plt.close()
72 +
73 +# --- Fig 10: Mega-cap exclusion robustness ---
74 +mg=R2["mag7"]
75 +labs=["Post baseline","Post ex-Mag7","Post ex-top10","Pre ex-Mag7"]
76 +keys=["baseline_post","ex_mag7_post","ex_top10_post","ex_mag7_pre"]
77 +vals=[mg[k][0]*100 for k in keys]; ts=[mg[k][1] for k in keys]
78 +fig,ax=plt.subplots(figsize=(9,4.4))
79 +cols=[RED,RED,RED,NAVY]
80 +b=ax.bar(labs,vals,color=cols,edgecolor="k",lw=.5)
81 +for i,(v,t) in enumerate(zip(vals,ts)): ax.annotate(f"{v:+.1f}\n(t={t})",xy=(i,v),xytext=(0,4),textcoords="offset points",ha="center",fontsize=9)
82 +ax.axhline(0,color="k",lw=.8); ax.set_ylabel("AI composite Q5−Q1 (pp)")
83 +ax.set_title("Robustness: AI Return Spread Excluding Mega-Cap Winners",fontweight="bold")
84 +fig.tight_layout(); fig.savefig(f"{F}/fig10_mag7.png",bbox_inches="tight"); plt.close()
85 +
86 +# --- Fig 11: event-time DiD coefficient profile ---
87 +et=pd.DataFrame(R2["did_eventtime"])
88 +fig,ax=plt.subplots(figsize=(10,4.6))
89 +ax.errorbar(et.year,et.coef*100,yerr=et.se*100*1.96,fmt="o-",color=NAVY,capsize=3,lw=1.6)
90 +ax.axhline(0,color="k",lw=.7); ax.axvline(2021.5,color=RED,ls="--",lw=1.2)
91 +ax.annotate("ChatGPT",xy=(2021.55,ax.get_ylim()[1]*.8),color=RED,fontsize=9)
92 +ax.set_title("Return Premium on Pre-Determined (2019–21) AI Exposure, by Year\n(event-study coefficients, 95% CI)",fontweight="bold")
93 +ax.set_ylabel("Premium (pp per SD of fixed AI exposure)"); ax.set_xlabel("Formation year")
94 +ax.set_xticks(et.year)
95 +fig.tight_layout(); fig.savefig(f"{F}/fig11_eventtime.png",bbox_inches="tight"); plt.close()
96 +
97 +# --- Fig 12: AI score distribution by sector (boxplot) ---
98 +order=df.groupby("sector")["ai_infrastructure_wmean"].median().sort_values().index.tolist()
99 +data=[df[df.sector==s]["ai_adoption_wmean"].dropna().values for s in order]
100 +fig,ax=plt.subplots(figsize=(11,5))
101 +bp=ax.boxplot(data,vert=False,patch_artist=True,showfliers=False,widths=.6)
102 +for patch in bp["boxes"]: patch.set_facecolor(NAVY); patch.set_alpha(.6)
103 +for med in bp["medians"]: med.set_color(RED); med.set_linewidth(1.6)
104 +ax.set_yticklabels(order); ax.set_xlabel("AI-adoption score (section-weighted cosine similarity)")
105 +ax.set_title("AI-Adoption Disclosure Intensity by GICS Sector (2010–2026)",fontweight="bold")
106 +fig.tight_layout(); fig.savefig(f"{F}/fig12_sector_box.png",bbox_inches="tight"); plt.close()
107 +
108 +# --- Fig 13: cross-sectional event CAR_1y vs pre-event AI exposure (binscatter) ---
109 +car=pd.read_parquet(f"{D}/event_car.parquet").dropna(subset=["car_1y","ai_pre"])
110 +car=car.copy(); car["bin"]=pd.qcut(car.ai_pre,12,labels=False,duplicates="drop")
111 +b=car.groupby("bin").agg(x=("ai_pre","mean"),y=("car_1y","mean"))
112 +fig,ax=plt.subplots(figsize=(8.5,5))
113 +ax.scatter(b.x,b.y*100,color=NAVY,s=48,zorder=3)
114 +z=np.polyfit(b.x,b.y*100,1); xs=np.linspace(b.x.min(),b.x.max(),50)
115 +ax.plot(xs,np.polyval(z,xs),color=RED,lw=2)
116 +ax.axhline(0,color="k",lw=.6)
117 +ax.set_title(f"1-Year Abnormal Return after ChatGPT vs. Pre-Event AI Exposure\n(binned; slope ≈ {z[0]:.1f} pp per SD)",fontweight="bold")
118 +ax.set_xlabel("Pre-event AI disclosure (FY2021, z-score)"); ax.set_ylabel("Market-model CAR, +1 year (%)")
119 +fig.tight_layout(); fig.savefig(f"{F}/fig13_event_binscatter.png",bbox_inches="tight"); plt.close()
120 +
121 +print("figures 6-13 written")
added scripts/09_make_tables_ext.py +110 −0
@@ -0,0 +1,110 @@
1 +"""09_make_tables_ext.py -- LaTeX fragments for the extended tables (correlation, placebo,
2 +event study, double sort, robustness, DiD)."""
3 +import json, pandas as pd, numpy as np
4 +T="results/tables"; R="paper/tables"
5 +R2=json.load(open(f"{T}/results2.json")); EV=json.load(open(f"{T}/results_event.json"))
6 +def w(n,b): open(f"{R}/{n}.tex","w").write(b)
7 +
8 +# --- correlation matrix ---
9 +c=pd.read_csv(f"{T}/t1b_correlations.csv",index_col=0)
10 +lbl={"z_AI_ADOPT":"(1) AI adoption","z_AI_INFRA":"(2) AI infrastructure","z_AI_RISK":"(3) AI disruption risk",
11 + "z_size":"(4) Size","z_mom":"(5) Momentum","fwd_ret":"(6) Forward return"}
12 +c=c.rename(index=lbl,columns={k:f"({i+1})" for i,k in enumerate(c.columns)})
13 +rows="".join(f"{idx} & "+" & ".join(f"{c.loc[idx,col]:.2f}" for col in c.columns)+" \\\\\n" for idx in c.index)
14 +w("tab_corr", r"""\begin{table}[H]\centering\small
15 +\caption{Pearson correlations among standardized signals, controls, and the forward return.}\label{tab:corr}
16 +\begin{tabular}{l"""+"r"*len(c.columns)+r"""}\toprule
17 +& """+" & ".join(c.columns)+r""" \\\midrule
18 +"""+rows+r"""\bottomrule
19 +\end{tabular}\end{table}""")
20 +
21 +# --- placebo ---
22 +pb=R2["placebo"]
23 +rows=""
24 +for n,v in pb.items():
25 + star="$^{\\dagger}$" if v["is_ai"] else ""
26 + rows+=(f"{n}{star} & {v['pre'][0]*100:+.1f} \\tstat{{{v['pre'][1]:.2f}}} & {v['post'][0]*100:+.1f} \\tstat{{{v['post'][1]:.2f}}} "
27 + f"& {v['interaction']:+.4f} \\tstat{{{v['interaction_t']:.2f}}} \\\\\n")
28 +w("tab_placebo", r"""\begin{table}[H]\centering\small
29 +\caption{Placebo test across all eight semantic factors. For each factor we report the Q5$-$Q1 forward-return spread (\%%/yr) in each sub-period and the coefficient on factor\,$z$\,$\times$\,Post-2022 (size/momentum controls, year-clustered SE). The post-ChatGPT jump is concentrated in AI-related factors ($\dagger$); ESG and climate go the other way.}\label{tab:placebo}
30 +\begin{tabular}{lccc}\toprule
31 +& \multicolumn{2}{c}{Q5$-$Q1 spread (\%%/yr)} & Interaction \\\cmidrule(lr){2-3}
32 +Semantic factor & Pre (2010--21) & Post (2022--24) & $z\times$Post \\\midrule
33 +%s\bottomrule
34 +\end{tabular}\end{table}""" % rows)
35 +
36 +# --- event study ---
37 +rows=""
38 +hzlab={"car_60d":"+60 trading days","car_6m":"+6 months","car_1y":"+1 year","car_18m":"+18 months"}
39 +for hz in ["car_60d","car_6m","car_1y","car_18m"]:
40 + e=EV[hz]
41 + rows+=f"{hzlab[hz]} & {e['High']:+.2f} & {e['Mid']:+.2f} & {e['Low']:+.2f} & {e['H_minus_L']:+.2f} & {e['t']:.2f} & {e['p']:.3f} \\\\\n"
42 +xr=EV["xsec_reg_1y"]; xrs=EV["xsec_reg_1y_sectfe"]
43 +w("tab_event", r"""\begin{table}[H]\centering\small
44 +\caption{ChatGPT event study (event date 30 Nov 2022; market-model abnormal returns estimated over Jan--Oct 2022). Mean cumulative abnormal return (CAR, \%%) by pre-event AI-disclosure tercile (from the FY2021 10-K), and the High$-$Low difference with a Welch \textit{t}-test.}\label{tab:event}
45 +\begin{tabular}{lrrrrrr}\toprule
46 +Horizon & High & Mid & Low & High$-$Low & \textit{t} & \textit{p} \\\midrule
47 +%s\midrule
48 +\multicolumn{7}{l}{\footnotesize Cross-sectional regression, CAR(+1y) on pre-event AI exposure (per SD):}\\
49 +\multicolumn{7}{l}{\footnotesize\quad No sector FE: $%+.2f$\%% \tstat{%.2f}, $n=%d$, $R^2=%.3f$ \quad
50 +With sector FE: $%+.2f$\%% \tstat{%.2f}}\\
51 +\bottomrule
52 +\end{tabular}\end{table}""" % (rows, xr["ai_pre_coef"],xr["ai_pre_t"],xr["n"],xr["r2"],xrs["ai_pre_coef"],xrs["ai_pre_t"]))
53 +
54 +# --- double sort ---
55 +dpre=pd.read_csv(f"{T}/t6_double_sort_pre.csv",index_col=0)
56 +dpost=pd.read_csv(f"{T}/t6_double_sort_post.csv",index_col=0)
57 +def dsrows(dd):
58 + out=""
59 + for sz in ["Small","Large"]:
60 + out+=f"{sz} & {dd.loc[sz,'Lo']:.1f} & {dd.loc[sz,'Mid']:.1f} & {dd.loc[sz,'Hi']:.1f} & {dd.loc[sz,'Hi']-dd.loc[sz,'Lo']:+.1f} \\\\\n"
61 + return out
62 +w("tab_doublesort", r"""\begin{table}[H]\centering\small
63 +\caption{AI~disclosure $\times$ size double sort: mean forward 12-month return (\%%). Within each size half, firms are split into AI terciles.}\label{tab:doublesort}
64 +\begin{tabular}{lcccc}\toprule
65 +& Low AI & Mid AI & High AI & Hi$-$Lo \\\midrule
66 +\multicolumn{5}{l}{\textit{Panel A. Pre-ChatGPT (2010--2021)}}\\
67 +%s\midrule
68 +\multicolumn{5}{l}{\textit{Panel B. Post-ChatGPT (2022--2024)}}\\
69 +%s\bottomrule
70 +\end{tabular}\end{table}""" % (dsrows(dpre),dsrows(dpost)))
71 +
72 +# --- robustness combined ---
73 +mg=R2["mag7"]; sg=R2["alt_signal"]; hr=R2["alt_horizon"]; sn=R2["sector_neutral"]; pca=R2["pca"]
74 +def cellv(pair):
75 + v,t=pair[0]*100,pair[1]
76 + return f"{v:+.1f}"+(f" \\tstat{{{t:.2f}}}" if t==t else "")
77 +def line(label,pre,post):
78 + return f"{label} & {cellv(pre)} & {cellv(post)} \\\\\n"
79 +body =r"\multicolumn{3}{l}{\textit{Panel A. Alternative signal definition (composite)}}\\"+"\n"
80 +for k in ["wmean(base)","mean","top5pct"]:
81 + body+=line({"wmean(base)":"Section-weighted (base)","mean":"Simple mean","top5pct":"Top-5\\% tail"}[k], sg[k]["pre"],sg[k]["post"])
82 +body+=r"\midrule\multicolumn{3}{l}{\textit{Panel B. Alternative holding horizon}}\\"+"\n"
83 +body+=line("6-month forward return",hr["6m"]["pre"],hr["6m"]["post"])
84 +body+=line("24-month forward return",hr["24m"]["pre"],hr["24m"]["post"])
85 +body+=r"\midrule\multicolumn{3}{l}{\textit{Panel C. Construction / universe}}\\"+"\n"
86 +body+=line("Sector-neutral composite",sn["pre"],sn["post"])
87 +body+=line("First principal component",pca["pre"],pca["post"])
88 +body+=f"Excl.\\ Magnificent-7 & {mg['ex_mag7_pre'][0]*100:+.1f} \\tstat{{{mg['ex_mag7_pre'][1]:.2f}}} & {mg['ex_mag7_post'][0]*100:+.1f} \\tstat{{{mg['ex_mag7_post'][1]:.2f}}} \\\\\n"
89 +body+=f"Excl.\\ top-10 by market cap & --- & {mg['ex_top10_post'][0]*100:+.1f} \\tstat{{{mg['ex_top10_post'][1]:.2f}}} \\\\\n"
90 +w("tab_robust", r"""\begin{table}[H]\centering\small
91 +\caption{Robustness of the AI return spread (composite Q5$-$Q1, \%%/yr, Newey--West \textit{t}). The post-ChatGPT spread is stable across signal definitions, horizons, sector-neutralization, dimension reduction, and the exclusion of mega-cap winners.}\label{tab:robust}
92 +\begin{tabular}{lcc}\toprule
93 +& Pre (2010--21) & Post (2022--24) \\\midrule
94 +%s\bottomrule
95 +\end{tabular}\end{table}""" % body)
96 +
97 +# --- DiD ---
98 +did=R2["did"]
99 +w("tab_did", r"""\begin{table}[H]\centering\small
100 +\caption{Difference-in-differences around ChatGPT. Dependent variable is the winsorized forward 12-month return; firm and year fixed effects; SE double-clustered by firm and year. Treatment is fixed at the firm's pre-event (2019--2021) AI exposure.}\label{tab:did}
101 +\begin{tabular}{lcc}\toprule
102 +& Treated$\times$Post & Exposure$\times$Post \\
103 +& (binary) & (continuous, per SD) \\\midrule
104 +Coefficient & %.4f & %.4f \\
105 +\textit{t}-statistic & (%.2f) & (%.2f) \\
106 +N (firm-years) & %d & %d \\
107 +Firm \& Year FE & Yes & Yes \\\bottomrule
108 +\end{tabular}\end{table}""" % (did["binary"]["coef"],did["continuous"]["coef"],did["binary"]["t"],did["continuous"]["t"],did["binary"]["n"],did["continuous"]["n"]))
109 +
110 +print("extended LaTeX tables written")
111