Enrichissement des données
1) La destination et la valeur commerciale
L'enrichissement transforme les événements « bruts » en faits utiles, en ajoutant un contexte et des signes :- Finances/rapports : fx-normalisation des montants, ancrage aux marchés/taux d'imposition, calcul du RGG/RGG.
- Conformité/AML/RG : scores de risque, étiquettes de sanction/RER, limites RG, signes comportementaux.
- Marketing/produit : sources de trafic, segments, missions/quêtes, personnalisation.
- SRE/opérations : géo/ASN pour le trafic, le type de client/appareil, les fichflags et les versions.
Le résultat clé est d'améliorer la précision des modèles, la qualité des rapports et la rapidité de la prise de décision.
2) Sources enrichissantes (catalogue approximatif)
Références/catalogues : jeux, fournisseurs, marchés/juridictions, devises, tables fiscales, calendrier des fêtes.
KYC/KYB/RG : niveaux de vérification, statuts, auto-exclusion, limites, groupes d'âge.
AML/sanctions/PEP : succès de dépistage, listes, niveaux de risque.
Réseaux et appareils : IP→geo/ASN, appareil/OS/navigateur, device fingerprint.
Fournisseurs de paiement (PSP) : tables BIN, méthodes, MCC, étiquettes de risque.
FX/heure : taux de change à la date de l'événement, fuseaux horaires locaux/DST.
Contenu et marketing : sources/campagnes/UTM, affiliations, segments.
Modèles et heuristiques : scorings pré-enseignés, embeddings, mappings catégoriques.
3) Types d'enrichissement
Lookup-joyn : mappage de points par clé (game_id, BIN, ip_range, user_pseudo_id).
Dimension attach : attache des mesures (bou.) aux faits.
Sites derived : colonnes calculées (amount_base, local_time, tax_rate).
Aggregations/velocity : guichets par guichet (N paris/min, montant des dépôts/heure).
Risk/behavioral features : « l'heure du dernier événement », share-of-wallet, activité nocturne.
Geo/ASN/Device : code pays, région, opérateur, type d'appareil/navigateur.
Simantic mappings : classement des fournisseurs/jeux, clusters de joueurs.
ML-fiches : caractéristiques pour la modélisation en ligne/hors ligne (Feature Store).
4) Où enrichir : Batch vs Stream
Stream (temps réel) : antifrod, déclencheurs RG, alertes SRE - retards p95 ≤ 2-5 s ; lookup dans les caches (Redis/Scylla), demandes asynchrones aux fournisseurs de timaouts.
Batch (micro batch/quotidien) : vitrines Gold (GGR/RG/AML), rapprochements, rapports - la stabilité et l'exhaustivité sont plus importantes que la latence.
Hybride : signe rapide en ligne + ré-enrichissement nocturne (reconnaissance/accuracy).
5) Référence architecturale
1. Bronze - événements bruts (append-only).
2. Silver (clean/confort) - normalisation, clés, primaire lookup 'et (fx, geo, bou.) .
3. Enrichment Layer - caractéristiques étendues, agrégats de fenêtres, étiquettes de risque.
4. Feature Store - Registre des caractéristiques (cohérence en ligne/hors ligne).
5. Gold - vitrines sous BI/régulateur/modèle ; des artefacts immuables.
6. Les services sont API/GraphQL, les exportations déclarées, les alertes en temps réel.
Composants : Kafka/Redpanda, Flink/Spark/Beam, Redis/Scylla (lookup), ClickHouse/Pinot (lecture en ligne), Lakehouse (Delta/Iceberg/Hudi).
6) Contrats et régimes
Schema-first : 'event _ time', 'schema _ version', clés stables (user_pseudo_id, game_id, transaction_id).
Marques d'enrichissement : 'enrichment. version`, `enrichment. sources`, `fx_source`, `geo_source`, `model_version`.
Versioning : de nouveaux caractères sont ajoutés comme nullables ; breaking-change - via '/v2 'et double enregistrement.
7) Exemples d'enrichissement (SQL/pseudo-code)
7. 1 FX-normalisation et heure locale
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 par IP (pseudo-code)
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 Signes de la vitesse des dépôts (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 Appariement avec les limites 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) Qualité d'enrichissement (DQ)
Règles minimales :- FX : 'fx _ rate _ used' n'est pas NULL, 'fx _ source' de whitelist, calculé 'amount _ base ≥ 0'.
- Geo/ASN : proportion de succès lookups ≥ 98 % (par marché), « pays » dans le répertoire.
- Les marques RG/AML : 'valid _ from/valid _ to' (SCD II) ne se croisent pas ; l'absence de « trous » dans l'histoire.
- Agrégats/fenêtres : correct des fenêtres (pas de double comptage), completeness ≥ 99. 5%.
- Versions des modèles : 'model _ version' est présent, contrôle de la dérive des caractéristiques.
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) Vie privée et conformité
Minimisation du PII : enrichissez par pseudo-ID, identifiants réels dans un circuit distinct.
Géolocalisation et résidence : routage par région (EEE/UK/BR), clés de cryptage séparées.
DSAR/RTBF : les projections enrichies doivent soutenir la « dissimulation « /rédaction ; conserver le fondement juridique des exceptions.
Legal Hold : gel des suppressions pour les artefacts/cas déclarés.
10) Observabilité et lignage
Linage : d'un événement brut → lookup/agrégats → vitrines/modèles ; fixez les versions des sources ('fx _ source', 'geo _ source', 'bin _ source').
SLI/SLO: freshness p95 (Silver) ≤ 15 мин; geo-lookups réussis ≥ 98 %; la proportion de dossiers présentant des signes clés remplis ≥ 99 %; laticy enrich-strim p95 ≤ 2-5 s.
Dashboards : carte thermique complète par source, carte des versions des manuels/modèles, moniteur « cher » join's, dérive des signes.
11) Coût et performance
Caches/matérialisation : fréquentes lookup 'et dans Redis/Scylla ; les snapshots périodiques.
Caractéristiques compactes : conserver les agrégats (et non les listes « brutes ») ; utilisez les formats Parquet/colonne.
Lot : par date/marché/tenant ; clustering sur des champs souvent filtrés.
Fréquence adaptative : jobs enrich lourds - les nuits ; realtime - seulement critique.
Chargeback : comptez cost/query et cost/GB par commandes/fiches.
12) Patterns et anti-patterns
Modèles :- Dimension Lookup + SCD II pour RG/KYC/fournisseurs.
- Async Enrichment avec les temps et fallback (étiquette « unknown » + répétition).
- Feature Store avec des tests de concordance en ligne/hors ligne et de réfraction.
- Rule-as-Code pour l'enrichissement (cartes seuil/catégories).
- Référence rigide à une API externe dans un chemin chaud sans cache.
- Versions non marquées des sources ('fx _ source', 'geo _ source').
- Dénormalisation « tout avec tout » dans Silver (explosions de coût/complexité).
- L'introduction de PII dans les couches analytiques.
13) Processus et RACI
R (Responsible) : Data Engineering (Pipline enrich/stream), Domain Owners (sémantique des traits), 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/Produit/Commercialisation/Opérations.
14) Feuille de route pour la mise en œuvre
MVP (2-4 semaines) :1. Catalogue des sources d'enrichissement (fx, geo, markets, RG/KYC).
2. Silver-normalisation + base lookup 'et (fx/geo/bou.) .
3. Les premiers agrégats velocity (dépôts/paris) et enriched. v1 du tableau.
4. Dashboard completeness/freshness, versions sources.
Phase 2 (4-8 semaines) :- Connexion de sanctions/RER/KWD, tables BIN PSP, device fingerprint.
- Feature Store (noyau de caractéristiques) + cache en ligne, realtime-enrichissement Flink.
- Règles DQ sur la couche enrich, lineage et simulation « dry-run ».
- Personnalisation (missions/quêtes) et détecteurs RG/AML en ligne.
- Gestion de la valeur (quotas, matérialisation, Z-order), multi-région.
- Autogénération de la documentation des caractéristiques et du catalogue (« carte fonctionnelle »).
15) Chèque de qualité avant la vente
- Clés et schémas convenus, versions sources signées.
- Règles DQ sur fx/geo/RG/sanctions/fenêtres ; alerte et SLO.
- Cache/temporisation et fallback pour les lookup externes.
- Linage et dashboards de coût/performance.
- Procédures DSAR/RTBF/Legal Hold pour les tableaux enrichis.
- Documentation des caractéristiques (owner, formules, SLO, impact).
16) Erreurs fréquentes et comment les éviter
Versions non masquées des guides/modèles : fixez toujours '_ source' et 'model _ version'.
Calcul fx « rétroactif » : utiliser le cours au moment de l'événement ; stocker la source FX.
Mélange PII : Tokenizer et isoler les mappings.
Double comptabilisation dans les unités : vérifiez les fenêtres et le dedup.
Appels externes synchrones sans cache : entrez async + cache/retrai.
Pas de retransmission fich : code de transformation unique en ligne/hors ligne, tests de conformité.
17) Glossaire (résumé)
Lookup/Dimension attaque - Joignez le manuel au fait par clé.
Feature Store - Registre et Serving Caractéristiques pour ML.
SCD II - Historique des mesures à intervalles de validation.
FX - taux de change et normalisation des montants.
ASN est un système de réseau autonome ; utile pour l'antifrode et la géo-analyse.
18) Résultat
L'enrichissement est la discipline pour transformer les événements en connaissances : clés et schémas cohérents, lookup surveillés et agrégats, sources versionnées, vie privée par défaut, DQ et observabilité. En suivant les schémas décrits, vous obtiendrez des vitrines et des caractéristiques reproductibles, économiques et compliantes, prêtes à être signalées, personnalisées et des détecteurs de risques réels.