КПКейсПрактика
Все материалы
Продуктовая аналитикакейспродвинутый

Airbnb и эксперименты: как не обмануть себя красивым A/B-тестом

Разбор публичных материалов Airbnb об A/B-тестах: peeking, несколько метрик, marketplace bias и практические правила для продуктовой команды.

КПКейсПрактикаЗапланировано · 30 октября 2026 г.20 мин

Airbnb публикует материалы о том, как проверять интуитивные ошибки в экспериментах и измерять изменения в marketplace. Для читателя из СНГ ценность этих материалов не в копировании конкретных формул, а в привычке задавать неудобные вопросы: что считается exposure, когда можно смотреть результат, как несколько метрик меняют риск и не влияет ли добровольный выбор функции на причинный вывод.

Коротко

A/B-тест выглядит простым только на диаграмме: разделили пользователей, включили вариант, сравнили метрики. На практике ошибки появляются в моменте exposure, длительности, выборе outcome, множественных проверках и пересечении экспериментов.

В marketplace добавляется ещё один слой: пользователь сам выбирает действие, продавцы реагируют на видимость, а изменение может влиять на доступный инвентарь. Поэтому эффект функции нельзя автоматически интерпретировать как эффект самого продукта.

  • Заранее фиксируй stopping rule.
  • Разделяй intent-to-treat и эффект среди adopters.
  • Проверяй метрики до просмотра результата.
  • Учитывай влияние на обе стороны marketplace.

Peeking: проблема не в любопытстве

Посмотреть промежуточные данные иногда необходимо: чтобы остановить вредный rollout или заметить технический сбой. Проблема начинается, когда команда регулярно смотрит на primary metric и останавливает тест в момент «красивого» p-value, продолжая нейтральный тест до удобного результата.

Для СНГ-продукта правило может быть простым: до запуска зафиксировать горизонт, допустимый ранний stop для вреда и метод sequential testing, если остановки по эффективности действительно нужны. История просмотров и решений должна сохраняться.

Два режима просмотра результата
РежимКогда можно остановитьЧто нужно заранее
Fixed horizonпосле заданного окнаsample size, duration
Sequentialпо формальному правилуalpha spending, stopping rule
Safety stopпри вреде guardrailпорог ущерба и owner

Несколько метрик меняют риск решения

Команда редко хочет измерять только одну вещь. Время на сайте, клики, бронирования, возвраты, жалобы и retention могут двигаться в разные стороны. Если посмотреть на двадцать метрик и выбрать одну удачную, вероятность случайного сигнала становится частью дизайна, а не сюрпризом.

Решение должно заранее разделять роли: primary metric отвечает на гипотезу, guardrail защищает качество, diagnostic помогает понять механизм. Не каждая диагностическая метрика должна превращаться в отдельный повод для запуска.

Один uplift и несколько побочных эффектов

Учебный пример: primary metric растёт, но guardrail показывает риск для долгосрочного опыта.

Изменение, %

Добровольное использование не равно причинному эффекту

Если функция доступна всем, но пользуются ей только самые мотивированные, сравнение adopters и остальных не показывает эффект функции. В adopters уже могут быть опыт, интерес, доход или проблема, которую новая функция помогает решать.

Надёжнее сравнивать назначение или приглашение к функции через intent-to-treat. Если нужен эффект именно среди использовавших, нужно отдельно обсуждать causal estimand и допущения, а не называть разницу простой конверсией.

  • Сравнить eligible users и adopters.
  • Проверить baseline до функции.
  • Разделить invitation, exposure и adoption.
  • Не делать вывод по self-selected сегменту.

Практика: написать design до запуска

Составь короткий design для изменения поиска или checkout: unit рандомизации, exposure, primary, guardrails, окно, MDE, stopping rule и список возможных пересечений с другими тестами. Затем попроси коллегу найти в нём ситуацию, в которой вывод будет неверен.

Такой review полезнее ещё одной лекции о p-value. Он заставляет связать статистику с реальным интерфейсом, данными и решением после эксперимента.

sqlПроверить долю adopters внутри вариантов
SELECT variant, COUNT(DISTINCT user_id) AS assigned_users, COUNT(DISTINCT user_id) FILTER (WHERE adopted_at IS NOT NULL) AS adopters, COUNT(DISTINCT user_id) FILTER (WHERE adopted_at IS NOT NULL)::numeric / NULLIF(COUNT(DISTINCT user_id), 0) AS adoption_rate
FROM experiment_users
GROUP BY variant;

Как переносить урок на СНГ

Для малого продукта не требуется повторять весь research stack Airbnb. Но обязательны три привычки: не менять метрику после запуска, отделять добровольное использование от назначения и заранее описывать, какой вред нельзя пропустить.

Для маркетплейса добавь второй вопрос: не улучшился ли результат за счёт другой стороны? Рост кликов на карточку может означать больше пустых переходов для продавцов, а ускорение сделки — рост возвратов позже.

Вывод для команды

Сильный A/B-тест — это не таблица с зелёной стрелкой. Это согласованный способ отличить эффект изменения от состава аудитории, времени, случайного сигнала и реакции других участников системы.

Если команда умеет заранее назвать, что может обмануть её, качество решений растёт быстрее, чем от попытки сделать каждый тест сложнее. В этом и есть практический урок публичных материалов Airbnb.

Как превратить публичный факап в рабочий процесс

История «Airbnb и эксперименты: как не обмануть себя красивым A/B-тестом» полезна только тогда, когда превращается в конкретный способ работы. Не начинай с вывода «у нас такого не случится». Сначала выпиши объект измерения, решение, которое зависит от сигнала, и момент, когда ошибка становится дорогой. Для прогноза это может быть закупка, для эксперимента — rollout, для дашборда — изменение бюджета или приоритета команды.

Затем раздели контроль на три уровня. Первый отвечает за данные: событие дошло, справочник не изменился молча, даты и часовые пояса совпадают. Второй отвечает за расчёт: формула, фильтры, дедупликация и версия модели воспроизводимы. Третий отвечает за решение: есть порог, владелец и понятное действие, если сигнал оказался ненадёжным.

Такой разбор помогает не копировать масштаб крупной компании. В локальном продукте может не быть отдельной платформы экспериментов или команды исследователей, но может быть короткий design document, SQL-проверка, журнал изменений и еженедельный review отклонений. Этого достаточно, чтобы снизить самые дорогие ошибки до появления сложной инфраструктуры.

  • Назвать outcome и бизнес-решение.
  • Отделить прокси от фактического результата.
  • Зафиксировать baseline и период проверки.
  • Назначить владельца сигнала и fallback.
  • Сохранить версию расчёта и историю решений.

Минимальный контур данных для команды в СНГ

Даже небольшой команде нужен не «озеро данных», а несколько устойчивых слоёв. События и операционные записи должны храниться отдельно от производных метрик. Витрина для отчёта не должна становиться единственным архивом: иначе любое исправление формулы перепишет прошлое, и команда потеряет возможность объяснить расхождение.

Для каждого сигнала заведи паспорт: название, определение, grain, источник, окно, исключения, owner, дата последней проверки и известные ограничения. Если речь о модели, добавь target, момент доступности признаков, версию датасета, baseline и метрики по ключевым сегментам. Если речь об эксперименте, добавь unit, exposure, eligibility, primary и guardrails.

Проверки можно начать обычным SQL и небольшим Python-скриптом. Важна не сложность инструмента, а регулярность: результат должен попадать в журнал, а не исчезать в ноутбуке аналитика. Отдельно логируй ручные решения, потому что именно они объясняют, почему команда продолжила, остановила или изменила автоматизацию.

Минимальный паспорт аналитического сигнала
ПолеПример значенияЗачем нужно
Outcomeоплаченный заказ / defaultне перепутать proxy и результат
Grainuser-day / experiment-userзнать единицу расчёта
Baselinelast period / simple ruleвидеть добавочную ценность
Ownerаналитик + PMпонимать, кто принимает действие
Fallbackручная проверка / старое правилоограничить ущерб при сбое

Как принять решение после сигнала

Плохой аналитический процесс заканчивается цифрой: «ошибка выросла» или «вариант победил». Хороший процесс заканчивается решением с ограничениями: что меняем, на каком сегменте, на какой срок, какой показатель будет следить за побочным эффектом и при каком условии вернёмся к прежнему правилу.

Для неоднозначного результата полезно разделить три действия. Диагностический режим — не менять продукт, а собрать дополнительную проверку. Ограниченный rollout — применить решение к небольшой доле трафика или суммы. Полный запуск — только когда baseline, качество данных и экономический эффект согласованы. Это особенно важно для моделей, которые принимают последовательные решения и накапливают риск.

В отчёте явно помечай, где заканчивается факт источника и начинается адаптация под локальный бизнес. Публичная статья может описывать технический инструмент, но не знать внутренних ограничений компании. Твоя задача как аналитика — не придумать красивую причинность, а показать, какие данные подтвердят или опровергнут рабочую гипотезу.

  • Что мы знаем точно?
  • Какая гипотеза объясняет сигнал?
  • Какой следующий тест дешевле всего?
  • Какой guardrail остановит решение?
  • Когда и кто пересмотрит результат?

Источники и границы адаптации

Это не перевод исходных публикаций и не попытка выдать внутренние процессы компании за полную картину. Мы берём публично описанные факты, выделяем аналитическую механику и переносим её на задачи команд в СНГ: продуктовые метрики, маркетплейсы, SaaS, e-commerce и внутренние системы.

Публичный кейс почти всегда неполон: компания показывает удачный фрагмент, а независимый разбор добавляет ограничения. Поэтому отделяй подтверждённый факт от нашей рабочей гипотезы и проверяй переносимость решения на собственные данные.

Продолжить чтение
Вся библиотека