GH GambleHub

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.

TE (pseudocódigo, tiempo-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) 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-speca fichi:
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

Variación/correlación: eliminamos constantes,ρ>0. 95 duplicados.
Información mutua (MI): clasificación de enlaces no lineales.
IV/KS (riesgo): para targets binarios en AML/RG.

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

Pipeline (esbozo):
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.
Fase 3 (10-16 semanas):
  • 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.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.