--- name: "cp-analytics" description: "Разбирает статистику одной площадки: где взять данные (ВКонтакте — XLS/CSV и stats.get, Дзен — XLS, YouTube — Advanced mode с лимитом 500 строк, TikTok — XLSX/CSV, Instagram и Telegram — только руками), какие поля брать, как нормировать на охват, считать медиану, ловить выбросы двумя ступенями (2×–10× медианы разбирается как контент, свыше 10× сначала объясняется дистрибуцией) и раскладывать единицы по квадрантам «охват × вовлечённость». Отдаёт таблицу метрик и 3–5 находок, у каждой гипотеза и способ проверки. Работает и на неполных данных: сокращает процедуру и говорит, что выгрузить, чтобы её достроить. Держит режим малых чисел и календарь разрывов данных, поэтому не принимает смену определения метрики за провал контента. Триггеры — «разбери статистику», «почему упали охваты», «что сработало», «посмотри цифры за месяц», «проанализируй канал». Use when the user wants analysis of one platform's stats or asks why reach dropped." --- Перед применением прочитай [правила интеграции «Блог с нуля»](../../context/10-blog-runtime.md). Они задают единый запуск, текущий проект и производственные ограничения; не начинай второй независимый бриф. # cp-analytics · Разбор статистики одной площадки Задача — превратить выгрузку в 3–5 находок, каждая из которых проверяема. Не пересказ цифр, не «охваты выросли на 12%», не отчёт ради отчёта. ## Когда не этот скилл - Нужно свести **несколько площадок** в один отчёт → `cp-analytics-cross`. Там живёт словарь несовместимости метрик, здесь — одна площадка и её собственная динамика. - Нужно оценить **упаковку, позиционирование, воронку** аккаунта, а не цифры → `cp-audit`. - Нужно оценить сценарий **до** съёмки → `cp-video-score`. - Нужно решить, что публиковать дальше → `cp-content-plan`. ## Контекст Читай из `context/`: `02-metrics.md` целиком (что даёт каждая площадка, формулы, детекция аутлаеров, окна валидации), `07-evidence.md` §4–§7 (порог, режим малых чисел, календарь разрывов), `01-platforms.md` §6 и §8 (аудитория площадок, что сломало старые ориентиры). Профиль бренда — `brands//`: `assets.md` (площадки и их роль), `brand.md` (стадия), `audience.md` (на какой аватар работал контент). Не нашлось — скажи одной строкой и работай по врезке ниже, факты спрашивай, не выдумывай. ## Врезка констант **Где данные и в каком виде.** | Площадка | Выгрузка | Что брать | |---|---|---| | **ВКонтакте** | есть нативно: «Выгрузить статистику», **XLS и CSV**, с выбором диапазона и групп метрик. API `stats.get` — по дням | `day`, `views`, `visitors`, `reach`, `reach_subscribers`, `subscribed`, `unsubscribed`, разбивки по полу, возрасту, гео. В «Охвате» раздельно: полный, виральный, охват подписчиков, рекламный. Клипы — просмотры, уникальные зрители, среднее время досмотра | | **Дзен** | **XLS** из Студии | показы, открытия, дочитывания, подписки, комментарии, лайки, репосты, время просмотра; для статей CTR в ленте и тепловая карта, для видео VTR и график глубины; источники переходов | | **YouTube** | Advanced mode. **Лимит 500 строк на отчёт**, до 50 сохранённых отчётов, удаляются через 60 дней. Больше 500 строк — только Reporting API | просмотры, engaged views, среднее время просмотра, средний процент просмотра, показы и CTR показов, источники трафика, доля подписчиков | | **TikTok** | кнопка выгрузки в Business Hub, **XLSX или CSV**, встроенного репортинга нет — отчёт собирается руками. Органика и платное в один отчёт не сводятся. История — до года | просмотры, лайки, комментарии, репосты, время просмотра, completion rate, демография | | **Instagram** | нативного CSV нет. Обходные пути: архив аккаунта (JSON), Meta Business Suite, Graph API. Метрика подписчиков через Insights API — от 100 подписчиков | просмотры, охват, вовлечённые аккаунты, посещения профиля, подписки, сохранения, репосты; Reels — время просмотра и среднее время просмотра | | **Telegram** | **выгрузки нет** ни в каком виде. Ввод руками или скриншоты графиков. Официального порога нет: доступ определяется серверным конфигом и возвращается флагом `can_view_stats`, практически наблюдаемый порог — более 50 подписчиков (уровень C), официальным числом не называть | просмотры на пост, репосты на пост, реакции на пост, источники просмотров, источники новых подписчиков, активные часы, доля с включёнными уведомлениями | | **RuTube** | считать, что выгрузки нет, пока не проверено вручную. График удержания с 26.02.2026 — только для видео после 01.07.2025 (вертикальные после 01.11.2025), от 100 просмотров, от 3 минут, только в вебе | средняя длительность просмотра, точки отвала, пересматриваемые фрагменты | **Подписки на уровне публикации есть не везде.** Дзен отдаёт подписки в метриках публикации — там строка «подписки / охват» считается. ВКонтакте отдаёт `subscribed` и `unsubscribed` **по дням**, а не по единице контента: на уровне публикации метрика недоступна в принципе, строка снимается, а не оценивается по дню. Telegram даёт источники новых подписчиков по каналу, не по посту. Прежде чем считать эту строку, проверь, отдаёт ли площадка метрику по публикации; не отдаёт — строка не выводится, и это идёт в «чего мы не знаем». **Календарь разрывов данных.** Падение на этих датах **не является провалом контента**: | Дата | Что произошло | |---|---| | 31.03.2025 | YouTube: просмотр Shorts при каждом старте и реплее, старая метрика → engaged views | | 21.04.2025 | Instagram: упразднены impressions и plays, введена единая Views | | 06.06.2025 | Instagram: история видеопросмотров профиля доступна только с этой даты | | 01.07.2025 | RuTube: детальная статистика только для видео после этой даты | | 30.03.2026 | ВКонтакте: автоматическая чистка подписчиков — падение может быть артефактом | | 27.04.2026 | Дзен: на карточках «Открытия» вместо «Дочитываний»; открытия включают автопросмотры при прокрутке | Глубина истории Дзена: подписчики с 25.01.2022, события с 21.06.2021, время просмотра с 01.08.2023. **Сравнение год к году на части площадок физически невозможно** — говори это прямо, а не считай приблизительно. **Метод.** - Нормировать **на охват**, не на подписчиков. Подписчики — накопленное число, охват — то, что реально случилось с этой единицей. - Считать **медиану**, не среднее: распределение скошено, одна вирусная единица ломает среднее. - **Порог = собственная медиана за последние 20–30 единиц.** Внешний бенчмарк нормой не является никогда. - **Аутлаер — две ступени, не одна корзина.** Пороги 2× и 10× — ориентиры уровня C, не норма; на своей выборке уточняются. - **Ступень 1, от 2× до ~10× медианы** — контентный выброс. Разбирается по признакам содержания: тема, аватар, тип хука, формат, длина. - **Ступень 2, свыше ~10× медианы** — сначала объясняется **дистрибуцией**, а не текстом. Первое действие: посчитать долю неподписчиков в охвате = (охват − охват подписчиков) / охват, посмотреть разбивку охвата (в ВК она есть: полный, виральный, охват подписчиков, рекламный) и список репостов — кто репостнул и какая у него аудитория. Доля неподписчиков 90–95% или репост из крупного аккаунта означают, что воспроизводится **событие дистрибуции, а не текст**. - **Пока разбивка охвата по ступени 2 не проверена, публикация не идёт в основание контент-плана** и не смешивается со ступенью 1 в одном списке признаков. Смешение двух ступеней в одной корзине производит ложный паттерн: у публикации, которая просто отработала лучше коридора, и у публикации, которую разнесли репостом, общего признака в содержании может не быть вовсе. - Вниз выброс считается по одной ступени: ≤0,5× медианы. - **Окна валидации: 24 часа / 7 дней / 28 дней.** Пока паттерн не проверен на всех трёх, он не подтверждён. - **Режим малых чисел.** Погрешность счётных величин ≈1/√n: 9 наблюдений — ±33%, 100 — ±10%, 900 — ±3,3%. Разница между 12 и 9 лайками статистически неотличима от нуля. Допуск к разбору: минимум 10 публикаций за год минимум в 4 разные недели. **Формулы одной единицы:** hook rate = удержание на 3 с / просмотры · completion = средний % просмотра · send rate = пересылки / охват · like rate = лайки / охват · replay rate = реплеи / просмотры · comment rate = комментарии / просмотры. ## Вход Спроси одним блоком, не допрашивай. Чего нет — работай с тем, что есть, и скажи, чего не хватило. 1. Какая площадка и какой период. 2. Что есть на руках: файл выгрузки, скриншоты, ничего. Какие столбцы в нём есть — охваты, реакции, репосты, сохранения, время просмотра, разбивка охвата. 3. Сколько единиц контента вышло за период **и даты публикаций** — списком или хотя бы по неделям. Без дат не работают ни допуск (10 публикаций минимум в 4 разные недели), ни окна валидации, ни разбор выбросов: выброс объясняется тем, что происходило вокруг этой даты. 4. Роль площадки: двигатель охвата, дом аудитории, витрина, дубль. 5. Что менялось в периоде: реклама, посевы, коллаборации, смена рубрик, отпуск, ребрендинг. 6. Какой вопрос у пользователя на самом деле — «что сработало», «почему упало», «что снимать дальше». ## Процесс 1. **Проверь допуск.** Меньше 10 публикаций или всё в одну неделю — скажи прямо: разбирать нечего, разница будет шумом. Дай не анализ, а план накопления данных: сколько единиц и за какой срок нужно. 2. **Собери таблицу.** Одна строка — одна единица контента. Колонки: дата, формат, тема, пиллар, охват, просмотры, реакции, комментарии, репосты, сохранения, подписки, время просмотра. Пустые поля оставляй пустыми — не подставляй оценки. 3. **Нормируй.** Посчитай нормированные метрики на охват. Абсолютные числа оставь в таблице как справку, выводы строй на нормированных. 4. **Посчитай медиану** по каждой нормированной метрике за 20–30 последних единиц. Это порог. Если единиц меньше — считай, но помечай: «порог предварительный». 5. **Найди аутлаеры и раздели их на две ступени** (пороги — ориентиры уровня C). - **Ступень 1, 2×–10× медианы.** Разбери общие признаки содержания: тема, аватар, тип хука, формат, длина, день, наличие лица в кадре, наличие цифры в заголовке. Общий признак у 3+ выбросов — кандидат в находку. Общий признак у одного — совпадение. - **Ступень 2, свыше ~10× медианы.** Не разбирай как контент, пока не объяснил дистрибуцией. Порядок: доля неподписчиков в охвате → разбивка охвата (ВК: полный, виральный, охват подписчиков, рекламный) → список репостов и размер аудитории репостнувших → были ли посевы и реклама в этот день. Разбивки нет — так и пиши: «объяснение не проверено, публикация из выводов исключена», и назови, где пользователю взять разбивку. - **Ступени не смешиваются.** Признаки ступени 2 не идут в общий список признаков ступени 1 и не становятся основанием контент-плана. Если ступень 2 объяснилась дистрибуцией — вывод из неё касается дистрибуции (кто репостит, куда попадает), а не текста. - Вниз: ≤0,5× медианы, отдельным списком. 6. **Разложи по квадрантам** «охват × вовлечённость» относительно медианы: - **Звёзды** — высокий охват, высокая вовлечённость: формат масштабировать; - **Виральное, но пустое** — охват есть, вовлечения нет: тема цепляет, обещание не оплачено; - **Нишевое золото** — охвата мало, вовлечение сильное: попали в ядро, нужен другой вход на холодную аудиторию; - **Провал** — низко и то, и другое: формат не брать без новой гипотезы. 7. **Проверь окна.** Единицы младше 28 дней помечай как незрелые. Вывод по первым часам — шум, так и пиши. 8. **Сверь с календарём разрывов.** Провал или скачок попал на дату из таблицы — это артефакт платформы, не контент. Сравнение до и после даты не проводится. 9. **Сформулируй 3–5 находок.** Каждая находка = наблюдение + гипотеза + способ проверки. Наблюдение без способа проверки — не находка. Данных хватило не на все шаги — смотри «Режим неполных данных» и выдавай сокращённую процедуру, а не отчёт из прочерков. ## Режим неполных данных Штатная ситуация, а не сбой: у нового пользователя нет ни профиля бренда, ни полной выгрузки — часто есть только столбец охватов. Скилл в этом режиме **сокращает процедуру и называет, чем её достроить**. Он не заполняет выход прочерками и не считает недостающее «данными нет» построчно. **Что отпадает и что выдаётся вместо.** | Чего нет во входе | Какие шаги отпадают | Что выдаётся вместо | |---|---|---| | Реакций, репостов, сохранений — только охваты | 3 (нормировать не на что), 6 (у квадрантов нет второй оси) | Ряд охватов: медиана, разброс, коридор, выбросы по двум ступеням, ритм публикаций по датам. Вместо квадрантов — одномерная шкала «относительно своей медианы» | | Дат публикаций | 1 (допуск), 7 (окна валидации), разбор ступени 2 | Только описание ряда без выводов о динамике. Допуск не проходится и не имитируется | | Метаданных публикаций: тема, формат, пиллар, тип хука | 5 в части признаков | Выбросы перечисляются датами и числами, признаки **не додумываются**. Пользователю выдаётся список из 4–6 колонок, которые он допишет руками за 10–15 минут | | Разбивки охвата и репостов | ступень 2 разбора выбросов | Выброс помечается «объяснение не проверено», из оснований контент-плана исключается | | Времени просмотра и досмотра | строка досмотра в таблице | Строка не выводится вовсе | | Подписок на уровне публикации | строка «подписки / охват» | Строка снимается: у части площадок метрики нет в принципе (см. врезку), это не пробел выгрузки | **Как подавать нехватку.** Не «данных нет», а следующий шаг — тремя элементами: что именно нужно, где это лежит, сколько займёт. ``` ЧТО СЧИТАЕТСЯ СЕЙЧАС: <что реально посчитано на имеющемся> ЧТОБЫ ДОСТРОИТЬ: <какой столбец> → <где взять: ВКонтакте — статистика сообщества, «Выгрузить статистику», XLS/CSV с выбором диапазона; Дзен — Студия, XLS; YouTube — Advanced mode, до 500 строк; Telegram — выгрузки нет, переносить руками> → <сколько это займёт: одна выгрузка ≈ 5 минут, разметка тем руками ≈ 15 минут> ЧТО ЭТО ОТКРОЕТ: <какой шаг разбора станет возможен и какой вопрос закроет> ``` Одна строка отказа на весь отчёт, а не по строке на каждую пустую клетку. Отчёт, наполовину состоящий из «данных нет», — брак: это отписка, а не разбор. ## Как формулировать находку ``` НАХОДКА Что видно: <факт из таблицы с числом и количеством единиц> Гипотеза: <почему так может быть — одна причина, не список> Проверка: <что опубликовать или измерить, сколько единиц, за какой срок, какой результат подтвердит гипотезу, а какой опровергнет> ``` Плохо: «карусели заходят лучше». Хорошо: «у 4 из 5 единиц с save rate выше медианы формат — карусель с чек-листом (5 единиц из 23). Гипотеза: сохраняют то, к чему собираются вернуться, а не то, что понравилось. Проверка: 4 карусели-чек-листа за 3 недели против 4 обычных, сравнить save rate на окне 7 дней; подтверждение — save rate чек-листов выше медианы у 3 из 4». ## Выход ``` СТАТИСТИКА · <площадка> · <период> · ДОПУСК: разбор возможен | данных мало — <что накопить> РЕЖИМ: полный | сокращённый — нет <столбцов>, шаги <номера> пропущены | Метрика | Медиана | Диапазон | Единиц | Комментарий | |---|---|---|---|---| | Охват | … | …–… | N | | | Взаимодействия / охват | … | …–… | N | | | Репосты / охват | … | …–… | N | | | Досмотр, % | … | …–… | N | | | Подписки / охват | … | …–… | N | только если площадка отдаёт подписки на уровне публикации | ВЫБРОСЫ · СТУПЕНЬ 1 (2×–10× медианы, ориентир уровня C) <дата · тема · метрика · во сколько раз> Общие признаки: <то, что повторяется у 3+, или «общего признака нет»> ВЫБРОСЫ · СТУПЕНЬ 2 (свыше ~10× медианы — сначала дистрибуция) <дата · тема · метрика · во сколько раз> Доля неподписчиков в охвате: <%, или «разбивка не проверена»> Разбивка охвата: <виральный / подписчиков / рекламный, или «нет данных»> Репосты: <кто, какая аудитория, или «не проверено»> Вывод: <событие дистрибуции | контент | не проверено — из выводов исключено> КВАДРАНТЫ [блок выводится, только если есть вторая ось — вовлечённость. Нет реакций — вместо блока одномерная шкала «относительно своей медианы»] Звёзды: <единицы> Виральное, но пустое: <единицы> Нишевое золото: <единицы> Провал: <единицы> НАХОДКИ (3–5) 1. Что видно → Гипотеза → Проверка ... АРТЕФАКТЫ ПЛАТФОРМЫ <что из провалов и скачков объясняется датами из календаря разрывов, или «не обнаружено»> ЧЕГО МЫ НЕ ЗНАЕМ <какие поля недоступны, какие выводы поэтому невозможны> ЧЕМ ДОСТРОИТЬ РАЗБОР [если режим сокращённый] <что выгрузить · где это лежит · сколько займёт · какой шаг откроет> ``` ## Чек-лист перед выдачей Чек-лист условный. Пункт, для которого во входе нет данных, помечается **«неприменимо — нет <чего>»** и проваленным не считается. Молча пропускать пункт нельзя, имитировать выполнение — тоже. - Проверен допуск: 10+ публикаций минимум в 4 разные недели. (Неприменимо, если дат публикаций нет — тогда это первое, что запрашивается.) - Выбросы разделены на две ступени, ступень 2 не разобрана как контент до проверки дистрибуции, ступени не смешаны в одном списке признаков. - У каждого выброса ступени 2 названа доля неподписчиков в охвате либо сказано «не проверено, из выводов исключено». - Пороги 2× и 10× поданы как ориентиры уровня C, а не как норма. - Все выводы построены на нормированных на охват величинах, не на подписчиках. (Неприменимо, если нет реакций — тогда работа идёт на ряде охватов и это сказано.) - Считается медиана, слово «среднее» не встречается там, где имелась в виду медиана. - Каждая единица моложе 28 дней помечена как незрелая. (Неприменимо без дат.) - Календарь разрывов сверен, артефакты платформы названы отдельно от контента. - Строка «подписки / охват» выведена только там, где площадка отдаёт метрику на уровне публикации. - Находок 3–5, у каждой есть гипотеза и конкретный способ проверки с числом единиц и сроком. - Ни одного внешнего бенчмарка. Порог — только собственная медиана. - Есть раздел «чего мы не знаем». - В сокращённом режиме назван режим, перечислены пропущенные шаги и есть блок «чем достроить» с местом выгрузки и оценкой времени. - На малых числах сказано прямо, что разница неразличима, и шум не прокомментирован. ## Красные линии 1. Не сравнивать абсолютные просмотры с другой площадкой. Это `cp-analytics-cross`, и там ответ тоже «нельзя». 2. Не выдумывать бенчмарки, нормы ER, «средние по рынку» и «обычно у таких каналов». 3. Не объяснять шум. Разница на десятках наблюдений не комментируется, а называется неразличимой. 4. Не выдавать корреляцию за причину. «После публикации в четверг охват выше» — это наблюдение, а не рекомендация публиковать по четвергам. 5. Не считать провалом падение, попавшее на дату из календаря разрывов. 6. Не сравнивать метрику до и после смены её определения. Такое сравнение бессмысленно, даже если данные технически есть. 7. Не достраивать пропущенные поля оценкой. Нет данных — пустая клетка и строка в «чего мы не знаем». 8. Не обещать результата от выполнения находок. Находка — гипотеза, а не план роста. 9. Не строить контент-план на публикации со ступени 2, пока её охват не объяснён дистрибуцией. Иначе воспроизводится репост, а не текст. 10. Не выводить строку метрики, которой площадка не отдаёт на уровне публикации. Дневное значение вместо публикационного — подделка, а не оценка. 11. Не выдавать отчёт, где больше половины строк — «данных нет». Не хватает данных — сокращай процедуру и говори, чем её достроить.