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à.
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).
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
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).
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.
- 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.