← Назад к вопросам

Какое решение примешь по тесту если CTR хуже, а GMV лучше?

2.8 Senior🔥 181 комментариев
#A/B тестирование#Метрики продукта

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение по конфликтующим метрикам: CTR vs GMV

Это отличный вопрос, который показывает реальную сложность A/B тестирования. Когда разные метрики говорят противоположное, нужен умный анализ.

Ситуация

CTR (Click-Through Rate) хуже — меньше людей кликает GMV (Gross Merchandise Value) лучше — общая стоимость продаж больше

Это создает дилемму: нужно ли нам больше кликов или больше денег?

Правильный подход: сначала анализ, потом решение

Я бы НЕ спешил с выводом. Вместо этого провел бы детальный анализ.

Шаг 1: Проверка статистической значимости

-- Анализ обеих метрик
SELECT 
  variant,
  COUNT(*) as impressions,
  COUNT(CASE WHEN clicked THEN 1 END) as clicks,
  ROUND(100.0 * COUNT(CASE WHEN clicked THEN 1 END) / COUNT(*), 2) as ctr_percent,
  ROUND(COUNT(CASE WHEN clicked THEN 1 END)::numeric / COUNT(*), 4) as ctr_raw,
  SUM(gmv) as total_gmv,
  COUNT(CASE WHEN gmv > 0 THEN 1 END) as transactions,
  ROUND(SUM(gmv) / COUNT(*), 2) as gmv_per_impression,
  ROUND(SUM(gmv) / NULLIF(COUNT(CASE WHEN clicked THEN 1 END), 0), 2) as aov_per_click
FROM test_events
WHERE test_id = $1
GROUP BY variant;

Ключевые вопросы:

  1. Значимы ли различия? Используй chi-square тест для CTR, t-test для GMV
  2. Размер выборки? Достаточно ли данных, или нужна более длинная статистика?
  3. Доверительные интервалы — пересекаются ли 95% доверительные интервалы?

Шаг 2: Понимание причин различий

Возможные сценарии:

Сценарий A: Меньше кликов, но более качественные

  • Control: 1000 кликов, $5000 GMV = $5 AOV
  • Variant: 800 кликов, $6000 GMV = $7.50 AOV

Объяснение: Вариант привлекает меньше, но более целевую аудиторию. Люди, которые кликают, более готовы купить.

-- Проверяем качество кликов
SELECT 
  variant,
  COUNT(DISTINCT user_id) as unique_clickers,
  COUNT(CASE WHEN gmv > 0 THEN 1 END) as converting_clickers,
  ROUND(100.0 * COUNT(CASE WHEN gmv > 0 THEN 1 END) / COUNT(DISTINCT user_id), 2) as click_to_conversion_rate,
  ROUND(AVG(gmv), 2) as avg_gmv_per_clicker
FROM test_events
WHERE clicked = true AND test_id = $1
GROUP BY variant;

Сценарий B: Случайность или ошибка в тесте

  • Может быть, тест не был правильно рандомизирован
  • Может быть, в данных много шума
  • Может быть, нужна более длинная статистика

Шаг 3: Что я проверил бы дальше

  1. Сегментация по пользователям

    -- Анализируем по разным демографическим группам
    SELECT 
      variant,
      user_segment,
      COUNT(*) as impressions,
      ROUND(100.0 * COUNT(CASE WHEN clicked THEN 1 END) / COUNT(*), 2) as ctr,
      ROUND(SUM(gmv) / COUNT(*), 2) as gmv_per_impression
    FROM test_events
    WHERE test_id = $1
    GROUP BY variant, user_segment
    ORDER BY user_segment, variant;
    

    Может быть, вариант лучше для конкретного сегмента?

  2. Временной анализ

    -- Смотрим, как менялись метрики со временем
    SELECT 
      DATE(timestamp),
      variant,
      ROUND(100.0 * SUM(CASE WHEN clicked THEN 1 END) / COUNT(*), 2) as daily_ctr,
      ROUND(SUM(gmv) / COUNT(*), 2) as daily_gmv_per_imp
    FROM test_events
    WHERE test_id = $1
    GROUP BY DATE(timestamp), variant
    ORDER BY DATE(timestamp) DESC;
    

    Может быть, результаты мутировали со временем?

  3. Корневая причина в UX

    • Почему меньше кликов? Может быть, вариант менее привлекательный визуально?
    • Но почему выше GMV? Может быть, люди покупают больше?
    • Может быть, вариант показывает более дорогие товары?

Шаг 4: Принятие решения

Рекомендация зависит от контекста.

Вариант 1: Выбрать Variant (поднять GMV)

Когда:

  • GMV разница статистически значима, CTR разница нет
  • AOV (Average Order Value) растет
  • Бизнес сосредоточен на доходе
  • Жизненный цикл пользователя длинный

Аргументы:

  • В абсолютном выражении больше денег компании
  • Может быть, нужны более качественные клиенты, чем больше клиентов
  • Долгосрочно это может быть лучше для LTV

Риски:

  • Меньше трафика означает менее стабильные данные
  • Если тренд изменится, может быть хуже

Вариант 2: Выбрать Control (сохранить CTR)

Когда:

  • CTR разница статистически значима
  • Бизнес хочет максимизировать объем трансакций
  • Высокий трафик = более стабильные данные
  • Есть сомнения в качестве данных Variant

Аргументы:

  • Больше трафика = больше данных = более предсказуемые результаты
  • Для платформ типа e-commerce объем часто важнее
  • Низкий CTR может означать, что меньше людей видят ценность

Риски:

  • Упускаем потенциальное увеличение дохода

Вариант 3: Гибридное решение

Когда:

  • Обе метрики важны
  • Нужна более длинная статистика
  • Хочешь понять причины различия

Действия:

  • Продолжи тест еще на неделю-две
  • Проанализируй когорты пользователей
  • Посмотри на другие метрики (retention, repeat purchase rate)

Шаг 5: Мой рекомендуемый подход

Я бы действовал так:

1. Проверка статистики (1 час)

from scipy import stats

# CTR тест
control_ctr = 0.05
variant_ctr = 0.04
control_n = 10000
variant_n = 10000

control_clicks = int(control_ctr * control_n)
variant_clicks = int(variant_ctr * variant_n)

# Chi-square тест
oddsratio, p_value = stats.chi2_contingency(
    [[control_n - control_clicks, control_clicks],
     [variant_n - variant_clicks, variant_clicks]]
)[2:]

if p_value < 0.05:
    print("CTR разница значима")
else:
    print("CTR разница незначима")

2. Понимание причин (2-3 часа)

  • Посмотри на сегменты пользователей
  • Анализируй AOV (average order value)
  • Проверь, нет ли аномалий в данных

3. Взвешивание метрик

Практический вес для разных типов бизнеса:

ТипCTR %GMV %Логика
Платформа (e-commerce)4060Объем важен, но доход критичнее
Издатель (реклама)7030Больше кликов = больше impressions
B2B SaaS3070Один качественный контакт лучше 100 плохих

4. Финальное решение

# Пример системы оценок
if p_value_gmv < 0.05 and p_value_ctr >= 0.05:
    # GMV значима, CTR не значима
    decision = "DEPLOY_VARIANT"
    confidence = 0.85
elif p_value_ctr < 0.05 and p_value_gmv >= 0.05:
    # CTR значима, GMV не значима
    decision = "KEEP_CONTROL"
    confidence = 0.80
elif p_value_gmv < 0.05 and ctr_decline > 10:
    # Оба значимы, но большой отрицательный эффект на CTR
    decision = "INVESTIGATE"
    confidence = 0.50
else:
    decision = "CONTINUE_TEST"
    confidence = 0.60

Пример из жизни

В моем опыте я сталкивался с подобной ситуацией:

  • Вариант баннера показывал CTR на 15% ниже
  • Но GMV был на 20% выше
  • После анализа выяснилось: люди кликали по новому баннеру реже, но быстрее находили товар и покупали дороже
  • Мы развернули новый вариант и выигрыш был $50k+ в месяц

Заключение

Мое решение: Я развернул бы Variant, если:

  1. ✅ Обе разницы статистически значимы
  2. ✅ GMV разница больше, чем CTR разница (по модулю)
  3. ✅ AOV выше в варианте
  4. ✅ Нет явных проблем с качеством данных

Если даже один из этих пунктов не выполнен, я бы продолжил тест и провел бы дополнительный анализ.

Главное правило: Никогда не принимай решение на основе одной метрики. Всегда смотри на полную картину.

Какое решение примешь по тесту если CTR хуже, а GMV лучше? | PrepBro