Негативні тренди спливають у день появи, а не після monthly review.
Що робить
Детектор аномалій — це сервіс, який щодня (або частіше) сканує бізнес-метрики і піднімає руку, коли показник поводиться нетипово. Логіка проста: модель навчається на історичних даних, фіксує нормальний діапазон з урахуванням сезонності та тренду, позначає точки за межами цього діапазону. Команда дізнається про просадку виручки, стрибок churn rate або дивну конверсію в момент появи сигналу, а не через два тижні на ретроспективі.
Що входить до типового контуру:
- Підключення до джерела даних — data warehouse або прямий запит у BI-інструмент.
- Опис набору метрик: виручка за каналами, MRR, активні користувачі, конверсія за етапами воронки, churn, середній чек, розмір замовлення, залишки складу, runway.
- Навчання базових моделей на історичних даних кожної метрики — враховуються денна та тижнева сезонність, свята, тренд.
- Регулярний запуск перевірок (cron або event-driven) з розрахунком відхилення від очікуваного значення.
- Публікація алерту в Slack або Teams з контекстом: метрика, поточне значення, очікуваний діапазон, величина відхилення, посилання на дашборд.
- Логування підтверджених аномалій і хибних спрацювань — для дообучення порогів.
Що детектор робити НЕ буде:
- Не пояснює причину аномалії. Сигнал каже «тут дивно», але root cause analysis залишається за людиною.
- Не працює без чистих історичних даних. Якщо вітрина виручки розвалюється раз на тиждень або метрика нещодавно змінила формулу — модель буде давати шум.
- Не відповідає за бізнес-рішення. Алерт у Slack — це вхідний тригер для розслідування, а не вказівка зупинити кампанію або підвищити ціни.
Як працює
Архітектурно сервіс складається з чотирьох шарів: джерело даних, розрахунковий рушій, рушій алертів, канал доставки. Custom-code підхід обирається, коли готові SaaS-платформи для anomaly detection надлишкові за ціною або погано лягають на специфіку метрик клієнта.
Технічний потік
- Планувальник (Airflow, Prefect, Dagster або cron у kubernetes) запускає batch-задачу за розкладом — раз на годину або раз на день, залежно від метрики.
- Job робить SQL-запит у data warehouse і забирає часовий ряд за потрібною метрикою з історією за 90-365 днів.
- Модуль детекції застосовує одну з моделей: STL-декомпозиція та z-score для більшості метрик, Prophet або ARIMA для рядів з вираженою сезонністю, isolation forest для багатовимірних випадків.
- Розрахунок очікуваного діапазону для поточної точки. Якщо фактичне значення виходить за межі довірчого інтервалу — фіксується аномалія із зазначенням напрямку та величини.
- Постпроцесинг: фільтрація дублікатів (одна аномалія не алертить двічі), агрегація пов'язаних сигналів, класифікація за severity.
- Формування повідомлення в Slack або Teams через webhook — метрика, значення, очікування, дельта, часове вікно, посилання на BI-дашборд для drill-down.
Кроки впровадження
- Аудит метрик і пріоритизація: список із 10-20 критичних KPI, які має сенс моніторити (більше — потонете в алертах).
- Підготовка даних: перевірка якості, єдина таблиця метрик у DWH або materialized view, документування SLA на свіжість даних.
- Вибір стека: Python з бібліотеками для time-series аналізу, оркестратор, секрети для підключення до DWH та messenger.
- Прототип на 2-3 метриках, ручна калібровка порогів, прогін на історичних даних для перевірки точності.
- Розширення покриття, додавання severity-рівнів, розподіл каналів (P1 алерти йдуть у черговий канал, P2 — у дайджест).
- Двотижневий shadow-режим: алерти пишуться в лог, але не йдуть у Slack — перевіряється частота хибних спрацьовувань.
- Запуск у продакшен, щомісячний review порогів та ефективності.
Компоненти системи
Шар | Що робить | Типовий інструмент |
|---|---|---|
Сховище | Джерело часових рядів | Data warehouse (Snowflake, BigQuery, Postgres) |
Оркестратор | Запуск джобів за розкладом | Airflow, Prefect, cron |
Розрахунок | Моделі детекції аномалій | Python + time-series бібліотеки |
Доставка | Канали алертів | Slack, Teams, email |
Вартість інфраструктури низька: розрахунок займає хвилини, навантаження на DWH невелике. Головний ресурс — час data-інженера або ML-інженера на калібровку моделей і роботу з власниками метрик.
Що потрібно
Що має бути на стороні клієнта до старту проекту:
Дані та доступи:
- Data warehouse або централізована аналітична база з історією метрик мінімум за 6 місяців (рік — краще).
- Задокументовані SQL-запити або dbt-моделі для ключових метрик. Якщо кожна метрика рахується ad hoc різними способами — спершу наводимо порядок.
- Сервісний акаунт для читання даних і webhook URL у Slack або Teams для надсилання алертів.
- Розуміння сезонності: команда знає, що в суботу падає виручка, а в грудні зростає середній чек — модель навчається з урахуванням цього.
Команда та власники:
- Черговий по метриках — людина, яка реагує на алерт. Без owner'а сервіс перетворюється на шумовий канал.
- Аналітик або data-інженер, який володіє логікою метрик і допомагає в калібруванні.
- DevOps або платформний інженер для розгортання (Docker, секрети, доступ до DWH з інфраструктури).
Технологічний стек:
- Python 3.10+, Docker, оркестратор (якщо ще немає — піднімаємо простий Prefect або cron в наявному kubernetes-кластері).
- Доступ до Slack або Microsoft Teams через incoming webhook.
Терміни:
- Прототип на 2-3 метриках: 2-3 тижні.
- Повний набір із 10-20 метрик із калібруванням і shadow-режимом: 4-6 тижнів.
- Якщо data warehouse не налаштований або дані брудні — додайте 2-4 тижні на підготовку.
Болі
- Не бачимо сигналів відходу клієнтів
- Поганий прогноз (cashflow/sales/stock)
FAQ
Скільки займає впровадження?
Базовий запуск з 2-3 ключовими метриками — 2-3 тижні. Повний контур із 10-20 метрик з калібруванням моделей і двотижневим shadow-режимом займає 4-6 тижнів. Терміни зростають, якщо потрібна попередня підготовка data warehouse або уніфікація SQL-запитів за метриками — це додає 2-4 тижні.
Що робити, якщо у нас немає data warehouse?
Мінімально достатньо однієї аналітичної бази (Postgres-репліка, ClickHouse) з історією метрик. Якщо дані зараз зберігаються в Google Sheets або продуктовій БД — додаємо крок з їх вивантаження в окрему аналітичну вітрину. Це подовжує проєкт на 2-4 тижні, але дає фундамент і для інших завдань, не лише для детектора.
Головний ризик — хибні спрацювання. Що з цим робити?
Алерт-втома вбиває сервіс: якщо в Slack сиплеться 20 сповіщень на день, команда перестає їх читати. Лікуємо трьома способами: shadow-режим перед запуском для калібрування порогів, severity-рівні (P1 — дзвінок, P2 — дайджест), зворотний зв'язок від чергових (позначка «не аномалія» уточнює модель). Через 4-6 тижнів кількість шуму виходить на робочий рівень.
Чи підходить це нашій індустрії?
Рішення універсальне для бізнесу зі структурованими метриками у часі. SaaS-компанії використовують його для MRR, churn і активних користувачів. Ритейл — для залишків і середнього чека. Фінтех — для cashflow і аномалій у транзакціях. Головна умова — є data warehouse або аналітична база з історією мінімум 6 місяців.
Навіщо кастомний код, якщо є готові SaaS-платформи?
Готові платформи гарні, коли потрібно покрити сотні метрик і є суттєвий бюджет на річну підписку. Custom-code підхід вигідніший на горизонті 10-30 ключових метрик: дає повний контроль над логікою моделей, не прив'язує до вендора і працює на власній інфраструктурі. Для більшості SMB це раціональніше за співвідношенням ціна-результат.
Які метрики найкраще підходять для детектора?
Метрики з регулярною частотою (щоденні або щогодинні значення), стабільною формулою розрахунку і історією мінімум 90 днів. Добре працюють: виручка за каналами, MRR, активні користувачі, конверсія воронки, churn rate, залишки складу, середній чек. Погано працюють: метрики з різкими змінами формули, рідкісні події, показники без сезонності і тренду.
Хочете таку автоматизацію в своєму бізнесі?
Запишемо безкоштовний аудит — покажемо, як це працюватиме саме для вас.