Ingineria caracteristicilor și selecția caracteristicilor
1) Scop și principii
Obiectiv: construirea unor caracteristici stabile, interpretabile și economice convenite între offline și online.
Principii:- Punct în timp: caracteristicile sunt calculate din datele disponibile în momentul soluției, fără viitor (anti-scurgere).
- Domeniu-primul: caracteristici reflectă mecanica de afaceri (depozite, sesiuni, genuri de joc, RG/AML).
- Reutilizare și contracte: versiuni Feature Store, proprietari, formule și SLO-uri.
- Conștienți de costuri: considerăm că latența și costul de calcul/stocare → materializa numai răzbunarea.
- Observabilitate: monitor drift/stabilitate/calibrare; testul de echivalență online/offline.
2) taxonomie caracteristică pentru iGaming
RFM/comportamental: recency/frequency/monetary by windows (10m/1h/1d/7d/30d).
Sesiune: durate, pauze, modificări de dispozitiv/ASN, viteza de acțiune.
Financiar: depozite/retrageri/chargebacks, acțiuni ale metodelor de plată, normalizare FX.
Gaming: profiluri de gen, volatilitatea furnizorului, clustere RTP, win-streak.
Marketing: canale/UTM, răspunsuri la campanie, saturație/cooldown.
RG/AML: limite, steaguri de auto-excludere, modele de viteză, reutilizare BIN/IP.
Geo/ora: calendare/sarbatori locale, ora centurii, seara/noapte.
Grafic: user-card-device-ip link-uri, centralitate/componente, inele de fraudă.
NLP/texte: teme și tonul biletelor/chat-urilor; principalele plângeri.
Operațional: erori de întârziere/furnizor, stabilitatea sesiunii (pentru modelele SRE).
3) Ferestre și agregate (punct în timp)
Ferestre tipice: 10m/1h/24h/7d/30d. Pentru fiecare fereastră - numărul/suma/media/std/ultimul/max/min, raportul și rata.
Șablon SQL (depozite 30d, fără viitor):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) Codificări categorice
One-Hot/Hashing: pentru categorii rare/high-cardinal (jocuri, furnizori).
Codare țintă (TE): medii țintă cu k-fold/leave-one-out și anti-scurgere conștientă de timp.
VAI/IV (scor de risc): pubele monotonice cu control IV și stabilitate.
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) Normalizare și scalare
Min-max/Robust/Z-score - prin fereastra de antrenament; salvați parametrii în artefacte.
Conversii jurnal pentru cozi lungi de sumă/pariu.
Box-Cox/Yeo-Johnson - când este necesară simetrizarea.
6) Caracteristici temporare și sezoniere
Calendar: ziua săptămânii, ora, sărbătoarea pieței (ref. calendar), ziua plății.
Frecvență: medii în mișcare/expon. netezire (EMA), delte (t − t-1).
Bazat pe evenimente: timpul de la ultima depunere/câștig/pierdere, „răcire”.
7) Caracteristicile graficului (fraudă/LMA)
Noduri: utilizator/card/dispozitiv/ip. Margini: tranzacții/sesiuni/caracteristici comune.
Caracteristică: dimensiune componentă, grad, betweeness, pagerank, triade, reapariție.
Model: lot de noapte construiește un grafic → încorporarea/centralitatea → memoria cache online.
8) Caracteristici NLP (suport/chat-uri/recenzii)
De bază: subiecte TF-IDF/NMF, sentiment, lungime, frecvența plângerilor.
Avansat: încorporări (Propoziție-BERT) → medii pe bilete pe fereastră.
PII: pre- și post-mascare (e-mail, PAN, telefoane) prin politica.
9) Geo/ASN și dispozitive
IP→Geo/ASN: facem cache și actualizăm; nu face cereri sincrone on-line, fără un timeout/cache.
Caracteristici: stabilitatea ASN/DeviceID, frecvența de schimbare, distanța dintre conectări.
10) Reconcilierea anti-scurgere și online/offline
Punct-in-time se alăture, nici un eveniment viitor în ferestre/etichete.
Un cod de transformare (bibliotecă) pentru offline și online.
Test de echivalență: pe eșantionul T, comparăm valorile online ale caracteristicii cu 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) Selectarea caracteristicilor
11. 1 Filtru
11. 2 Ambalaj
RFE/FS secvențial: pe seturi mici/regresie logistică.
Selectarea stabilității: stabilitate în eșantionarea bootstrap.
11. 3 Încorporat
L1/Lasso/ElasticNet: rarefacție.
Copaci/GBDT: importanță/SHAP pentru selecție și interpretare de afaceri.
Grupul Lasso: selecție de grup (seturi de bin-caracteristici ale unei 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) Stabilitate, derivă și calibrare
Drift: PSI/KS pentru caracteristici și viteză; alerte atunci când pragurile sunt depășite.
Stabilitate: ceas pentru „fragile” TE/VAI (cardinalitate/schimburi).
Calibrare: Platt/Isotonic; rapoarte de fiabilitate.
Analiza feliilor: piețe/furnizori/dispozitive - valori și costul estimat al erorilor.
13) Ingineria costurilor și performanța
Cost per caracteristică (CPF): CPU/IO/rețea/stocare → bugetul modelului.
Materializare: heavy offline, light online; TTL/cache pentru caracteristici fierbinți.
Căutări la distanță: numai async + cache; p95 <20-30 ms on feature online.
Chargeback: contabilizarea costului caracteristicii/inferenței prin comandă.
14) Feature Store (kernel de consistență)
Registry: nume, formulă, proprietar, SLO, teste, versiuni.
Sincronizare online/offline: un cod de transformare, test de egalitate.
Jurnale/audituri: cine a schimbat formula; efectul versiunii asupra măsurătorilor modelului.
15) Exemple
ClickHouse: agregate de pariuri minut: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;
Picătură anti-corelare (idee SQL):
sql
-- вычислить корреляции и удалить пары с ρ >0.95, сохранив более «дешевую» фичу
Vai de tine (schiţă):
python bins = monotonic_binning(x, y, max_bins=10)
woe = compute_woe(bins)
iv = compute_iv(bins)
16) Procese și RACI
R (Responsible): Data Eng (pipelines/Feature Store), Data Science (design feature/selection/metrics).
A (Responsabil): șef de date/CDO.
C (Consultat): Conformitate/DPO (PII, rezidență), Risc/AML/RG (politică), SRE (SLO/cost), Securitate.
I (Informat): Produs/Marketing/Operațiuni/Suport.
17) Foaie de parcurs
MVP (3-5 săptămâni):1. Catalog de funcții de top 50 (Plăți/Gameplay) cu formule point-in-time.
2. Feature Store v1 (online/offline) + test de echivalență.
3. Selecție de bază: constante/corelații → MI → L1/SHAP listă scurtă (până la 60 de caracteristici).
4. Monitorizarea caracteristicilor derivei și a tablourilor de bord.
Faza 2 (5-10 săptămâni):- TE/VAI cu caracteristici de validare, grafic și calendar care conțin timp.
- Analiza felie și corectitudine, probabilitatea de calibrare.
- Materializarea caracteristicilor offline grele, cache online, cote.
- Generarea automată a documentației, selectarea stabilității în CI.
- Dezactivarea automată a caracteristicilor „scumpe și inutile” (CPF↑, vklad↓).
- Compararea A/B a seturilor de caracteristici, rapoartele de costuri așteptate.
18) Lista de verificare pre-vânzare
- Toate caracteristicile au specificații (proprietar, formulă, versiuni, SLO).
- A trecut testele de echivalență point-in-time și online/offline.
- Filtru → încorporat (SHAP/L1) → stabilitate finalizată.
- Drift de monitorizare și fiabilitate configurat; praguri și alerte sunt.
- CPF/latență se încadrează în buget; caracteristici grele materializate.
- Politicile PII îndeplinite (CLS/RLS, tokenizare, rezidență).
- Documentația și cazurile de utilizare au fost adăugate în catalog.
19) Anti-modele și riscuri
Lac (evenimente viitoare/după promo).
Formule online/offline inconsistente.
Supraalimentat din categorii cardinale înalte fără hashing/TE.
Caracteristici „scumpe” fără o creștere măsurabilă a calității.
Lipsa de analiză felie/corectitudine - degradare ascunsă.
TE/VAI fără validare încrucișată → reconversie profesională.
20) Linia de jos
Feature Engineering este o disciplină gestionată: punct-in-time, sens de afaceri, reproductibilitate, monitorizare și economie. Caracteristici puternice + selecție strictă (filtru/înveliș/încorporat) și un singur Feature Store oferă modele stabile, interpretabile și ieftine care îmbunătățesc veniturile nete, reduc frauda și sprijină RG - transparent și conform.