Как я считаю stop-loss для объявлений в Telegram Ads

В Telegram Ads легко попасть в одну из двух крайностей.

Первая — слишком рано выключить объявление, потому что оно потратило несколько евро и пока ничего не принесло.

Вторая — наоборот, бесконечно ждать, потому что «ещё мало данных».

Поэтому я стараюсь заранее понимать, сколько денег конкретная гипотеза имеет право потратить без результата.

Раньше у меня было простое правило: если объявление потратило больше €5 и не принесло подписчика, выключаем.

Для части кампаний оно работает нормально. Но если копнуть чуть глубже, €5 сами по себе вообще ничего не говорят.

При CPC €0,10 это 50 кликов.

При CPC €1 — пять.

В первом случае данных уже прилично. Во втором мы почти ничего не проверили.

Поэтому я попробовал собрать stop-loss не от круглой суммы, а от экономики объявления и вероятности того, что мы просто получили неудачную серию.

Что вообще должен делать stop-loss

Задача здесь не в том, чтобы угадать идеальный момент выключения объявления.

Его задача проще:

не тратить слишком много на гипотезу, которая с высокой вероятностью уже не проходит по нашей экономике.

Почти как в трейдинге. Мы заранее определяем допустимый убыток, а не принимаем решение после того, как деньги уже потрачены.

Для расчёта мне нужны три значения:

  • CPC — сколько сейчас стоит клик;

  • целевой CPA/CPS — сколько я максимум готов платить за результат;

  • уровень уверенности, после которого готов считать нулевой результат не случайностью.

Я обычно беру 95%.

Дальше можно считать.

Шаг 1. Понимаем, какая конверсия нам вообще нужна

Допустим:

CPC = €0,25.

Подписчик должен стоить максимум €5.

Тогда минимальная конверсия клика в подписку:

CVR = CPC / CPS

Получаем:

€0,25 / €5 = 5%.

То есть объявление имеет смысл для моей экономики, если хотя бы один человек из двадцати кликов подписывается.

Теперь вопрос:

сколько кликов подряд без подписки я должен получить, чтобы перестать верить, что реальная конверсия здесь хотя бы 5%?

Вот здесь начинается статистика.

Шаг 2. Считаем вероятность получить ноль результатов

Если реальная конверсия равна p, вероятность того, что один человек НЕ подпишется:

1 − p

Вероятность получить ноль подписчиков после n кликов:

(1 − p)^n

Нам нужно найти такое n, при котором эта вероятность станет меньше 5%.

То есть:

(1 − p)^n ≤ 0,05

Отсюда:

n ≥ ln(0,05) / ln(1 − p)

Для нашей CVR 5%:

n ≈ 59 кликов.

Получается довольно конкретный ориентир.

Если связка действительно способна держать нужные мне 5% конверсии, вероятность увидеть 59 кликов подряд без единой подписки уже меньше 5%.

После этого я спокойно её выключаю.

Шаг 3. Переводим это обратно в деньги

У нас:

59 кликов.

CPC €0,25.

Получаем:

59 × €0,25 = €14,75.

Вот наш stop-loss.

Не €5.

А примерно €15.

Причём эта сумма взялась не из головы. Она получилась из:

  • текущего CPC;

  • допустимой стоимости подписчика;

  • минимальной нужной конверсии;

  • выбранного уровня уверенности.

Вот это уже можно использовать как рабочее правило.

Несколько примеров

Вариант 1

Допустимый CPS — €2.

CPC — €0,10.

Нужная CVR:

0,10 / 2 = 5%.

При 95% уверенности:

59 кликов без подписки.

Stop-loss:

59 × 0,10 = €5,90.

Вот здесь моё старое правило «около €5 и выключаем» действительно оказывается вполне адекватным.

Вариант 2

Допустимый CPS — €5.

CPC — €0,25.

Снова нужна CVR 5%.

Те же 59 кликов.

Но stop-loss уже:

€14,75.

Если выключить такое объявление после €5, мы дадим ему всего 20 кликов.

А при реальной конверсии 5% вероятность получить первые 20 кликов вообще без подписки всё ещё около 36%.

То есть нормальную связку мы можем убить просто из-за дисперсии.

Вариант 3

Лид может стоить €30.

CPC — €1,20.

Нужная конверсия:

1,20 / 30 = 4%.

Для 95%-ного порога нужно примерно 74 клика без лида.

Stop-loss:

74 × €1,20 = €88,80.

И здесь правило «потратили €5 без лида — выключаем» уже вообще не имеет смысла.

За €5 мы даже пяти кликов нормально не соберём.

Отсюда получается интересное короткое правило

Если нужная конверсия небольшая, формулу можно приблизить.

Для 95%-ной уверенности количество неудачных попыток получается примерно:

3 / CVR

Это известное статистическое приближение — так называемое rule of three.

Если подставить нашу экономику:

CVR = CPC / CPA

получаем примерно:

Stop-loss ≈ 3 × целевой CPA

То есть при нуле конверсий:

  • целевой результат €2 → stop-loss около €6;

  • целевой результат €5 → около €15;

  • целевой результат €10 → около €30;

  • целевой лид €30 → около €90.

Мне эта формула нравится не потому, что теперь надо всем срочно ставить stop-loss ровно в три CPA.

А потому, что она хорошо показывает сам принцип:

допустимый расход без результата должен масштабироваться вместе с ценой самого результата.

Если подписчик для бизнеса может стоить €1,5, ждать €30 бессмысленно.

Если нормальный лид стоит €40, выключать кампанию после €5 тоже бессмысленно.

Но есть ещё один слой

До этого мы считали только:

клик → конверсия.

На практике я ещё разделяю проблему на два этапа.

Если объявление почти не получает кликов, то статистика по подпискам нам пока малоинтересна.

Там проблема выше:

показ → клик.

То есть сначала надо понять, проходит ли объявление по CTR.

А если CTR нормальный, кликов уже достаточно, но подписок нет — тогда смотрим:

клик → посадочная → подписка.

Это разные поломки.

Поэтому для себя я бы строил stop-loss в два уровня:

1. Stop-loss по креативу.
Набрали достаточно показов, а CTR ниже минимально допустимого — выключаем или меняем объявление.

2. Stop-loss по конверсии.
CTR нормальный, клики есть, но после рассчитанного количества кликов нет целевых действий — выключаем связку или разбираем посадочную.

Сам бюджет без этой разбивки мало что объясняет.

Как это можно собрать в таблицу

Мне достаточно пяти колонок:

CPC

Целевой CPA

Нужная CVR

Кликов без результата

Stop-loss

€0,10

€2

5%

59

€5,90

€0,25

€5

5%

59

€14,75

€0,40

€4

10%

29

€11,60

€1,20

€30

4%

74

€88,80

Дальше это спокойно автоматизируется в Google Sheets.

Входные данные меняются — stop-loss пересчитывается.

И не нужно каждый раз решать на глаз, «достаточно мы уже потратили или ещё дать покрутиться».

Где я бы не доверял этой формуле

Это всё-таки не торговый робот и не универсальная схема.

Модель предполагает, что мы тестируем одну и ту же гипотезу:

  • аудитория примерно одинаковая;

  • креатив не меняли;

  • посадочная та же;

  • конверсия нормально отслеживается;

  • клики более-менее независимы.

Если после первых 20 кликов мы поменяли текст, подняли ставку и начали крутиться в других каналах, считать следующие 30 кликов продолжением того же теста уже сомнительно.

То же самое с длинными воронками. Если лиды приходят с задержкой в несколько дней, stop-loss нужно считать с учётом этого лага.

И отдельно: вся формула выше особенно удобна именно для ситуации «получили ноль результатов».

Когда конверсии уже появились, там интереснее считать доверительный интервал для реального CVR, а не пользоваться rule of three.

Но как быстрый способ понять, когда ноль уже перестаёт быть просто невезением, мне эта модель нравится.

Мой практический опыт начинался с очень простого правила — примерно €5 без подписчика и объявление выключаем.

После расчётов я бы сформулировал его немного иначе:

сначала определяю, какая конверсия нужна проекту для нормальной экономики, а потом считаю, сколько нулевых попыток готов дать этой гипотезе.

Иногда ответ всё равно будет €5.

Иногда €15.

А иногда окажется, что после €5 мы вообще ещё ничего не протестировали.

Если кто-то использует похожие stop-loss модели в Telegram Ads — расскажите в комментариях, интересно сравнить подходы.

В Telegram-канале я периодически выкладываю рабочие наблюдения по Telegram Ads.

И если такой формат полезен, тоже пишите, что ещё разобрать через расчёты: бюджет теста, минимальную выборку, распределение денег между объявлениями, парсеры, автоматизацию или инструменты. Там есть куда копать.