Underemployment Risk (CPS)

Composite stress indicator based on U‑6 underutilization and median weeks unemployed. Outputs include robust z‑scores, optional percentile ranks, EMA smoothing, 0–100 scaling, and categorical regimes.

Why: Elevated U‑6 and longer unemployment durations reflect slack and scarring in the labor market that often precede demand weakness.

Abstract

We build a monthly underemployment risk signal from CPS series capturing broad slack (U‑6) and job‑loss persistence (median unemployment duration). Each series is standardized using robust rolling z‑scores; the composite is their average. We also report full‑sample percentile ranks for interpretability, apply EMA smoothing, scale to 0–100, and classify regimes.

1. Data (BLS CPS Identifiers)

Inputs are monthly. We enforce presence of date, series_id, and value, and align data to a month‑start grid with bounded forward‑fill (ffill(limit=2)).

2. Data Handling & Validation

  • Types & dates: Coerce numeric values; normalize dates to month‑start timestamps.
  • Pivot & grid: Wide pivot by series_id, align to asfreq('MS').
  • Fail‑fast: raise if either series is fully missing after pivot.

3. Measures & Diagnostics

U‑6 underutilization rate (higher = more slack)
Median weeks unemployed (higher = longer job‑finding frictions)

Diagnostics: 3‑month momentum for both inputs (diff(3)).

4. Standardisation (Robust Rolling z‑scores)

Each series is scaled with a median/MAD z‑score using an adaptive window.

zt(x) = (xt − medianW(x)) / (1.4826·MADW(x)),\ W = min(36, max(8, ⌊0.8·Nvalid⌋))

5. Composite Construction

We take an equal‑weight average of the two z‑scores (both are bad when high):

Underemploymentz = 0.5·z(U‑6) + 0.5·z(Median Weeks)

For interpretability, we also compute full‑sample percentile ranks for each input and average them: Underemployment_Composite_pctRank.

6. Smoothing, Scaling & Regimes

  • HOT (stress ↑): > +0.75
  • NEUTRAL: −0.75 to +0.75
  • COOL (stress ↓): < −0.75

7. Output Panel

[
  "u6_underutilization_rate","median_weeks_unemployed",
  "u6_pct_rank_fullsample","weeks_pct_rank_fullsample",
  "Underemployment_Composite_pctRank",
  "u6_z","weeks_z","Underemployment_z",
  "Underemployment_0_100","Underemployment_Smoothed","Underemployment_Regime",
  "u6_mom_3m","weeks_mom_3m"
]

8. Implementation Notes (Python)

# Expect columns: date, series_id, value (monthly)
# Align to MS grid; ffill(limit=2); pivot to wide; compute z-scores, pct-ranks,
# composite, EMA smoothing, 0–100 scaling, regime classification as detailed above.

9. Interpretation & Use

A HOT underemployment regime indicates broad slack and elongated job‑finding, often consistent with cooling demand and softer wage pressure. A COOL regime reflects easing stress and faster re‑employment dynamics.