Inflation Term‑Structure
Abstract
This note defines an inflation term‑structure signal using the breakeven curve slope and real yields. Inputs are the 5‑year breakeven (T5YIE), 10‑year breakeven (T10YIE), and the 10‑year TIPS yield (DFII10). Series are month‑end aligned. A robust z‑score standardisation (rolling median/MAD) is applied to each input, and a weighted blend (0.4 · z(T5YIE) + 0.3 · z(T10YIE) + 0.3 · z(−DFII10)) forms a continuous composite. The composite is discretised into regimes using fixed cut‑offs ±0.75.
1. Data
- T5YIE — 5‑Year Breakeven Inflation Rate (FRED, daily; market‑implied CPI over 5y).
- T10YIE — 10‑Year Breakeven Inflation Rate (FRED, daily; market‑implied CPI over 10y).
- DFII10 — 10‑Year Treasury Inflation‑Indexed Security, Constant Maturity (real yield, FRED, daily).
All inputs are resampled to month‑end and trimmed to a rolling history as required by the rolling window used in the robust z‑score (default win = 60 months, min\_win = 24 months).
2. Alignment & Transformations
- Month‑end alignment: resample each series to month‑end and select the last observation.
- Term spread: compute the slope of the breakeven curve
(The spread can be charted but is not directly used in the composite below.)\text{Term\_Spread}_t = T10YIE_t − T5YIE_t
- Robust standardisation: for any series X,
z\_{rob}(X)_t = \dfrac{X_t − \mathrm{median}(X)_{t, w}}{1.4826 · \mathrm{MAD}(X)_{t, w}}with a rolling window w of up to 60 months (min 24). The 1.4826 factor scales MAD to σ under normality.
3. Composite Construction
- Inputs: Z\_{T5} = z\_{rob}(T5YIE), Z\_{T10} = z\_{rob}(T10YIE), Z\_{mReal} = z\_{rob}(−DFII10) (lower real yields imply easier financial conditions, hence the sign inversion).
- Weighted blend:
\text{Infl\_Term\_Composite}_t = 0.4·Z\_{T5,t} + 0.3·Z\_{T10,t} + 0.3·Z\_{mReal,t}
4. Regime Mapping
Map the composite into discrete regimes using fixed thresholds:
5. Implementation Notes (Python)
import pandas as pd
import numpy as np
# ---- Robust z-score ----
def robust_z(s, win=60, min_win=24):
x = pd.to_numeric(s, errors="coerce").astype(float)
w = max(min_win, min(win, x.dropna().size))
med = x.rolling(w, min_periods=min_win).median()
mad = (x - med).abs().rolling(w, min_periods=min_win).median()
return (x - med) / (1.4826 * mad.replace(0, np.nan))
# Assume df_infl_term with columns [Date, T5YIE, T10YIE, DFII10]
d = df_infl_term.copy()
d["Term_Spread"] = d["T10YIE"] - d["T5YIE"]
d["Z_T5"] = robust_z(d["T5YIE"]) # 5y breakeven
d["Z_T10"] = robust_z(d["T10YIE"]) # 10y breakeven
d["Z_mReal"] = robust_z(-d["DFII10"]) # inverted real yield
d["Infl_Term_Composite"] = 0.4*d["Z_T5"] + 0.3*d["Z_T10"] + 0.3*d["Z_mReal"]
# Discretise
hi, lo = 0.75, -0.75
def _regime(v):
if pd.isna(v):
return np.nan
return "Reflation" if v > hi else ("Disinflation" if v < lo else "Neutral")
d["Infl_Term_Regime"] = d["Infl_Term_Composite"].apply(_regime)
df_sig_infl_term = d
Drop‑in compatible with existing pipelines: use df_sig_infl_term downstream for charts and dashboards.
6. Assumptions & Limitations
- Breakevens reflect inflation expectations plus liquidity/risk premia; structural shifts (QE/QT, balance‑sheet policy) can alter level and volatility.
- DFII10 availability gaps and revisions can affect recent z‑scores; robust scaling mitigates but does not eliminate this.
- Fixed weights (0.4/0.3/0.3) are heuristic; alternative weights may be tuned via cross‑validation for a target asset (e.g., breakeven curve, commodities, value vs growth).
- Monthly resampling smooths high‑frequency dynamics; use weekly views when trading shorter horizons.
7. Reproducibility
- Persist source IDs (
T5YIE,T10YIE,DFII10), download timestamps, and code commit hash. - Record window parameters (
win,min_win) and regime thresholds (±0.75). - Archive the final panel with
Infl_Term_CompositeandInfl_Term_Regimecolumns for auditability.
8. Applications
Useful as a conditioning variable for macro factor models, inflation‑sensitive tilts (commodities, breakevens, value/growth), and as a cross‑check against price‑based risk indicators (e.g., real‑yield shocks). Naturally pairs with liquidity and activity signals for broader regime classification.