agentleFS
vibemarketologruvibemarketologru/vibe-landing-kit/skills/hypothesis-lab/SKILL.md

hypothesis-lab

Skill0 starsChanged 47 days agoMITView on GitHub

Use when turning a marketing idea into a testable A/B hypothesis, choosing what to test first, calculating sample size, traffic budget or test duration, reading A/B results, deciding whether variant B won, or keeping a hypothesis log — «гипотеза», «что тестировать первым», «сколько нужно трафика», «сколько визитов на вариант», «размер выборки», «бюджет на тест», «статзначимость», «p-value», «победил ли вариант Б», «можно ли остановить тест», «A/A-тест», «Вариокуб», «журнал гипотез».

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Files
SKILL.md

Лаборатория гипотез: от идеи до решения

Лендинг под рекламу нужен, чтобы ответить на вопрос, а не чтобы «было красиво». Цикл один: гипотеза → вариант Б с одним отличием → трафик 1–2 полные недели → решение по заранее посчитанной выборке → запись в журнал. Всё, что ниже, — инструкция на каждый шаг. Готовые функции (выборка, z-тест, сплит на своём хостинге) — в snippets.md.

1. Формулировка

Шаблон — одна строка, все пропуски заполнены до запуска:

Если [одно изменение], то [метрика] вырастет с __ % до __ %, потому что [данные].

ПлохоХорошо
«Попробуем другой заголовок»Если в H1 поставить срок «монтаж за 21 день», то конверсия в заявку вырастет с 3 % до 5 %, потому что в звонках за август «сколько ждать» спрашивали чаще, чем про цену
«Сделаем страницу современнее»Если заменить форму из 5 полей на 2 (имя, телефон), то доля отправок среди начавших заполнять вырастет с 40 % до 55 %, потому что в Вебвизоре люди бросают форму на поле «адрес»
«Добавим отзывы, вдруг поможет»Если перенести 3 реальных отзыва с фото объекта к форме, то конверсия вырастет с 4 % до 5,5 %, потому что возражение «а вдруг сделают плохо» — главное в чате
  • «Потому что» — это данные: звонки, чат, Вебвизор, запросы Вордстата, возражения из отдела продаж. Без них гипотеза — угадайка.
  • Числа «с __ % до __ %» задают MDE — минимальный эффект, который тест обязан увидеть. От них считается выборка (раздел 5).
  • Формально: H0 — «изменение ничего не меняет», H1 — «эффект не меньше MDE».

2. Приоритет: ICE или PIE

Каждый множитель — от 1 до 10, берите произведение.

МетодФормулаКогда
ICEImpact × Confidence × Ease (влияние × уверенность × простота)разнородный поток идей: реклама, страница, продажи
PIEPotential × Importance × Ease (запас роста страницы × важность трафика на ней × простота)выбор, КАКУЮ страницу или блок тестировать

Пример очереди (ICE):

ГипотезаICEICE
Оффер «рассрочка 0 %» против «монтаж за 21 день»968432
Форма 2 поля вместо 5679378
Отзывы у формы557175
Цвет кнопки231060

3. Что тестировать по порядку

  1. Оффер — что обещаем и на каких условиях. Самый крупный рычаг.
  2. H1 первого экрана — формулировка оффера словами покупателя (из семантики).
  3. Кнопка — текст (микрообязательство: «Записаться на бесплатный замер», а не «Узнать больше») и место.
  4. Длина формы — число полей.
  5. Порядок блоков — где доказательства, где цены.
  6. Цвет кнопки — последним.

Причина порядка — арифметика выборки: крупные изменения дают крупные эффекты, а крупный эффект виден на малом трафике. Разница 5 % → 7 % требует ≈ 2 200 визитов на вариант, 5 % → 6 % — уже ≈ 8 150 (таблица ниже). Цвет кнопки редко даёт эффект такого размера — поэтому он последний.

4. Метрики: одна главная, выбрана ДО старта

ВидЧто этоПример
Целеваяпо ней принимается решениезаявки / визиты
Проксиранний, более частый сигнал; решения по ней не принимаютклик по кнопке, начало заполнения формы, дочитывание до цен
Guardrail (сторожевая)не должна ухудшиться, даже если целевая выросластоимость заявки, доля мусорных заявок, доля отказов, скорость загрузки

«Б дал больше заявок, но половина — мусор» — это проигрыш Б, его ловит guardrail.

5. Сколько нужно визитов

Формула для двух долей, α = 5 % (двусторонний тест), мощность 80 %:

n (на вариант) = (1,96 + 0,84)² × [ p₁(1 − p₁) + p₂(1 − p₂) ] / (p₂ − p₁)²

p₁ — конверсия сейчас, p₂ — какую хотим увидеть; 1,96 — порог значимости 5 %, 0,84 — мощность 80 %; (1,96 + 0,84)² = 7,84.

СейчасХотим увидетьВизитов на вариантЗаявок за это время: A / Б
2 %3 %≈ 3 82076 / 115
3 %5 %≈ 1 50045 / 75
5 %7 %≈ 2 200110 / 154
5 %6 %≈ 8 150407 / 489
10 %13 %≈ 1 770177 / 230
3 %6 %≈ 74522 / 45
5 %10 %≈ 43022 / 43

Два правила поверх формулы:

  • Не меньше 50 заявок на вариант. Берите большее из двух: формула или 50 ÷ p₁. Для 3 % → 5 % формула даёт 1 500, а 50 заявок при 3 % — это 1 667 визитов. Нужно 1 667.
  • Не пользуйтесь короткой формулой n ≈ 7,8 × p(1 − p) / MDE², которая гуляет по статьям: она учитывает разброс одной группы и занижает выборку в 2,2–3 раза. Мощность такого теста — около 40–47 % вместо 80 %: реальный эффект пропускается больше чем в половине случаев.

Сверка: калькулятор Эвана Миллера https://www.evanmiller.org/ab-testing/sample-size.html, «Калькулятор выборок» в Вариокубе (https://yandex.ru/support/varioqub/ru/create/tools), функция sampleSize() в snippets.md.

6. Бюджет и срок

бюджет трафика = визитов на вариант × 2 × цена клика
дней теста     = визитов на вариант × 2 ÷ визитов в день → вверх до полных недель
  • 5 % → 7 % при клике 35 ₽: 2 207 × 2 × 35 ≈ 154 500 ₽. 3 % → 6 % при той же цене: 745 × 2 × 35 ≈ 52 000 ₽. Маленький бюджет ловит только смелые гипотезы — это нормально, так и планируйте.
  • Клик — не визит: часть людей уходит до загрузки страницы. Сверьте клики рекламы с визитами аналитики на своём счётчике и заложите разницу в бюджет.
  • Срок: минимум 1–2 полные недели (будни и выходные ведут себя по-разному), не дольше 2–3 месяцев (куки стираются, меняется сезон). Если по расчёту выходит больше 8 недель — гипотеза слишком мелкая для вашего трафика: тестируйте крупнее или добавьте трафик.

Связь с деньгами — какая конверсия вообще нужна странице:

потолок цены заявки = маржа с продажи × доля маржи на привлечение × доля заявок, дошедших до продажи
нужная конверсия    = цена клика ÷ потолок цены заявки

Маржа 30 000 ₽, на привлечение отдаём 30 % (9 000 ₽), покупает каждая четвёртая заявка → потолок заявки 2 250 ₽. Клик 45 ₽ → странице нужно не меньше 45 ÷ 2 250 = 2 %. Ниже — реклама в минус, какой бы вариант ни победил.

7. A/A-тест перед первым A/B

Неделю показывайте одну и ту же страницу как A и как Б. Проверяете инструмент, а не страницу:

  • Сплит честный? z = (визиты A − визиты Б) / √(визиты A + визиты Б). |z| > 3 — деление сломано (боты, кеш, редирект, реклама ведёт на один вариант). Пример: 1 800 против 1 790 → z = 0,17, норма; 2 100 против 1 700 → z = 6,5, поломка.
  • Инструмент не «находит» победителя? При α = 5 % ложная «победа» в A/A случается в 5 % тестов — это норма. Если «побеждает» почти каждый A/A — считают не то (например, заявки по одному, а визиты по другому источнику).
  • Заявки дошли? Отправьте по одной проверочной заявке в каждый вариант и найдите их в базе.

8. Не подглядывать

Смотреть на итог каждый день и остановиться при первой «значимости» — главный источник ложных побед. Наша симуляция (20 000 A/A-тестов, где между вариантами нет никакой разницы): одна проверка в конце даёт ложную «победу» в 5 % тестов, 5 проверок — в 14 %, ежедневная проверка две недели (14 раз) — в 22 %, 20 проверок — в 25 %.

  • Выборка и дата решения записаны в журнал ДО старта. Решение — в эту дату, не раньше.
  • Каждый день смотреть можно и нужно — но только техническое: сплит (раздел 7), форма, модерация, что реклама идёт на правильные адреса.
  • Досрочная остановка — только по вреду (guardrail): форма сломалась, вариант сжёг бюджет без заявок. Правила такой остановки тоже пишутся до старта (навык ad-match, раздел «Автостоп»).
  • Правка страницы во время теста = новый тест с нуля: статистика двух разных страниц не складывается.

9. Считаем итог: z-тест двух долей

p̂  = (заявки A + заявки Б) / (визиты A + визиты Б)          — объединённая конверсия
SE = √( p̂(1 − p̂) × (1/визиты A + 1/визиты Б) )
z  = (p_Б − p_A) / SE
p  = erfc(|z| / √2)                                          — двусторонний p-value

Интервал разницы (что сказать заказчику): (p_Б − p_A) ± 1,96 × √( p_A(1−p_A)/n_A + p_Б(1−p_Б)/n_Б ).

Пример. A: 1 800 визитов, 54 заявки (3,00 %). Б: 1 790 визитов, 84 заявки (4,69 %). p̂ = 3,84 %, SE = 0,00642, z = 2,64, p = 0,008. Разница +1,69 п.п., 95 %-интервал от +0,44 до +2,95 п.п. Выборка по плану (3 % → 5 %: 1 667) набрана, прошло 14 дней → Б победил.

Если бы у Б было 66 заявок из 1 690 (3,91 %) при том же A: z = 1,47, p = 0,14 → «лидирует Б», решения нет.

ВердиктУсловиеЧто делать
Рано судитьменьше 100 визитов на вариант или меньше 20 заявок на обаждать, проверять только технику
Лидируетp ≥ 0,05«Лидирует Б» ≠ «победил Б». Ждать плановой выборки; набрана, а p ≥ 0,05 — ничья, эффект меньше MDE
Победилp < 0,05 и плановая выборка набрана и прошла хотя бы одна полная неделясделать победителя основным, записать в журнал, взять следующую гипотезу

Ничья — тоже результат: «изменение X не даёт +2 п.п.» экономит деньги на следующем круге.

10. Где считать

landing_status (MCP Вайб-Маркетолога, бесплатно) — серверный движок решения по этой методике (29.09.2026). План теста (база → цель, выборка на вариант по формуле раздела 5, не меньше 7 дней, 20 заявок) закрепляется при запуске и дальше не пересчитывается по наблюдаемой разнице. Знаменатель — люди (назначение варианта новой кукой), а не перезагрузки страницы. Состояния ab.state: insufficient_data — план не набран (промежуточное p < 0,05 показывается как «сейчас впереди», но решением не считается); inconclusive — план набран, значимой разницы нет (это не «варианты равны», а «эффект меньше MDE не различить»); data_quality_issue — перекос A/Б (SRM, хи-квадрат, p < 0,001 при 200+ участниках): сначала ищут причину; winner — только когда КАЖДЫЙ вариант набрал план, прошёл срок и p < 0,05. Рядом — 95 % интервал разницы (ci95_pp) и история версий (history): правка через landing_update начинает новую версию теста, итог прежней сохраняется. Режимы трафика: общий адрес — чистый тест страницы; ?ad=a / ?ad=b — рекламные связки, свой замер (ab.bundle), в вердикт не входят; ?v=a / ?v=b — предпросмотр, не считается нигде. Проверочная заявка платформы помечена сервером (is_test), в тест не идёт. Продажи по вариантам — поле sales (Битрикс24, если crm=bitrix): сделки из лидов лендинга в стадии «Успешно» с суммой; продажи дозревают днями, поэтому решать по ним — после окна дозревания и с выборкой под их конверсию.

Вариокуб в Яндекс Метрике (Метрика → счётчик → Вариокуб → Эксперименты):

  • для двух разных страниц — тип «Редирект»; контроль тоже редиректить (копия исходной страницы или «единичный редирект с GET-параметром»), иначе редирект бьёт только по одной группе; кросс-доменный редирект не поддерживается; от мерцания — антифликер; правила VK Рекламы запрещают JS- и meta-редиректы на посадочных — для трафика из ВК делите варианты без редиректа (навык landing-law-ru, раздел 7);
  • период 1–90 дней, доля аудитории 1–100 %, главная метрика — цель Метрики;
  • отчёт: p-value по критерию Манна — Уитни с бакетизацией, порог p ≤ 0,05, плюс MDE; «не останавливайте тест раньше, даже если увидели цветную подсветку» — совет практиков, работающих с Вариокубом;
  • бесплатный тариф на момент исследования: 2 одновременных эксперимента на счётчик, 1 основная и 1 дополнительная метрика (проверить на дату запуска: https://varioqub.ru/web).

Своя площадка — скрипт сплита (кука на 30 дней, ?v=, боты → A, параметр визита в Метрику, цель заявки с вариантом) и калькулятор — в snippets.md. Заявки считайте по своей базе (в каждой заявке — поле ab_variant), визиты — по параметру визита в Метрике или своему счётчику.

Объявления в Яндекс Директе — свои A/B-эксперименты кампаний; как связать их с вариантами лендинга — навык ad-match.

11. Мало трафика

  • Меньше ~2 000 визитов в месяц: на мелких правках значимость за разумный срок не наступит. Тестируйте оффер целиком (разница 3 % → 6 % требует ≈ 745 визитов на вариант).
  • Прокси-метрика (клик по кнопке) даёт ранний сигнал, но решение — по заявкам.
  • «Неделя до и неделя после» — не A/B: сезон, реклама и конкуренты меняются вместе со страницей.

12. Журнал гипотез

Главный актив — не лендинг, а журнал: он не даёт повторять проигравшие идеи и показывает, что реально двигает конверсию в вашей нише. Записываются все тесты, включая ничьи и проигрыши.

№Старт → решениеГипотеза (если / то / потому что)ICEМетрика, MDEВыборка: план / фактA: визиты / заявкиБ: визиты / заявкиpРешениеЧто узналиСледующая гипотеза
101.10 → 15.10Если в H1 срок «21 день», то заявки с 3 % до 5 %, потому что в звонках спрашивают сроки432заявки/визиты, +2 п.п.1 667 / 1 7901 800 / 541 790 / 840,008Б основнойСрок продаёт сильнее рассрочкиСрок + фиксированная цена в H1

Частые ошибки

  • Несколько изменений в Б сразу — непонятно, что сработало.
  • Главная метрика выбрана после теста («зато время на странице выросло»).
  • Выборка «набегает по ходу» вместо расчёта до запуска.
  • Остановка при первой подсветке значимости (раздел 8).
  • Тест в нетипичный сезон, во время сбоя рекламы или распродажи.
  • Реклама A и Б в одной группе объявлений: система сама решает, что показывать чаще, и аудитории вариантов расходятся (навык ad-match).

Источники

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.