Собесов

Сценарий A/B: OEC vs guardrail metrics

A/B-тестыMultiple testingСредняяSenior

Условие

Что такое OEC (Overall Evaluation Criterion), как его строить и чем он отличается от guardrail-метрик?

Решение

Подход

OEC — одна (composite) метрика, выбранная для принятия решения о запуске. Часто это линейная комбинация бизнес-критичных метрик:

OEC = w_1·M_1 + w_2·M_2 + ... + w_k·M_k

где w_i отражают долгосрочную ценность каждой метрики (часто из CLV-модели).

Guardrail — метрика, которая не должна ухудшиться (latency, error rate, churn). Это ограничение, а не часть OEC.

Разделение: OEC → maximize, guardrails → constrain. Решение: «launch if ΔOEC > 0 (значимо) и все guardrails в норме».

Пример

# OEC для маркетплейса
OEC = (
    1.0 * revenue_per_user
    + 0.5 * sessions_per_user_log
    - 0.3 * refunds_per_user
)
 
# Guardrails (не входят в OEC)
guardrails = {
    'p99_latency_ms': {'max': 800},
    'crash_rate': {'max': 0.005},
    'churn_30d': {'max': 0.18},
}
 
def decide(ate_oec, p_oec, guardrail_values):
    if p_oec > 0.05 or ate_oec <= 0:
        return 'no launch'
    for name, val in guardrail_values.items():
        if val > guardrails[name]['max']:
            return f'no launch: {name} breach'
    return 'launch'

Как выбирать веса OEC

  • Из CLV-модели: коэффициент при метрике = ∂CLV/∂метрика.
  • Из исторических корреляций с долгосрочной retention.
  • Через ranking метрик командой и нормализацию.

Подводные камни

  1. OEC, который меняется каждый квартал, бесполезен — пропадает сравнимость экспериментов.
  2. Если в OEC включён guardrail с большим весом, он может «компенсироваться» бизнес-метрикой — плохо. Latency должен оставаться ограничением.
  3. OEC чувствителен к шкалам метрик — нормализуйте (z-score / log).
  4. Без OEC: команда смотрит на 10 метрик и выбирает «удобную» — это классический cherry-picking.

Эталонный ответ

OEC — одна композитная метрика для принятия решения (maximize), линейная комбинация ключевых метрик с весами из CLV-модели. Guardrails — ограничения (constrain), не входят в OEC. Launch ⇔ ΔOEC > 0 значимо И все guardrails в норме.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти