Как посчитать sales forecast accuracy в SQL

Закрепи формулу sales forecast accuracy в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать sales forecast accuracy в Telegram

Зачем 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) / forecast

Negative = 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).

Закрепи формулу sales forecast accuracy в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать sales forecast accuracy в Telegram

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.

Связанные темы

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.