GH GambleHub

Feature Engineering e selezione dei segni

1) Assegnazione e principi

Lo scopo è quello di progettare segni sostenibili, interpretabili e convenienti tra offline e online.

Principi:
  • Point-in-time - I file vengono calcolati dai dati disponibili al momento della soluzione senza futuro (anti-leakage).
  • Domain-first: i fili riflettono meccaniche aziendali (depositi, sessioni, generi di gioco, RG/AML).
  • Reuse & Contracts: versioni, proprietari, formule e SLO in Feature Store.
  • Cost-aware - consideriamo latency e il costo di calcolo/conservazione è solo un ritorno.
  • Osservabilità: monitor deriva/stabilità/calibrazione; test di equivalenza online/offline.

2) Tassonomia dei segni per il iGaming

RFM/comportamento: recency/frequency/monetary per finestre (10m/1h/1d/7d/30d).
Sessioni: durata, pausa, cambio di dispositivo/ASN, velocità di azione.
Finanziari: depositi/conclusioni/charjbeck, quote dei metodi di pagamento, FX-normalizzazione.
Tipi di gioco: profili generici, volatilità dei provider, cluster RTP, win-streak.
Marketing: canali/UTM, risposte alle campagne, saturation/cooldown.
RG/AML: limiti, bandiere di auto-estrazione, pattern velocity, riutilizzo BIN/IP.
Geo/ora: calendari locali/festività, ore di cinture, sera/notte.
Grafica: connessioni user-card-device-ip, centrali/componenti, «anelli» del frodo.
NLP/testi - Temi e tonalità dei ticket/chat; Lamentele chiave.
Operativi: flag/errori dei provider, stabilità delle sessioni (per i modelli SRE).


3) Finestre e aggregazioni (point-in-time)

Le finestre tipiche sono 10m/1h/24h/7d/30d. Per ogni finestra, count/sum/mean/std/last/max/min, ratio e rate.

Modello SQL (depositi 30d, senza futuro):
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) Codifica categorica

One-Hot/Hasing per le categorie rare/elevate-radicali (giochi, provider).
Target Encoding (TE) - Media targata k-fold/leave-one-out e time-aware (anti-leakage).
WOE/IV - Bine monotoni controllate da IV e stabilità.

TE (pseudocode, 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) Normalizzazione e scale

Min-max/Robust/Z-score - finestra di allenamento; salviamo i parametri nei manufatti.
Conversioni logiche per lunghe code di importi/scommesse.
Box-Cox/Yeo-Johnson - Quando è necessaria la simmetrisazione.


6) Feci temporanee e stagionali

Calendario: giorno della settimana, ora, festività del mercato (ref. calendar), pay-day.
Frequenza: media/espone scivolose. antialiasing (EMA), deltas (t - t-1).
Event-based: tempo dall'ultimo deposito/vincita/perdita, «raffreddamento».


7) Segni grafici (frode/AML)

I vertici sono user/card/device/ip. Costole: transazioni/sessioni/segni congiunti.
Ficci: dimensioni componenti, degree, betweenness, pagerank, triads, riapparire.
Modello: nightly batch costruisce un grafico di ambedding/centralità della cache online.


8) Fici NLP (zapport/chat/gelosia)

Base: TF-IDF/NMF argomenti, sensment, lunghezza, frequenza di reclamo.
Avanzato: Embedding (Sentence-BERT) → la media dei ticetti per finestra.
PII: pre e post-maschera (email, PAN, telefoni) per regole.


9) Geo/ASN e dispositivi

IP→Geo/ASN: memorizziamo e aggiorniamo la cache non fare query sincrono in linea senza timeout/cache.
Fitch: stabilità del ASN/DeviceID, frequenza dei turni, distanza tra i login.


10) Anti-Leakage e negoziazione online/offline

Point-in-time join, nessun evento futuro nelle finestre/etichette.
Un solo codice di trasformazione (library) per offline e online.
Test di equivalenza: su un campione T, confrontiamo i valori online del Fic con l'offline (MAE/MAPE).

Filetti 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) Selezione dei segni (feature selection)

11. 1 Filter

Variazione/correlazione - Rimuoviamo le costanti,ρ>0. 95 duplicati.
Mutual Information (MI) - Classifica delle relazioni non lineari.
IV/KS per target binari in AML/RG.

11. 2 Wrapper

RFE/Sequential FS su piccoli set/regressione logistica.
Stability Selection - Resilienza per il sampling di butstreap.

11. 3 Embedded

L1/Lasso/ElasticNet, diluizione.
Alberi/GBDT: influenzance/SHAP per la selezione e l'interpretazione aziendale.
Gruppo Lasso - Selezione di gruppo (insiemi bin-fich di una variabile).

Pipline (sketch):
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) Sostenibilità, deriva e calibrazione

Draft: PSI/KS per filo e scorrimento; alert al superamento delle soglie.
Stabilità: osserviamo i «fragili» TE/WOE (cardinalità/spostamenti).
Calibrazione: Platt/Isotonic; Report reliability.
Slice-analisi: mercati/provider/dispositivi - bancarelle di metriche e costi di errore previsti.


13) Cost-ingegneria e prestazioni

Cost per feature (CPF): CPU/IO/rete/storage budget per modello.
Materiali: pesanti offline, leggeri online; TTL/cache per i file hot.
Lookups remoti: solo async + cache; p95 <20-30 ms per fici online.
Chargeback - Conteggio dei costi di fich/inferance per comando.


14) Feature Store (nucleo di coerenza)

Registro: nome, formula, proprietario, SLO, test, versioni.
Sincronizzazione online/offline: un codice di trasformazione, un test di uguaglianza.
Logi/verifiche: chi ha cambiato la formula; l'impatto della versione sulle metriche del modello.


15) Esempi

ClickHouse: unità di puntata minuti:
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-Idea):
sql
-- вычислить корреляции и удалить пары с     ρ    >0.95, сохранив более «дешевую» фичу
WOE binning (sketch):
python bins = monotonic_binning(x, y, max_bins=10)
woe = compute_woe(bins)
iv = compute_iv(bins)

16) Processi e RACI

R (Respontibile): Data Eng (linee di montaggio/Feature Store), Data Science (design fich/selezione/metriche).
A (Accountable): Head of Data / CDO.
C (Consulted): Compliance/DPO (PII, residency), Risk/AML/RG (regole), SRE (SLO/costo), Security.
I (Informed) - Prodotto/Marketing/Operazioni/Supporto.


17) Road map

MVP (3-5 settimane):

1. Catalogo top 50 fich (Payments/Gameplay) con formule point-in-time.

2. Feature Store v1 (online/offline) + test di equivalenza.

3. Selezione base: costanti/correlazioni di → MI → L1/SHAP shortlist (fino a 60 fit).

4. Monitoraggio della deriva fich e cost-dashboard.

Fase 2 (5-10 settimane):
  • TE/WOE con convalida time-aware, fitta grafica e calendario.
  • Analisi slice e fairness, calibrazione delle probabilità.
  • Materializzazione di file pesanti offline, cache online, quote.
Fase 3 (10-16 settimane):
  • Generazione automatica della documentazione Fich, stability-selection in CI.
  • Disattivazione automatica di «costosi e inutili» Fich (CPF↑, vklad↓).
  • A/B confronto di insiemi di fiffe, report expected-cost.

18) Foglio di assegno prima della vendita

  • Tutti i fili hanno specifiche (owner, formula, versioni, SLO).
  • Test point-in-time completati e equivalenza online/offline.
  • Selezione eseguita: filter → embedded (SHAP/L1) → stability.
  • Il monitoraggio della deriva e della reliability è configurato; ci sono soglie e alert.
  • CPF/latency rientrano nel budget; i fici pesanti sono materializzati.
  • Criteri PII rispettati (CLS/RLS, tornizzazione, residenza).
  • Documentazione e esempi di utilizzo sono stati aggiunti alla directory.

19) Anti-pattern e rischi

Lakedge (eventi futuri/effetti promo).
Formule non conformi in linea/offline.
Rieletti one-hot da categorie altamente radicali senza hasing/TE.
«Cari» senza un aumento misurabile della qualità.
Nessuna analisi slice/fairness - Degrado nascosto.
TE/WOE senza time-aware di convalida cross-valuta per la riqualificazione.


20) Totale

Feature Engineering è una disciplina gestita: point-in-time, significato aziendale, riproduzione, monitoraggio ed economia. Fibre forti + selezione rigorosa (filter/wrapper/embedded) e un unico Feature Store offrono modelli sostenibili, interpretabili e a basso costo che migliorano Net Revenue, riducono il frod e supportano RG - in modo trasparente e completo.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.