Network effects и A/B-тесты
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это знать
В соцсетях, marketplace, два-sided платформах обычный A/B работает плохо: treatment group влияет на control через взаимодействия. Netflix, Meta, Uber потратили годы на разработку специальных методов.
На собесах middle+ в таких компаниях обязательно спросят: «как тестировать фичу в соцсети?». Ответ «обычный A/B» — неправильный.
Проблема
Обычный A/B полагается на SUTVA: stable unit treatment value assumption.
SUTVA говорит: эффект на юзера зависит только от его treatment, не от treatment других.
В network:
- Новый фиче в Facebook у 50% — они постят больше → видят контент и control
- Скидка у 50% клиентов Uber — изменяет availability для всех
SUTVA нарушено → A/B estimate biased.
Примеры нарушений
Spillover
Treatment влияет на control.
Пример: новый ranking ИИ показал лучший контент в лентах treatment. Control users видят посты treatment users → тоже engage больше.
Cannibalization
Treatment забирает у control.
Пример: discount для 50% водителей Uber → они ездят больше, control водители имеют меньше заказов.
Two-sided markets
Изменения для buyers влияют на sellers и vice versa.
Решения
1. Cluster-randomized
Вместо users — случаем группы (города, communities). Эффект меряется на уровне cluster.
Плюсы: убирает spillover внутри cluster. Минусы: нужно много clusters, иначе мало power.
2. Switchback
Randomize по времени: неделя treatment, неделя control, alternating.
Плюсы: одна группа переживает оба treatment. Минусы: carryover effects, трендовые смещения.
3. Ego-cluster
Clusters = ego network (user + friends). Unit treatment = whole cluster.
Плюсы: учитывает social graph. Минусы: сложно реализовать.
4. Geo experiments
Geographic units как clusters. Classic для Uber, Lyft, marketplace.
Плюсы: natural clustering. Минусы: ограниченное число регионов.
5. Budget splitting
Split budget / inventory между treatment и control (для two-sided).
Cluster-randomized detail
1. Выбрать cluster definition (geo, community, ego-network)
2. Random assignment clusters в A vs B
3. Aggregate metric per cluster
4. T-test на cluster-level meansНаследование
Важный параметр — ICC (intra-class correlation): насколько units в cluster похожи.
Высокий ICC → меньше effective sample size → нужно больше clusters.
В Python
import numpy as np
from scipy.stats import ttest_ind
# Aggregated per cluster
treatment_cluster_means = [0.12, 0.15, 0.11, ...]
control_cluster_means = [0.10, 0.09, 0.11, ...]
stat, p = ttest_ind(treatment_cluster_means, control_cluster_means)Когда обычный A/B всё же ok
- Isolated users (little interaction)
- Content features (не social)
- Individual UX (не marketplace)
- Effects не transmit через network
Real-world кейсы
LinkedIn — People You May Know
Recommended friends в сети — huge network effects. LinkedIn использует ego-cluster randomization.
Facebook — News Feed
Меняет что посты показывают → спилловер массивный. Cluster-based + switchback.
Uber — pricing
Surge pricing affects supply/demand. Geographic experiments + switchback.
Airbnb
Ranking changes affect bookings → affects supply. Market-level experiments.
На собесе
«Почему A/B не работает в соцсетях?» Нарушение SUTVA из-за spillover.
«Как решать?» Cluster-randomized, switchback, geo experiments.
«Что такое SUTVA?» Treatment эффект на юзера зависит только от его treatment.
«Trade-off cluster-randomized?» Меньше статистической power (effective N = clusters).
Частые ошибки
Игнорировать spillover
В marketplace/social — частая ошибка. Результат biased.
Малое число clusters
10 clusters — очень мало. Нужно 30+.
Carryover в switchback
Неделя treatment «запоминается» юзерами. Нужен wash-out period.
Связанные темы
FAQ
Cluster-randomized в малых компаниях?
Сложно, т.к. мало clusters. Лучше switchback или accept bias.
Switchback какой длительности?
Часто day-level, depend на carryover.
Как определять cluster?
Geo, community detection, ego network — в зависимости от природы product.
Тренируйте A/B — откройте тренажёр с 1500+ вопросами для собесов.