Research notes — revenue as a multi-factor model¶
Working research direction (post v0.16 / post Track-A validation). Framing, literature anchors, two identified gaps with found solutions, and a concrete minimal research design. Written 2026-09-11 from a literature + web sweep; citations verified at time of writing.
中文摘要见文末。
1. The framing¶
Sell-side and quant research decompose returns with multi-factor models
(r_i = Σ β_k·f_k + ε, factors priced cross-sectionally). The open question
this project keeps circling: can the fundamental quantity itself —
revenue — be modeled the same way?
g(i,t) = α + β₁·own-momentum(i,t) + β₂·growth-reversion(i,t)
+ β₃·industry-cycle(i,t) + β₄·macro(i,t) + γ_i + ε(i,t)
Three properties make this more tractable than return factor models:
- No pricing requirement — factors are mechanical/causal inputs (GDP elasticity, penetration, ASP), not risk premia. Betas are physical quantities ("durable-goods orders +1% → revenue +0.4%") and far more stable than return betas.
- Signal-to-noise is inverted — returns are near-zero-SNR daily; revenue is persistent at annual/quarterly frequency (Track A pooled sMAPE 4–7% ⇒ high R²). The hard part is not noise, it is structural breaks (the NVDA Data Center lesson: the future is not in the training data).
- The toolkit is panel econometrics, not asset pricing — firm fixed effects, clustered standard errors, rolling validation; all standard.
2. What the project already has (≈40% of a thesis)¶
| Piece | In repo | Role in the factor framing |
|---|---|---|
| 244-company × FY2015-25 revenue panel | examples/profile_validation/data/ |
the estimation sample |
| 8-method battery incl. 3 profile-implied methods | backtest + profile_methods.py |
the "experts" (factor realizations) |
| Industry profiles (fit classes, checks) | revenue_model/industry.py |
cross-sectional conditioning (β₃) |
| Macro revision loop (elasticity, lag, evidence) | qesa_adapter / macro_revision |
β₄ with transmission structure |
| Event layer (honest null at monthly/large-cap) | news_impact / form8k_adapter |
event factor: documented zero |
| Pre-registered validation discipline | proposal-profile-validation.md |
credibility |
Track-A test-year evidence that factor structure exists: the best profile-implied method varies by fit class (DecelCAGR→strong 6.6%, GrowthRevert→adapt 3.6%, Damped→weak 5.1%) — i.e., "method × industry" behaves like exposures, not noise.
3. Gap 1 — formal estimation of method loadings¶
The gap: v0.16 hard-assigns one method family per industry profile. The upgrade is soft weights: estimate, on the panel, how much of each expert each industry (or series) should load on.
Found solution — FFORMA. Montero-Manso, Athanasopoulos, Hyndman &
Talagala (2020), FFORMA: Feature-based forecast model averaging,
International Journal of Forecasting 36(1), 86–92 (M4-competition winner;
450+ citations; R package pmontman/fforma). Two phases:
- extract time-series features (trend strength, seasonality, curvature, volatility, …);
- a gradient-boosting meta-learner predicts per-method weights minimizing combined loss — trained globally across series.
Mapping to us: features = damped-momentum score, mean-reversion score, volatility, CAGR, fit-class dummies; experts = the 8-method battery.
Honest clauses (from the forecast-combination literature):
- The combination puzzle — four decades of evidence that estimated optimal weights often lose to the simple average (survey: Genre et al. 2012, "Combining expert forecasts: Can anything beat the simple average?", IJF; theory: Claeskens, Magnus, Vasnev & Wang 2016, A simple theoretical explanation of the forecast combination puzzle; recent: Elliott 2026, On why averaging beats optimal linear weights, JASA/JABES). ⇒ an equal-weight damped-family benchmark is mandatory; the meta-learner must beat it to earn its complexity.
- Globalization is the escape hatch — Thompson (2024), Flexible global forecast combinations, IJF: pooling weight estimation across series is one of the few designs that beats equal weights. Our panel is exactly that setting.
- Scale warning — 244 series × 11 annual points is tiny vs M4. The meta-model must be minimal (multinomial logit or heavily-shrunk GBM); deep mixture-of-experts (LeMoLE 2412.00053, WaveMoE 2604.10544, Ziel & El Mahtout 2605.10330's expert-loss gating) would overfit — cite, do not ship.
4. Gap 2 — testing against expectations (the surprise layer)¶
The gap: revenue forecasting earns its keep at the moment it disagrees
with consensus. The test: (model forecast − consensus) vs realized
surprise vs post-announcement drift.
Literature anchor. Jegadeesh & Livnat (2006), Revenue surprises and stock returns, Journal of Accounting and Economics 41(1-2), 147–171 (539+ citations). Four findings that double as our test-design checklist:
- revenue surprises relate to contemporaneous and future returns;
- analysts under-react to revenue surprises (slow revision);
- PEAD is stronger when revenue and earnings surprises align in direction (interaction to replicate);
- reactions are larger for R&D-intensive firms (context split).
The novel bit (not in JL2006): an independent bottom-up revenue model
as a third input. Question: does (our forecast − pre-announcement
consensus) predict (a) the signed surprise and (b) the drift, incremental to
consensus dispersion/revision momentum? A genuinely new angle — 2006 had no
such model.
Data path. WRDS / IBES Summary History (point-in-time monthly consensus,
revenue estimates included). UIUC holds a WRDS subscription (Gies
faculty publish with it; library data service bis@library.illinois.edu);
student account on request. Free fallback for a live/forward version only:
stockanalysis.com analyst estimates via the existing sa_adapter (no
history). Estimize on WRDS as robustness.
5. Minimal viable research design¶
- Panel A (done): battery × fit-class validation — ship as
docs/profile-validation.md. - Panel B: FFORMA-mini — features → equal-weight benchmark vs shrunk multinomial-logit weights; pre-registered; report win/loss vs benchmark honestly (the puzzle clause).
- Panel C: with WRDS/IBES — consensus alignment panel; surprise
direction hit-rate of
(model − consensus)gap; PEAD double-sort (gap × earnings-surprise alignment, replicating JL2006 finding 3 with a model-based twist). - Thesis-scale narrative: industry is a factor-loading conditioner, not a label — v0.16's profiles are the coarse prior, the estimated loadings the refinement, and the weak-fit redirect the risk model.
6. Reference list¶
- Montero-Manso P., Athanasopoulos G., Hyndman R.J., Talagala T.S. (2020). FFORMA: Feature-based forecast model averaging. IJF 36(1) 86–92.
- Genre V., Kenny G., Meyler A., Timmermann A. (2012). Combining expert forecasts: Can anything beat the simple average? IJF.
- Claeskens G., Magnus J.R., Vasnev A.L., Wang W. (2016). A simple theoretical explanation of the forecast combination puzzle.
- Elliott G. (2026). On why averaging beats optimal linear weights.
- Thompson R. (2024). Flexible global forecast combinations. IJF.
- Jegadeesh N., Livnat J. (2006). Revenue surprises and stock returns. JAE 41(1-2) 147–171.
- Ziel F., El Mahtout B. (2026). Fast training of MoE for TSF via expert loss integration. arXiv:2605.10330.
中文摘要¶
- 构想:营收本身可做多因子模型——因子无需定价(是物理弹性)、信噪比远高于收益(难点在结构突变而非噪声)、工具是面板计量(公司固定效应+聚类SE)。
- 项目已有约四成:244 家收入面板、8 方法电池、行业画像条件、宏观弹性链、事件层(诚实 null)、预注册纪律。
- 缺口一(方法载荷估计)→ FFORMA(2020 IJF,M4 冠军,被引 450+):序列特征→元学习器预测方法权重,全局训练。诚实条款:组合预测谜题(等权平均极难打败,Genre 2012 / Claeskens 2016 / Elliott 2026)——等权基准强制在场;全局化估计(Thompson 2024)是少数胜出路径恰为我们设定;样本小(244×11),元模型必须极小,深 MoE 只引不用。
- 缺口二(惊喜检验)→ JL2006(JAE 被引 539,四发现=检验清单:营收惊喜预测当期+未来收益、分析师反应不足、营收盈利同向 PEAD 更强、R&D 密集反应大)。创新点:以独立自下而上模型为第三输入,"(模型−一致预期)"gap 能否增量预测惊喜与漂移。
- 数据钥匙:UIUC 可申请 WRDS / IBES Summary History(含 point-in-time 营收预期;图书馆 bis@library.illinois.edu)。
- 最小可行设计:A 面板(已完成)→ B 面板(FFORMA-mini vs 等权基准)→ C 面板(consensus 对齐 + PEAD 双排序)。
- 论文叙事:行业不是标签,是因子载荷调节器——画像是粗先验,载荷估计是细化,weak 档重定向是风险模型。