100 каналов — это не 100 аудиторий. Разбираемся как считать пересечения каналов
Есть вещь, которую я много раз видел в медиапланах по Telegram.
Собрали 20 каналов. У каждого выписали охват, цену, CPM. Отсортировали. Купили самые выгодные.
Всё выглядит логично, пока не задать один вопрос:
а сколько там вообще разных людей?
Человек, который читает крупный канал про инвестиции, вполне может читать ещё четыре канала про инвестиции. То же самое в маркетинге, IT, крипте, городских новостях.
И получается странная ситуация: в таблице мы каждый раз покупаем новый охват, а в реальности часть денег уходит на людей, которых уже купили раньше.
Я решил разобраться, можно ли это учитывать не «на глаз», а прямо в медиаплане.
Спойлер: можно. Но точность данных Telegram накладывает ограничения, и именно здесь начинается самое интересное.
С двумя каналами всё элементарно
Допустим:
канал A охватывает 100 000 человек;
канал B — 80 000;
30 000 человек есть в обеих аудиториях.
Тогда наш реальный суммарный охват:
100 000 + 80 000 − 30 000 = 150 000.
В таблице было 180 тысяч контактов.
Людей — 150 тысяч.
Эти 30 тысяч мы посчитали два раза.
Пока всё просто.
Но я довольно быстро упёрся в вопрос: что вообще означает фраза «пересечение каналов — 30%»?
Те же 30 тысяч — это:
30% первого канала;
37,5% второго;
20%, если считать относительно всей объединённой аудитории.
Поэтому процент overlap без знаменателя для расчётов почти бесполезен.
Telemetr действительно показывает общую аудиторию каналов, Telega.in тоже использует блок с общими подписчиками. Но в публичной документации, которую удалось проверить, не везде достаточно подробно описано, от какого именно знаменателя считается отображаемый процент. Поэтому для модели я бы по возможности всегда хранил абсолютное число общих пользователей, а не просто «27% overlap».
И тут я подумал: отлично, сделаем матрицу пересечений каналов и просто вычтем дубли.
Но это тоже не работает.
Третий канал ломает красивую формулу
Возьмём три канала:
A — 100 000;
B — 80 000;
C — 60 000.
И знаем попарные пересечения:
A и B — 30 000;
A и C — 20 000;
B и C — 15 000.
Хочется сложить три аудитории и вычесть три пересечения.
Но есть люди, которые находятся сразу во всех трёх каналах.
Их мы при таком расчёте вычтем несколько раз.
Поэтому настоящая формула выглядит так:
уникальная аудитория = A + B + C − AB − AC − BC + ABC
Где:
A, B, C— размеры трёх аудиторий;AB, AC, BC— попарные пересечения;ABC— люди, состоящие одновременно во всех трёх.
Для наших чисел получается:
175 000 + ABC.
Если одновременно во всех трёх состоят 5 тысяч — unique reach будет 180 тысяч.
Если 15 тысяч — уже 190 тысяч.
При этом размеры каналов и все попарные пересечения абсолютно одинаковые.
Вот здесь у меня и сломалась первоначальная идея.
Даже если сервис отдаст идеальную таблицу попарных пересечений 30 каналов, точный совокупный unique reach из неё восстановить нельзя. Нам неизвестны тройные, четверные и более сложные пересечения.
Значит, задача немного меняется.
Мне уже не обязательно знать точное число всех уникальных людей.
Для закупки достаточно ответить на другой вопрос:
сколько новых людей примерно добавит следующий канал к тому, что я уже купил?
Вот эта метрика оказалась намного полезнее
Назовём её incremental reach — дополнительный охват.
Допустим, у меня уже есть несколько купленных каналов.
Я смотрю новый канал X:
его охват — 50 000;
с первым купленным каналом пересекаются 15 000;
со вторым — 10 000.
Проблема: часть этих 15 и 10 тысяч может быть одними и теми же людьми.
Поэтому я не могу просто сказать:
50 − 15 − 10 = 25 тысяч новых.
Но могу посчитать границы.
В худшем для нас случае группы почти не совпадают:
новых будет минимум 50 − 15 − 10 = 25 тысяч.
В лучшем случае эти 10 тысяч почти целиком уже входят в те 15:
новых будет максимум 50 − 15 = 35 тысяч.
Получается:
этот канал добавит примерно от 25 до 35 тысяч новых людей.
Уже достаточно полезно.
Если он стоит 100 тысяч рублей — возможно, мне вообще не нужна точность до пользователя. Диапазон и так показывает, насколько покупка разумна.
Это первое правило, которое я бы реально перенёс в рабочую таблицу:
не пытаться насильно получать точное число там, где исходные данные его не дают.
Иногда диапазон честнее и полезнее.
Но для сортировки каналов всё равно нужна одна цифра
Когда кандидатов двадцать, сравнивать диапазоны неудобно.
Поэтому я попробовал простую модель.
Берём канал X.
Пусть:
R— его охват;I₁— сколько его аудитории пересекается с первым уже купленным каналом;I₂— со вторым;дальше по аналогии.
Для каждого считаем долю пересечения:
I / R
Например:
канал охватывает 50 000 человек;
с первым пересекается 10 000.
Значит:
10 000 / 50 000 = 20%.
Приближение строится так: смотрим, какая доля аудитории не попала в каждый из уже выбранных каналов, и перемножаем эти доли.
То есть:
Новый охват ≈ R × (1 − I₁/R) × (1 − I₂/R) × ...
Простой пример.
Канал X:
reach = 50 000;
overlap с A = 20%;
overlap с B = 10%.
Тогда:
50 000 × 0,8 × 0,9 = 36 000 новых пользователей.
Почему это только оценка?
Потому что мы делаем допущение, что пересечения внутри X достаточно независимы.
В реальности может существовать одно ядро из тех же самых финансовых фанатов, которое одновременно читает десять похожих каналов. Тогда модель ошибётся.
Но у неё есть хорошее свойство: её можно посчитать в Google Sheets за секунду.
А рядом оставить нижнюю и верхнюю границы.
Получается уже не магическое число, а:
минимум / рабочая оценка / максимум.
В синтетической модели из исследования такая pairwise-оценка ошибалась относительно известных нам реальных множеств примерно на 0,35–2,5% в трёх сценариях. Это не доказательство, что она будет так же точна в Telegram — модель специально была построена достаточно гладкой. Но для меня этого достаточно, чтобы рассматривать формулу как рабочую гипотезу, которую потом можно калибровать своими данными.
И тут обычный CPM начинает выглядеть подозрительно
Допустим, есть канал:
охват — 100 000;
цена — 100 000 ₽.
CPM:
1 000 ₽.
Хорошо.
Но после уже купленных площадок он добавляет только 20 000 новых пользователей.
Фактически я плачу:
100 000 / 20 000 × 1000 = 5 000 ₽
за тысячу дополнительной аудитории.
Я называю это incremental CPM, или просто iCPM:
iCPM = цена канала / новые пользователи × 1000
Теперь сравним с маленьким каналом:
охват — 40 000;
цена — 50 000 ₽;
новых пользователей — 35 000.
Получаем:
50 000 / 35 000 × 1000 ≈ 1 429 ₽.
То есть большой канал:
обычный CPM = 1 000 ₽iCPM = 5 000 ₽
Маленький:
обычный CPM = 1 250 ₽iCPM = 1 429 ₽
Если смотреть на стандартный медиаплан, первым хочется купить большой.
Если задача — расширять охват уже работающей кампании, маленький интереснее примерно в 3,5 раза.
И вот это уже меняет сам принцип выбора площадок.
Я проверил идею на десяти синтетических каналах
Реального публичного benchmark по пересечениям Telegram я не нашёл.
Есть кейс OneSpot, где внутри их собственной базы использовались ориентиры около 30% пересечения для узких тематик и 20% для широких. Но там нет достаточной методологии, чтобы объявить:
среднее пересечение Telegram — 20–30%.
Так делать я не хочу.
Поэтому в исследовании построена синтетическая популяция из 400 тысяч пользователей и десять условных каналов.
Это не настоящие Telegram-каналы.
Цель была другая: получить математически совместимые аудитории и посмотреть, что происходит с медиапланом при разной плотности пересечений.
Три сценария:
LOW — аудитории пересекаются слабо.
MEDIUM — заметно.
HIGH — крупные каналы в основном вращаются вокруг одного ядра людей.
Бюджет — одинаковый:
280 000 ₽.
Сравнил две стратегии.
Первая — максимально знакомая:
покупаем самые крупные каналы, пока хватает денег.
Вторая:
после каждой покупки пересчитываем, сколько новых пользователей добавляет каждый оставшийся канал, и смотрим на цену этого добавочного охвата.
Результат получился такой:
Сценарий | По размеру | С учётом overlap | Разница |
|---|---|---|---|
LOW | 210 966 unique | 214 945 | +1,9% |
MEDIUM | 175 632 | 188 898 | +7,6% |
HIGH | 136 420 | 177 973 | +30,5% |
И мне особенно нравится первая строка.
Потому что она не подтверждает красивую гипотезу.
При слабом пересечении вся дополнительная математика почти ничего не дала. Более того, overlap-aware стратегия чуть хуже вышла по цене тысячи уникальных пользователей.
То есть я бы не стал теперь добавлять десять формул в каждый медиаплан.
Если аудитории достаточно разные, проблема почти отсутствует.
Но при HIGH-overlap картина переворачивается.
Обычная стратегия формально покупает 279 тысяч охвата.
Overlap-aware — только 261 тысячу.
По обычной таблице первая выглядит лучше.
В реальности модели:
136 тысяч уникальных против 178 тысяч.
Меньше «бумажного охвата».
На 30,5% больше людей.
Вот ради таких ситуаций всё это и имеет смысл считать.
Самый неприятный пример — третий крупный канал
В HIGH-сценарии стратегия по размеру последовательно покупает три крупных канала.
Первый:
reach — 105 000;
новых — 105 000;
iCPM ≈ 952 ₽.
Всё прекрасно.
Второй:
reach — 92 000;
новых после первого — всего 21 769;
iCPM ≈ 4 042 ₽.
Уже неприятно.
Третий:
reach — 82 000;
новых после первых двух — 9 651;
iCPM ≈ 8 082 ₽.
А его обычная цена всё ещё выглядит нормально.
Вот этот момент мне кажется главным.
Канал не стал хуже.
У него тот же контент, та же аудитория, тот же прайс.
Просто мы уже купили почти всех его людей где-то ещё.
Ценность площадки нельзя полностью оценить отдельно от медиаплана, в который мы её добавляем.
Это сильно меняет взгляд на фразу:
«Этот канал у нас хорошо работает».
Мой следующий вопрос теперь:
На каком этапе медиаплана?
Потому что вторым он может быть прекрасным.
Десятым — уже бессмысленным.
Как бы я собирал такой медиаплан сейчас
Без сложной математики процесс получается довольно короткий.
Сначала собираю нормальный список подходящих каналов и выкидываю нерелевантные. Низкое пересечение с каналом про корейские сериалы не делает его хорошей площадкой для SaaS.
Дальше для каждого храню:
рабочий reach;
стоимость;
пересечения с остальными.
Первую площадку выбираю как обычно.
После неё для каждого следующего считаю:
сколько новой аудитории он примерно добавляет;
и:
сколько стоит тысяча этой новой аудитории.
После каждой покупки показатели пересчитываются.
В какой-то момент получится примерно так:
Канал | Охват | Новый охват | Доля новых | iCPM |
|---|---|---|---|---|
A | 82k | 82k | 100% | 951 ₽ |
B | 57k | 41k | 71% | 1 352 ₽ |
C | 26k | 17k | 64% | 1 620 ₽ |
D | 22k | 13k | 59% | 1 771 ₽ |
E | 39k | 21k | 53% | 2 043 ₽ |
F | 35k | 16k | 46% | 2 377 ₽ |
Мне нравится смотреть именно на этот ряд.
Он показывает момент насыщения намного лучше количества купленных каналов.
Не существует правила:
после десяти каналов аудитория выжжена.
Зато существует вполне конкретная ситуация:
следующий релевантный канал добавляет всё меньше новой аудитории, а стоимость этой аудитории растёт.
Вот это уже причина остановиться.
Есть одна проблема: подписчики — ещё не рекламные показы
И вот здесь я бы не стал делать вид, что мы решили deduplication Telegram Ads окончательно.
Пересечение подписчиков — это не пересечение людей, которые реально увидят рекламу.
Человек может:
состоять в обоих каналах и не читать ни один в нужный период;
читать только один;
быть Premium-пользователем, которому sponsored messages по умолчанию скрыты;
просто не получить показ из-за аукциона и доступного инвентаря.
Telegram не даёт рекламодателю публичную user-level карту всех людей из выбранных каналов, по которой можно идеально дедуплицировать прогноз. TGStat тоже не документирует API с subscriber intersections; его данные удобнее использовать для поиска похожих каналов, связей, упоминаний и потенциальных кластеров.
Поэтому subscriber overlap я бы использовал не как:
«точно 31 284 показа будут дублями».
А как сигнал:
эти аудитории структурно очень похожи, значит следующий канал с высокой вероятностью принесёт меньше нового reach.
Для прямых посевов я бы вообще старался работать ближе к охватам постов, а не к общему числу подписчиков.
И всё-таки overlap не надо уничтожать
В процессе расчётов легко скатиться в новую крайность:
чем меньше пересечение — тем лучше канал.
Тоже нет.
Если моя задача — максимальный уникальный охват, первый контакт действительно особенно ценен.
Но реклама существует ещё и через frequency.
Повторный контакт может быть полезен.
В классическом медиапланировании давно считают не только reach, но и frequency, а Nielsen отдельно использует понятия incremental/deduplicated reach и точки убывающей отдачи.
Поэтому я бы не оптимизировал медиаплан под минимальный overlap.
Я бы оптимизировал его под:
максимальную добавочную ценность следующей покупки.
Иногда это новая аудитория.
Иногда — хороший второй контакт.
Но я хочу хотя бы понимать, за какой именно из этих двух продуктов плачу деньги.
Что в итоге изменилось у меня в голове
Я начинал с довольно простой мысли:
надо учитывать пересечения каналов.
После расчётов она стала немного другой.
Сам канал почти не имеет фиксированной медиаплановой ценности.
Есть цена площадки.
Есть её охват.
А есть ещё третья величина — сколько она добавляет именно к тому плану, который уже собран.
И эта величина постоянно уменьшается.
Поэтому вместо:
CPM канала = 1 000 ₽
мне теперь интереснее:
мы уже купили шесть площадок; сколько новых релевантных людей даст седьмая и сколько я заплачу именно за них?
Это уже другой медиаплан.
И мне кажется, он гораздо ближе к тому, что мы на самом деле покупаем.
Я думаю следующим шагом собрать из этой модели готовый Google Sheets-калькулятор: загружаешь каналы, цены и матрицу пересечений — он сам пересчитывает incremental reach, диапазон возможного охвата и iCPM после каждой выбранной площадки.
Если такой инструмент нужен — напишите в комментариях. Если наберётся интерес, соберу и выложу шаблон.
А ещё интереснее услышать тех, кто уже реально считает дедупликацию в Telegram: как вы решаете пересечения трёх, пяти, двадцати каналов и на каком уровне данных?
В своём Telegram-канале я разбираю Telegram Ads и медиапланирование уже без формата «пять советов начинающему».
И кидайте идеи, что разобрать дальше. Я бы с удовольствием полез в одну из трёх тем: автоматический подбор каналов, математическое распределение бюджета между тестами или полноценный скоринг медиаплана через API.