Как провести A/B-тест изменения дизайна кнопки «Купить»?

«Как провести A/B-тест изменения дизайна кнопки «Купить»?» — вопрос из категории Аналитика и метрики, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моем опыте A/B-тестирования UI-элементов, тест кнопки "Купить" строится на четкой гипотезе: "Новый дизайн (например, более контрастный цвет) увеличит конверсию в покупку на X%".

План теста:

  1. Определение метрик:
    • Основная: Конверсия клики на кнопку / уникальные посетители страницы товара.
    • Вторичные: Средний чек, глубина корзины, bounce rate со страницы.
  2. Сегментация и сплит: Трафик делится случайно 50/50 (A — контроль, B — вариация). Важно исключить влияние других факторов (например, параллельных маркетинговых кампаний).
  3. Сбор данных: Инструментируем логирование через событийную аналитику (например, Яндекс.Метрика, Google Analytics 4, Amplitude). Ключевое событие — purchase_button_click с параметрами variant (A/B) и session_id.
  4. Статистический анализ: После сбора достаточного объема данных (рассчитывается через калькулятор мощности теста) проверяем значимость.

Пример анализа на Python:

import pandas as pd
import scipy.stats as stats
import numpy as np

# Данные за период теста
data = pd.DataFrame({
    'variant': ['A']*10000 + ['B']*10000,
    'converted': np.concatenate([
        np.random.binomial(1, 0.12, 10000),  # Конверсия 12% для A
        np.random.binomial(1, 0.135, 10000) # Конверсия 13.5% для B
    ])
})

# Сводная таблица для хи-квадрат
contingency = pd.crosstab(data['variant'], data['converted'])
chi2, p_value, dof, expected = stats.chi2_contingency(contingency)

print(f"Конверсия A: {data[data.variant=='A'].converted.mean():.3%}")
print(f"Конверсия B: {data[data.variant=='B'].converted.mean():.3%}")
print(f"p-value: {p_value:.4f}")
print(f"Результат: {'Статистически значимо' if p_value < 0.05 else 'Нет значимой разницы'}")

Важные нюансы: Длительность теста должна охватывать полный бизнес-цикл (неделя/месяц), чтобы учесть поведение в разные дни. Также нужно проверить однородность сплита по другим параметрам (источник трафика, устройство).