Calculate Customer Health Scores
A customer health score expert that builds weighted, multi-dimensional scoring models to predict churn risk and flag at-risk accounts early.
Why it matters
Proactively manage customer success by calculating dynamic health scores. Predict churn risk and identify expansion opportunities using multi-dimensional data.
Outcomes
What it gets done
Implement weighted scoring models for product adoption, relationship health, and business outcomes.
Calculate scores using basic weighted, advanced time-decay, and trend momentum methodologies.
Segment customers into risk categories (Healthy, At Risk, High Risk, Critical) with actionable insights.
Integrate with CRM and support systems to automate health score updates and alerts.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-health-score-calculator | bash Overview
Health Score Calculator
A customer health score expert that builds weighted, multi-dimensional scoring models combining usage, engagement, support, and outcome data, with time-decay and momentum options and predictive-accuracy validation. Use it when building or refining a health-scoring model - metric weights, risk bands, and recommended actions - rather than a one-off risk flag.
What it does
Designs, implements, and optimizes customer health scoring systems that predict customer behavior, flag at-risk accounts, and drive proactive customer success. Scores combine four dimensions - product adoption (feature usage, login frequency, engagement depth), relationship health (support ticket volume and sentiment, NPS, stakeholder engagement), business outcomes (goal achievement, ROI realization, expansion indicators), and behavioral patterns (usage trends, seasonal variation, cohort comparisons) - as weighted composite scores normalized to a 0-100 scale, weighting critical metrics higher, applying decay functions to time-sensitive data, and ranking customers by percentile within their cohort rather than on raw values alone. It implements both a basic weighted model (usage, engagement, support, and outcome sub-scores combined by fixed weights) and an advanced time-decay model that applies exponential decay to historical metrics and computes a trend-momentum factor comparing a customer's most recent week against the prior week. Adoption metrics are computed via percentile-ranked SQL over a 30-day event window (feature breadth, engagement frequency, engagement depth, core-feature adoption), and support health is scored from ticket volume, resolution time, CSAT, and escalation rate. Scores are banded into risk categories - Healthy, At Risk, High Risk, Critical - each mapped to a recommended action, with priority further adjusted for high-value accounts.
When to use - and when NOT to
Use it to build or refine a customer health scoring model - defining metric weights, choosing between a static weighted model and a time-decay/momentum model, wiring up percentile-based adoption and support scoring, and setting the risk bands and recommended actions a CSM team acts on.
Inputs and outputs
Input is raw customer usage, engagement, support, and outcome data. Output is a normalized 0-100 health score, a risk category and priority (adjusted for account value), a recommended action per category, and validation tooling - validate_health_score_accuracy - that measures the score's predictive accuracy against actual churn/retention outcomes using accuracy, precision, and recall at different score thresholds.
Integrations
Implemented in Python with numpy for time-decay and momentum calculations and scikit-learn (accuracy_score, precision_recall_curve) for validating score accuracy against real outcomes, plus SQL PERCENT_RANK for percentile-based adoption scoring directly against a product-events table.
Who it's for
For customer success and CS-ops teams building or maintaining a health-scoring system. It also covers implementation practices (data-freshness checks, statistical outlier detection, validating calculations against known outcomes, gradual rollout of scoring changes), reporting (executive dashboards, cohort-based comparisons, alerts when a score moves more than 20 points), and where to extend it further: automated weight optimization against churn correlation, anomaly detection, time-series predictive scoring, NLP-based support-ticket sentiment analysis, and segmentation by industry, lifecycle stage, account tier, or geography.
def calculate_health_score(customer_data):
# Normalize metrics to 0-100 scale
usage_score = normalize_usage_metrics(customer_data['usage'])
engagement_score = normalize_engagement_metrics(customer_data['engagement'])
support_score = normalize_support_metrics(customer_data['support'])
outcome_score = normalize_outcome_metrics(customer_data['outcomes'])
# Apply weights (should sum to 1.0)
weights = {
'usage': 0.35,
'engagement': 0.25,
'support': 0.20,
'outcomes': 0.20
}
health_score = (
usage_score * weights['usage'] +
engagement_score * weights['engagement'] +
support_score * weights['support'] +
outcome_score * weights['outcomes']
)
return min(100, max(0, health_score))
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.