Ingeniería de características y selección de características
1) Nombramiento y principios
Objetivo: construir signos sostenibles, interpretables y económicos, armonizados entre offline y online.
Principios:- Punto en tiempo: los fichas se calculan a partir de los datos disponibles en el momento de la solución, sin futuro (anti-leakage).
- Domain-first: los fichas reflejan mecánicas de negocios (depósitos, sesiones, géneros de juegos, RG/AML).
- Reuse & Contracts: fiches - versiones, propietarios, fórmulas y SLO en Feature Store.
- Costo-aware: consideramos latencia y costo de computación/almacenamiento → sólo materializamos lo que se paga.
- Observabilidad: derivación/estabilidad/calibración del monitor; prueba de equivalencia online/offline.
2) Taxonomía de características para iGaming
RFM/conductual: recency/frequency/monetary por ventana (10m/1h/1d/7d/30d).
Sesiones: duración, pausas, cambios de dispositivos/ASN, velocidad de acción.
Financiero: depósitos/retiros/charjbeki, participación en métodos de pago, FX-normalización.
Juegos: perfiles de género, volatilidad de proveedores, clústeres RTP, win-streak.
Marketing: canales/UTM, respuestas a campañas, saturation/cooldown.
RG/AML: límites, banderas de autoexclusión, patrones velocity, reutilización de BIN/IP.
Geo/hora: calendarios/días festivos locales, hora de cinturones, noche/noche.
Gráficos: enlaces user-card-device-ip, centralidades/componentes, «anillos» de frode.
NLP/textos: temas y tonalidad de tickets/chats; quejas clave.
Quirófanos: Trago/errores de los proveedores, estabilidad de sesión (para modelos SRE).
3) Ventanas y agregados (punto en tiempo)
Ventanas típicas: 10m/1h/24h/7d/30d. Para cada ventana, count/sum/mean/std/last/max/min, ratio y rate.
Plantilla SQL (30d depósitos, sin 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) Codificaciones categóricas
One-Hot/Hashing: para categorías raras/altamente cardinales (juegos, proveedores).
Target Encoding (TE): promedio de segmentos con k-fold/leave-one-out y tiempo-aware suavizado (anti-leakage).
WOE/IV (puntuación de riesgo): binas monótonas con control IV y estabilidad.
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) Normalización y Skaling
Min-max/Robust/Z-score - por la ventana de entrenamiento; guardamos los parámetros en artefactos.
Conversiones de registro para colas largas de sumas/apuestas.
Box-Cox/Yeo-Johnson - Cuando se requiere simetrización.
6) Fiches temporales y estacionales
Calendario: día de la semana, hora, vacaciones del mercado (ref. calendar), pay-day.
Periodicidad: media móvil/expon. suavizado (EMA), deltas (t − t-1).
Event-based: el tiempo del último depósito/ganancia/pérdida, «enfriamiento».
7) Signos gráficos (Frod/AML)
Vértices: usuario/tarjeta/dispositivo/ip. Costillas: transacciones/sesiones/señales conjuntas.
Fichas: tamaño de los componentes, degree, betweenness, pagerank, triads, reaparición.
Plantilla: nightly batch construye un gráfico → embeddings/centralidad → caché en línea.
8) NLP-fichi (sapport/chat/rugido)
Básico: TF-IDF/NMF temas, sentiment, longitud, frecuencia de quejas.
Avanzado: Embeddings (Sentence-BERT) → promedios de tickets por ventana.
PII: pre y post-enmascaramiento (correo electrónico, PAN, teléfonos) por políticas.
9) Geo/ASN y dispositivos
IP→Geo/ASN: almacenamos y actualizamos en caché; no hacer consultas sincronizadas en línea sin tiempo de espera/caché.
Fichas: estabilidad ASN/DeviceID, frecuencia de cambio, distancia entre logins.
10) Anti-Leakage y negociación en línea/offline
Point-in-time join, sin futuros eventos en ventanas/etiquetas.
Un código de transformación (biblioteca) para offline y en línea.
Prueba de equivalencia: en la muestra T, comparamos los valores fich online con 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) Selección de características (selección de características)
11. 1 Filter
11. 2 Wrapper
RFE/Sequential FS: en pequeños kits/regresión logística.
Stability Selection: resistencia al bootstrap sampling.
11. 3 Embedded
L1/Lasso/ElasticNet: incisión.
Árboles/GBDT: importación/SHAP para la selección e interpretación empresarial.
Grupo Lasso: selección de grupo (conjuntos de bin-fich de una variable).
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) Estabilidad, deriva y calibración
Drift: PSI/KS por higos y escoria; alertas cuando se superan los umbrales.
Estabilidad: vigilamos las «frágiles» TE/WOE (cardinalidad/cambios).
Calibración: Platt/Isotonic; informes de reliability.
Slice-analysis: mercados/proveedores/dispositivos - banchmarks métricas y el costo de error esperado.
13) Costo-ingeniería y rendimiento
Costo por función (CPF): CPU/IO/red/almacenamiento → presupuesto por modelo.
Materialización: pesado fuera de línea, ligero en línea; TTL/caché para fiches calientes.
lookups remotos: sólo async + caché; p95 <20-30 ms por fiche en línea.
Chargeback: contabilizar el valor de un ficha/infierno por equipo.
14) Feature Store (núcleo de consistencia)
Registro: nombre, fórmula, propietario, SLO, pruebas, versiones.
Sincronización online/offline: un código de transformación, prueba de igualdad.
Registros/auditoría: quién cambió la fórmula; efecto de la versión en las métricas del modelo.
15) Ejemplos
ClickHouse: agregados de apuestas de minutos: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;
Drop anti-correlación (idea SQL):
sql
-- вычислить корреляции и удалить пары с ρ >0.95, сохранив более «дешевую» фичу
WOE binning (boceto):
python bins = monotonic_binning(x, y, max_bins=10)
woe = compute_woe(bins)
iv = compute_iv(bins)
16) Procesos y RACI
R (Responsable): Data Eng (transportadores/Feature Store), Data Science (diseño de fichas/selección/métricas).
A (Accountable): Head of Data / CDO.
C (Consultado): Compliance/DPO (PII, residencia), Risk/AML/RG (reglas), SRE (SLO/costo), Security.
I (Informed): Producto/Marketing/Operaciones/Soporte.
17) Hoja de ruta
MVP (3-5 semanas):1. Catálogo top 50 fich (Payments/Gameplay) con fórmulas de punto en tiempo.
2. Feature Store v1 (online/offline) + prueba de equivalencia.
3. Selección básica: constantes/correlaciones → MI → L1/SHAP shortlist (hasta 60 fich).
4. Monitoreo de la deriva fich y costa dashboard.
Fase 2 (5-10 semanas):- TE/WOE con validación de tiempo, gráficos y fichas de calendario.
- Análisis de slice y fairness, calibración de probabilidades.
- Materialización de fich fuera de línea pesado, caché en línea, cuotas.
- Autogeneración de documentación fich, stability-selection en CI.
- Auto-desactivación de fich «caro e inútil» (CPF↑, vklad↓).
- Comparación A/B de los conjuntos de fichas, informes expected-cost.
18) Lista de verificación antes de la venta
- Todos los fichas tienen especificaciones (owner, fórmula, versiones, SLO).
- Se han superado las pruebas de punto en tiempo y equivalencia online/offline.
- Selección realizada: filter → embedded (SHAP/L1) → stability.
- El monitoreo de la deriva y la reliabilidad está configurado; hay umbrales y alertas.
- CPF/latencia se ajustan al presupuesto; los fiches pesados se materializan.
- Se cumplen las políticas PII (CLS/RLS, tokenización, residencia).
- Se han añadido al directorio documentación y ejemplos de uso.
19) Anti-patrones y riesgos
Leucedge (futuros acontecimientos/consecuencias de la promoción).
Fórmulas en línea/offline inconsistentes.
Reelaboración one-hot de las categorías de alto-cardinal sin hashing/TE.
Fiches «caros» sin ganancia de calidad medible.
Sin análisis slice/fairness - degradaciones ocultas.
TE/WOE sin validación cruzada de tiempo → readiestramiento.
20) Resultado
Feature Engineering es una disciplina administrada: punto en tiempo, sentido empresarial, reproducibilidad, monitoreo y economía. Fiches fuertes + selección estricta (filter/wrapper/embedded) y una única Feature Store dan modelos sostenibles, interpretables y baratos que mejoran la Net Revenue, reducen el flúor y soportan RG - transparente y complaciente.