データエンリッチメント
1)目的と事業価値
エンリッチメントは、コンテキストとサインを追加することで「生の」イベントを有用な事実に変えます:- 財務/報告:金額のfx正規化、市場/税率への拘束、GGR/NGRの計算。
- コンプライアンス/AML/RG:リスクスコア、制裁/PEPタグ、RG制限、行動特性。
- マーケティング/製品:トラフィックソース、セグメント、ミッション/クエスト、パーソナライゼーション。
- SRE/operations:トラフィック、クライアント/デバイスタイプ、フィーチャーフラグおよびリリース用のgeo/ASN。
重要な結果は、モデルの精度、レポートの品質、意思決定のスピードの向上です。
2)濃縮源(カタログ例)
参考/カタログ:ゲーム、プロバイダー、市場/管轄、通貨、税表、休日カレンダー。
KYC/KYB/RG:検証レベル、ステータス、自己除外、制限、年齢グループ。
AML/制裁/PEP:スクリーニングヒット、リスト、リスクレベル。
ネットワークとデバイス:IP→ジオASN、 デバイス/OS/ブラウザ、デバイス指紋。
決済プロバイダ(PSP): BINテーブル、メソッド、MCC、リスクタグ。
FX/時間:イベント日、現地時間帯/DSTの為替レート。
コンテンツとマーケティング:ソース/キャンペーン/UTM、アフィリエイト、セグメント。
モデルとヒューリスティック:事前に訓練されたスコアリング、埋め込み、カテゴリカルマッピング。
3)濃縮の種類
ルックアップジョイント:キーによるポイントマッピング( 、 BIN、 、 。
寸法添付:事実に寸法(薄暗い。)を添付します。
派生フィールド:計算された列(amount_base、 local_time、 tax_rate)。
集計/速度:ウィンドウのカウンター(Nレート/分、預金量/時間)。
リスク/行動機能:「最後のイベントからの時間」、財布の共有、夜のアクティビティ。
Geo/ASN/Device:国コード、地域、オペレータ、デバイス/ブラウザタイプ。
セマンティックマッピング:プロバイダ/ゲーム分類、プレーヤークラスタ。
オンライン/オフラインモデリング用ML機能(Feature Store)
4)豊かな場所: バッチ対ストリーム
ストリーム(リアルタイム):antifraud、 RGトリガ、SREアラート-p95遅延≤ 2-5秒;キャッシュ(Redis/Scylla)を参照します。
バッチ(マイクロバッチ/毎日):金ショーケース(GGR/RG/AML)、和解、レポート-安定性と完全性はレイテンシよりも重要です。
ハイブリッド:高速オンライン機能+夜間の再濃縮(和解/精度)。
5)建築リファレンス
1.ブロンズ-生イベント(追加のみ)。
2.Silver (clean/conform)-正規化、キー、primary lookup'と(fx、 geo、 dim。)。
3.Enrichment Layer-拡張特性、ウィンドウ集計、リスクラベル。
4.Feature Store-特徴的なレジスタ(オンライン/オフラインの整合性)。
5.ゴールド-BI/レギュレータ/モデルのショーケース。不変のアーティファクト。
6.サービス-API/GraphQL、レポートされたエクスポート、リアルタイムアラート。
コンポーネント:Kafka/Redpanda、 Flink/Spark/Beam、 Redis/Scylla(ルックアップ)、ClickHouse/Pinot(ライブリーディング)、Lakehouse(デルタ/アイスバーグ/フーディ)。
6)契約とスキーム
Schema-first: 'event_time'、 'schema_version'、 stable keys (user_pseudo_id、 game_id、 transaction_id)。
濃縮マーク:'濃縮。バージョン'、'enrichment。ソース'、'fx_source'、'geo_source'、'model_version'。
バージョン管理:新機能はnullableとして追加されます。breaking changes-'/v2'とダブルエントリを介して。
7)エンリッチメント例(SQL/pseudocode)
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 by 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沈殿物の速度(流れ)の窓の印)
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' not NULL、 'fx_source'ホワイトリストから'amount_base ≥ 0'を計算。
- Geo/ASN:検索に成功した割合≥ 98%(市場別)、ディレクトリ内の'country'です。
- RG/AMLラベル:'valid_from/valid_to' (SCD II)は交差しません。歴史に「穴」がないということです。
- 集計/ウィンドウ:ウィンドウの正しさ(ダブルカウントなし)、完全性≥ 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、実際の識別子-別のループで豊かになります。
ジオローカリゼーションとレジデンシー:地域別ルーティング(EEA/UK/BR)、個別の暗号化キー。
DSAR/RTBF:濃縮された投影は「隠蔽「/redactionをサポートする必要があります。例外のための法的根拠を保って下さい。
法的保留:報告可能なアーティファクト/ケースの削除をフリーズします。
10)観察可能性と血統
Linage: rawイベント→ルックアップ/集計→ディスプレイ/モデル;ソースバージョン('fx_source'、 'geo_source'、 'bin_source')を修正しました。
SLI/SLO: freshness p95(シルバー)≤ 15ミリメートル;成功したジオルックアップ≥ 98%;99%レイテンシ≥完了したキー特性を持つレコードの割合は、ストリームp95 ≤ 2-5 sを豊かにします。
ダッシュボード:ソースによるヒートマップの完全性、参考書/モデルのバージョンのマップ、「高価な」結合のモニター、兆候のドリフト。
11)コストとパフォーマンス
キャッシュ/具体化:頻繁なルックアップ'とRedis/Scylla;定期的なスナップショット。
コンパクトサイン:集計を保存します(「raw」リストではありません)。寄木細工/列形式を使用します。
仕切り:日付/市場/テナントによって;頻繁にフィルタリングされたフィールドによるクラスタリング。
適応周波数:重い豊かな仕事-夜に;リアルタイム-重要なだけ。
チャージバック:チーム/機能別のコスト/クエリとコスト/GB会計。
12)パターンおよび反パターン
パターン:- RG/KYC/プロバイダ用のディメンションルックアップ+SCD II。
- 非同期タイムアウトとフォールバック(ラベル"unknown'+repeat)によるエンリッチメント。
- オンライン/オフラインのネゴシエーションと再現性テストを備えたFeature Store。
- 濃縮のための規則としてコード(しきい値/カテゴリマップ)。
- キャッシュなしでホットパス内の外部APIへの堅牢なバインド。
- ラベルのないソースバージョン('fx_source'、 'geo_source')。
- Silverの「all with everything」(コスト/複雑性爆発)の非正規化。
- 分析レイヤーへのPIIの導入。
13)プロセスとRACI
R(責任ある):データエンジニアリング(パイプラインが豊か/ストリーム)、ドメインオーナー(フィーチャーセマンティクス)、MLOps(フィーチャーストア)。
A(説明責任):データ責任者/最高データ責任者。
C(コンサルティング):コンプライアンス/リーガル/DPO、ファイナンス(FX)、リスク(RG/AML)、 SRE。
I(インフォームド):BI/製品/マーケティング/オペレーション。
14)実装ロードマップ
MVP (2-4週):1.エンリッチメントソースカタログ(fx、 geo、 markets、 RG/KYC)。
2.Silver-normalization+basic lookup'と(fx/geo/dim。).
3.最初の集計は速度(預金/レート)で、濃縮されています。v1テーブル。
4.ダッシュボードの完全性/鮮度、ソースバージョン。
フェーズ2(4-8週間):- 制裁/PEP/BCL、 PSP BINテーブル、デバイス指紋の接続。
- 機能ストア(コア機能)+オンラインキャッシュ、リアルタイム濃縮Flink。
- レイヤー、血統、ドライランシミュレーションを豊かにするためのDQルール。
- オンラインパーソナライズ(ミッション/クエスト)とRG/AML検出器。
- バリューマネジメント(クォータ、マテリアライゼーション、Zオーダー)、マルチリージョン。
- 機能とカタログドキュメントの自動生成。
15)販売の前の質のチェックリスト
- 一貫したキーとスキーマ、署名されたソースバージョン。
- fx/geo/RG/制裁/ウィンドウのDQルール;アラートとSLO。
- 外部参照のキャッシュ/タイムアウトとフォールバック。
- ラインとコスト/パフォーマンスのダッシュボード。
- 豊富なテーブルのDSAR/RTBF/Legal Holdプロシージャ。
- 特性のドキュメント(所有者、数式、SLO、インパクト)。
16)頻繁なミスとそれらを回避する方法
タグ付けされていない参照/モデルバージョン:常に'_source'と'model_version'を修正します。
fx 「retroactively」の計算:イベント時にレートを使用します。FXソースを保存します。
PIIブレンド:マッピングをトークン化して分離します。
単位でのダブルカウント:チェックウィンドウとデッドアップ。
キャッシュなしの同期外部コール:async+cache/retraiと入力します。
単一のオンライン/オフライン変換コード、コンプライアンステストなど、機能の再現性はありません。
17)用語集(短い)
Lookup/Dimension attach-参照帳をキーで事実に添付します。
Feature Store-MLの特性登録とサービング。
SCD II-有効間隔の測定履歴。
FX-為替レートと金額の正規化。
ASN-自律ネットワークシステム;不正防止や地理分析に役立ちます。
18)ボトムライン
エンリッチメントは、イベントを一貫したキーとスキーム、制御されたルックアップと集計、バージョン管理されたソース、デフォルトのプライバシー、DQ、およびオブザビリティなどの知識に変える規律です。記載されたパターンに従うことで、再現性があり、経済的で準拠したショーケースとレポート、パーソナライゼーション、リアルタイムのリスク検出器の準備ができた兆候を受け取ることができます。