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

Точность медиапланирования — это воспроизводимость. Инструмент точен, когда два независимых расчёта одного и того же плана дают одно и то же число, и когда любой разрыв между ними можно измерить, а не обсуждать на словах. Это всё определение целиком, и проверить его можно за полдня. Дальше — три теста, которые стоит провести над любым софтом для медиапланирования, и разбор конвенций, где чаще всего плывёт телевизионная математика.
Зрелость рынка тут ни при чём. Рынки с давно устоявшимися currency-панелями и отлаженными агентскими процессами ошибаются точно так же, как рынки, ещё выстраивающие инфраструктуру измерений: число, искажённое правилом округления или конвенцией скидки, проходит проверку просто потому, что не с чем сверить второй расчёт. Тест закрывает этот разрыв везде одинаково.
Тест 1: совпадает ли расчёт с эталонным?
Возьмите план, который команда уже согласовала — подписанный, отправленный селлер-хаусу, обсуждённый внутри. Введите в инструмент те же вводные: целевые рейтинговые пункты, базовый CPP, сезонность, лестницу скидок, долю prime, длительности роликов, форму флайта. Измерьте разницу между результатом инструмента и эталоном в процентах.
Этот процент и есть ваша цифра точности — а не «на демо выглядело похоже».
Для TV Budgeting эта цифра — меньше 0,01% против эталонной агентской модели в Excel, того самого файла, по которому рынок закрывал сделки. Мы проверили оба направления на одном и том же замороженном ядре: TRP в бюджет и бюджет в TRP. Направление имеет значение больше, чем кажется. Инструмент, который считает в одну сторону, а в другую — инвертирует численно, накапливает ошибку именно в инверсии. Одно ядро, оба направления, один ответ.
Спрашивайте у любого вендора его цифру и эталон, на котором она получена. «Мы точные» — не ответ. Ответ — это «0,4% против вашей же модели, вот расхождение по ячейкам».
Тест 2: заморожен ли расчёт?
Результат сверки — это фотография момента. Вопрос в том, останется ли он верным после следующего релиза.
Наш держится, потому что около 750 бэкенд-тестов и около 2100 фронтенд-тестов — почти 3000 в сумме — жёстко привязаны к расчётному ядру. Они существуют, чтобы нельзя было незаметно выкатить изменение, сдвигающее цифру бюджета на 0,3%. Ловить падения — побочный эффект. Если рефакторинг меняет результат, набор тестов падает, и релиз останавливается.
Практический вопрос к вендору: что произойдёт с моим согласованным планом, когда вы выкатите релиз в четверг? Если в ответе звучит слово «не должно», спросите, чем именно это гарантировано.
Тест 3: что происходит при отсутствующем вводе?
Это самый быстрый и самый показательный тест. Оставьте обязательное поле пустым и отправьте расчёт.
Большинство инструментов подставляют значение по умолчанию — это самое опасное поведение в софте для планирования, потому что подставленное значение даёт число, неотличимое от честно посчитанного. Разницу никто не замечает, и это допущение доезжает прямиком до тендера.
Наша система отказывается считать. Если значения нет, расчёт падает с ошибкой и называет конкретное поле. Вы видите ровно то, что было посчитано — ничего не подставлено за вас. Активные месяцы определяются по фактически поставленным TRP, а не по тому, что планировщик выбрал в селекторе месяцев, поэтому календарь показывает реально существующий план.
Где телевизионная математика реально плывёт?
Расхождения в сверке концентрируются вокруг нескольких конвенций. Проверяйте их по одной — в любом инструменте.
- Скидки перемножаются. Селлер-хаус, предлагающий 20% и 10%, на самом деле предлагает 28%, а не 30%. Суммарная ставка —
1 − Π(1 − r). Уже на двух скидках набегает разрыв в 8 пунктов от базы, а на крупной сделке этот разрыв — вся переговорная маржа. Инструмент, который их складывает, сдвигает всё дальше по цепочке на чистую, невидимую глазу величину. - Петля «бюджет–скидка» обязана сходиться. Порог скидки зависит от заявленного бюджета, а бюджет — от скидки. Поэтому система идёт по итерациям. Когда значение колеблется между двумя порогами, мы берём больший бюджет — сознательно консервативный выбор для покупателя, чтобы план никогда не занижал сумму, которую должны покрыть деньги.
- Цепочка CPP считается в строго фиксированном порядке.
base_cpp30 × (1 + seasonality) × (1 − combined_discount) × (1 + uplift). Переставьте местами эти множители — и получите другое, но всё ещё правдоподобное число. - Наценка за prime-time переоценивает всю сделку, а не только прайм-часть. Читайте это поле как множитель на всё целиком — именно так формируется цена.
- Off-prime задаётся долей денег, а не эфирного времени. Вы задаёте денежное деление, а система переводит его в долю рейтингов через affinity и скидку на off-prime. Команды, которые думают в терминах «70% prime» по эфирному времени и вписывают это в денежное поле, получают совсем не тот план, который планировали.
- Взвешенный GRP считается относительно целевой аудитории.
wGRP = wTRP / (affinity / 100). Affinity 200 означает, что целевая аудитория смотрит этот инвентарь вдвое плотнее, чем население в целом. Классическая ошибка — числитель по целевой аудитории при знаменателе по всему населению. Результат попадает в правдоподобный диапазон, поэтому и проходит проверку. - Длительность ролика — это коэффициент. 30-секундный ролик весит 1,0, более короткие ролики весят меньше.
- Два денежных слоя. Shop List — это бюджет, заявленный продавцу, и именно он задаёт порог скидки. Исполнение — это то, что реально вышло в эфир. Смешайте их — и пост-бай сверка развалится.
Форма плана заслуживает той же дисциплины. Свободный ввод 52 недель провоцирует привычку копировать прошлогодний план, поэтому мы предлагаем 17 шаблонов флайтинга (Flat, Front-Loaded, Mid-Peak, Crescendo) и 5 уровней интенсивности от 0,5 до 1,7, и за каждым стоит исследование: затухание adstock у Бродбента — около 2,5 недели для FMCG, работа Джонса по STAS и работа Бине и Филда.
Точность на стороне данных
Расчёт — только половина дела. Если входящие цифры по аудитории приблизительны, сверка по арифметике ничего не даёт.
TV Planner читает сырые файлы поставки Nielsen — бинарный набор EVS/RDS/RSP — и не использует текстовый экспорт. Причина — в детализации: экспорт несёт возрастной диапазон 1–5, источник — точный возраст от 4 до 65 лет. Индустриальные разбивки вроде 18–49 и 25–54 из диапазонов не собрать. Этот потолок — ограничение текстового экспорта, а не данных Nielsen.
Наше доказательство — это воспроизведение официальной таблицы аудитории поячеечно: из 60 858 ячеек все 21 548 ненулевых совпали с точностью до 0,5 человека (Nielsen округляет до целых людей), по всем 17 из 17 демографических разбивок. Мы воспроизводим опубликованные цифры Nielsen. Мы не сертифицированы Nielsen и не заявляем об этом.
Конвенции важны и здесь. Многодневная агрегация взвешивается по universe, а не считается как среднее арифметическое дневных процентов. Reach и frequency считаются на уровне отдельного человека относительно universe в 2 295 613 человек. Приём файлов идемпотентен по SHA-256: повторно присланная поставка пропускается, а исправленная — удаляет и заменяет старые строки, поэтому уточнённый день никогда не превращается в незаметный дубликат.
Пост-бай считается на уровне отдельного выхода. Каждый вышедший в эфир ролик получает ровно один из семи взаимоисключающих статусов относительно плана — matched, out_of_flight, unplanned_channel, out_of_week, out_of_daypart, wrong_length, no_lines — и это превращает голословное «вышло в эфир» в то, что можно защитить на встрече с клиентом.
Два честных ограничения. Наш CPP — плановый прокси: в данных нет реальных цен, поэтому мы не заявляем экономию затрат или ROI как результат продукта. Автономное прогнозирование — в дорожной карте, а не в продукте сегодня. Данные по аудитории пока покрывают один рынок — Молдову.
Проведите тест 1 на своём плане
Принесите план, который ваша команда уже согласовала, и мы прогоним те же вводные через ядро у вас на глазах. Результат либо попадёт в пределы 0,01% от вашего, либо нет. В любом случае вы уйдёте, зная то, чего не знали этим утром.
Частые вопросы
Что на самом деле означает «точность медиапланирования»?
То, что одни и те же вводные дают один и тот же результат при независимых расчётах, и что любое отклонение от согласованного эталона можно измерить. «Меньше 0,01% против конкретной эталонной модели» — это проверяемое утверждение; просто «точный» — нет.
Что происходит с согласованным планом, когда вендор выкатывает релиз?
Целиком зависит от того, закреплена ли сверка тестами. У нас это около 750 бэкенд- и 2100 фронтенд-тестов, поэтому рефакторинг, сдвигающий результат на 0,3%, роняет набор тестов и останавливает релиз.
Почему инструмент должен отказывать при отсутствующем вводе, а не подставлять значение по умолчанию?
Потому что подставленное значение по умолчанию неотличимо от честно посчитанного. План несёт допущение, которое никто не выбирал, прямиком в тендер. Ошибка с указанием поля стоит девяносто секунд и предотвращает это.
Почему читать сырые файлы поставки Nielsen, а не стандартный экспорт?
Текстовый экспорт несёт возрастной диапазон 1–5; сырая поставка — точный возраст 4–65. Разбивки вроде 18–49 и 25–54 из диапазонов не восстановить, поэтому любой инструмент, построенный на экспорте, наследует этот потолок.
Это важно только для рынков с менее зрелыми процессами планирования?
Нет. На зрелых рынках через больше рук проходит больше планов, а значит, больше мест, где несовпадение конвенций может остаться незамеченным. Тест на воспроизводимость дёшев везде и особенно ценен там, где объём выше всего.
Тест 1 работает лучше всего на плане, который вы уже сверили. TV Budgeting прогонит те же вводные через своё ядро у вас на глазах, в обе стороны, и покажет разницу по ячейкам.
Запросить демо →