Marketing OS

Кейс · Marketing OS

Синтетическая фокус-группа: претест роликов на панели из персон

Здесь рекламный ролик до запуска обсуждает панель из 12 синтетических персон. Видео разбирает модель, за персон отвечают тоже модели, а метрики, гейты и проверку отчёта держит код.

  1. ЗагрузкаРолик до 3 минут и 200 МБ уходит прямо в хранилище, размер и длительность проверяются трижды.
  2. Протоколffmpeg находит склейки, видеомодель описывает кадры, титры и речь, код считает уверенность разбора.
  3. Сверка человекомПанель не запустится, пока уверенность ниже 0,7 и пока человек не подтвердил, что протокол описывает именно этот ролик.
  4. Панель12 персон, собранных из реальных текстов людей, читают протокол и отвечают на анкету блоками.
  5. КодированиеОтдельный вызов раскладывает реплики по словарю из 73 кодов возражений.
  6. ОтчётРешение по ленте, карта возражений и правки со счётчиками вида «5 из 12», без процентов и прогнозов.
Содержание ↓
  1. Зачем проверять ролик до эфира
  2. Как устроено: от файла до отчёта
  3. Почему столько работы у кода
  4. Что получает маркетолог
  5. Грабли
  6. Корпус раньше промптов

Зачем проверять ролик до эфира

Обычно претест ролика — отдельная закупка у исследовательского агентства, со своим сроком и бюджетом. Поэтому его делают для флагманских роликов, а короткие версии для соцсетей уходят в эфир на вкусе команды. Хотя у коротких версий всё решают первые три секунды.

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

Как устроено: от файла до отчёта

Загрузка

Ролик до 3 минут и 200 МБ браузер отправляет прямо в хранилище, минуя сервер. Тело серверного запроса ограничено 20 МБ, и поднимать лимит опасно: файл целиком лёг бы в память процесса, а падение приложения по памяти мы на этом сервере уже видели. Размер и длительность проверяются три раза — в браузере до отправки, по объекту в хранилище и утилитой ffprobe перед разбором. Первые байты код сверяет с сигнатурой контейнера: под расширением .mp4 может лежать плейлист со ссылками, и ffmpeg честно пойдёт по ним в сеть.

Протокол

Разбор идёт в шесть стадий, и интерфейс так и пишет: «шаг 3 из 6 (нарезка на отрезки)». ffprobe отдаёт паспорт файла: длительность, частоту кадров, наличие звука. ffmpeg находит монтажные склейки и режет ролик на отрезки не длиннее двух секунд. Видеомодель Gemini получает файл и описывает каждый отрезок: что в кадре, какие титры, что звучит. Первые три секунды разбираются отдельным проходом с частотой 8 кадров в секунду: окно короткое, и проход стоит копейки.

Гейт и панель

Панель не запускается, если расчётная уверенность протокола ниже 0,7 или если человек не открыл разбор и не подтвердил, что это описание его ролика. Пересобрал протокол — подтверждай заново.

Дальше 12 персон читают протокол и отвечают на анкету. Каждая собрана из записей корпуса трёх родов: письменные отзывы, рассказы о себе из публичных видео, глубинные интервью. Состав панели задаётся seed протокола, поэтому повторный прогон соберёт тех же людей, и расхождение двух отчётов остаётся списать только на модель. Первый вопрос у всех один, про ленту: пролистнул бы или задержался, и что на это повлияло. Остальные вопросы у каждой персоны идут в своём порядке.

Кодирование и отчёт

Отдельный вызов с температурой 0 раскладывает реплики по словарю из 73 кодов в 11 группах. Подходящего кода нет — ставится «вне словаря», и дыра в словаре видна сразу. В отчёте пять блоков: что панель сделала в ленте, какие возражения поднялись, что сработало, с какими признаками ролика панель связывает возражения и что поправить.

Почему столько работы у кода

Персона читает протокол, самого ролика она не видит. Допустим, модель приняла студийную съёмку за репортаж. Тогда панель уверенно обсудит ролик, которого не существует, и ни один следующий шаг этого не заметит. Поэтому всё, что можно измерить, я отдал коду.

Границы склеек ищет ffmpeg. Видеомодель ошибается по времени на полсекунды и больше, а допуск у меня 0,3 секунды. Её оценка числа склеек идёт только в расчёт уверенности.

Уверенность протокола считает формула из пяти сигналов. Больше всех весит покрытие (0,30) — доля отрезков, у которых есть описание. Дальше обоснованность оценки постановочности (0,25), доля сцен, прошедших проверку схемы (0,20), совпадение числа склеек (0,15) и расшифровка речи при живой звуковой дорожке (0,10). Спрашивать модель, насколько она уверена, бессмысленно: гладкий текст получает высокую самооценку, даже когда он полностью ложный.

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

Персона не знает, что смотрит рекламу. В её промпт попадают только те поля протокола, которые названы в коде поимённо, и перед отправкой код проверяет готовый промпт на запрещённые слова: название бренда, «реклама», «креатив», «заказчик». Утечка роняет прогон целиком. Имя файла тоже вырезано: «ролик_бренд_финал.mp4» сразу раскрыл бы, что это реклама. Персона, которая знает, что бренд появился на 26-й секунде, начинает рассуждать как медиапланер, а живой зритель не поймёт, чей это ролик.

До записи в базу отчёт проходит валидатор. Процентов по панели в нём не бывает, только счётчики вида «5 из 12». Внешнюю статистику валидатор пропускает, если рядом с числом стоят источник и объём выборки, прогнозы не пропускает совсем. Каждую цитату он ищет дословно в репликах персон. Нарушено хоть одно правило — отчёт не публикуется.

Что получает маркетолог

Маркетолог видит протокол по секундам с плеером и таймлайном и ответы персон, сгруппированные по вопросам. Ответы дословные, с пометками, что человека зацепило и почему, если он это назвал. Дальше идут карта возражений и от трёх до пяти правок. На одной панели можно сравнить от 2 до 5 роликов: они стоят в том порядке, в каком их выбрали, и инструмент показывает различия, не назначая победителя. HTML-выгрузка открывается офлайн и хранит в шапке модель, seed и версию корпуса — без них через месяц отчёт не воспроизвести.

Грабли

Один кадр в секунду. На эталонном ролике титры вспыхивали на 0,16 секунды. При настройке по умолчанию — один кадр в секунду — модель вернула протокол, который прошёл проверку схемы, читался гладко и был выдуман от начала до конца: вместо титров — «тёмный однотонный фон». На этом ролике при четырёх кадрах в секунду титры прочитались слово в слово. Ниже четырёх теперь ставить нельзя.

Уверенность 1,00 за пустоту. На всех сценах модель ответила «не определить», пустой знаменатель превратился в единицу, и самый бесполезный протокол получил максимальный балл. Теперь сигнал без измерения стоит 0,5 и порождает предупреждение.

Кириллица и регулярные выражения. В JavaScript \b и \w кириллицу не видят. Из-за этого правила валидатора отчёта какое-то время не работали вовсе. Поймали это наши же тесты, и границы слов теперь задаются явно.

Бренд, записанный на слух. Проверка промпта ловила название бренда в одном написании. В расшифровках интервью люди произносили его как придётся, и три варианта проходили насквозь прямо в цитатах. Теперь буквы нормализуются перед проверкой, а тест изоляции гоняется на живых файлах корпуса.

Панель из одного голоса. Ранние прогоны звучали как одна вежливая персона, размноженная на всю панель. Разброс вернули через содержание: профили просмотра (со звуком, без звука, отвлёкся, бросил на середине), анкета блоками по четыре вопроса, после вопроса про ленту — свой порядок у каждого, собственные цитаты человека в промпте и блок «чего ты о себе не знаешь». Похожесть ответов разных персон на один вопрос упала примерно вдвое.

Корпус раньше промптов

Из инструментов нужны видеомодель, которая принимает файл целиком, и ffmpeg. Из данных — словарь возражений и корпус реальных текстов вашей аудитории: отзывы, интервью, обращения в поддержку. С корпуса я бы и начал. Без него персоны говорят голосом модели, и настройка промптов этого не исправит. Какие тексты аудитории у вас уже есть и хватит ли их на панель, удобно разобрать на консультации. Про то, как такие разделы входят в работу отдела, — страница внедрение ИИ в маркетинг.

Чего пока нет, скажу прямо. Веса уверенности не откалиброваны на эталонной выборке, и пилота с живыми людьми для сверки ещё не было. Декодер однажды потерял вторую строку мелкого текста, хотя уверенность стояла 0,97, поэтому ручную сверку гейт не отменяет. А словарь возражений описывает претензии к продукту и почти ничего не говорит о том, как прочитан сам ролик.

  • Next.js
  • Supabase
  • ffmpeg
  • Gemini
  • OpenAI
  • zod

Вопросы

Вопросы и ответы

Заменяет ли синтетическая панель живую фокус-группу?

Нет, и я её для этого не строил. Панель объясняет реакцию задним числом и подсказывает возражения, о которых стоит спросить живых людей. Отчёт не выдаёт ни долей, ни прогнозов, ни вердикта «зайдёт или нет»: связки признаков ролика с ответами ни на чём не откалиброваны.

Какие материалы можно проверить?

Видео в mp4, mov или webm, до 3 минут и до 200 МБ; на одной панели можно поставить рядом от 2 до 5 роликов. Статичные баннеры и тексты раздел пока не разбирает.

Откуда берутся персоны?

Из корпуса реальных текстов: письменных отзывов, рассказов людей о себе из публичных видео и глубинных интервью. Профессию, сегмент и тип города персона получает из своей записи, а имени у неё нет.

Сколько стоит один прогон?

Прогон панели — около двух десятков вызовов текстовой модели плюс два прохода видеомодели на разбор ролика. По умолчанию в сутки можно сделать до 10 разборов и до 20 прогонов.

Консультация

Разберём вашу задачу

Опишите в Telegram процесс, который хотите отдать ИИ: что на входе, какие данные есть, кто будет пользоваться результатом. Отвечу, с чего начать. Иногда хватает одного созвона, а иногда нужен аудит с письменным отчётом или сопровождение команды на весь пилот.

Дмитрий Щеголяев с микрофоном на Мобильном Форуме