Поведінкові сигнали
Поведінкові сигнали
Поведінкові сигнали - це «телеметрія» взаємодії користувача з продуктом: події, контекст і часові ряди, з яких ми виводимо намір, інтерес, якість трафіку, ризик і цінність. Надійний контур роботи з сигналами: інструментування → збір → очищення → нормалізація → ознакоутворення → використання в рішеннях → моніторинг та етика.
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, зупинки.
Намір: переходи до глибоких дій (filtr→detal→tselevoye).
Достовірність: антибот-скор, довіра до девайсу/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) Анти-патерни
Сирі кліки без контексту/ідл-фільтра → помилкові «уваги».
Змішування одиниць (sessii↔polzovateli), 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 - безпечно, прозоро і відтворювано.