Doppy · PostHog A/B Experiment · Feature Flag

ANDROID_POST_REGISTRATION_DEEPLINK

Период: 19 июня – 14 июля 2026 (26 дней) Снапшот: 15.07.2026 Сплит: 50 / 50 Статус: LIVE — эксперимент официально запущен 06.07 в PostHog («STREAK / Wallet after reg»). Назначение арм непрерывно с 18.06, перезапуск = формальная регистрация эксперимента, НЕ сброс когорты. По деньгам ведёт control (CR −0.54 п.п., z=1.20, p≈0.23 — незначимо; разрыв сузился после сильного дня теста 14.07) Метод: PostHog events + transactions + Firebase (ClickHouse), атрибуция по арм-мапу
Пользователей control
8 588
balance экран
Пользователей test
8 620
wallet/streak экран
Покупки · CR
−0.54 пп
6.73% → 6.19% (z=1.2, н/з)
ARPPU (выручка / покупатель)
−7.2%
$8.35 → $7.75
WhyBuyGlasses slides / юзер
+99%
22.1 → 44.0
Publish_Tap / юзер
+7.9%
13 355 → 14 468 событий
Control
deeplink → "balance"
После регистрации — экран баланса кошелька
Юзеров8 588
Событий6 632 675
Событий / юзер772.3
Test
deeplink → "wallet/streak"
После регистрации — экран streak-трекера
Юзеров8 620
Событий6 855 758
Событий / юзер795.3
Вовлечённость
общие показатели активности
Метрика Control Test Δ
Событий / юзер 772.3 795.3 +3.0%
Сессий / юзерSession_Start 19.98 20.22 +1.2%
Feed открытий / юзерFeed_Open 30.95 32.18 +4.0%
Media_View / юзер 205.7 204.9 −0.4%
Earn_Tap / юзер 6.78 6.75 −0.4%
Создание контента
видеозапись и публикация
Метрика Control Test Δ событий Δ / юзер
VideoCapture_Appear 64 663 69 371 +4 708 +6.9%
Publish_Appear 13 519 14 637 +1 118 +7.9%
Publish_Tap 13 355 14 468 +1 113 +7.9%
Create_Tap 16 751 17 727 +976 +5.4%
Воронка WhyBuyGlasses
ключевой сигнал теста
+99%
Одинаковое число юзеров, в 2.0× больше слайдов
До экрана WhyBuyGlasses доходит практически одинаковое число уникальных пользователей в обеих группах (2 096 vs 2 019). Но тестовая группа просматривает 44.0 слайда в среднем против 22.1 в контроле. Эффект устойчиво держится всё время теста: streak-контекст делает оффер очков более релевантным — пользователи глубже изучают ценностное предложение, но в покупки это по-прежнему не конвертирует.
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ событий
WhyBuyGlasses_Appear 4 200 2 096 4 436 2 019 +5.6%
WhyBuyGlasses_SlideView 45 847 2 073 87 927 2 000 +92%
WhyBuyGlasses_Swipe 41 735 1 883 83 597 1 823 +100%
Slides / engaged user 22.1 44.0 +99%
WhyBuyGlasses_Close_Tap 2 077 1 376 2 236 1 353 +7.7%
Монетизация (Market & Offer)
воронка покупки бустов · % — доля от дошедших до маркета (Market_Appear uniq)
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ юзеров
Market_Appear 32 679 5 882 30 996 5 928 +0.8% юзеров
MyProfile_Boost_Appear 29 216 2 864 31 858 2 865 +0.0% юзеров
Market_Checkout_Appear 5 679 2 317 (39.4%) 6 021 2 434 (41.1%) +5.0% юзеров
Market_Checkout_Buy_Tapобщее число нажатий «купить» 2 255 1 227 (20.9%) 2 111 1 282 (21.6%) +4.5% юзеров
Offer_Glasses_Appear 4 879 2 217 4 837 2 238 +0.9% юзеров
Offer_Glasses_Buy_Tap 3 166 1 648 3 186 1 702 +3.3% юзеров
Streak активность
геймификация серий
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ / юзер
LongStreak_Banner_Tap 8 632 2 474 9 860 2 469 +13.8%
LongStreak_Watch_Tap 3 190 1 133 3 826 1 136 +19.5%
ShortStreak_Widget_Tap 5 720 2 685 5 987 2 699 +4.3%
Onboarding_StreakWarning_Appear 2 488 1 281 2 586 1 310 +3.6%
Onboarding_Congratulations_Appear 3 747 3 603 3 736 3 592 −0.7%
Retention D1 / D3 / D7 / D14
когорта 19 июня (1 116 vs 1 135 юзеров) — Firebase user_id → backend uid, strict day-N + rolling (R20), любое событие = активность
+3.0 pp
Небольшой плюс теста на strict и rolling — но значимости по-прежнему нет
Когорта 19 июня: 1 116 control и 1 135 test. По strict day-N тест выше на всех горизонтах — D1 +3.0 пп (z=1.46), D3 +0.9 пп, D7 +0.7 пп (z=0.36), D14 +1.1 пп (z=0.59) — но ни одна дельта не значима. По rolling («вернулся хотя бы раз к дню N») дельты малы: rD3 +1.3 пп, rD7 +0.4 пп, rD14 +1.2 пп — тест чуть выше и там, но в пределах шума. Значимого эффекта на удержание тест не даёт. Firebase-экспорт полон по 14.07 — для когорты 19 июня зрелы все окна, включая D14 (03.07).
День Control (1 116 юзеров) Control % Test (1 135 юзеров) Test % Δ (п.п.) Δ (относит.)
D0 (19 июн) 1 116 100% 1 135 100%
D1 (20 июн) 612 54.8% 657 57.9% +3.0 pp · н/з +5.6%
D3 (22 июн) 503 45.1% 522 46.0% +0.9 pp · н/з +2.0%
D7 (26 июн) 395 35.4% 410 36.1% +0.7 pp · н/з +2.1%
D14 (3 июл) 307 27.5% 325 28.6% +1.1 pp · н/з +4.1%
Rolling retention (вернулся хотя бы раз к дню N) · R20
та же когорта, один знаменатель; активен ≥1 раз в интервале [D1 … DN]
День Control % Test % Δ (п.п.)
roll D1 54.8% 57.9% +3.0 pp
roll D3 70.3% 71.5% +1.3 pp
roll D7 79.2% 79.6% +0.4 pp
roll D14 85.4% 86.6% +1.2 pp
Реальные покупки (transactions · R16-якорь)
DoppyEvents.transactions · Jun 19 – Jul 14 · transaction_type=marketplace_purchase_buyer, purchase_type=external, fiat_asset≠'' · дедуп LIMIT 1 BY transaction_id · is_fraud НЕ фильтруется (R5/B7 — в transactions его нет) · арм по арм-мапу → backend uid · CR/ARPU от дошедших до маркета (Market_Appear uniq): 5 882 / 5 928
−7.2%
Контроль ведёт по деньгам — но разрыв сузился после сильного дня теста 14.07
Данные по 14.07, transactions-якорь (R16), без фрод-фильтра (R5). Control: 396 покупателей, $3 306 выручки. Test: 367 покупателей, $2 844. Покупателей у теста меньше (−7.3%). CR от дошедших до маркета 6.73% vs 6.19% (−0.54 п.п., z=1.20, p≈0.23 — незначимо). ARPPU $8.35 vs $7.75 (−7.2%), ARPU/дошедшего $0.562 vs $0.480. Разрыв заметно сузился за день: 14.07 на фоне притока трафика тест собрал 49 покупателей против 33 у контроля (было −0.86 п.п. CR и z=1.88 на 13.07). Армы geo близки к балансу — разрыв ARPPU в основном не страновой артефакт. 18 покупателей без арма ($111) вынесены в unattributed и в разрез не входят.
Метрика Control (5 882 дошли до маркета) Test (5 928 дошли до маркета) Δ
Уникальных покупателейпервичные + вернувшиеся 396 367 −7.3%
— первичных (первая покупка в жизни) 384 355 −7.6%
— вернувшихся (покупали раньше) 12 12 ±0
CR покупки (покупатели / дошли до маркета) 6.73% 6.19% −0.54 pp · z=1.20 · p≈0.23
Выручка (fiat, USD-экв.) $3 306.39 $2 844.31 −14.0%
ARPPU (выручка / покупатель)основная денежная метрика $8.35 $7.75 −7.2%
ARPU (выручка / дошедшего до маркета) $0.562 $0.480 −14.6%
Покупок всего, штпервичные + повторные 413 380 −8.0%
— повторных покупок, шт 17 13 −23.5%
Разбивка по категории продукта
Категория Control — кол-во Control — выручка Test — кол-во Test — выручка
regularglasses / буст (is_glasses_purchase=1) 383 $3 251.49 348 $2 791.53
specialidentity_approve + video_promotion 30 $54.90 32 $52.78
GEO-разрез: страновой микс арма (проверка конфаунда ARPPU)
уник. юзеров арма по $geoip_country_code (PostHog) — модальная страна по Session_Start (серверные батчи ресолвятся в DE и искажают last-seen гео) — топ-6
Страна Control (юзеров) Test (юзеров)
🇳🇬 Nigeria1 5631 613
🇪🇸 Spain795781
🇵🇰 Pakistan742674
🇮🇹 Italy653575
🇺🇸 USA612593
🇫🇷 France436445
Микс стран между армами сбалансирован (рандомизация сработала): топ-страны почти совпадают (макс. перекос — Italy +78 юзеров у control, <1% арма). Значит разрыв ARPPU (−7.2%) — не артефакт странового состава, а реальная разница в монетизации.
DAU по дням
уникальные пользователи с Session_Start в каждой группе (клиентский сигнал; серверные батчи не учитываются)
Control (balance) Test (wallet/streak)

Выводы

01
Retention: небольшой плюс теста, значимости нет. По strict day-N (Firebase user_id → backend uid, когорта 19 июня, 1 116 vs 1 135) тест выше на всех горизонтах: D1 +3.0 пп (54.8% vs 57.9%, z=1.46), D3 +0.9 пп, D7 +0.7 пп (z=0.36), D14 +1.1 пп (z=0.59) — но ни одна дельта не значима. По rolling («вернулся хотя бы раз к дню N», R20) дельты малы: rD3 +1.3 пп, rD7 +0.4 пп, rD14 +1.2 пп. Значимого эффекта на удержание нет.
02
Реальные покупки: контроль впереди по деньгам, но разрыв сужается. 396 покупателей vs 367 (−7.3%), CR от дошедших до маркета 6.73% vs 6.19% (Δ−0.54 п.п., z=1.20, p≈0.23 — незначимо). Выручка $3 306 vs $2 844 (−14.0%), ARPPU $8.35 vs $7.75 (−7.2%), ARPU/дошедшего $0.562 vs $0.480. Первичных покупателей 384 vs 355, повторных покупок 17 vs 13. За 14.07 на фоне притока трафика тест собрал 49 покупателей против 33 — z упал с 1.88 до 1.20 за один день. Якорь — DoppyEvents.transactions (R16), дедуп LIMIT 1 BY transaction_id, is_fraud не фильтруется (R5/B7). Армы geo-сбалансированы — разрыв не страновой.
03
WhyBuyGlasses: одинаковый охват, ×2.0 глубина просмотра. До экрана доходит близкое число юзеров (2 096 vs 2 019). Но тест просматривает 44.0 слайда vs 22.1 в control (+99%) — эффект стабилен всё время теста. Streak-контекст делает оффер релевантным, но в покупки это по-прежнему не конвертирует.
04
Создание контента: тест стабильно сильнее. Publish_Tap +7.9%/юзер, VideoCapture_Appear +6.9%, Create_Tap +5.4%. Streak-механика мотивирует снимать видео. Если приоритет — UGC-supply и creator pipeline, тест лучше.
05
Итоговый trade-off: деньги против supply. Тест → больше контента (+8% публикаций/юзер), глубже изучает оффер (WBG ×2.0), чуть выше strict-retention (незначимо); вовлечённость на уровне или чуть выше контроля (события +3.0%, сессии +1.2%, feed +4.0%, media −0.4%). Контроль → деньги: ARPPU +7.7% выше, больше покупателей, выше CR (Δ+0.54 п.п. в пользу контроля, незначимо) — но за последний день разрыв заметно сузился. Если решать по выручке — контроль; если по UGC-supply — тест.
06
Осторожно с интерпретацией. Флаг применён ко ВСЕМ пользователям (не только новые регистрации), когорта retention — существующие активные юзеры. Армы: 8 588 control / 8 620 test (assigned = активны в окне). События атрибутированы джойном по арм-мапу (арм — свойство юзера), БЕЗ требования флага на каждом событии: иначе Session_Start и ранние события сессии занижаются почти вдвое. DAU по Session_Start, чтобы серверные батчи не искажали кривую. С 10.07 идёт приток трафика (DAU выросло с ~1 000 до ~1 300 на арм) — свежие дни весят больше в оконных метриках.
Источники данных (снапшот 15.07.2026, окно Jun 19 – Jul 14, арм-мап с 18.06): PostHog events → DoppyEvents.posthog_events_message. Арм-мап = argMax($feature/ANDROID_POST_REGISTRATION_DEEPLINK по event_date), identity = distinct_id 24-hex = backend uid, 17 208 юзеров (8 588 / 8 620); события/воронки атрибутированы джойном по арм-мапу без флаг-фильтра. Retention → DoppyEvents.firebase_doppy_raw (user_id → backend uid = splitByString(':',user_id)[1], любое событие = активность, когорта Jun 19, strict day-N + rolling R20; экспорт полон по Jul 14 — зрелы D1/D3/D7 и D14). Покупки → DoppyEvents.transactions (R16-якорь: transaction_type=marketplace_purchase_buyer, purchase_type=external, fiat_asset≠'', дедуп LIMIT 1 BY transaction_id; is_fraud НЕ фильтруется per R5/B7 — в transactions его нет; знаменатель CR — Market_Appear reachers 5 882 / 5 928; 18 покупателей unattributed, $111). GEO из $geoip_country_code — модальная страна по Session_Start (серверные события ресолвятся в DE). Эксперимент зарегистрирован в PostHog 06.07 («STREAK / Wallet after reg»), флаг активен, тест продолжается. CH-запросы через HTTP-интерфейс (curl) с прокинутым арм-мапом как external table.