Doppy · PostHog A/B Experiment · Feature Flag

ANDROID_POST_REGISTRATION_DEEPLINK

Период: 19 июня – 15 июля 2026 (27 дней) Снапшот: 17.07.2026 Сплит: 50 / 50 Статус: LIVE — эксперимент официально запущен 06.07 в PostHog («STREAK / Wallet after reg»). Назначение арм непрерывно с 18.06, перезапуск = формальная регистрация эксперимента, НЕ сброс когорты. По деньгам ведёт control (CR −0.70 п.п., z=1.56, p≈0.12 — незначимо). ⚠️ Окно удержано на 15.07: день 16.07 исключён — сбой раскатки флага (test-арм назначен вдвое реже: 3 149 control vs 1 490 test за день против баланса 13–15.07) Метод: PostHog events + transactions + Firebase (ClickHouse), атрибуция по арм-мапу
Пользователей control
9 007
balance экран
Пользователей test
8 934
wallet/streak экран
Покупки · CR
−0.70 пп
6.90% → 6.20% (z=1.6, н/з)
ARPPU (выручка / покупатель)
−7.6%
$8.47 → $7.82
WhyBuyGlasses slides / юзер
+85%
22.3 → 41.2
Publish_Tap / юзер
+12.6%
13 500 → 15 083 событий
Control
deeplink → "balance"
После регистрации — экран баланса кошелька
Юзеров9 007
Событий6 879 717
Событий / юзер763.8
Test
deeplink → "wallet/streak"
После регистрации — экран streak-трекера
Юзеров8 934
Событий7 034 939
Событий / юзер787.4
Вовлечённость
общие показатели активности
Метрика Control Test Δ
Событий / юзер 763.8 787.4 +3.1%
Сессий / юзерSession_Start 19.45 19.97 +2.7%
Feed открытий / юзерFeed_Open 31.09 32.05 +3.1%
Media_View / юзер 196.0 196.4 +0.2%
Earn_Tap / юзер 6.59 6.61 +0.2%
Создание контента
видеозапись и публикация
Метрика Control Test Δ событий Δ / юзер
VideoCapture_Appear 65 925 71 963 +6 038 +10.1%
Publish_Appear 13 679 15 240 +1 561 +12.3%
Publish_Tap 13 500 15 083 +1 583 +12.6%
Create_Tap 16 841 18 317 +1 476 +9.7%
Воронка WhyBuyGlasses
ключевой сигнал теста
+85%
Одинаковое число юзеров, в 1.9× больше слайдов
До экрана WhyBuyGlasses доходит практически одинаковое число уникальных пользователей в обеих группах (2 144 vs 2 075). Но тестовая группа просматривает 41.2 слайда в среднем против 22.3 в контроле. Эффект устойчиво держится всё время теста: streak-контекст делает оффер очков более релевантным — пользователи глубже изучают ценностное предложение, но в покупки это по-прежнему не конвертирует.
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ событий
WhyBuyGlasses_Appear 4 285 2 144 4 516 2 075 +5.4%
WhyBuyGlasses_SlideView 47 252 2 123 84 808 2 057 +79%
WhyBuyGlasses_Swipe 43 045 1 926 80 392 1 870 +87%
Slides / engaged user 22.3 41.2 +85%
WhyBuyGlasses_Close_Tap 2 120 1 411 2 293 1 398 +8.2%
Монетизация (Market & Offer)
воронка покупки бустов · % — доля от дошедших до маркета (Market_Appear uniq)
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ юзеров
Market_Appear 32 931 6 083 31 892 6 077 −0.1% юзеров
MyProfile_Boost_Appear 30 199 2 955 32 839 2 940 −0.5% юзеров
Market_Checkout_Appear 5 592 2 321 (38.2%) 6 037 2 418 (39.8%) +4.2% юзеров
Market_Checkout_Buy_Tapобщее число нажатий «купить» 2 205 1 219 (20.0%) 2 092 1 260 (20.7%) +3.4% юзеров
Offer_Glasses_Appear 4 875 2 277 4 862 2 249 −1.2% юзеров
Offer_Glasses_Buy_Tap 3 162 1 693 3 166 1 706 +0.8% юзеров
Streak активность
геймификация серий
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ / юзер
LongStreak_Banner_Tap 8 773 2 540 10 071 2 541 +15.7%
LongStreak_Watch_Tap 2 890 1 042 3 501 1 069 +22.1%
ShortStreak_Widget_Tap 5 653 2 725 5 978 2 756 +6.6%
Onboarding_StreakWarning_Appear 2 240 1 154 2 377 1 208 +7.0%
Onboarding_Congratulations_Appear 3 852 3 716 3 808 3 660 −0.3%
Retention D1 / D3 / D7 / D14
когорта 19 июня (1 115 vs 1 140 юзеров) — Firebase user_id → backend uid, strict day-N + rolling (R20), любое событие = активность
+3.1 pp
Небольшой плюс теста на strict и rolling — но значимости по-прежнему нет
Когорта 19 июня: 1 115 control и 1 140 test. По strict day-N тест выше на всех горизонтах — D1 +3.1 пп (z=1.48), D3 +0.3 пп, D7 +0.9 пп (z=0.44), D14 +1.7 пп (z=0.89) — но ни одна дельта не значима. По rolling («вернулся хотя бы раз к дню N») дельты малы: rD3 +1.1 пп, rD7 +0.2 пп, rD14 +1.1 пп — тест чуть выше и там, но в пределах шума. Значимого эффекта на удержание тест не даёт. Firebase-экспорт полон по 16.07 — для когорты 19 июня зрелы все окна, включая D14 (03.07).
День Control (1 115 юзеров) Control % Test (1 140 юзеров) Test % Δ (п.п.) Δ (относит.)
D0 (19 июн) 1 115 100% 1 140 100%
D1 (20 июн) 610 54.7% 659 57.8% +3.1 pp · н/з +5.7%
D3 (22 июн) 505 45.3% 520 45.6% +0.3 pp · н/з +0.7%
D7 (26 июн) 393 35.2% 412 36.1% +0.9 pp · н/з +2.5%
D14 (3 июл) 303 27.2% 329 28.9% +1.7 pp · н/з +6.2%
Rolling retention (вернулся хотя бы раз к дню N) · R20
та же когорта, один знаменатель; активен ≥1 раз в интервале [D1 … DN]
День Control % Test % Δ (п.п.)
roll D1 54.7% 57.8% +3.1 pp
roll D3 70.2% 71.3% +1.1 pp
roll D7 79.2% 79.4% +0.2 pp
roll D14 85.3% 86.4% +1.1 pp
Реальные покупки (transactions · R16-якорь)
DoppyEvents.transactions · Jun 19 – Jul 15 · 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): 6 083 / 6 077
−7.6%
Контроль ведёт по деньгам — стабильно, но незначимо
Данные по 15.07, transactions-якорь (R16), без фрод-фильтра (R5). Control: 420 покупателей, $3 558 выручки. Test: 377 покупателей, $2 950. Покупателей у теста меньше (−10.2%). CR от дошедших до маркета 6.90% vs 6.20% (−0.70 п.п., z=1.56, p≈0.12 — незначимо). ARPPU $8.47 vs $7.82 (−7.6%), ARPU/дошедшего $0.585 vs $0.485. Армы geo близки к балансу — разрыв ARPPU в основном не страновой артефакт. 18 покупателей без арма ($108) вынесены в unattributed и в разрез не входят. ⚠️ День 16.07 исключён: сбой раскатки флага (control 3 149 vs test 1 490 назначенных за день против баланса 13–15.07) раздул бы control-арм низкотенюрными юзерами — окно удержано на 15.07.
Метрика Control (6 083 дошли до маркета) Test (6 077 дошли до маркета) Δ
Уникальных покупателейпервичные + вернувшиеся 420 377 −10.2%
— первичных (первая покупка в жизни) 407 364 −10.6%
— вернувшихся (покупали раньше) 13 13 ±0
CR покупки (покупатели / дошли до маркета) 6.90% 6.20% −0.70 pp · z=1.56 · p≈0.12
Выручка (fiat, USD-экв.) $3 557.81 $2 949.78 −17.1%
ARPPU (выручка / покупатель)основная денежная метрика $8.47 $7.82 −7.6%
ARPU (выручка / дошедшего до маркета) $0.585 $0.485 −17.0%
Покупок всего, штпервичные + повторные 437 391 −10.5%
— повторных покупок, шт 17 14 −17.6%
Разбивка по категории продукта
Категория Control — кол-во Control — выручка Test — кол-во Test — выручка
regularglasses / буст (is_glasses_purchase=1) 404 $3 498.24 359 $2 897.00
specialidentity_approve + video_promotion 33 $59.57 32 $52.78
GEO-разрез: страновой микс арма (проверка конфаунда ARPPU)
уник. юзеров арма по $geoip_country_code (PostHog) — модальная страна по Session_Start (серверные батчи ресолвятся в DE и искажают last-seen гео) — топ-6
Страна Control (юзеров) Test (юзеров)
🇳🇬 Nigeria1 6661 691
🇪🇸 Spain803787
🇵🇰 Pakistan759667
🇮🇹 Italy657581
🇺🇸 USA637608
🇫🇷 France440452
Микс стран между армами сбалансирован (рандомизация сработала): топ-страны почти совпадают (макс. перекос — Pakistan +92 юзера у control, ~1% арма). Значит разрыв ARPPU (−7.7%) — не артефакт странового состава, а реальная разница в монетизации.
DAU по дням
уникальные пользователи с Session_Start в каждой группе (клиентский сигнал; серверные батчи не учитываются)
Control (balance) Test (wallet/streak)

Выводы

01
Retention: небольшой плюс теста, значимости нет. По strict day-N (Firebase user_id → backend uid, когорта 19 июня, 1 115 vs 1 140) тест выше на всех горизонтах: D1 +3.1 пп (54.7% vs 57.8%, z=1.48), D3 +0.3 пп, D7 +0.9 пп (z=0.44), D14 +1.7 пп (z=0.89) — но ни одна дельта не значима. По rolling («вернулся хотя бы раз к дню N», R20) дельты малы: rD3 +1.1 пп, rD7 +0.2 пп, rD14 +1.1 пп. Значимого эффекта на удержание нет.
02
Реальные покупки: контроль впереди по деньгам, стабильно и незначимо. 420 покупателей vs 377 (−10.2%), CR от дошедших до маркета 6.90% vs 6.20% (Δ−0.70 п.п., z=1.56, p≈0.12 — незначимо). Выручка $3 558 vs $2 950 (−17.1%), ARPPU $8.47 vs $7.82 (−7.6%), ARPU/дошедшего $0.585 vs $0.485. Первичных покупателей 407 vs 364, повторных покупок 17 vs 14. Якорь — DoppyEvents.transactions (R16), дедуп LIMIT 1 BY transaction_id, is_fraud не фильтруется (R5/B7). Армы geo-сбалансированы — разрыв не страновой. День 16.07 исключён из окна — сбой раскатки флага (control 3 149 vs test 1 490 назначенных за день).
03
WhyBuyGlasses: одинаковый охват, ×1.9 глубина просмотра. До экрана доходит близкое число юзеров (2 142 vs 2 077). Но тест просматривает 41.2 слайда vs 22.2 в control (+85%) — эффект стабилен всё время теста. Streak-контекст делает оффер релевантным, но в покупки это по-прежнему не конвертирует.
04
Создание контента: тест стабильно сильнее, лид расширился. Publish_Tap +12.6%/юзер, VideoCapture_Appear +10.1%, Create_Tap +9.7%. Streak-механика мотивирует снимать видео. Если приоритет — UGC-supply и creator pipeline, тест лучше.
05
Итоговый trade-off: деньги против supply. Тест → больше контента (+12% публикаций/юзер), глубже изучает оффер (WBG ×1.9), чуть выше strict-retention (незначимо); вовлечённость на уровне или чуть выше контроля (события +3.1%, сессии +2.7%, feed +3.1%, media +0.2%). Контроль → деньги: ARPPU на 8.3% выше, больше покупателей, выше CR (Δ+0.70 п.п. в пользу контроля, незначимо). Если решать по выручке — контроль; если по UGC-supply — тест.
06
Осторожно с интерпретацией. Флаг применён ко ВСЕМ пользователям (не только новые регистрации), когорта retention — существующие активные юзеры. Армы: 9 007 control / 8 934 test (assigned = активны в окне). События атрибутированы джойном по арм-мапу (арм — свойство юзера), БЕЗ требования флага на каждом событии: иначе Session_Start и ранние события сессии занижаются почти вдвое. DAU по Session_Start, чтобы серверные батчи не искажали кривую. С 10.07 идёт приток трафика (DAU выросло с ~1 000 до ~1 400 на арм) — свежие дни весят больше в оконных метриках. 16.07 исключён из окна: за день назначено 3 149 control vs 1 490 test (при обычном балансе 13–15.07) — сбой раскатки флага; включение раздуло бы control-арм низкотенюрными юзерами и исказило CR/ARPPU. Эскалировать дата/эксперимент-команде.
Источники данных (снапшот 17.07.2026, окно Jun 19 – Jul 15, арм-мап с 18.06; 16.07 исключён — сбой раскатки флага): PostHog events → DoppyEvents.posthog_events_message. Арм-мап = argMax($feature/ANDROID_POST_REGISTRATION_DEEPLINK по event_date), identity = distinct_id 24-hex = backend uid, 17 941 юзеров (9 007 / 8 934); события/воронки атрибутированы джойном по арм-мапу без флаг-фильтра. Retention → DoppyEvents.firebase_doppy_raw (user_id → backend uid = splitByString(':',user_id)[1], любое событие = активность, когорта Jun 19, strict day-N + rolling R20; экспорт полон по Jul 16 — зрелы 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 6 083 / 6 077; 18 покупателей unattributed, $108). GEO из $geoip_country_code — модальная страна по Session_Start (серверные события ресолвятся в DE). Эксперимент зарегистрирован в PostHog 06.07 («STREAK / Wallet after reg»), флаг активен, тест продолжается. CH-запросы через HTTP-интерфейс (curl) с прокинутым арм-мапом как external table.