Выводы
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-сбалансированы — разрыв не страновой. Окно финально на 15.07: флаг отключён, дни 16–19.07 не входят (test-арм свёрнут 3 062 → 1 490 → 799 → 498 → 249 юзеров/день).
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 test-арм назначался всё реже (юзеров/день 3 062 → 1 490 → 799 → 498 → 249 за 15 → 19.07), к 19.07 практически выключен. Окно удержано на 15.07 — последний день сбалансированной раздачи 50/50; дни 16–19.07 не включены (разбалансированное назначение раздуло бы control-арм и исказило CR/ARPPU). Окно закрыто и зрело: все метрики финальны.
Источники данных (снапшот 28.08.2026, финальное окно Jun 19 – Jul 15, арм-мап с 18.06; флаг отключён — с 16.07 test-арм свёрнут, дни 16–19.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»); флаг отключён — test-арм свёрнут с 16.07 (юзеров/день 3 062 → 1 490 → 799 → 498 → 249 за 15 → 19.07; на 20–31.07 остаточный затухающий хвост против ~2 000–2 600/день у control — проверено на снапшоте 14.08: test 28.07 → 13.08: 101 → 66 → 40 → 21 → 29 → 31 → 37 → 43 → 23 → 23 → 26 → 26 → 14 → 25 → 19 → 13 → 20 против control 2 594 → 2 593 → 2 368 → 812 → 376 → 230 → 195 → 233 → 136 → 120 → 194 → 130 → 80 → 93 → 78 → 61 → 57; кэш-флаг истёк у обоих армов), эксперимент завершён. Переверка 28.07: purchases-якорь (DoppyEvents.transactions) и retention (firebase_doppy_raw) воспроизводятся в пределах шума переуборки арм-мапа (±~4 юзера/арм) — control ведёт по деньгам (ARPPU −8%, CR −0.8 п.п., z≈1.8, незначимо), test чуть выше по retention (все дельты в пределах шума); выводы неизменны. Перепроверка 31.07: хвост test продолжил затухание — 40 уник/день на 30.07 (новый минимум) против 2 368 у control, 31.07 неполный (6 против 378); арм-мап последний раз пересчитан 30.07 (8 935 control / 8 894 test — <1% от 9 007 / 8 934) — флаг остаётся отключён, окно 15.07 финально, выводы неизменны. Перепроверка 04.08: хвост подтверждён — арм назначается только как остаточный кэш (control 2 368 на 30.07 → 195 на 03.08 → 90 на 04.08 неполный; test 21–37 уник/день), флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 05.08: хвост полностью иссяк — control 04.08 полный = 233 (ранее 90 неполный), 05.08 = 55 неполный; test 04.08 полный = 43 (ранее 21 неполный), 05.08 = 6 неполный. Флаг остаётся снят; денежное окно 15.07 и retention-когорта 19.06 финальны, выводы неизменны. Перепроверка 06.08: хвост продолжил затухание — control 05.08 добрал до полного = 136 (ранее 55 неполный), 06.08 = 40 неполный; test 05.08 полный = 23 (ранее 6 неполный), 06.08 = 6 неполный. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 07.08: хвост продолжил затухание — control 06.08 добрал до полного = 120 (ранее 40 неполный), 07.08 = 75 неполный; test 06.08 полный = 23 (ранее 6 неполный), 07.08 = 11 неполный. Флаг остаётся снят; выводы неизменны. Перепроверка 10.08 (данные по 09.08 полные): хвост остаётся остаточным кэшем — control 07.08 добрал до полного = 194 (ранее 75 неполный), 08.08 = 130, 09.08 = 80, 10.08 = 27 неполный; test 07.08 полный = 26 (ранее 11 неполный), 08.08 = 26, 09.08 = 14, 10.08 = 6 неполный. Сигналов повторного включения флага нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 11.08 (данные по 10.08 полные): хвост остаётся остаточным кэшем — control 10.08 добрал до полного = 93 (ранее 27 неполный), 11.08 = 28 неполный; test 10.08 полный = 25 (ранее 6 неполный), 11.08 = 8 неполный. Перепроверка 12.08 (данные по 11.08 полные): затухание продолжается — control 11.08 добрал до полного = 78 (ранее 28 неполный), 12.08 = 26 неполный; test 11.08 полный = 19 (ранее 8 неполный), 12.08 = 2 неполный. Перепроверка 13.08 (данные по 12.08 полные): затухание продолжается — control 12.08 добрал до полного = 61 (ранее 26 неполный), 13.08 = 24 неполный; test 12.08 полный = 13 (ранее 2 неполный), 13.08 = 10 неполный. Сигналов повторного включения флага нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 14.08 (данные по 13.08 полные): затухание продолжается — control 13.08 добрал до полного = 57 (ранее 24 неполный), 14.08 = 16 неполный; test 13.08 полный = 20 (ранее 10 неполный), 14.08 = 8 неполный. Сигналов повторного включения флага нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 17.08 (данные по 16.08 полные): хвост стабилизировался на остаточном кэш-уровне — control 14.08 добрал до полного = 56 (ранее 16 неполный), 15.08 = 60, 16.08 = 47, 17.08 = 23 неполный; test 14.08 полный = 19 (ранее 8 неполный), 15.08 = 16, 16.08 = 12, 17.08 = 8 неполный. Сигналов повторного включения флага нет (арм-раздача — десятки уник/день против ~2 000–2 600 при активном флаге). Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 19.08 (данные по 18.08 полные): хвост остаётся на остаточном кэш-уровне, лёгкие колебания без тренда вверх — control 17.08 добрал до полного = 62 (ранее 23 неполный), 18.08 = 50, 19.08 = 8 неполный; test 17.08 полный = 15 (ранее 8 неполный), 18.08 = 9, 19.08 = 2 неполный. Сигналов повторного включения флага нет (десятки уник/день против ~2 000–2 600 при активном флаге). Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 20.08 (данные по 19.08 полные): хвост остаётся на остаточном кэш-уровне без тренда вверх — control 18.08 = 50, 19.08 добрал до полного = 29 (ранее 8 неполный), 20.08 = 15 неполный; test 18.08 = 9, 19.08 полный = 13 (ранее 2 неполный), 20.08 = 2 неполный. Полные дни 12–18.08 воспроизвелись точь-в-точь (control 61 / 57 / 56 / 60 / 47 / 62 / 50, test 13 / 20 / 19 / 16 / 12 / 15 / 9) — extraction + арм-бридж целы. Сигналов повторного включения флага нет (десятки уник/день против ~2 000–2 600 при активном флаге). Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 24.08 (данные по 23.08 полные): хвост остаётся на остаточном кэш-уровне — control 20.08 добрал до полного = 39 (ранее 15 неполный), 21.08 = 91, 22.08 = 82, 23.08 = 43, 24.08 = 9 неполный; test 20.08 полный = 12 (ранее 2 неполный), 21.08 = 13, 22.08 = 31, 23.08 = 6, 24.08 = 3 неполный. Хвост остаётся остаточным (десятки–сотни уник/день против ~2 000–2 600 при активном флаге); колебания вверх (21–22.08 control 91/82) — шум кэша, не повторное включение; сигналов реактивации нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 25.08 (данные по 24.08 полные): хвост остаётся на остаточном кэш-уровне — control 24.08 добрал до полного = 20 (ранее 9 неполный), 25.08 = 12 неполный; test 24.08 полный = 8 (ранее 3 неполный), 25.08 = 2 неполный. Полные дни 18–23.08 воспроизвелись точь-в-точь (control 50 / 29 / 39 / 91 / 82 / 43, test 9 / 13 / 12 / 13 / 31 / 6) — extraction + арм-бридж целы. Хвост остаётся остаточным (единицы–десятки уник/день против ~2 000–2 600 при активном флаге); сигналов реактивации нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 27.08 (данные по 26.08 полные): хвост остаётся на остаточном кэш-уровне — control 25.08 добрал до полного = 36 (ранее 12 неполный), 26.08 = 26, 27.08 = 12 неполный; test 25.08 полный = 5 (ранее 2 неполный), 26.08 = 11, 27.08 = 2 неполный. Полный день 24.08 воспроизвёлся точь-в-точь (control 20 / test 8) — extraction + арм-бридж целы. Хвост остаётся остаточным (единицы–десятки уник/день против ~2 000–2 600 при активном флаге); сигналов реактивации нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. Перепроверка 28.08 (данные по 27.08 полные): хвост остаётся на остаточном кэш-уровне — control 27.08 добрал до полного = 31 (ранее 12 неполный), 28.08 = 11 неполный; test 27.08 полный = 5 (ранее 2 неполный), 28.08 = 5 неполный. Полные дни 24–26.08 воспроизвелись точь-в-точь (control 20 / 36 / 26, test 8 / 5 / 11) — extraction + арм-бридж целы. Хвост остаётся остаточным (единицы–десятки уник/день против ~2 000–2 600 при активном флаге); сигналов реактивации нет. Флаг остаётся снят из PostHog; денежное окно 15.07 (transactions) и retention-когорта 19.06 (firebase_doppy_raw) заморожены и финальны — не пересчитывались, выводы неизменны. CH-запросы через HTTP-интерфейс (curl), distinct_id из топ-уровня msg (не из properties).