GH GambleHub

Обогащение данных

1) Назначение и бизнес-ценность

Обогащение превращает «сырые» события в полезные факты, добавляя контекст и признаки:
  • Финансы/отчетность: fx-нормализация сумм, привязка к рынкам/налоговым ставкам, расчет GGR/NGR.
  • Комплаенс/AML/RG: скоринги риска, санкционные/PEP-метки, RG-лимиты, поведенческие признаки.
  • Маркетинг/продукт: источники трафика, сегменты, миссии/квесты, персонализация.
  • SRE/операции: гео/ASN для трафика, тип клиента/устройства, фичфлаги и релизы.

Ключевой результат — повышение точности моделей, качество отчетов и скорость принятия решений.


2) Обогащающие источники (примерный каталог)

Референс/каталоги: игры, провайдеры, рынки/юрисдикции, валюты, налоговые таблицы, календарь праздников.
KYC/KYB/RG: уровни проверки, статусы, самоисключения, лимиты, возрастные группы.
AML/санкции/PEP: хиты скрининга, списки, уровни риска.
Сети и устройства: IP→гео/ASN, устройство/OS/браузер, device fingerprint.
Платежные провайдеры (PSP): BIN-таблицы, методы, MCC, риск-метки.
FX/время: курсы валют на дату события, локальные часовые пояса/DST.
Контент и маркетинг: источники/кампании/UTM, аффилиаты, сегменты.
Модели и эвристики: предобученные скоринги, эмбеддинги, категориальные маппинги.


3) Типы обогащения

Lookup-джойн: точечное сопоставление по ключу (game_id, BIN, ip_range, user_pseudo_id).
Dimension attach: присоединение измерений (dim.) к фактам.
Derived fields: вычисляемые колонки (amount_base, local_time, tax_rate).
Aggregations/velocity: счетчики за окна (N ставок/мин, сумма депозитов/час).
Risk/behavioral features: «время с последнего события», share-of-wallet, ночная активность.
Geo/ASN/Device: код страны, регион, оператор, тип устройства/браузера.
Semantic mappings: классификация провайдеров/игр, кластеры игроков.
ML-фичи: признаки для онлайн/офлайн моделирования (Feature Store).


4) Где обогащать: Batch vs Stream

Stream (real-time): антифрод, RG-триггеры, алерты SRE — задержки p95 ≤ 2–5 с; lookup в кэши (Redis/Scylla), асинхронные запросы к провайдерам с таймаутами.
Batch (микро-батчи/ежедневно): витрины Gold (GGR/RG/AML), сверки, отчеты — стабильность и полнота важнее латентности.
Гибрид: быстрый онлайн-признак + ночное переобогащение (reconciliation/accuracy).


5) Архитектурный референс

1. Bronze — сырые события (append-only).
2. Silver (clean/conform) — нормализация, ключи, первичные lookup’и (fx, geo, dim.).
3. Enrichment Layer — расширенные признаки, агрегаты окон, риск-метки.
4. Feature Store — регистр признаков (онлайн/офлайн согласованность).
5. Gold — витрины под BI/регуляторку/модели; неизменяемые артефакты.
6. Сервисы — API/GraphQL, отчетные экспорты, real-time алерты.

Компоненты: Kafka/Redpanda, Flink/Spark/Beam, Redis/Scylla (lookup), ClickHouse/Pinot (оперативное чтение), Lakehouse (Delta/Iceberg/Hudi).


6) Контракты и схемы

Schema-first: `event_time`, `schema_version`, стабильные ключи (user_pseudo_id, game_id, transaction_id).
Отметки обогащения: `enrichment.version`, `enrichment.sources`, `fx_source`, `geo_source`, `model_version`.
Версионирование: новые признаки добавляются как nullable; breaking-изменения — через `/v2` и двойную запись.


7) Примеры обогащения (SQL/псевдокод)

7.1 FX-нормализация и локальное время

sql
SELECT p.transaction_id,
p.amount_orig,
p.currency,
r.rate   AS fx_rate_used,
p.amount_orig r.rate AS amount_base,
p.event_time,
convert_timezone(m.tz, 'UTC', p.event_time) AS local_time,
r.fx_source
FROM bronze.payment_events p
JOIN dim.fx_rates r
ON r.date = DATE(p.event_time) AND r.ccy_from = p.currency AND r.ccy_to = 'EUR'
JOIN dim.markets m ON m.code = p.market;

7.2 Geo/ASN по IP (псевдокод)

python geo = geo_db.lookup(ip)
asn = asn_db.lookup(ip)
record["geo_country"] = geo.country record["asn"] = asn.number record["enrichment"]["geo_source"] = "mmdb:2025-10-01"

7.3 Оконные признаки скорости депозитов (stream)

sql
SELECT user_pseudo_id,
TUMBLE_START(event_time, INTERVAL '10' MINUTE) AS win_start,
COUNT() AS deposits_10m,
SUM(amount_base) AS deposits_sum_10m
FROM silver.payments
GROUP BY user_pseudo_id, TUMBLE(event_time, INTERVAL '10' MINUTE);

7.4 Сопряжение с RG-лимитами

sql
SELECT b., r.daily_deposit_limit, r.self_exclusion
FROM silver.bets b
LEFT JOIN dim.rg_limits r USING (user_pseudo_id);

8) Качество обогащения (DQ)

Минимальные правила:
  • FX: `fx_rate_used` не NULL, `fx_source` из whitelist, расчетная `amount_base ≥ 0`.
  • Geo/ASN: доля успешных lookups ≥ 98% (по рынкам), `country` в справочнике.
  • RG/AML метки: `valid_from/valid_to` (SCD II) не пересекаются; отсутствие «дыр» в истории.
  • Агрегаты/окна: корректность окон (нет двойного учета), completeness ≥ 99.5%.
  • Версии моделей: `model_version` присутствует, контроль дрейфа признаков.
Пример YAML-правил:
yaml table: enriched.payments rules:
- name: fx_present type: not_null column: fx_rate_used severity: critical
- name: country_known type: in_set column: geo_country set_ref: ref.countries severity: major
- name: rg_scd_valid type: scd_validity columns: [valid_from, valid_to]
severity: major

9) Приватность и комплаенс

Минимизация PII: обогащайте по псевдо-ID, реальные идентификаторы — в отдельном контуре.
Geo-локализация и резидентность: маршрутизация по региону (EEA/UK/BR), раздельные ключи шифрования.
DSAR/RTBF: обогащенные проекции должны поддерживать «скрытие»/редакцию; храните правовое основание для исключений.
Legal Hold: заморозка удалений для отчетных артефактов/кейсов.


10) Наблюдаемость и lineage

Линедж: от сырого события → lookup/агрегаты → витрины/модели; фиксируйте версии источников (`fx_source`, `geo_source`, `bin_source`).
SLI/SLO: freshness p95 (Silver) ≤ 15 мин; успешные geo-lookups ≥ 98%; доля записей с заполненными ключевыми признаками ≥ 99%; latency enrich-стрима p95 ≤ 2–5 с.
Дашборды: тепловая карта completeness по источникам, карта версий справочников/моделей, монитор «дорогих» join’ов, дрейф признаков.


11) Стоимость и производительность

Кэши/материализация: частые lookup’и в Redis/Scylla; периодические snapshot’ы.
Компактные признаки: храните агрегаты (а не «сырые» списки); используйте Parquet/колоночные форматы.
Партиционирование: по дате/рынку/тенанту; кластеризация по часто фильтруемым полям.
Адаптивная частота: тяжелые enrich-джобы — ночами; realtime — только критичные.
Chargeback: учет cost/query и cost/GB по командам/фичам.


12) Паттерны и анти-паттерны

Паттерны:
  • Dimension Lookup + SCD II для RG/KYC/провайдеров.
  • Async Enrichment с таймаутами и fallback (метка «unknown» + повтор).
  • Feature Store с online/offline-согласованием и тестами репроходимости.
  • Rule-as-Code для обогащений (пороговые/категориальные карты).
Анти-паттерны:
  • Жесткая привязка к внешним API в горячем пути без кэша.
  • Немаркированные версии источников (`fx_source`, `geo_source`).
  • Денормализация «все со всем» в Silver (взрывы стоимости/сложности).
  • Привнесение PII в аналитические слои.

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

R (Responsible): Data Engineering (пайплайны enrich/stream), Domain Owners (семантика признаков), MLOps (Feature Store).
A (Accountable): Head of Data / Chief Data Officer.
C (Consulted): Compliance/Legal/DPO, Finance (FX/налоги), Risk (RG/AML), SRE.
I (Informed): BI/Продукт/Маркетинг/Операции.


14) Дорожная карта внедрения

MVP (2–4 недели):

1. Каталог обогащающих источников (fx, geo, markets, RG/KYC).

2. Silver-нормализация + базовые lookup’и (fx/geo/dim.).

3. Первые агрегаты velocity (депозиты/ставки) и enriched.v1 таблицы.

4. Дашборд completeness/freshness, версии источников.

Фаза 2 (4–8 недель):
  • Подключение санкций/PEP/KYB, BIN-таблиц PSP, device fingerprint.
  • Feature Store (ядро признаков) + онлайн-кэш, realtime-обогащение Flink.
  • DQ-правила на enrich-слой, lineage и «dry-run» симуляции.
Фаза 3 (8–12 недель):
  • Персонализация (миссии/квесты) и RG/AML-детекторы на онлайне.
  • Управление стоимостью (квоты, материализация, Z-order), мульти-регион.
  • Автогенерация документации признаков и каталога («feature cards»).

15) Чек-лист качества перед продом

  • Согласованные ключи и схемы, версии источников подписаны.
  • DQ-правила на fx/geo/RG/санкции/окна; алерты и SLO.
  • Кэши/таймауты и fallback для внешних lookup’ов.
  • Линедж и дашборды стоимости/производительности.
  • Процедуры DSAR/RTBF/Legal Hold для обогащенных таблиц.
  • Документация признаков (owner, формулы, SLO, влияние).

16) Частые ошибки и как их избежать

Непомеченные версии справочников/моделей: всегда фиксируйте `_source` и `model_version`.
Вычисление fx «задним числом»: используйте курс на момент события; храните источник FX.
Смешение PII: токенизируйте и изолируйте маппинги.
Двойной учет в агрегатах: проверяйте окна и дедуп.
Синхронные внешние вызовы без кэша: вводите async + кэш/ретраи.
Нет репроходимости фич: единый код трансформаций online/offline, тесты соответствия.


17) Глоссарий (кратко)

Lookup/Dimension attach — присоединение справочника к факту по ключу.
Feature Store — регистр и сервинг признаков для ML.
SCD II — историзация измерений с интервалами валидности.
FX — курсы валют и нормализация сумм.
ASN — автономная система сети; полезно для антифрода и гео-аналитики.


18) Итог

Обогащение — это дисциплина превращения событий в знания: согласованные ключи и схемы, контролируемые lookup’и и агрегаты, версионированные источники, приватность по умолчанию, DQ и наблюдаемость. Следуя описанным паттернам, вы получите воспроизводимые, экономичные и комплаентные витрины и признаки, готовые к отчетности, персонализации и real-time детекторам риска.

Contact

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

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

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

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

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

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