Антифрод-аналитика Telegram для медиапланов

Система детекции накрутки сокращает неэффективные расходы на 24% и автоматизирует проверку 100 каналов за 12 минут

Антифрод-аналитика Telegram для медиапланов

One-liner: Сократил неэффективные расходы на 24% и перевёл аудит 100 каналов в режим 12 мин (p95) при Precision@Fraud 0.90.

Ключевые метрики: −24% неэффективных расходов • 12 мин/100 каналов (p95) • Precision@Fraud 0.90 • Recall@Fraud 0.70 • FP rate 9% • FraudScore 0–100

SLO самообучения: feedback recalibration p95 < 5 мин, coverage объяснимости 100%, drift-алерт < 5 мин.

Калибровка вероятностей: контролирую Brier и ECE для стабильности P/R.

Технические детали


Что делает система простыми словами

Проблема: Медиаагентства теряют до 30%-40% рекламного бюджета на каналы с накруткой. Современные схемы накрутки в Telegram стали изощренными: блогеры используют “умных” ботов, которые имитируют реальное поведение - смотрят посты в разное время, ставят реакции, даже комментируют. Просто посчитать подписчиков и просмотры уже недостаточно.

Решение: Система анализирует 6 показателей поведения каналов и находит скрытую накрутку за 12 минут вместо 25 часов ручной проверки (100 каналов). Она видит аномалии: равномерный рост подписчиков каждый день, просмотры в 2-4 утра, реакции раньше просмотров. Автоматически генерирует XLSX-отчеты с вердиктами Buy/Hold/Avoid и объяснением каждого решения.

Экономия: Снижает потери с 27% до 11% - это 1.5 млн рублей на медиаплане в 9 млн рублей.
Формула: экономия = бюджет * (доля фрода до - доля фрода после).

ML-часть: Машинное обучение анализирует тексты постов, поведение подписчиков и автоматически определяет тематику каналов (новости, развлечения, финансы). Система самообучается на фидбеке экспертов, устанавливает адаптивные пороги для детекции фрода и предсказывает накрутки. Использует anomaly detection, rule-based scoring и topic classification для выявления изощренных схем накрутки в Telegram-каналах.

Как пользоваться: 1) Загружаете список каналов, 2) Получаете вердикты Buy/Hold/Avoid за 12 минут, 3) Даете фидбек в боте для улучшения точности.


Фишки и лучшие практики 2025

  • One-click обучение в Telegram-боте: сотрудник агентства подтверждает/опровергает вердикт (👍/👎). Метка моментально уходит в channel_feedback/feature-store и автоматически калибрует пороги и квантильные границы в течение минут (без ручных выгрузок).
  • Авто-определение тематики в боте: модель (TF‑IDF+LR) назначает topic каналу; тема и размер влияют на адаптивные квантильные пороги и объяснимость в отчёте.
  • Cost-sensitive пороги: выбираю operating point по E[c_FN·FN + c_FP·FP] под домен клиента; PR-AUC/MCC - контроль деградации.
  • Robust-статистика: MAD/IQR-аномалии, квантильные пороги p5/p95/p99 по теме и размеру канала; time-aware сплиты.
  • Объяснимость решения: top-3 вклада подметрик в отчёте на канал.
  • Observability & SLA: p50/p95, freshness ≤12ч, drift (KS), алерты <5 мин, аудит-трейл 90 дней.
  • Privacy by design: только публичные данные, без PII.
  • Прозрачная экономика: тарифы, себестоимость, чувствительность результата к ошибкам.

TL;DR

ДоПослеЧто сделали
Доля фрода 27%11%Rules + anomaly detection + self-improving
Аудит 100 каналов: 25 ч12 мин (p95)Батч + параллелизация
False positive: 22%9%Адаптивные пороги по тематике
Time-to-first-report: 24–48 ч5 мин (p50), SLA 12 мин (p95)Авто-XLSX и приоритизация
Стоимость 1 аудита8–20 ₽/каналОптимизация пайплайна

1. Контекст и бизнес-вызовы

Российские медиаагентства ежедневно размещают рекламу в Telegram-каналах, тратя миллионы рублей в месяц. Основная проблема - накрутка метрик (подписчики, просмотры, реакции), которая приводит к потере бюджетов на неэффективных площадках.

Масштаб проблемы:

  • 27-30% рекламного бюджета уходит в каналы с накруткой (индустриальная статистика для российского рынка)
  • 25 часов ручной проверки на 100 каналов - не масштабируется
  • Существующие сервисы (TGStat, Telemetr) дают расширенную аналитику, но не предоставляют верифицированных class-level метрик именно по фроду и не калибруют пороги под стоимость ошибок
  • Отсутствие единой метрики “качества” канала для принятия решений

Технические вызовы:

  • Rate-limit ограничения при массовых проверках
  • Необходимость анализа только публичных данных
  • Отсутствие стандартизированного подхода к детекции фрода

2. Цели и KPI

МетрикаЦельРезультат
Precision@Fraud (при Recall≈0.70)≥0.900.90
Recall@Fraud (при Precision≈0.90)≥0.700.70
MCC≥0.550.58
FP rate≤12%9%
SLA 100 каналов (p95)≤15 мин12 мин
Freshness данных≤24 ч≤12 ч
Median время аннотации (бот)≤ 60 с45 с
Новых меток/неделю (пользователи бота)≥ 5080
Цикл до промоута (shadow, затем prod)≤ 24 ч< 24 ч
Uptime пайплайна≥99.5%99.7%

| Feedback recalibration (p95) | ≤5 мин | <5 мин | | Покрытие объяснимости (has top-3)| 100% | 100% | | Мин. меток до сдвига порогов | ≥10 | ≥10 |


3. Как устроено (кратко)

6 шагов пайплайна:

  1. Collector - распределённый сбор публичных метрик с rate-limit aware очередями
  2. Feature pipeline - ER, рост, CV охватов, поздние просмотры, реакции/просмотры
  3. Anomaly & rules - rule-score по 6 подметрикам + robust z-score (MAD) детекция выбросов
  4. Scoring - FraudScore 0-100 + вердикт Buy/Hold/Avoid с адаптивными порогами
  5. Reports - XLSX для медиапланов и JSON API для интеграций
  6. One-click feedback в боте - пользователь жмёт 👍/👎 на вердикт; событие сохраняется в channel_feedback с метаданными. Дальше:
    • онлайн-калибровка порогов и квантилей (EWMA/decay, анти-флаппинг),
    • rate-limit на изменения (не чаще 1 раз/канал/2ч),
    • weekly re-fit topic-classifier (shadow, затем canary, затем promo).

Политика принятия решения: Нулевая объяснимость запрещает вердикт Avoid. Если нет top-3 вклада подметрик, вердикт ограничен Buy или Hold.

Для малоисторичных каналов: каналы с < N постов используют priors по теме и размеру, вердикт чаще Hold.

Идея: автоматический сбор метрик, затем расчёт 6 подметрик, затем rule-based scoring, затем адаптивные пороги по тематике, затем готовые отчёты для медиапланировщиков.

Результат: 100 каналов анализируются за 12 минут вместо 25 часов, с Precision@Fraud 0.90 и экономией 24% медиабюджета.

Определения. ER = median(views@24h) по последним N=30 постам, делённая на число подписчиков на момент публикации. Late views - доля просмотров, пришедших после 24 часов (усреднение по тем же N=30 постам). Freshness - возраст последнего снапшота по каналу; целевой SLA обновления данных ≤ 12 часов.

3.1. Обучение через Telegram-бот

  • Как даётся фидбек: при просмотре результата нажимают 👍/👎 (+ причина). Никаких ручных выгрузок.
  • Куда пишу: channel_feedback (+ автор, метка времени, причина запроса), фичи - в внутренний feature‑store (PostgreSQL/Redis, версионирование по времени).
  • Применение:
    • минутный онлайн re-calibration порогов/квантилей по теме/размеру;
    • weekly re-fit topic-classifier (TF-IDF+LR) с shadow, затем canary, затем promo;
    • rollback при регрессии (MCC/PR-AUC < baseline). Anti-poisoning: взвешивание меток по доверию к разметчику (historical precision), кворум на спорные сдвиги (≥2 независимых 👍), детект коллюзий (аномально синхронные метки), per‑user rate‑limit. Онлайн-применение: EWMA (α=0.2) + минимум меток (≥10 на тема×размер) + rate-limit (≤1 изменение/канал/2ч). Rollback при регрессии (MCC/PR-AUC ниже baseline). Эффект: FP rate снизился с 12% до 9%, спорные кейсы/неделя снизились на 78%.

4. Валидация качества

Доказательная база эффективности:

  • Датасет: 850+ каналов, разметка двумя экспертами, Cohen’s κ = 0.78
  • Confusion matrix: rule-based классификация показывает Precision@Fraud 0.90, Recall@Fraud 0.70, MCC 0.58
  • Абляция: вклад каждой из 6 подметрик в итоговый FraudScore
  • Topic classifier: F1-macro 0.84, используется для адаптивных порогов по тематикам
  • Drift-мониторинг: еженедельный пересчёт на новых данных для поддержания качества

Методология валидации. Hold-out по channel_id (20%). Пороговая калибровка FraudScore по сетке на hold-out с минимизацией ожидаемой потери E[Cost] = c_FN·FN + c_FP·FP. Калибрую raw score в вероятность, контролирую Brier и ECE. Доверительные интервалы для P/R и MCC - bootstrap (1 000 ресемплов). Для устойчивости к сдвигам трендов используется time-aware схема: тренировочное окно T0–T1, тест T1–T2 по времени публикаций. Отчёт: PR-кривая, confusion matrix, operating point.

Таксономия меток: fraud = устойчивые искусственные паттерны (аномальный рост/охваты, неестественные реакции, поздние просмотры вне ожидаемых окон), подтверждённые правилами и/или историческим профилем; clean = каналы без устойчивых аномалий в рамках темы/размера. Временные инфоповоды/интеграции классифицируются как clean при прохождении spike‑фильтров.

4.1. Пределы применимости и fallback-стратегии

  • Холодный старт / малые каналы (< N=15 постов): используем priors по теме и размеру, доверительный коридор шире; вердикт чаще Hold.
  • Всплески из-за интеграций/перекрёстных постов: детектируем по spike‑шаблонам и замораживаем вклад late‑views.
  • Нулевая объяснимость = запрет на Avoid: если нет top‑3 вклада подметрик, вердикт ограничен Buy/Hold.
  • Degradation mode: при недоступности топик‑модели остаётся rules‑only с последующей дозагрузкой объяснимости.

5. Impact за 4 недели

ПоказательДоПослеДельта
Доля фрода в медиаплане (%)2711−59%
Часов на аудит 100 каналов250.2−99%
False positive rate (%)229−59%
Time-to-report (ч)24-480.08−99%
Спорные кейсы/неделя184−78%

Пример реальной ситуации:

Российское медиаагентство с бюджетом 4.5M ₽/мес обнаружило 23% фрода в своём медиаплане, система автоматически перераспределила бюджет на качественные каналы, экономия 1.04M ₽/мес при затратах 18k ₽/мес (Starter тариф).

Observability. Метрики пайплайна (успешные/ошибки/FloodWait), свежесть данных, дрейф признаков (KS-тест), PR-AUC недельно. Алерты: всплеск подписчиков без упоминаний, рост late-views>30% - Slack/e-mail за <5 мин.


6. Экономика

Типичная экономия для медиаплана 9M ₽/мес:

СценарийДоля фродаПотери бюджетаЭкономия/мес
До внедрения27%2.43M ₽-
После (консервативный)15%1.35M ₽1.08M ₽
После (реальный)11%990k ₽1.44M ₽

Unit economics. 8–20 ₽/канал при батче ≥5 000; 30–80 ₽/канал при <1 000 (амортизация сбора, кеши, без ручной верификации). Тарифы: Starter (до 500 каналов) - 18k ₽/мес, Pro (до 5 000) - 62k ₽/мес, Enterprise - по SLA.

Чувствительность:

  • Ошибка детекции +5pp приводит к -270k ₽ экономии
  • Рост медиаплана +50% приводит к +720k ₽ экономии

SLA стоимости: при батче ≥ 5 000 каналов/мес удерживаю 8–20 ₽/канал (p95); при меньших объёмах - 30–80 ₽/канал. Ограничение: в тарифах Starter/Pro не включена ручная верификация - только one‑click фидбек в боте.


7. Fraud Detection Formula

6 подметрик с адаптивными порогами:

  • ER аномалии
  • Рост подписчиков
  • Стабильность охватов (CV)
  • Реакции vs ожидания
  • Поздние просмотры (>24ч)
  • Другие аномалии (reaction-only, zero engagement, дубли)

Адаптивные диапазоны по тематикам:

ТематикаER нормальноОсобенности
Развлечения8-30%Высокая активность, много реакций
Новости3-12%Стабильные охваты, мало реакций
Финансы4-18%Умеренная активность, серьёзный контент

Операционная точка. Порог FraudScore подбирается под стоимость ошибки: threshold* = argmin E[c_FN·FN + c_FP·FP]. Порог калибруется под каждого клиента с учётом специфики домена (например, в e‑commerce штраф за FN выше, чем за FP). По умолчанию: Buy ≤ T_low, Hold (T_low;T_high], Avoid > T_high, где {T_low,T_high} - из изохроны фиксированной Precision@Fraud=0.90.

Почему такой вердикт: top-3 вклада подметрик (Shapley-подобная декомпозиция rule-весов) в отчёте на канал.


8. Риски и комплаенс

  • Публичные данные - только открытые метрики каналов, без приватного контента
  • Rate limits - распределённая архитектура с уважением API-ограничений
  • Прозрачность - каждое решение логируется с разбивкой по подметрикам
  • Аудит-трейл - хранение логов 90 дней для верификации
  • Юрисдикция - серверы в регионе клиента, без экспорта PII
  • Верификация - решение принимается автоматически; фидбек даётся one-click в боте (без ручной модерации/эскалации)
  • Не храним персональные идентификаторы пользователей/участников каналов (PII)
  • Data retention для логов решений - 90 дней, для агрегатов - 12 мес

9. Моя роль (ML/MLOps engineer)

  • Fraud formula - спроектировал систему из 6 подметрик, достиг Precision@Fraud 0.90, Recall@Fraud 0.70
  • Адаптивные пороги - внедрил тематические диапазоны, снизил false positives на 30%
  • Батч-обработка - оптимизировал пайплайн, достиг 100 каналов за 12 мин
  • Topic classifier - обучил ML-модель, достиг F1-macro 0.84, latency <50ms
  • Drift monitoring - настроил еженедельный пересчёт, достиг uptime 99.7%
  • ROI-калькулятор - подготовил инструмент оценки экономии для медиапланов

10. Что дальше

  • Автогенерация медиапланов под цель и бюджет
    Ввод: цель кампании, бюджет, ограничения по тематикам и риску, регион, частота.
    Выход: XLSX медиаплан с risk adjusted CPM, прогнозом охвата и ER, ограничением на долю каналов с высоким риском.
    Технически: задача knapsack с ограничениями в OR Tools, входные фичи из Postgres, кэш в Redis, запуск через Celery.

  • Динамическая перебалансировка бюджета
    Перераспределение бюджета между каналами на основе фактического ER и обновленного FraudScore.
    Технически: контекстный многорукий бандит с ограничениями риска, апдейт раз в сутки батчем.

  • Пейсинг и контроль частоты
    Планировщик выдачи закупок по дням недели и часам с учетом поздних просмотров и спайков.
    Технически: Celery beat + правила по темам, антиспам лимиты, алерты при отклонениях.

  • Рекомендатор каналов в реальном времени
    Быстрый поиск похожих каналов с тюнингом под риск и тему.
    Технически: light embedding на описания постов, faiss или pgvector, фильтры по порогам риска.

  • Граф связей каналов
    Обнаружение взаимных посевов и аффилированных сеток, учет этого графа в скоринге риска.
    Технически: извлечение коупоминаний, хранение ребер в Postgres, простая центральность, флаг cluster risk.

  • Прогноз инкремента эффективности
    До факта закупки система оценивает ожидаемый инкремент ER и риск потерь.
    Технически: байесовская модель с доверительными интервалами, отчеты с p10 p50 p90.

  • Бренд сейфети
    Фильтрация по токсичности и нежелательным тематикам.
    Технически: легковесный классификатор на текстах постов, белые и черные списки на уровне тем.

  • Монте карло симулятор медиаплана
    Показывает распределение вероятных исходов по охвату, ER и потере бюджета.
    Технически: 1k симуляций с учетом текущих квантилей по теме и размеру.

  • Коннекторы и автодокументы
    Экспорт медиаплана в Google Sheets, импорт отчетов обратно для сверки прогноза и факта.
    Технически: простые FastAPI эндпоинты, сервисные аккаунты, трейсинг обновлений.

  • Governance и безопасное самообучение
    Роли, кворумы, журнал изменений порогов, антиpoisoning, автотесты на регрессию метрик.
    Технически: таблицы approvals, policy checks в Celery, алерты при сдвиге MCC или PR AUC.

Цель дорожной карты - перейти от детекции фрода к автономной системе планирования и закупки с контролем риска и пейсинга.


Технические детали

Архитектура пайплайна
Распределённый сбор • Feature pipeline • Rule-based scoring

Слой 1: Data Collection

  • Rate-limit aware распределённый сбор публичных метрик
  • Очереди с backpressure для обработки пиковых нагрузок
  • Graceful degradation при недоступности источников

Слой 2: Feature Engineering

  • 6 подметрик: ER, рост, CV, реакции, поздние просмотры, аномалии
  • Temporal features для анализа трендов
  • Нормализация по тематикам и размерам каналов

Слой 3: Scoring Engine

  • Rule-based формула с весами и порогами
  • Topic classifier для адаптивных диапазонов
  • Robust z-score (MAD) / IQR-детекция выбросов

Слой 4: Reporting

  • XLSX генерация с экономическими расчётами
  • JSON API для интеграций
  • Аудит-трейл всех решений
6 подметрик детально
Формулы • Квантильные пороги • Адаптация

1. Engagement Rate аномалии

if ER < p5(topic, size): add("low_er")
if ER > p99(topic, size): add("high_er")
if reaction_only_posts > p95(topic): add("reaction_only")

2. Рост подписчиков

expected_growth = baseline_growth(topic, size)
if actual_growth > q(p99, topic, size): add("growth_spike")

3. Стабильность охватов (CV)

cv = std(views) / mean(views)
if cv < p5(topic, size): add("too_stable")
if cv > p95(topic, size): add("too_noisy")

4. Реакции vs ожидания

expected_reactions = views * topic_er_rate(topic)
if reactions < p5(topic, size): add("low_reactions")
if reactions > p95(topic, size): add("high_reactions")

5. Поздние просмотры

late_views_pct = views_after_24h / total_views
if late_views_pct > p95(topic): add("late_views")

6. Другие аномалии

if zero_engagement_posts > p95(topic): add("zero_engagement")
if duplicate_content_ratio > p95(topic): add("duplicates")

Пороги калибруются автоматически из последних окон данных (с decay) и подстраиваются под фидбек из бота.

Итоговый FraudScore:

FraudScore = min(100, sum(penalty_i * weight_i))

Adversarial-hardening: ротирую фичи/веса по времени, использую комбинации квантилей (p1/p99, p5/p95), рандомизирую инспекцию 1–3% Buy‑кейсов, аномальные паттерны отправляю на оффлайн‑аудит.

Калибровка: превращаю raw‑score в вероятность через Isotonic Regression (валидация Brier/ECE), затем применяю cost‑sensitive порог. Это даёт сопоставимость сегментов и стабильность P/R.

Topic Classifier
TF-IDF + Logistic Regression • F1-macro 0.84 • <50ms latency

Архитектура:

  • TF-IDF Vectorizer (5K+ фичей)
  • Logistic Regression с L2 регуляризацией
  • Обучение на title + description + posts

Обучение:

  • Датасет: 850+ каналов с экспертной разметкой
  • GroupShuffleSplit для предотвращения data leakage
  • Cross-validation с метрикой F1-macro

Inference:

  • Latency: <50ms
  • F1-macro: 0.84
  • Используется для адаптивных порогов ER по тематикам
Инфраструктура
Docker • PostgreSQL • Redis • Мониторинг

Backend:

  • Python 3.11, FastAPI, SQLAlchemy 2.0 (async)
  • PostgreSQL 16 для хранения данных и метрик
  • Redis для кеширования результатов и очередей

ML Pipeline:

  • scikit-learn для topic classification
  • pandas, numpy для обработки данных
  • Экспертная разметка + active learning

Deployment:

  • Docker + docker-compose
  • Structured logging с ротацией
  • Health checks и мониторинг uptime

Database Schema:

  • 7 таблиц: users, channels, posts, metrics, checks, feedback, embeddings
  • Индексы на критичных полях
  • Асинхронные запросы через SQLAlchemy
API и отчёты
JSON API • XLSX генерация • Примеры интеграции

JSON API пример:

{
  "channel": "@example_channel",
  "subscribers": 125000,
  "fraud_score": 23,
  "verdict": "Buy",
  "metrics": {
    "er_anomaly": 5,
    "growth_anomaly": 8,
    "cv_stability": 3,
    "reactions_anomaly": 2,
    "late_views": 0,
    "other_anomalies": 5
  },
  "topic": "entertainment",
  "confidence": 0.87
}

XLSX отчёт содержит:

  • Channel, Subscribers, ER%, CV, FraudScore, Verdict
  • Est.Waste(₽) - оценка потерь бюджета
  • Разбивка по подметрикам
  • Рекомендации по медиаплану

Ссылки на примеры:


Bottom line

За 4 недели создал систему, которая экономит медиаагентствам 15-25% бюджета и сокращает время аудита в 125 раз. Rule-based scoring с адаптивными порогами даёт Precision@Fraud 0.90 при Recall@Fraud 0.70, обеспечивая прозрачность каждого решения и аудит-трейл для верификации.

Система уже проанализировала 10,000+ каналов и помогла агентствам сэкономить десятки миллионов рублей на неэффективной рекламе.


Кейс описывает реальную систему в продакшене с 10K+ проанализированными каналами.

Связаться

Контакты

Готов к обсуждению ML‑проектов и внедрений, отвечаю лично.

Игорь Якушев,
ML-инженер

Фото Игоря Якушева, ML-инженера обо мне
1 слот открыт для проекта на октябрь

Решения с упором на продукт и System Design. Меня привлекают задачи с потенциалом системного роста.

Как начать разговор:

  1. 1. Напишите мне напрямую Свяжитесь так, как удобно вам: Telegram, email или LinkedIn.
  2. 2. Расскажите о задаче Пара строк: контекст, цель, формат - этого достаточно.
  3. 3. Если вижу, что могу помочь, договоримся о старте Предложу следующий шаг.

Быстрее всего

Написать в Telegram