Doppy · PostHog A/B Experiment · Feature Flag

ANDROID_POST_REGISTRATION_DEEPLINK

Период: 19 июня – 9 июля 2026 (21 день) Снапшот: 10.07.2026 Сплит: 50 / 50 Статус: LIVE — эксперимент официально запущен 06.07 в PostHog («STREAK / Wallet after reg»). Назначение арм непрерывно с 18.06, перезапуск = формальная регистрация эксперимента, НЕ сброс когорты. По деньгам ведёт control (CR −0.64 п.п., z=1.26, p≈0.21 — незначимо) Метод: PostHog events + transactions + Firebase (ClickHouse), атрибуция по арм-мапу
Пользователей control
7 251
balance экран
Пользователей test
7 226
wallet/streak экран
Покупки · CR
−0.64 пп
6.87% → 6.23% (z=1.3, н/з)
ARPPU (выручка / покупатель)
−9.9%
$7.84 → $7.07
WhyBuyGlasses slides / юзер
+113%
20.8 → 44.3
Publish_Tap / юзер
+10.2%
9 654 → 10 603 событий
Control
deeplink → "balance"
После регистрации — экран баланса кошелька
Юзеров7 251
Событий4 957 221
Событий / юзер683.7
Test
deeplink → "wallet/streak"
После регистрации — экран streak-трекера
Юзеров7 226
Событий4 975 906
Событий / юзер688.6
Вовлечённость
общие показатели активности
Метрика Control Test Δ
Событий / юзер 683.7 688.6 +0.7%
Сессий / юзерSession_Start 17.46 17.65 +1.1%
Feed открытий / юзерFeed_Open 26.90 27.16 +1.0%
Media_View / юзер 194.1 189.4 −2.4%
Earn_Tap / юзер 6.13 5.99 −2.2%
Создание контента
видеозапись и публикация
Метрика Control Test Δ событий Δ / юзер
VideoCapture_Appear 47 016 50 211 +3 195 +7.2%
Publish_Appear 9 821 10 721 +900 +9.5%
Publish_Tap 9 654 10 603 +949 +10.2%
Create_Tap 12 166 12 887 +721 +6.3%
Воронка WhyBuyGlasses
ключевой сигнал теста
+107%
Одинаковое число юзеров, в 2.1× больше слайдов
До экрана WhyBuyGlasses доходит практически одинаковое число уникальных пользователей в обеих группах (1 590 vs 1 531). Но тестовая группа просматривает 44.1 слайда в среднем против 21.3 в контроле. Эффект устойчиво держится всё время теста: streak-контекст делает оффер очков более релевантным — пользователи глубже изучают ценностное предложение, но в покупки это по-прежнему не конвертирует.
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ событий
WhyBuyGlasses_Appear 3 171 1 646 3 422 1 626 +7.9%
WhyBuyGlasses_SlideView 33 756 1 624 71 332 1 609 +111%
WhyBuyGlasses_Swipe 30 651 1 460 67 997 1 460 +122%
Slides / engaged user 20.8 44.3 +113%
WhyBuyGlasses_Close_Tap 1 557 1 069 1 722 1 069 +10.6%
Монетизация (Market & Offer)
воронка покупки бустов · % — доля от дошедших до маркета (Market_Appear uniq)
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ юзеров
Market_Appear 23 924 4 762 22 992 4 817 +1.2% юзеров
MyProfile_Boost_Appear 20 490 2 307 21 486 2 252 −2.4% юзеров
Market_Checkout_Appear 4 189 1 812 (38.1%) 4 478 1 899 (39.4%) +4.8% юзеров
Market_Checkout_Buy_Tapобщее число нажатий «купить» 1 716 965 (20.3%) 1 565 988 (20.5%) +2.4% юзеров
Offer_Glasses_Appear 3 766 1 729 3 779 1 776 +2.7% юзеров
Offer_Glasses_Buy_Tap 2 460 1 296 2 457 1 348 +4.0% юзеров
Streak активность
геймификация серий
Событие Control (события) Control (юзеры) Test (события) Test (юзеры) Δ / юзер
LongStreak_Banner_Tap 6 790 1 942 6 851 1 958 +1.2%
LongStreak_Watch_Tap 3 163 1 032 3 143 1 055 −0.3%
ShortStreak_Widget_Tap 4 497 2 117 4 919 2 226 +9.8%
Onboarding_StreakWarning_Appear 2 190 1 126 2 291 1 165 +5.0%
Onboarding_Congratulations_Appear 3 124 3 019 3 084 2 971 −0.9%
Retention D1 / D3 / D7 / D14
когорта 19 июня (1 090 vs 1 116 юзеров) — Firebase user_pseudo_id → backend uid, strict day-N + rolling (R20), любое событие = активность
+2.5 pp
Небольшой плюс теста на strict — но rolling его не подтверждает, значимости нет
Когорта 19 июня: 1 090 control и 1 116 test. По strict day-N тест выше на всех горизонтах — D1 +2.5 пп (z=1.18), D3 +0.5 пп, D7 +0.8 пп (z=0.38), D14 +1.3 пп (z=0.69) — но ни одна дельта не значима. По rolling («вернулся хотя бы раз к дню N») разница почти исчезает: rD7 control даже чуть выше (80.8% vs 80.6%), rD14 обе ≈87–88%. Значимого эффекта на удержание тест не даёт. Firebase-экспорт полон по 08.07 — для когорты 19 июня зрелы все окна, включая D14 (03.07).
День Control (1 090 юзеров) Control % Test (1 116 юзеров) Test % Δ (п.п.) Δ (относит.)
D0 (19 июн) 1 090 100% 1 116 100%
D1 (20 июн) 611 56.1% 653 58.5% +2.5 pp · н/з +4.4%
D3 (22 июн) 503 46.1% 521 46.7% +0.5 pp · н/з +1.1%
D7 (26 июн) 393 36.1% 411 36.8% +0.8 pp · н/з +2.1%
D14 (3 июл) 305 28.0% 327 29.3% +1.3 pp · н/з +4.7%
Rolling retention (вернулся хотя бы раз к дню N) · R20
та же когорта, один знаменатель; активен ≥1 раз в интервале [D1 … DN]
День Control % Test % Δ (п.п.)
roll D1 56.1% 58.5% +2.5 pp
roll D3 71.7% 72.4% +0.8 pp
roll D7 80.8% 80.6% −0.2 pp
roll D14 86.7% 87.8% +1.1 pp
Реальные покупки (transactions · R16-якорь)
DoppyEvents.transactions · Jun 19 – Jul 9 · 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): 4 762 / 4 817
−9.9%
Контроль ведёт по деньгам — выше и покупатели, и ARPPU
Снапшот 09.07, transactions-якорь (R16), без фрод-фильтра (R5). Control: 327 покупателей, $2 565 выручки. Test: 300 покупателей, $2 120. Покупателей у теста меньше (−8.3%). CR от дошедших до маркета 6.87% vs 6.23% (−0.64 п.п., z=1.26, p≈0.21 — незначимо, но контроль устойчиво ведёт). ARPPU $7.84 vs $7.07 (−9.9%), ARPU/дошедшего $0.539 vs $0.440. Армы geo-сбалансированы (NG/PK/ES/US почти поровну) — разрыв ARPPU не страновой артефакт. 19 покупателей без арма ($117) вынесены в unattributed и в разрез не входят.
Метрика Control (4 762 дошли до маркета) Test (4 817 дошли до маркета) Δ
Уникальных покупателейпервичные + вернувшиеся 327 300 −8.3%
— первичных (первая покупка в жизни) 316 288 −8.9%
— вернувшихся (покупали раньше) 11 12 +1
CR покупки (покупатели / дошли до маркета) 6.87% 6.23% −0.64 pp · z=1.26 · p≈0.21
Выручка (fiat, USD-экв.) $2 564.78 $2 119.78 −17.3%
ARPPU (выручка / покупатель)основная денежная метрика $7.84 $7.07 −9.9%
ARPU (выручка / дошедшего до маркета) $0.539 $0.440 −18.3%
Покупок всего, штпервичные + повторные 342 310 −9.4%
— повторных покупок, шт 15 10 −33.3%
Разбивка по категории продукта
Категория Control — кол-во Control — выручка Test — кол-во Test — выручка
regularglasses / буст (is_glasses_purchase=1) 322 $2 526.38 291 $2 089.17
specialidentity_approve + video_promotion 20 $38.40 19 $30.61
GEO-разрез: страновой микс арма (проверка конфаунда ARPPU)
уник. юзеров арма по $geoip_country_code (PostHog) — топ-6
Страна Control (юзеров) Test (юзеров)
🇳🇬 Nigeria1 1481 182
🇵🇰 Pakistan979922
🇪🇸 Spain826828
🇺🇸 USA623608
🇮🇹 Italy601514
🇩🇪 Germany532553
Микс стран между армами сбалансирован (рандомизация сработала): топ-страны почти совпадают (макс. перекос — Italy +87 юзеров у control, ~1%). Значит разрыв ARPPU (−12.7%) — не артефакт странового состава, а реальная разница в монетизации.
DAU по дням
уникальные пользователи с Session_Start в каждой группе (клиентский сигнал; серверные батчи не учитываются)
Control (balance) Test (wallet/streak)

Выводы

01
Retention: strict-плюс есть, rolling его не подтверждает. По strict day-N (Firebase user_pseudo_id → backend uid, когорта 19 июня) тест выше на всех горизонтах: D1 +2.5 пп (56.1% vs 58.5%, z=1.18), D3 +0.5 пп, D7 +0.8 пп (z=0.38), D14 +1.3 пп (z=0.69) — но ни одна дельта не значима. По rolling («вернулся хотя бы раз к дню N», R20) разница почти исчезает: rD7 control даже чуть выше (80.8% vs 80.6%), rD14 обе ≈87–88%. Значимого эффекта на удержание нет.
02
Реальные покупки: контроль впереди по деньгам. 327 покупателей vs 300 (−8.3%), CR от дошедших до маркета 6.87% vs 6.23% (Δ−0.64 п.п., z=1.26, p≈0.21 — незначимо, контроль ведёт). Выручка $2 565 vs $2 120 (−17%), ARPPU $7.84 vs $7.07 (−9.9%), ARPU/дошедшего $0.539 vs $0.440. Первичных покупателей 316 vs 288, повторных покупок 15 vs 10. Якорь — DoppyEvents.transactions (R16), дедуп LIMIT 1 BY transaction_id, is_fraud не фильтруется (R5/B7). Армы geo-сбалансированы — разрыв не страновой.
03
WhyBuyGlasses: одинаковый охват, ×2.1 глубина просмотра. До экрана доходит близкое число юзеров (1 646 vs 1 626). Но тест просматривает 44.3 слайда vs 20.8 в control (+113%) — эффект стабилен всё время теста. Streak-контекст делает оффер релевантным, но в покупки это по-прежнему не конвертирует.
04
Создание контента: тест стабильно сильнее. Publish_Tap +10.2%/юзер, VideoCapture_Appear +7.2%, Create_Tap +6.3%. Streak-механика мотивирует снимать видео. Если приоритет — UGC-supply и creator pipeline, тест лучше.
05
Итоговый trade-off: деньги против supply. Тест → больше контента (+9–10% публикаций/юзер), глубже изучает оффер (WBG ×2.1), чуть выше strict-retention (незначимо); вовлечённость при этом на уровне контроля (сессии +1.1%, feed +1.0%, media −2.4%). Контроль → деньги: ARPPU +9.9%, больше покупателей, выше CR (Δ+0.64 п.п. в пользу контроля, незначимо). Если решать по выручке — контроль; если по UGC-supply — тест.
06
Осторожно с интерпретацией. Флаг применён ко ВСЕМ пользователям (не только новые регистрации), когорта retention — существующие активные юзеры. Армы: 7 251 control / 7 226 test (assigned = активны в окне). События атрибутированы джойном по арм-мапу (арм — свойство юзера), БЕЗ требования флага на каждом событии: иначе Session_Start и ранние события сессии занижаются почти вдвое. DAU по Session_Start, чтобы серверные батчи не искажали кривую.
Источники данных (снапшот 10.07.2026, окно Jun 19 – Jul 9): PostHog events → DoppyEvents.posthog_events_message. Арм-мап = argMax($feature/ANDROID_POST_REGISTRATION_DEEPLINK по event_date), identity = distinct_id 24-hex = backend uid, 14 477 юзеров (7 251 / 7 226); события/воронки атрибутированы джойном по арм-мапу без флаг-фильтра. Retention → DoppyEvents.firebase_doppy_raw (user_id → backend uid = splitByString(':',user_id)[1], любое событие = активность, когорта Jun 19, strict day-N + rolling R20; экспорт полон по Jul 8 — зрелы 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 4 762 / 4 817; 19 покупателей unattributed, $117). GEO из $geoip_country_code. Официальный эксперимент в PostHog — статус Draft (start_date = null), флаг активен, тест продолжается. CH-запросы через HTTP-интерфейс (curl) с прокинутым арм-мапом как external table.