Job Flows & Labor Dynamism (BDS)

Quarterly composite derived from Gross Job Gains and Gross Job Losses (Business Employment Dynamics). Produces level, YoY, balance ratio, a composite z‑score, EMA‑smoothed headline, 0–100 scaling, and regime classification.

Why: Rising gains relative to losses and positive net creation indicate firm dynamism and hiring appetite; the opposite signals deterioration.

Abstract

Using BDS series for private sector gross job gains and losses, we construct net job creation, a 4‑quarter moving average of dynamism, and YoY growth. A robust, history‑adaptive z‑score combines gains, net creation, and (negated) losses into a composite. We smooth the headline, scale to 0–100, and map regimes.

1. Data (BLS BDS Identifiers)

Inputs are quarterly levels. We preserve BLS revisions by deduplicating within (date, series_id) and retaining the latest observation.

2. Data Handling & Validation

  • Types & dates: Coerce numeric values. Parse date; if missing, build quarter‑end timestamps from year and period (e.g., Q1) via PeriodIndex(freq='Q-DEC').
  • Pivot: Wide pivot by series_id; no forced asfreq to avoid sparse‑grid artifacts.
  • Intersection: Keep only quarters where both gains and losses exist (drop rows with NaN in either).
  • Fail‑fast: raise if any required BDS series is absent post‑pivot.

3. Core Transforms

Net_Job_Creation = Gross_Job_Gains − Gross_Job_Losses
Labor_Dynamism_4Q_MA = MA4Q(Net_Job_Creation)
YoY(s) = st/st−4 − 1
Gains_to_Losses_Ratio = Gains / (Losses + ε)

4. Standardisation (Robust z‑scores)

We compute robust rolling z‑scores (median/MAD) with an adaptive window (default target 12 quarters, min 4).

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

Losses enter negatively: Losses_z_neg = −z(Losses).

5. Composite, Smoothing & Regimes

Weights emphasise gains and net creation while penalising losses.

{
  "Gains_z": 0.40,
  "Net_z": 0.40,
  "Losses_z_neg": 0.20
}
Job_Flows_Compositez = 0.40·Gainsz + 0.40·Netz + 0.20·Lossesz_neg

6. Output Panel

[
  # Levels & growth
  "Gross_Job_Gains","Gross_Job_Losses","Net_Job_Creation","Labor_Dynamism_4Q_MA",
  "Gross_Job_Gains_YoY","Gross_Job_Losses_YoY","Net_Job_Creation_YoY","Gains_to_Losses_Ratio",

  # Standardisation & composite
  "Gains_z","Losses_z_neg","Net_z",
  "Job_Flows_Composite_z","Job_Flows_Composite_Smoothed","Job_Flows_Composite_0_100","Job_Flows_Regime"
]

7. Implementation Notes (Python)

# Expect: quarterly BDS series with columns date/series_id/value (or year/period fallback)
# Steps: parse/construct quarter-end dates; dedupe (keep last) to respect revisions; pivot; intersect quarters; 
# compute net, YoY, 4Q MA; robust_z(); composite weighting; EMA smoothing; 0–100 scaling; regimes.

8. Interpretation & Use

A HOT reading signals broad firm‑level hiring dynamism and resilience of the expansion; COOL indicates waning churn and rising risk of slowdown. Use with payroll breadth and unemployment duration for a fuller labor cycle view.