Purpose. Retention KPI looks stable, but durability weakens underneath. Add a bounded stability lane so leaders see weakening survival cadence early while m stays identical (phi((m,a)) = m).
Classical KPI (unchanged).m := retention_rate_90d (or keep your current cohort KPI; alternative m := LTV/CAC).
Lanes (retention + hazard drift; optional drift canonicals).
# Retention within policy window (primary lane)
q_ret := retained_within_90d / max(cohort_size, eps_m)
a_ret := 2*q_ret - 1
a_ret := clamp(a_ret, -1+eps_a, +1-eps_a)
# Hazard drift vs reference (survival stability)
# h_t := current-day hazard (e.g., KM or rolling); h_ref := calm baseline
a_haz := tanh( 1 - |h_t - h_ref| / b )
a_haz := clamp(a_haz, -1+eps_a, +1-eps_a)
# Optional ZEOZO-Core on a cohort cadence series x_t (e.g., daily churn rate)
med := median(x); rad := median(|x - med|); rad := max(rad, 1e-6)
y_t := (x_t - med) / rad
E_t := (1 - lam)*E_{t-1} + lam*(y_t^2) # lam ~ 0.10
Z_t := log(1 + E_t)
A_t := (1 - mu)*A_{t-1} + mu*Z_t # mu ~ 0.04
Delta_t := | Z_t - A_t |
# Lane from ZEOZO (choose ONE if using drift)
a_zeozo := tanh( c*( 1 - Z_t / Z_ref ) ) # Z_ref := median(Z_t over pilot)
a_gap := tanh( k_gap*( A_t - Z_t ) )
# Optional SYASYS-Core calm-gated alignment (exec-friendly)
Q_t := rho*Q_{t-1} + (1 - rho)*clip( A_t - Z_t , 0 , 1 ) # rho ~ 0.90
muR := ln(2)/R, with R ~ 8.0, kappa ~ 0.50
SyZ_t := ( 1 / ( 1 + Z_t + kappa*Delta_t ) ) * ( 1 - exp( - muR*Q_t ) )
a_syasys := 2*SyZ_t - 1
# Blend retention with one secondary source (rapidity-safe)
# pick a_volsrc in {a_haz, a_zeozo, a_gap, a_syasys}
alpha in [0,1]
a := tanh( alpha*atanh(a_ret) + (1 - alpha)*atanh(a_volsrc) )
# Clamp all lanes before any atanh. Export band from chosen lane (a_ret or blended a).
Bands (executive defaults).A++: a>=0.75, A+: 0.50<=a<0.75, A0: 0.25<=a<0.50, A-: 0.10<=a<0.25, else A--.
Hysteresis: promote if delta_a >= +0.05; demote if delta_a <= -0.05.
Knobs to declare (manifest).window_days=90, b (hazard bound), eps_a=1e-6, eps_m for safediv, optional blend alpha or weights, and if drift is enabled: lam=0.10, mu=0.04, c and Z_ref or k_gap; SYASYS: rho=0.90, kappa=0.50, R=8.0, muR=ln(2)/R. State the hazard method (KM or rolling) once.
What good vs weak looks like.
- Good: steady
a_retand calm hazard (a_hazhigh),A_t >= Z_timplies lanes near +1 (A++/A+). - Weak: hazard and cadence jitter rise first;
a_hazand any drift lane slide to A0 whilemholds;a_retfollows weeks later.
Acceptance signal.
Two-band decline in a_haz within a month or persistent slide of the drift lane for 10+ business days leads to onboarding or pricing experiments and a segment-level RCA. Escalate if bands do not recover after knob review.
Mini calculator kit (10 rows).
date,kpi,m,a,band
2025-10-01,Cohort_retention90d,0.88,0.80,A+
2025-10-02,Cohort_retention90d,0.88,0.79,A+
2025-10-03,Cohort_retention90d,0.88,0.74,A+
2025-10-04,Cohort_retention90d,0.88,0.68,A+
2025-10-05,Cohort_retention90d,0.88,0.60,A+
2025-10-06,Cohort_retention90d,0.88,0.52,A+
2025-10-07,Cohort_retention90d,0.88,0.46,A0
2025-10-08,Cohort_retention90d,0.88,0.40,A0
2025-10-09,Cohort_retention90d,0.88,0.35,A0
2025-10-10,Cohort_retention90d,0.88,0.28,A-
Owner playbook.
- Declare
window_daysand hazard method once; do not change mid-pilot. - Slice by cohort attributes (segment, plan, region) to find where durability decays fastest.
- If using SYASYS, use the calm gate to display a green badge only after sustained calm.
Conformance hooks.
- Order-invariant rollups:
a_out := tanh( (SUM w*atanh(a)) / max(SUM w, eps_w) )witheps_w := 1e-12. - Collapse parity:
phi((m,a)) = mthrough all ETL hops. - Determinism: same inputs and knobs reproduce identical exports (post-format);
knobs_hashflips on any knob change.
Navigation
Previous: SSM-Audit – Illustrative Case: AR ratio steady, long tail thickening (4.4 I4)
Next: SSM-Audit – Illustrative Case: Cash healthy, schedule slipping (4.4 I6)
Directory of Pages
SSM-Audit – Table of Contents
Frequently asked questions
SSM-Audit – Q & A