Inflation Term‑Structure

Specification for a composite signal blending 5‑year and 10‑year breakeven inflation with the real 10‑year TIPS yield to classify Reflation, Neutral, or Disinflation regimes.

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

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

  1. Month‑end alignment: resample each series to month‑end and select the last observation.
  2. Term spread: compute the slope of the breakeven curve
    \text{Term\_Spread}_t = T10YIE_t − T5YIE_t
    (The spread can be charted but is not directly used in the composite below.)
  3. 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

  1. 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).
  2. 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:

\text{If } C_t \ge 0.75 \Rightarrow \textit{Reflation};\quad |C_t| < 0.75 \Rightarrow \textit{Neutral};\quad C_t \le -0.75 \Rightarrow \textit{Disinflation}

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

7. Reproducibility

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.