Как посчитать sales forecast accuracy в SQL
Содержание:
Зачем forecast accuracy
Sales-команда говорит «закроем $2M в Q3». Финансист планирует hire, expense, runway. Если actually закрыли $1M — кризис. Forecast accuracy показывает, насколько reliable прогнозы команды. Healthy: ±5-10% от forecast.
Формула
forecast_accuracy = 1 − |forecast − actual| / forecast= 1 при perfect. = 0.8 при 20% miss.
Или absolute error:
forecast_error = (actual − forecast) / forecastNegative = under-delivered. Positive = over-delivered.
Accuracy в SQL
SELECT
quarter,
forecast_revenue,
actual_revenue,
actual_revenue - forecast_revenue AS variance,
(actual_revenue - forecast_revenue)::NUMERIC * 100 / NULLIF(forecast_revenue, 0) AS variance_pct,
1 - ABS(actual_revenue - forecast_revenue)::NUMERIC / NULLIF(forecast_revenue, 0) AS accuracy
FROM quarterly_forecasts
WHERE quarter <= CURRENT_DATE - INTERVAL '3 months'
ORDER BY quarter;Variance ±5% — excellent. ±10% — норма. ±20%+ — sales-leader needs to improve.
По rep
SELECT
rep_id,
COUNT(*) AS quarters,
AVG(actual_revenue / NULLIF(forecast_revenue, 0)) AS avg_attainment_ratio,
AVG(ABS(actual_revenue - forecast_revenue) / NULLIF(forecast_revenue, 0)) AS avg_error_pct
FROM rep_quarterly_forecasts
WHERE quarter <= CURRENT_DATE - INTERVAL '3 months'
GROUP BY rep_id
HAVING COUNT(*) >= 4
ORDER BY avg_error_pct;Rep с consistently ±5% accuracy — reliable forecaster. ±30% — sandbagging (under-promise) или crunch (over-promise).
Over vs under-forecasting
SELECT
CASE
WHEN variance_pct > 10 THEN 'sandbagging'
WHEN variance_pct > 5 THEN 'mild_over_performance'
WHEN variance_pct >= -5 THEN 'on_track'
WHEN variance_pct > -10 THEN 'mild_under_performance'
ELSE 'crunch'
END AS forecast_quality,
COUNT(*) AS forecast_periods
FROM quarterly_forecasts_with_variance
GROUP BY 1;Sandbagging (sandbag) — намеренно занижают, чтобы legko beat. Crunch — over-commit, регулярно miss.
Частые ошибки
Ошибка 1. Forecast accuracy = actual / forecast. Это attainment, не accuracy. 90% attainment может быть 90% или 110% — нужна абсолютная разница.
Ошибка 2. Не учитывать changes mid-quarter. Forecast обновляется каждую неделю. Какой используете для «final»?
Ошибка 3. Aggregate без rep. Team accuracy 95% может быть из rep1 −20% + rep2 +25%. Они компенсируют — не видна individual issue.
Ошибка 4. Sample size мал. 4 квартала — minimum для статистики. Один outlier может скрашить.
Ошибка 5. Forecast bias не trackуется. Reps systematically под или over — нужна correction. Track multiple quarters.
Связанные темы
- Как посчитать quota attainment в SQL
- Как посчитать pipeline coverage в SQL
- Как посчитать forecast bias в SQL
- Как посчитать win rate в SQL
FAQ
Какой accuracy хороший?
±5% top-tier. ±10% норма. ±20%+ — flag.
Кто forecast — rep или manager?
Обычно rep submits, manager approves/adjusts. Track оба для bias detection.
Daily vs weekly forecast?
Weekly стандарт. Daily — для high-velocity SMB.
Sandbag vs crunch — что хуже?
Crunch — миссит quota. Sandbag — beats quota, но company под-планируется (over-hires).
AI-based forecasting?
Modern CRMs (Salesforce Einstein, Clari) используют ML на historical patterns. Часто more accurate чем reps.