Fed Inflation Signal
A reproducible composite that infers inflation pressure from FRED data using robust rolling standardisation, explicit data-quality handling, and transparent weighting. Applicable across macro use‑cases; commodity examples (e.g., silver) appear only as illustrations.
Methodology note: the composite uses fixed weights and rule-based regime mapping. To prevent narrative drift, publish component contributions, reliability bands, and a small transition zone around zero; review weights quarterly and document changes.
Abstract
We construct a monthly, rules‑based signal that blends headline/core CPI, breakevens (10Y), money/liquidity proxies (M2, Fed assets), growth/industry proxies (Industrial Production, copper), policy stance (Fed Funds Δ12m), USD (inverted YoY), and uncertainty (EPU). Each component is transformed to a comparable scale via rolling robust z‑scores, weighted, and summed to a Composite Inflation Signal. Regimes are mapped from the composite’s distribution to HOT, NEUTRAL, or COOL.
1. Data Sources (Expanded)
All inputs are retrieved from FRED and coerced to monthly end. The table below documents what each series captures, how it is transformed, and key caveats for interpretation.
| FRED ID | Series | What it measures | Transform used | Why it matters in this model | Key caveats |
|---|---|---|---|---|---|
| CPIAUCSL | CPI (headline, SA) | Consumer price level for urban consumers (all items). | YoY %, 3‑month annualised % | Core inflation “state” and near‑term momentum anchor. | Revisions/seasonality; can be distorted by one‑off price shocks and base effects. |
| CPILFESL | CPI (core ex food & energy, SA) | Core CPI excluding food and energy. | YoY %, 3‑month annualised % | Reduces transitory noise; typically higher weight in composite. | Still subject to shelter dynamics and methodological changes. |
| GS10 | 10Y Treasury yield (nominal) | Market yield on 10‑year U.S. Treasury (nominal). | Used with DFII10 to form breakeven | Inputs inflation expectations proxy when paired with TIPS. | Daily series resampled to month‑end; reflects term premia and risk sentiment as well as expectations. |
| DFII10 | 10Y TIPS yield (real) | Market yield on 10‑year inflation‑indexed Treasuries. | Used with GS10 to form breakeven | Separates real‑rate component; supports inflation expectations construction. | TIPS liquidity/convexity can bias breakevens during stress. |
| M2SL | M2 money stock (SA) | Broad money aggregate (M1 plus near‑money components). | YoY % | Liquidity impulse proxy; captures monetary accommodation/tightening over the cycle. | Definition shifts (notably around 2020); money demand effects complicate causal interpretation. |
| WALCL | Fed total assets | Size of the Federal Reserve balance sheet. | YoY % | Quantifies balance‑sheet expansion/roll‑off as a liquidity regime input. | Level effects can dominate; policy tools changed across QE/QT episodes. |
| DTWEXBGS | Broad USD index (nominal) | Trade‑weighted broad U.S. dollar index (goods & services). | YoY % (inverted) | USD strength is typically disinflationary; inversion aligns sign with “inflation pressure”. | Trade weights change over time; FX moves can be driven by global risk rather than U.S. inflation fundamentals. |
| INDPRO | Industrial production | Index of real output in manufacturing, mining, and utilities. | YoY % | Demand/activity proxy; helps distinguish demand‑pull vs cost‑push episodes. | Cyclical and revision‑prone; may lag services‑heavy inflation dynamics. |
| PCOPPUSDM | Copper price | Global copper price (USD), a pro‑cyclical commodity proxy. | YoY % | Captures commodity‑linked cost pressures and global cycle sensitivity. | Commodity-specific supply shocks can dominate; not a direct measure of U.S. inflation. |
| USEPUINDXM | Economic Policy Uncertainty (US) | News‑based index of policy-related uncertainty. | Level (z‑scored) | Risk/uncertainty channel; can amplify inflation volatility via expectations and risk premia. | Methodology is media‑based; spikes reflect headlines as well as fundamentals. |
| FEDFUNDS | Fed Funds rate | Effective policy rate level. | Δ12m (inverted) | Captures policy impulse: tightening tends to damp inflation; inversion maps to inflation pressure sign convention. | Endogeneity: policy responds to inflation; interpret as stance/impulse, not “cause”. |
Note: series descriptions and metadata live on FRED; CPI is sourced from BLS; rates from the Federal Reserve H.15 release. Where inputs are daily, month-end resampling is used.
2. Data Quality, Cleaning & Validation
- Recent availability check: list last observation date and recent coverage for each series.
- Bounded forward‑fill: up to 2–3 months (configurable) to bridge publication lags.
- Minimum history: require ≥120 months overlapping data for robust rolling transforms.
- Adaptive windows: if history is short, shrink rolling window but log a warning.
These steps generate a data_quality_flag trail to enable downstream audit and confidence assessment.
3. Component Transforms
Let x_t be a monthly series. We form level and impulse views via:
Constructed components (examples): headline_yoy, core_yoy, headline_3m_ann, core_3m_ann, breakeven10, m2_yoy, walcl_yoy, copper_yoy, usd_yoy_neg (note inversion), indpro_yoy, epu_level, fedfunds_delta_neg (inverted Δ12m).
4. Standardisation (Rolling z‑scores)
We scale each component with a rolling window W=120 months. Robust z‑scores use median/MAD; otherwise mean/std.
If insufficient history, use an adaptive window (≥60m) and emit a warning.
5. Weighting & Composite Construction
Let z^k_t denote the z‑score for component k. With weights w_k (normalised over available non‑NaN inputs), the composite is
Default weights emphasise core and breakevens, with auxiliary influence from liquidity, USD, activity, and uncertainty. Missing inputs are re‑normalised out.
{
"core_yoy_z": 0.22, "headline_yoy_z": 0.12,
"core_3m_ann_z": 0.12, "headline_3m_ann_z": 0.06,
"breakeven10_z": 0.18, "m2_yoy_z": 0.08,
"walcl_yoy_z": 0.05, "copper_yoy_z": 0.07,
"usd_yoy_neg_z": 0.06, "indpro_yoy_z": 0.02,
"epu_z": 0.01, "fedfunds_delta_neg_z": 0.01
}
5.1 Component Contributions (Attribution)
For transparency, publish each component’s signed contribution:
Output should include: (i) a ranked list of top positive/negative contributors; (ii) contribution shares c^k_t / S_t when S_t is non‑zero; and (iii) a “missing inputs” summary (which weights were re‑normalised out).
5.2 Confidence Bands (Reliability Diagnostics)
Because the composite is a model-based summary (not an observed variable), publish a simple reliability measure and an uncertainty band around S_t.
- Coverage: coverage_t = (# available components) / (total components)
- Agreement: dispersion of contributions disp_t = std({c^k_t}) (lower = higher agreement)
- Stability: composite change |ΔS_t| vs rolling history
This band is a diagnostic (not a statistical confidence interval). Use it to down‑weight interpretation when inputs are missing, contributions conflict, or the composite is unstable.
6. Scaling & Regime Mapping
We provide a bounded 0–100 score and a categorical regime:
- HOT: z(S)t ≥ +0.50 (inflation pressure above typical range)
- TRANSITION: −0.25 ≤ z(S)t ≤ +0.25 (small band around zero; directionless / turning‑point risk)
- COOL: z(S)t ≤ −0.50 (disinflation/deflation risk)
- WARMING / COOLING (optional): intermediate zones (−0.50 to −0.25) and (+0.25 to +0.50) for early transition signals
7. Implementation Notes (Python)
# ➊ Fetch (fredapi) → monthly end
s, title = fred.get_series('CPIAUCSL'), fred.get_series_info('CPIAUCSL').title
# ➋ Transform components: YoY, 3m annualised, Δ12m, sign inversions
# ➌ Robust rolling z-scores with adaptive window (default W=120)
# ➍ Weight & sum available components (weights re-normalised)
# ➎ Produce: composite, 0–100 scaled score, regime, and per-component contributions
Reference functions: _zscore (robust/classical), pct_change, _ann_3m, _delta_12m, data‑quality helpers (recent‑availability, bounded ffill, sufficiency checks).
8. Reproducibility, Audit & Monitoring
- Persist series IDs, retrieval timestamps, library versions, and resampling policy.
- Log cleaning actions (ffill count, proxies used), adaptive window changes, and missing‑input re‑weights.
- Store panels: raw components, z‑scores, contributions, composite, regimes.
9. Interpretation & Applications
The composite summarises inflation pressure for macro allocation, risk budgeting, and scenario analysis. For commodities (e.g., silver), HOT typically increases the risk of tighter policy and stronger USD headwinds; COOL the converse. Adapt signs/weights to specific asset sensitivities.
10. Governance & Change Control
- Quarterly weight review: reassess weights with diagnostics (signal stability, out-of-sample performance, redundancy) and record decisions.
- Change log (mandatory): publish a dated table of weight/threshold changes, rationale, and expected impact; bump semantic version.
- Quarterly review of components, thresholds, and weights with backtest diagnostics.
- Document rationale for any component additions/removals and re‑weighting.
- Maintain semantic versioning of the specification and outputs.
11. Model Interpretation (How to Read the Output)
11.1 What the composite is (and is not)
- Signal extraction: the composite is a standardised summary of multiple inflation‑relevant observables; it is best read as a latent “pressure” index rather than a direct forecast of CPI.
- Relative scale: z‑scores are relative to the rolling window; a value of +1 means “high vs the last ~10 years”, not “high in absolute terms”.
- Model risk: fixed weights embed a judgement. Publish attribution and reliability diagnostics to avoid narrative drift from the numbers.
11.2 Interpreting regimes and transitions
- HOT (z(S) ≥ +0.50): above‑normal pressure; typically coincides with elevated realised inflation and/or rising inflation expectations.
- COOL (z(S) ≤ −0.50): below‑normal pressure; consistent with disinflation impulse or demand deceleration.
- TRANSITION (|z(S)| ≤ 0.25): turning‑point zone. Defer to component attribution and stability: small composites can flip sign easily.
11.3 Reading components (practical rules)
- State vs momentum: YoY CPI/core = “state”; 3‑month annualised = “momentum”. Divergence often signals inflection risk.
- Expectations channel: breakevens contribute to the composite but embed liquidity and risk premia; treat them as a market‑implied expectation proxy, not ground truth.
- Policy endogeneity: the Fed Funds impulse is informative about stance, but policy responds to inflation; avoid causal language.
- USD inversion: a stronger USD is commonly disinflationary; inversion aligns sign with “pressure”. Validate when global risk dominates.
- Uncertainty: EPU spikes can coincide with demand shocks and risk aversion; interpret alongside activity and USD.
11.4 Academic anchors (why this structure is reasonable)
- Inflation as a latent process: inflation dynamics are often modeled with unobserved components and time‑varying volatility, motivating standardised composites and reliability diagnostics.
- Regimes and turning points: regime‑switching models motivate explicit transition bands rather than forcing discrete labels when the signal is near zero.
- Uncertainty indices: news‑based policy uncertainty indices are widely used as macro risk inputs.
- Robust scaling: median/MAD standardisation reduces sensitivity to outliers common in macro time series.
Implementation guidance: keep the narrative mechanically tied to (i) regime label, (ii) top contributions, and (iii) reliability band. If the narrative conflicts with the numerical rules, the numerical rules win.