Поведенческие сигналы
Поведенческие сигналы
Поведенческие сигналы — это «телеметрия» взаимодействия пользователя с продуктом: события, контекст и временные ряды, из которых мы выводим намерение, интерес, качество трафика, риск и ценность. Надежный контур работы с сигналами: инструментирование → сбор → очистка → нормализация → признакообразование → использование в решениях → мониторинг и этика.
1) Что считать поведенческими сигналами
Сессии: старт/стоп, длительность, число экранов, глубина, повторы в сутки, «тихие» сессии.
Клики/тач/скролл: плотность кликов, скорость прокрутки, глубина, остановки (scroll-stops).
Dwell-time: время на экране/элементе, активное время (idle фильтр).
Навигация/взаимосвязь экранов: последовательности, петли, rage-навигирование.
Ввод/формы: скорость заполнения, исправления, таб-навигирование, paste rate.
Микро-интеракции: ховеры, раскрытия, переключатели, сортировки/фильтры.
Контент/поиск: запросы, CTR, CTCVR, сохранения, «отложить на потом».
Техника: device/browser, FPS/статус батареи, ошибки, latency, сети (IP/ASN), офлайн/онлайн.
Время/контекст: час/день/локальный календарь, гео-паттерны (без точной геолокации, если не требуется).
Негативная обратная связь: скрыть, жалоба, отписка, отказ от куки/персонализации.
2) Инструментирование и схема событий
Каноническая схема (минимум):
event_id, user_id, session_id, ts_utc, type, screen/page, element, value, duration_ms,
device_id, platform, app_version, locale, referrer, ip_hash, asn, experiment_id, schema_version
Принципы: идемпотентность (dedup по `(source_id, checksum)`), UTC-время, версия схем, стабильные ключи идентичности, минимизация PII (хеши/токены).
3) Очистка и антибот
Headless/automation флаги: WebDriver/puppeteer сигнатуры, отсутствующие пользовательские жесты.
Аномальная скорость: сверхчеловеческие клики/скролл, «идеальные» интервалы.
Сеть: центры дата-хостинга, известные прокси/VPN ASN.
Повторяемость паттерна: одинаковые траектории и последовательности.
QA/внутренние: списки тест-аккаунтов/устройств.
Фрод: device/IP-граф (один девайс → много аккаунтов, гео-velocity).
4) Нормализация и Point-in-Time (PIT)
Временные окна: 5 минут / 1 час / 24 часа / 7 дней; экспон. сглаживание.
Сезонность: day-of-week, hour-of-day, праздничные флаги.
PIT-срезы: все признаки строятся до времени оценки; никакой информации из будущего.
Онлайн/офлайн паритет: одинаковые рецепты в feature store.
5) Качество и валидность сигналов
Coverage: доля сессий/экранов с полными событиями.
Freshness: лаг поступления.
Consistency: доли событий на пользователя/сессию в «коридорах» (контроль выбросов).
Внимание: активное время/идл-фильтр, scroll depth, остановки.
Намерение: переходы к глубоким действиям (фильтр→деталь→целевое).
Достоверность: антибот-скор, доверие к девайсу/IP.
6) Признакообразование (feature engineering)
R/F: recency последнего интеракта, частоты за окна 7/30/90.
Dwell/scroll: медианы/квантили, доля экранов с dwell ≥ X, глубина ≥ p%.
Последовательности: n-граммы, марковские переходы, паттерны «раскаяния» (back-forth), run-length.
Стабильность устройства: смены девайса/браузера, entropy user-agents.
Качество клика: ratio кликов к кликабельным элементам, rage-clicks.
Поиск/намерение: длина/уточнение запросов, dwell после поиска, success rate.
Агрегации по идентичностям: user_id, device_id, ip_hash, asn.
Гибриды: эмбеддинги сессий (Doc2Vec/Transformer) → кластеризация/ранжирование.
7) Сигнал → Действие: таблица решений
Гистерезис и кулдауны обязательны, чтобы не «мигать» подсказками.
8) Псевдо-SQL/рецепты
A. Активное время и глубина скролла
sql
WITH ev AS (
SELECT user_id, session_id, page, ts,
SUM(CASE WHEN event='user_active' THEN duration_ms ELSE 0 END) AS active_ms,
MAX(CASE WHEN event='scroll' THEN depth_pct ELSE 0 END) AS max_depth
FROM raw_events
WHERE ts BETWEEN:from AND:to
GROUP BY 1,2,3,4
)
SELECT user_id, session_id,
AVG(active_ms) AS avg_dwell_ms,
PERCENTILE_CONT(0. 5) WITHIN GROUP (ORDER BY max_depth) AS scroll_median
FROM ev
GROUP BY 1,2;
B. Rage-clicks / back-forth
sql
WITH clicks AS (
SELECT user_id, session_id, ts,
LAG(ts) OVER (PARTITION BY user_id, session_id ORDER BY ts) AS prev_ts,
element
FROM ui_events WHERE event='click'
),
rage AS (
SELECT user_id, session_id,
COUNT() FILTER (WHERE EXTRACT(EPOCH FROM (ts - prev_ts)) <= 0. 3) AS rage_clicks
FROM clicks GROUP BY 1,2
),
backforth AS (
SELECT user_id, session_id,
SUM(CASE WHEN action IN ('back','forward') THEN 1 ELSE 0 END) AS nav_bf
FROM nav_events GROUP BY 1,2
)
SELECT r. user_id, r. session_id, r. rage_clicks, b. nav_bf
FROM rage r JOIN backforth b USING (user_id, session_id);
C. Антибот скор (эскиз)
sql
SELECT user_id, session_id,
(CASE WHEN headless OR webdriver THEN 1 ELSE 0 END)0. 4 +
(CASE WHEN asn_cat='hosting' THEN 1 ELSE 0 END)0. 2 +
(CASE WHEN click_interval_std < 50 THEN 1 ELSE 0 END)0. 2 +
(CASE WHEN scroll_speed_avg > 5000 THEN 1 ELSE 0 END)0. 2 AS bot_score
FROM telemetry_features;
D. Последовательности n-грамм
sql
-- Collect screen sequences and transition frequencies
SELECT screen_seq, COUNT() AS freq
FROM (
SELECT user_id, session_id,
STRING_AGG(screen, '→' ORDER BY ts) AS screen_seq
FROM nav_events
GROUP BY 1,2
) t
GROUP BY screen_seq
ORDER BY freq DESC
LIMIT 1000;
9) Поведенческие сигналы в ML/аналитике
Склонности/персонализация: CTR/CTCVR-модели, session embeddings, next-best-action.
Отток/удержание: hazard-модели, признаки recency/частоты/последовательностей.
Антифрод: скорость форм, гео-вело, device/IP-граф, шаблоны «ферм».
Качество трафика: «валидные просмотры», engaged sessions, негативная обратная связь.
A/B и каузальность: метрики внимания как посредники, но выводы — по инкременту (ROMI/LTV, удержание).
10) Визуализация
Sankey/step-bars: пути и drop-off.
Heatmaps: глубина скролла, карты кликов (обезличенно).
Cohort×age: как меняются сигналы по возрасту когорты.
Bridge-графики: вклад факторов (скорость, скролл, ошибки) в изменение конверсии.
11) Приватность, этика, RG/комплаенс
PII-минимизация: хеши идентификаторов, RLS/CLS, маскирование при экспорте.
Согласие/прозрачность: настройка трекинга, отказ — уважается; логика объяснима.
RG: не использовать сигналы для поощрения вредного поведения; мягкие напоминания/лимиты.
Fairness: проверка различий ошибок/интервенций по группам; исключить недопустимые признаки.
Хранение: сроки TTL для «сырых» событий, агрегации предпочтительнее.
12) Наблюдаемость и дрейф
Качество данных: coverage, дубликаты, лаги, процент пустых полей.
Сигнальный дрейф: PSI/KL по dwell/scroll/частотам; «новые» паттерны.
Операционные: latency сбора, p95 расчета признаков, доля фолбэков.
Guardrails: всплеск бот-скора, жалобы, отписки; «стоп-кран» на агрессивные интервенции.
13) Анти-паттерны
Сырые клики без контекста/идл-фильтра → ложные «внимания».
Смешение единиц (сессии↔пользователи), TZ, окон → несопоставимость.
Лики из будущего (нет PIT) → переоценка моделей.
Нультолерантность к шуму: жесткие пороги без гистерезиса → «мигание».
Игнор антибот/QA-фильтров → завышенные метрики.
Запись лишних PII без причины → риски и штрафы.
14) Чек-лист запуска контура поведенческих сигналов
- Схема событий (версии, UTC, идемпотентность), минимизация PII
- Антибот/QA-фильтры, черные/белые списки ASN/устройств
- PIT-рецепты, окна 5м/1ч/24ч/7д, online/offline паритет
- Метрики качества: coverage, freshness, engagement валидаторы
- Признаки R/F/dwell/scroll/последовательности/поиск, session embeddings
- Decision tables: действия, гистерезис, кулдауны, guardrails
- Дашборды и алерты дрейфа (PSI/KL), жалобы/отписки, RG-индикаторы
- Документация: датасловарь, паспорта сигналов/метрик, владельцы и рунибуки
Итог
Поведенческие сигналы дают ценность только в дисциплинированном контуре: корректное инструментирование и PIT, очистка и антибот, устойчивые признаки и ясные политики действий, приватность и RG, наблюдаемость и реакция на дрейф. Такой подход переводит «клики и скроллы» в решения, повышающие конверсию, удержание и LTV — безопасно, прозрачно и воспроизводимо.