Modular Fundamental Adjustment Framework
I kept noticing that most revenue forecasts, when you traced them back far enough, were circular. Analysts anchoring to management. Management anchoring to analysts. Everyone anchoring to last year. The numbers looked precise. The foundation was not.
So I tried to build something that started from the outside in - an exogenous anchor nobody can game - and worked toward the company from there using structured, evidence-based adjustments. 35 dials. Every one named, sourced, cited. Nothing above zero on story alone.
Backtested across three UK companies, 16 years. Two results hold up formally: the model significantly outperforms a naive benchmark, and directional accuracy sits well above chance. Everything else I report honestly as illustrative - because knowing exactly where your evidence runs out is, I think, the most underrated skill in this industry.
This is a working paper. But it is the most honest model I know how to build right now.
A structured response to three persistent failures in fundamental analysis, validated through a rigorous three-company UK backtest with formal statistical testing.
This paper introduces the GDP-Anchored MFAF, a transparent five-layer system for forecasting company revenue growth. The framework anchors all forecasts to global nominal GDP growth - an exogenous IMF-published series - and applies structured, observable, data-linked adjustments across 35 individual dials. Every dial specifies a named formula, a named Bloomberg data source, distributional scoring thresholds grounded in empirical research, and a cited academic rationale.
We validate through a controlled single-country backtest covering Rightmove PLC, Diploma PLC, and XPS Pensions Group over 2009-2024. The Diebold-Mariano test rejects equal predictive accuracy against the naive GDP-anchor-only benchmark at p = 0.003. Directional accuracy is 89.6% with a 95% CI of [81.2%, 97.9%] - entirely above the 50% random baseline.
This is a three-company, single-country case study (n=48). The two primary inferential results with adequate statistical power are the DM test and the directional accuracy CI. IC estimates on n=3 per year are illustrative only. A full panel validation is required for broad generalisability claims.
| Metric | Value | 95% CI | Status |
|---|---|---|---|
| Directional accuracy | 89.6% | [81.2%, 97.9%] | Formally supported |
| Pooled MAE (n=48) | 6.80pp | [4.89, 9.09]pp | Formally supported |
| MAE reduction vs naive | 30.6% | - | DM test p = 0.003 |
| Rightmove R-squared | 0.486 | - | Meaningful predictive power |
| Diploma R-squared | 0.502 | - | Meaningful predictive power |
| XPS Pensions R-squared | 0.001 | - | Scope boundary - event-driven revenue |
Conventional fundamental forecasting fails in three specific, structural ways. MFAF is a direct methodological response to each.
Three tiers of evidence rigour, structured to minimise analyst discretion at each level while preserving the ability to capture qualitative signals where they genuinely exist.
Five structured layers applied to an exogenous GDP anchor. Click any layer to see the full dial breakdown, weights, data sources, and academic rationale.
The five layers are not arbitrary. Each captures a distinct, empirically documented source of company-level deviation from GDP growth. The ranking by IC - the order in which they are listed here - reflects which signals are most persistent and least contaminated by short-term noise.
L3 comes first because structural characteristics compound. A company with a wide moat and high ROIC vs WACC will, all else equal, grow faster than GDP for years - and that advantage is observable, documented, and slow to erode. Fama-French (2015) and Mauboussin (2014) both confirm this empirically. Structural signals do not need to be re-estimated every quarter.
L2 comes second because industry dynamics set the ceiling. Even the best company in a structurally declining industry will eventually be dragged down. Klepper (1997) documents the industry S-curve with precision: penetration below 30% predicts fast growth, above 70% predicts slowdown. This is predictable from public data well before it shows up in company earnings.
L1 is ranked third despite being the most macro-visible layer, because the GDP anchor already incorporates aggregate conditions. L1 only adjusts for deviations - where a company's specific geography, FX mix, or monetary environment differs from the global average. In the UK backtest, L1 is held constant across all three companies by design, isolating Layers 2-5 as the source of cross-company variation.
L4 is ranked fourth not because management is unimportant, but because management signals are the most susceptible to narrative contamination. This layer only activates on hard, documented evidence: 8-quarter guidance beat rates, post-acquisition ROIC, insider ownership levels. Qualitative impressions of leadership quality are explicitly excluded.
L5 is last and capped at ±2pp because momentum decays. Jegadeesh and Titman (1993) document that momentum persists 3-12 months, not years. It is the highest-frequency layer, designed to capture near-term estimate revision and beat-streak signals that have not yet been incorporated into structural scores. It should be updated every quarter and discounted heavily beyond 12 months.
| Dial | Weight | Data source | Academic rationale |
|---|---|---|---|
| ROIC vs WACC spread (NOPLAT/InvCap) - WACC_est | 20% | Bloomberg RETURN_ON_INV_CAPITAL vs WACC. 5yr avg. | Fama-French (2015) RMW. Mauboussin (2014). |
| Gross margin 3yr trend GM_t - GM_(t-3) in pp | 14% | Bloomberg GROSS_MARGIN yr-on-yr. | Novy-Marx (2013): gross profitability IC ~0.038. |
| Recurring revenue ratio Recurring / Total Revenue | 14% | Revenue breakdown from annual report. | Farrell & Shapiro (1988) switching costs. |
| Accruals quality (Sloan) (NI - CFO) / AvgAssets x (-1) | 14% | Bloomberg CF_FREE_CASH_FLOW / NET_INCOME. | Sloan (1996): high accruals = 12% lower returns. |
| Net debt / EBITDA (TotalDebt - Cash) / EBITDA_LTM | 14% | Bloomberg NET_DEBT / EBITDA. Trailing 12m. | Brunnermeier-Sannikov (2014) leverage breaks. |
| ARPU / ASP pricing trend (ARPU_t / ARPU_(t-1) - 1) vs CPI | 12% | Quarterly management commentary. | Platform repricing: RMV 2011-13 drove 17pp extra. |
| Revenue concentration (HHI) Sum(customer_share^2) inverted | 12% | Annual report customer disclosures. | High HHI = 40% higher revenue variance (Compustat). |
| Capex / Revenue CapEx / Revenue (3yr avg) | 10% | Bloomberg CAPITAL_EXPENDITURES / SALES. | Fama-French (2015) CMA factor. |
| Dial | Weight | Data source | Academic rationale |
|---|---|---|---|
| Sector growth vs GDP (3yr) Sector median growth - Nominal GDP | 22% | World Bank sector data. OECD STAN. | Klepper (1997) industry lifecycle. |
| TAM penetration stage Industry revenue / SAM estimate | 20% | Gartner / IDC / IBIS. Conservative TAM. | <30% = fast growth phase (Klepper 1997). |
| Competitive intensity (CR4) Combined share of top-4 players | 18% | HHI index. Bloomberg competitive data. | Porter (1985) Five Forces. |
| Regulatory catalyst tailwind_dummy + event_dummy | 18% | Regulatory filings. Government announcements. | Mandated demand = non-cyclical revenue floor. |
| Industry pricing power (3yr) Delta(sector GM) vs Delta(CPI) | 12% | Company pricing commentary. CPI vs PPI. | IC ~0.026 vs next-year revenue growth. |
| Disruption risk (evidenced) Qualitative - cite competitor + adoption % | 10% | McKinsey disruption index. Patent filings. | Only qualitative dial. Named evidence required. |
| Dial | Weight | Data source | Academic rationale |
|---|---|---|---|
| Guidance accuracy (8Q) Count(actual > guidance x1.02) / 8 | 24% | Bloomberg consensus vs actuals. 8Q rolling. | Ball-Brown (1968) PEAD. IC ~0.032. |
| Post-acquisition ROIC (3yr) ROIC_acquired 3yr post-close vs WACC | 22% | M&A ROIC 3yr post-deal. Bloomberg. | Malmendier-Tate (2008): overconfident CEOs overpay. |
| Min(CEO, CFO) tenure Min(CEO_yrs, CFO_yrs) | 20% | CEO tenure from filings. ROIC under CEO. | Bertrand-Schoar (2003) manager fixed effects. |
| Insider ownership % (Director + insider) / Shares | 18% | Bloomberg INSIDER_OWNERSHIP. Form 4. | Jensen-Meckling (1976) agency theory. |
| Buyback quality BuybackYield x (IV / Price) | 10% | Bloomberg buyback yield. IV estimate. | Value-accretive only when price <= intrinsic value. |
| ESG controversy (inverted) 1 - (controversy_score / 100) | 6% | S&P ESG score. MSCI ESG. RepRisk. | Controversies are leading indicators of revenue risk. |
| Dial | Weight | Data source | Academic rationale |
|---|---|---|---|
| Revenue-weighted GDP differential Sum(rev_share_j x GDP_j) - GDP_global | 28% | IMF WEO by country. Bloomberg geographic. | Fully mechanical. No analyst discretion. |
| Policy rate change (12m) Delta(BaseRate) over trailing 12m in bps | 22% | Bloomberg FEDL01 / local policy rate. | Campbell-Shiller (1988). 6-18m lag to revenue. |
| FX translation effect RevForeignShare x Delta(FX vs reporting ccy) | 22% | Bloomberg FX spot. 12m trailing change. | For multinationals, FX directly affects reported revenue. |
| Credit conditions index Net % tightening inverted (Loan Officer) | 16% | Fed Senior Loan Officer Survey. BoE equivalent. | Rajan-Zingales (1998) financial development. |
| Real wage growth (domestic) NominalWageGrowth - CPI annual | 12% | ONS / BLS / local statistics. Annual. | Primary demand driver for consumer-facing companies. |
| Dial | Weight | Data source | Academic rationale |
|---|---|---|---|
| EPS beat rate (8Q weighted) Count(EPS actual > consensus) / 8 | 22% | Bloomberg EPS_SURPRISE. 8Q rolling. | Ball-Brown (1968) PEAD. IC ~0.038. |
| 90-day estimate revision (Consensus_now - Consensus_90d) / |90d| | 22% | Bloomberg EST_EPS12MO 90d change. | Jegadeesh-Titman (1993). IC ~0.041. |
| EBIT margin 3yr trend EBIT_margin_t - EBIT_margin_(t-3) pp | 18% | Bloomberg EBIT_MARGIN yr-on-yr qtrly. | Margin expansion = operating leverage evidence. |
| FCF conversion ratio FreeCashFlow / NetIncome (LTM) | 18% | Bloomberg CF_FREE_CASH_FLOW / NET_INCOME. | Richardson et al. (2005): FCF > NI = persistent earnings. |
| Short interest (inverted) 1 - (SharesShort / Float) z-scored | 12% | Bloomberg SHORT_INT_RATIO. FINRA. Weekly. | Dechow et al. (2001): short sellers identify problems early. |
| Revenue growth momentum RevGrowth_Qt - RevGrowth_(Qt-4) accel | 8% | Bloomberg SALES_REV_TURN quarterly. | Jegadeesh-Titman (1993): momentum persists 3-12m. |
| Layer | Name | Dials | Max +/- | Update | IC Rank | Key academic rationale |
|---|---|---|---|---|---|---|
| L3 | Company structural | 9 | 5pp | Annual | 1st | Fama-French (2015) RMW - Mauboussin (2014) ROIC persistence - Sloan (1996) accruals |
| L2 | Industry and sector | 8 | 4pp | Semi-annual | 2nd | Klepper (1997) industry lifecycle - Porter (1985) five forces |
| L1 | Country and macro | 6 | 3pp | Quarterly | 3rd | Brunnermeier-Sannikov (2014) - Campbell-Shiller (1988) term structure |
| L4 | Management and governance | 6 | 3pp | Annual | 4th | Bertrand-Schoar (2003) manager FE - Malmendier-Tate (2008) M&A overconfidence |
| L5 | Earnings momentum | 6 | 2pp | Quarterly | 5th | Jegadeesh-Titman (1993) momentum decay - Ball-Brown (1968) PEAD |
| Total | All layers | 35 | 17pp | - | - | Tiered update frequency matches empirical signal decay research |
UK three-company controlled design, 2009-2024. Layer 1 held constant - cross-company variation is attributable to Layers 2-5 only.
| Company | MAE | Bias | Dir. acc. | R-squared | +/-2pp | +/-4pp |
|---|---|---|---|---|---|---|
| Rightmove PLC (RMV.L) | 7.09pp | -5.16pp | 87.5% | 0.486 | 25.0% | 43.8% |
| Diploma PLC (DPLM.L) | 5.22pp | -1.74pp | 87.5% | 0.502 | 31.3% | 56.3% |
| XPS Pensions (XPS.L) | 8.61pp | +5.36pp | 93.8% | 0.001* | 18.8% | 43.8% |
| Pooled (n=48) | 6.97pp | -0.51pp | 89.6% | 0.186 | 25.0% | 47.9% |
*XPS R-squared near 0: scope boundary - revenue dominated by regulatory events outside the model's scope. Positive bias = systematic under-forecast consistent with conservative GDP-anchor design.
Four formal tests applied. Two have adequate statistical power at n=48. All results reported with honest interpretation.
Shapiro-Wilk W=0.920, p=0.0029. Skewness +1.14, kurtosis +3.34. Fat tails driven by structural observations. All CIs use BCa bootstrap (B=5,000, seed=42).
| Claim | Status | Evidence |
|---|---|---|
| MFAF significantly outperforms naive GDP-only model | Supported | DM = -4.841, p = 0.003 |
| Directional accuracy above random baseline | Supported | 89.6% [79.2%, 97.9%] - CI entirely above 50% |
| IC = 0.358 is statistically significant | Not supported | n=3 per year has no inferential power |
| Results generalise beyond UK fundamentally-driven companies | Not supported | Single-country, three-company design precludes this claim |
Score each of the 35 dials. Hover over any dial to reveal its scoring guide. The engine computes composite, applies lambda scaling and bias correction, and outputs a forecast with a prediction interval in real time.
The composite score C(i,t) is the weighted average across all five layer scores. Here is how to read it and what different levels imply about the forecast and signal.
The composite score is a structured summary of observable evidence, not a prediction. What it does is force every assumption into the open, tie every adjustment to a named source, and express the aggregate as a number that can be argued with. That is its value - not the forecast itself, but the discipline the process imposes on the analyst making it.
The backtest shows that this discipline is useful. 89.6% directional accuracy across 48 company-years, with a confidence interval entirely above the 50% random baseline. The model significantly outperforms a naive GDP-only benchmark at p = 0.003. Those two results hold up formally. Everything else in this paper is evidence in progress.
I am a final-year Master of Finance student at RMIT Melbourne, building equity research and forecasting tools while preparing for CFA Level I in November. Here is how I got here.
I grew up in a household where accounting was the language everyone spoke. Both my parents built careers in it - my father as a chartered accountant, my mother running her own firm. I followed the path for a while, passed my foundation exams, and then sat with it for a moment and realised I could not do it. Not because it was hard. Because it was not mine.
That is a strange feeling when your whole family speaks the same language and you decide you want a different one.
Finance felt right in a way I could not fully explain at the time. I just kept being drawn to the markets side - the valuation, the uncertainty, the fact that you can be rigorous and still be wrong. I cleared my CFP exams in one go, built an independent practice, interned at a brokerage. Then decided I needed to go properly deep and moved to Melbourne.
So I started building things. MFAF is one of them. Not because I was told to. Because I wanted to understand if you could make forecasting more honest than it usually is.
If the work on this site says anything about how I approach problems, I hope that is enough of a reason to reach out.
Outside of finance: painting, poetry, museums. On weekends: cricket, padel.