GH GambleHub

Feature Engineering и отбор признаков

1) Назначение и принципы

Цель: сконструировать устойчивые, интерпретируемые и экономичные признаки, согласованные между офлайном и онлайном.

Принципы:
  • Point-in-time: фичи вычисляются из данных, доступных на момент решения, без будущего (anti-leakage).
  • Domain-first: фичи отражают бизнес-механики (депозиты, сессии, жанры игр, RG/AML).
  • Reuse & Contracts: фичи — версии, владельцы, формулы и SLO в Feature Store.
  • Cost-aware: считаем latency и стоимость вычисления/хранения → материализуем только окупаемое.
  • Observability: мониторим дрейф/стабильность/калибровку; тест эквивалентности online/offline.

2) Таксономия признаков для iGaming

RFM/поведенческие: recency/frequency/monetary по окнам (10м/1ч/1д/7д/30д).
Сессионные: длительности, паузы, смены устройств/ASN, скорость действий.
Финансовые: депозиты/выводы/чарджбеки, доли методов оплаты, FX-нормализация.
Игровые: жанровые профили, волатильность провайдеров, RTP-кластеры, win-streak.
Маркетинговые: каналы/UTM, отклики на кампании, saturation/cooldown.
RG/AML: лимиты, флаги самоисключений, velocity-паттерны, повторное использование BIN/IP.
Гео/время: локальные календари/праздники, час поясов, вечер/ночь.
Графовые: связи user–card–device–ip, центральности/компоненты, «кольца» фрода.
NLP/тексты: темы и тональность тикетов/чатов; ключевые жалобы.
Операционные: лаг/ошибки провайдеров, стабильность сессий (для SRE-моделей).


3) Окна и агрегаты (point-in-time)

Типовые окна: 10м / 1ч / 24ч / 7д / 30д. Для каждого окна — count/sum/mean/std/last/max/min, ratio и rate.

SQL-шаблон (30д депозиты, без будущего):
sql
SELECT u.user_pseudo_id, t.asof,
SUM(CASE WHEN e.type='deposit'
AND e.event_time>=t.asof - INTERVAL '30' DAY
AND e.event_time< t.asof THEN e.amount_base ELSE 0 END) AS dep_30d,
COUNT(CASE WHEN e.type='bet'
AND e.event_time>=t.asof - INTERVAL '7' DAY
AND e.event_time< t.asof THEN 1 END) AS bets_7d
FROM silver.fact_events e
JOIN (SELECT user_pseudo_id, DATE(event_time) AS asof
FROM silver.fact_events GROUP BY 1,2) t USING(user_pseudo_id)
JOIN dim.users_scd u ON u.user_pseudo_id=t.user_pseudo_id
AND t.asof >= u.valid_from AND (u.valid_to IS NULL OR t.asof < u.valid_to)
GROUP BY 1,2;

4) Категориальные кодировки

One-Hot/Hashing: для редких/высоко-кардинальных категорий (игры, провайдеры).
Target Encoding (TE): средние по таргету с k-fold/leave-one-out и time-aware сглаживанием (anti-leakage).
WOE/IV (риск-скоринг): монотонные бины с контролем IV и стабильности.

TE (псевдокод, time-aware):
python for fold in time_folds:
train_idx, val_idx = split_by_time(fold)
te_map = target_mean(train[["provider_id","label"]])
val["provider_te"] = val["provider_id"].map(te_map).fillna(global_mean)

5) Нормализация и скейлинг

Мин-макс / Robust / Z-score — по тренировочному окну; сохраняем параметры в артефактах.
Лог-преобразования для длинных хвостов сумм/ставок.
Box-Cox/Yeo-Johnson — когда требуется симметризация.


6) Временные и сезонные фичи

Календарные: день недели, час, праздник рынка (ref.calendar), pay-day.
Периодичность: скользящие средние/экспон. сглаживание (EMA), deltas (t − t-1).
Event-based: время с последнего депозита/выигрыша/проигрыша, «охлаждения».


7) Графовые признаки (фрод/AML)

Вершины: user/card/device/ip. Ребра: транзакции/сессии/совместные признаки.
Фичи: размер компоненты, degree, betweenness, pagerank, triads, повторное появление.
Шаблон: nightly batch строит граф → эмбеддинги/центральности → online кэш.


8) NLP-фичи (саппорт/чаты/ревью)

Базово: TF-IDF/NMF темы, sentiment, длина, частоты жалоб.
Продвинуто: эмбеддинги (Sentence-BERT) → усреднение по тикетам за окно.
PII: до- и пост-маскирование (email, PAN, телефоны) по политикам.


9) Гео/ASN и устройства

IP→Geo/ASN: кэшируем и обновляем; не делать синхронных запросов в онлайне без таймаута/кэша.
Фичи: стабильность ASN/DeviceID, частота смен, расстояние между логинами.


10) Anti-Leakage и согласование online/offline

Point-in-time join, никаких будущих событий в окнах/лейблах.
Один код трансформаций (library) для офлайна и онлайна.
Тест эквивалентности: на выборке T сравниваем онлайн-значения фич с офлайном (MAE/MAPE).

YAML-спека фичи:
yaml name: deposits_sum_10m owner: ml-risk slo: {latency_ms_p95: 20, availability: 0.999}
offline:
source: silver.payments transform: "SUM(amount_base) OVER 10m BY user_pseudo_id"
online:
compute: "streaming_window: 10m"
tests:
- compare_online_offline_max_abs_diff: 0.5

11) Отбор признаков (feature selection)

11.1 Filter

Вариация/корреляция: удаляем константы,ρ>0.95 дубликаты.
Mutual Information (MI): ранжирование нелинейных связей.
IV/KS (риск): для бинарных таргетов в AML/RG.

11.2 Wrapper

RFE/Sequential FS: на маленьких наборах/логистической регрессии.
Stability Selection: устойчивость при бутстрэп-сэмплинге.

11.3 Embedded

L1/Lasso/ElasticNet: разреживание.
Деревья/GBDT: importance/SHAP для отбора и бизнес-интерпретации.
Group Lasso: групповой отбор (наборы бин-фич одной переменной).

Пайплайн (эскиз):
python
X = preprocess(raw)        # one-hot/TE/scale
X = drop_const_and_corr(X, thr=0.95)
rank_mi = mutual_info_rank(X, y)
keep1 = topk(rank_mi, k=200)
model = LGBMClassifier(...)
model.fit(X[keep1], y)
shap_vals = shap.TreeExplainer(model).shap_values(X[keep1])
keep2 = stable_topk_by_shap(shap_vals, k=60, bootstrap=20)
final = keep2

12) Устойчивость, дрейф и калибровка

Drift: PSI/KS по фичам и скору; алерты при превышении порогов.
Стабильность: следим за «хрупкими» TE/WOE (кардинальность/сдвиги).
Калибровка: Platt/Isotonic; отчеты reliability.
Slice-анализ: рынки/провайдеры/устройства — бэнчмарки метрик и ожидаемой стоимости ошибок.


13) Cost-инжиниринг и производительность

Cost per Feature (CPF): CPU/IO/сеть/хранение → бюджет на модель.
Материализация: тяжелые offline, легкие online; TTL/кэш для горячих фич.
Удаленные lookups: только async + кэш; p95 < 20–30 мс на фичи в онлайне.
Chargeback: учет стоимости фич/инференса по командам.


14) Feature Store (ядро согласованности)

Реестр: имя, формула, владелец, SLO, тесты, версии.
Online/Offline синхронизация: один код трансформаций, тест равенства.
Логи/аудит: кто менял формулу; влияние версии на метрики модели.


15) Примеры

ClickHouse: минутные агрегаты ставок:
sql
CREATE MATERIALIZED VIEW mv_bets_1m
ENGINE = SummingMergeTree()
PARTITION BY toDate(event_time)
ORDER BY (toStartOfMinute(event_time), user_pseudo_id)
AS
SELECT toStartOfMinute(event_time) AS ts_min,
user_pseudo_id,
sum(stake_base) AS stake_sum_1m,
count() AS bets_1m
FROM stream.game_events
GROUP BY ts_min, user_pseudo_id;
Anti-correlation drop (SQL-идея):
sql
-- вычислить корреляции и удалить пары с     ρ    >0.95, сохранив более «дешевую» фичу
WOE биннинг (эскиз):
python bins = monotonic_binning(x, y, max_bins=10)
woe = compute_woe(bins)
iv = compute_iv(bins)

16) Процессы и RACI

R (Responsible): Data Eng (конвейеры/Feature Store), Data Science (дизайн фич/отбор/метрики).
A (Accountable): Head of Data / CDO.
C (Consulted): Compliance/DPO (PII, residency), Risk/AML/RG (правила), SRE (SLO/стоимость), Security.
I (Informed): Продукт/Маркетинг/Операции/Поддержка.


17) Дорожная карта

MVP (3–5 недель):

1. Каталог топ-50 фич (Payments/Gameplay) с point-in-time формулами.

2. Feature Store v1 (online/offline) + тест эквивалентности.

3. Базовый отбор: константы/корреляции → MI → L1/SHAP shortlist (до 60 фич).

4. Мониторинг дрейфа фич и cost-дашборд.

Фаза 2 (5–10 недель):
  • TE/WOE с time-aware валидацией, графовые и календарные фичи.
  • Slice-анализ и fairness, калибровка вероятностей.
  • Материализация тяжелых офлайн фич, кэш онлайна, квоты.
Фаза 3 (10–16 недель):
  • Автогенерация документации фич, stability-selection в CI.
  • Авто-деактивация «дорогих и бесполезных» фич (CPF↑, вклад↓).
  • A/B сравнение наборов фич, отчеты expected-cost.

18) Чек-лист перед продом

  • Все фичи имеют спецификации (owner, формулу, версии, SLO).
  • Пройдены тесты point-in-time и эквивалентности online/offline.
  • Отбор выполнен: filter → embedded (SHAP/L1) → stability.
  • Мониторинг дрейфа и reliability настроен; пороги и алерты есть.
  • CPF/latency вписываются в бюджет; тяжелые фичи материализованы.
  • ПII-политики соблюдены (CLS/RLS, токенизация, резидентность).
  • Документация и примеры использования добавлены в каталог.

19) Анти-паттерны и риски

Лейкедж (будущие события/последствия промо).
Несогласованные online/offline формулы.
Переизбыточные one-hot из высоко-кардинальных категорий без hashing/TE.
«Дорогие» фичи без измеримого прироста качества.
Отсутствие slice/fairness анализа — скрытые деградации.
TE/WOE без time-aware кросс-валидации → переобучение.


20) Итог

Feature Engineering — это управляемая дисциплина: point-in-time, бизнес-смысл, воспроизводимость, мониторинг и экономика. Сильные фичи + строгий отбор (filter/wrapper/embedded) и единый Feature Store дают устойчивые, интерпретируемые и дешевые модели, которые улучшают Net Revenue, снижают фрод и поддерживают RG — прозрачно и комплаентно.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.