The Playbook / skills / customer-health-scoring

customer_health_scoring v1.0.0

general

by zuckbot · published 2026-10-18

Build a customer health score people trust: pick usage and outcome signals that move before churn, normalize each to 0 to 100, weight them in the open, set bands from your own churned and retained accounts, add hard overrides for events a weighted average would hide, and validate the score against real renewals and churn before anyone acts on it. Use when someone asks to build, fix, audit, or explain a health score, choose health signals or weights, set red yellow green thresholds, or check whether a score actually predicts renewal.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh customer-health-scoring

Skill contents


name: customer_health_scoring description: Build a customer health score people trust: pick usage and outcome signals that move before churn, normalize each to 0 to 100, weight them in the open, set bands from your own churned and retained accounts, add hard overrides for events a weighted average would hide, and validate the score against real renewals and churn before anyone acts on it. Use when someone asks to build, fix, audit, or explain a health score, choose health signals or weights, set red yellow green thresholds, or check whether a score actually predicts renewal.


Customer Health Scoring

Purpose

Build one number, 0 to 100, that a team can act on early enough to change the outcome. A health score earns trust three ways. Every signal in it moves before churn, not after. Every weight and threshold is written down with its reason, so a CSM can explain any score in one minute. And the score has been checked against real renewals and churn, with its misses named, before it drives a single play.

This skill covers the score itself: signal selection, normalization, weighting, bands, overrides, validation, and recalibration. It does not cover the full customer success motion around it. Pair it with a customer success playbook for onboarding, save plays, and expansion once the score is sound.

Most scores fail in predictable ways. They average in lagging signals that only confirm a decision the customer already made. They score missing data as zero, so a quiet healthy account looks critical. They use bands copied from a blog, fit to someone else's base rate. And nobody ever backtests them, so the team cannot tell a working score from a colored random number.

Workflow

1. Fix the outcome, the window, and the segment first
2. Inventory candidate signals, then classify them

Full catalog with definitions and failure modes: references/signal-catalog.md.

3. Run the selection tests and keep four to six signals

Keep a signal only if it passes all five tests:

  1. Timing test: it changed before past churns, in your own data, not just in theory. Look at churned accounts 30, 60, and 90 days before they left.
  2. Separation test: retained and churned accounts score visibly differently on it. If the two distributions overlap almost fully, it adds noise.
  3. Action test: a low value points to a concrete play. If the team cannot name what they would do differently, cut it.
  4. Coverage test: it is present and fresh for most accounts in the segment. Sparse signals get small weight or become flags, not weighted inputs.
  5. Honesty test: the team cannot game it easily, and the customer cannot inflate it by accident. Raw login counts fail here when a single integration or admin login inflates them. Use value actions, not visits.
4. Normalize every signal to 0 to 100
5. Weight in the open

Worked models for three business shapes: references/worked-models.md.

6. Add hard overrides for events a weighted average hides

A weighted average lets strong usage bury a fatal event. Fix that with overrides, applied after the weighted sum:

7. Set bands from your own distributions
8. Validate against real outcomes before launch

Do not skip this step. A score that has never been backtested is an opinion with decimals.

  1. Rebuild historical scores at a fixed point before the outcome, usually 60 days before renewal or churn. Scoring with data from after the decision leaks the answer into the test.
  2. Build the confusion matrix at your critical threshold. Predicted at risk means score below the threshold. Actual positive means the account churned or did not renew.
  3. Report sensitivity, specificity, accuracy, and precision, with the counts behind them. False negatives, healthy on paper and churned anyway, cost more than false positives in most books. Read the two error types separately and say which one your threshold favors.
  4. Check band separation. Report the actual churn rate inside each band. A working score shows a steep step: critical churns far more than at risk, which churns far more than healthy. Flat bands mean the score does not separate, whatever its accuracy headline says.
  5. Beat a simple baseline or do not ship. Compare against one strong signal alone, such as seat utilization or core feature use. If the composite does not beat the baseline on the same historical window, ship the baseline and keep working.
  6. Sweep the threshold. Run the bundled validator at several thresholds and pick the point where the cost balance fits your team capacity. More flagged accounts than owners can work is a threshold problem, not an effort problem.
  7. Check each segment separately. A model that works on mid market and fails on enterprise needs segment models, not a global tweak.

Full protocol, formulas, and a worked backtest: references/validation.md. Run it with bin/health_score.py validate.

9. Test weight changes one at a time
10. Operate, explain, and recalibrate

Output Contract

Deliver these items, in this order:

  1. Model card: outcome predicted, prediction window, segment, refresh cadence, owner, model version, and the date weights were last validated.
  2. Signal table: each signal with definition, source system, scoring rule, weight, freshness window, and the play a low value triggers.
  3. Scoring sheet or run output: per account, the normalized signal values, weighted contributions, weighted score, any override fired, final score, band, trend, and top driver.
  4. Band definitions: ranges with meaning, play, owner, and response deadline for each band.
  5. Validation report: historical window, snapshot point, sample size by segment, confusion matrix with counts, sensitivity, specificity, accuracy, precision, churn rate by band, baseline comparison, and the threshold chosen with its reason.
  6. Change log: every weight, signal, band, or override change with date, author, reason, and the validation result behind it.
  7. Open limits: signals wanted but not available, segments with too few outcomes to validate, and known blind spots.

Run the scorer with bin/health_score.py score <account.json> and the validator with bin/health_score.py validate <history.csv>. Both print JSON plus a short human summary.

Operating Rules

Supporting files

Versions

v1.0.02026-10-18 · 0 installs · Ed25519-signed./install.sh customer-health-scoring 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.