Збагачення даних
1) Призначення та бізнес-цінність
Збагачення перетворює «сирі» події в корисні факти, додаючи контекст і ознаки:- Фінанси/звітність: fx-нормалізація сум, прив'язка до ринків/податкових ставок, розрахунок GGR/NGR.
- Комплаєнс/AML/RG: скоринги ризику, санкційні/РЕР-мітки, RG-ліміти, поведінкові ознаки.
- Маркетинг/продукт: джерела трафіку, сегменти, місії/квести, персоналізація.
- SRE/операції: гео/ASN для трафіку, тип клієнта/пристрої, фічфлаги і релізи.
Ключовий результат - підвищення точності моделей, якість звітів і швидкість прийняття рішень.
2) Збагачуючі джерела (приблизний каталог)
Референс/каталоги: ігри, провайдери, ринки/юрисдикції, валюти, податкові таблиці, календар свят.
KYC/KYB/RG: рівні перевірки, статуси, самовиключення, ліміти, вікові групи.
AML/санкції/PEP: хіти скринінгу, списки, рівні ризику.
Мережі та пристрої: IP→geo/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 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 тижнів):- Підключення санкцій/РЕР/КУВ, BIN-таблиць PSP, device fingerprint.
- Feature Store (ядро ознак) + онлайн-кеш, realtime-збагачення Flink.
- DQ-правила на enrich-шар, lineage і «dry-run» симуляції.
- Персоналізація (місії/квести) і 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 детекторам ризику.