Methodology
How FactorView calculates macro exposure scores and what they mean.
1. Overview
Macro Exposure describes how a stock historically reacted to changes in a macroeconomic factor — not why.
This is fundamentally different from forecasting. We measure sensitivity: when interest rates rose in the past, did this stock tend to go up or down? By how much?
Key distinction:
- Correlation — how two variables move together
- Sensitivity (β) — how much one variable moves in response to another
- Prediction — not what we do ❌
2. Data Sources
All data is sourced from Financial Modeling Prep (FMP) API.
Stock Prices
- Adjusted close prices (split & dividend adjusted)
- Resampled to monthly frequency
- 3–5 years of history
Macro Time Series
| Factor | Series | FMP Endpoint |
|---|---|---|
| Interest Rates | US 10Y Treasury Yield | /treasury |
| Oil Prices | WTI Crude | /historical-price-full/WTI |
| Inflation | US CPI YoY | /economic?name=CPI |
| USD Strength | US Dollar Index (DXY) | /historical-price-full/DX-Y.NYB |
Update Frequency
Scores are refreshed daily. The underlying regression uses monthly data points.
3. Timeframes & Returns
Return Calculation
We use log returns for stock prices and changes for macro factors:
stock_returnt = log(pricet / pricet-1)
factor_returnt = Δmacro_valuet
Rolling Windows
We calculate exposure over rolling windows of:
- 36 months (3Y) — default
- 60 months (5Y) — for stability
- 12 months (1Y) — for recent sensitivity
Why Monthly?
Macro effects unfold slowly. Daily noise obscures the signal. Monthly data provides a cleaner picture of sensitivity while maintaining sufficient sample size.
4. Exposure Model
Linear Regression
We fit a simple linear regression for each stock-factor pair:
Rstock,t = α + βfactor · Rfactor,t + εt
Rstock,t = Monthly return of the stock at time t
Rfactor,t = Monthly change in the macro factor at time t
βfactor = Macro Exposure — the sensitivity coefficient
α = Intercept (baseline return)
εt = Error term
Interpreting β
- β > 0 → Stock tends to rise when the factor rises
- β < 0 → Stock tends to fall when the factor rises
- β ≈ 0 → No significant sensitivity to this factor
5. Score Normalization
Why Normalize?
Raw β values are not directly comparable across factors. A β of 0.5 for interest rates means something different than a β of 0.5 for oil prices (due to different scales and volatilities).
Normalization Process
exposure_score = clip(β × scaling_factor, -100, 100)
direction = sign(β)
confidence = f(R², sample_size)
The resulting score is mapped to a -100 to +100 range:
- +100 = Extreme positive sensitivity
- 0 = No meaningful sensitivity
- -100 = Extreme negative sensitivity
Confidence Score
The confidence score (0-100) reflects how reliable the exposure estimate is, based on:
- R² — How much of the stock's movement is explained by the factor
- Sample size — More data points = higher confidence
6. Interpretation Guidelines
High exposure ≠ good or bad
A high positive or negative score is not inherently good or bad. It simply indicates strong sensitivity. Whether that is desirable depends on your outlook for the factor.
Exposure ≠ causality
Correlation does not imply causation. A stock may move with a factor due to a third variable, sector effects, or coincidence.
Macro regimes change
Historical sensitivity may not persist. Structural changes in the economy, company strategy, or market dynamics can alter exposure over time.
Example: A stock with negative rate exposure is not "bad" — it is simply sensitive to rising rates. If you expect rates to fall, this could be advantageous.
7. Limitations
- Structural breaks
Major events (COVID-19, 2008 crisis) can distort historical relationships. The model does not distinguish normal from crisis periods.
- Regime changes
Central bank policy shifts, technological disruption, or industry evolution may render historical patterns less relevant.
- One-time events
M&A activity, spin-offs, or company-specific events can create outliers that skew the regression.
- Young companies
Stocks with less than 3 years of history may have unreliable exposure estimates due to small sample sizes.
- Omitted variables
The model captures univariate relationships. Real-world dynamics involve multiple interacting factors.
Using with ScreenerHub
Macro exposure scores are designed to work as screener fields. Combine them with valuation, quality, and balance sheet metrics for more refined stock selection.
Example filter:
InterestRateExposure < -50 AND PE < 15 AND ROE > 15
Macro exposure is most powerful when combined with fundamental analysis.