Função Engenharia e Seleção de Sinais
1) Atribuição e princípios
O objetivo é construir sinais sustentáveis, interpretáveis e econômicos, alinhados entre a Internet e a Internet.
Princípios:- Point-in-time: Fici é calculado a partir de dados disponíveis no momento da decisão, sem futuro (anti-leakage).
- Domain-first: Fici refletem mecânicos de negócios (depósitos, sessões, gêneros de jogos, RG/AML).
- Reuse & Contracts: versões de fichas, proprietários, fórmulas e SLO na Função Store.
- Costa-aware: Achamos latency e o custo de processamento/armazenamento é apenas rentável.
- Observabilidade: monitor à deriva/estabilidade/calibragem; teste de equivalência online/offline.
2) Sinais de taxonomia para iGaming
RFM/comportamentos: recency/frequency/monetary por janelas (10m/1h/1d/7d/30d).
Sessões: duração, pausa, mudança de dispositivo/ASN, velocidade de ação.
Financeiro: depósitos/conclusões/charjbeck, proporções de métodos de pagamento, FX-normalização.
Jogos: perfis de gênero, volatilidade dos provedores, clusters RTP, win-streak.
Marketing: canais/UTM, respostas a campanhas, saturação/cooldown.
RG/AML: limites, bandeiras de auto-exclusão, vocity-pattern, reutilização BIN/IP.
Geo/hora: calendários/feriados locais, uma hora de cinturão, noite/noite.
Gráficos: ligações user-card-device-ip, centrais/componentes, «anéis» de frodo.
NLP/textos: tópicos e tons de tíquetes/bate-papos; Queixas-chave.
Operacionais: layout/erros dos provedores, estabilidade das sessões (para modelos SRE).
3) Janelas e unidades (point-in-time)
Janelas típicas: 10m/1h/24h/7d/30d. Para cada janela, count/sum/mean/std/last/max/min, ratio e rate.
Modelo SQL (30d depósitos, sem 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ções categóricas
One-Hot/Hasing: para categorias raras/altamente radicais (jogos, provedores).
Target Encoding (TE): média na meta com k-fold/leave-one-out e time-aware suavização (anti-leakage).
WOE/IV: Bins monótonos com controle IV e estabilidade.
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) Normalização e skailing
Min-max/Robust/Z-score - janela de treinamento; salvamos os parâmetros nos artefatos.
Conversões logas para longas caudas somas/apostas.
Box-Cox/Yeo-Johnson - quando é necessário simetrizar.
6) Chiches temporários e sazonais
Calendário: dia da semana, hora, feriado do mercado (ref. calendar), pay-day.
Frequência: média deslizante/expone. suavização (EMA), deltas (t - t-1).
Event-based: tempo do último depósito/ganho/derrota, «refrigeração».
7) Sinais gráficos (frod/AML)
Topo: user/card/device/ip. Costelas: transações/sessões/sinais conjuntos.
Fici: tamanho componentes, degree, betweenness, pagerank, triads, reaparecimento.
Modelo: nightly batch constrói um grafo → embeddings/central → dinheiro online.
8) Fici NLP (safort/bate-papo)
Base: TF-IDF/NMF tópicos, sentment, comprimento, frequência de queixas.
Avançado: embeddings (Sentence-BERT) → média de tíquetes por janela.
PII: Pré e pós-disfarce (email, PAN, telefones) por política.
9) Geo/ASN e dispositivos
IP→Geo/ASN: Em dinheiro e atualizamos; não fazer consultas sincronizadas na Internet sem tempo/cachê.
Fici: estabilidade ASN/DeviceID, frequência de turnos, distância entre os logins.
10) Anti-Leakage e alinhamento online/offline
Point-in-time join, nada de eventos futuros nas janelas/editoras.
Um código de transformação (library) para offline e online.
Teste de equivalência: Em uma amostra T, comparamos os valores online do fic com o 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) Seleção de sinais (função de seleção)
11. 1 Filter
11. 2 Wrapper
RFE/Sequential FS: em pequenos conjuntos/regressão logística.
Stability Select: Resistência ao sampling de butstrap.
11. 3 Embedded
L1/Lasso/ElasticNet, corte.
Árvores/GBDT: importance/SHAP para a seleção e interpretação de negócios.
Grupo Lasso: Seleção de grupo (kits bin-fich de uma variável).
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) Sustentabilidade, à deriva e calibragem
Draft: PSI/KS em fichas e escores; Alertas quando ultrapassados os limites.
Estabilidade: Observemos os «frágeis» TE/WOE (cardenalidade/deslocamento).
Calibragem: Platt/Isotonic; relatórios relatability.
Análise Slice: mercados/provedores/dispositivos - bancas de métricas e custo de erro previsto.
13) Costa-engenharia e desempenho
Costa por Função (CPF): CPU/IO/rede/armazenamento → orçamento para o modelo.
Materialização: pesados offline, ligeiros online; TTL/dinheiro para fichas quentes.
Lookups remotos: apenas async + dinheiro; p95 <20-30 ms por fici online.
Chargeback: Contabilidade do custo do fich/inferência por comando.
14) Função Store (núcleo de coerência)
Registro: nome, fórmula, proprietário, SLO, testes, versões.
Sincronização online/Offline: um código de transformação, teste de igualdade.
Logi/auditoria: quem mudou a fórmula; o impacto da versão nas métricas do modelo.
15) Exemplos
ClickHouse: Unidades de apostas 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;
Anti-correlation drop (SQL-ideia):
sql
-- вычислить корреляции и удалить пары с ρ >0.95, сохранив более «дешевую» фичу
WOE binning (esboço):
python bins = monotonic_binning(x, y, max_bins=10)
woe = compute_woe(bins)
iv = compute_iv(bins)
16) Processos e RACI
R (Resolvível): Data Eng (linhas de montagem/Função Store), Data Science (design de fich/seleção/métricas).
A (Accountable): Head of Data / CDO.
C (Consulted): Compliance/DPO (PII, residency), Risk/AML/RG (regras), SRE (SLO/valor), Security.
I (Informed): Produto/Marketing/Operações/Suporte.
17) Mapa de trânsito
MVP (3-5 semanas):1. Catálogo top 50 fies (Payments/Gamplay) com fórmulas point-in-time.
2. Função Store v1 (online/offline) + teste de equivalência.
3. Seleção básica: constantes/correlações → MI → L1/SHAP shortlist (até 60 fies).
4. Monitorização da deriva do fich e da coca-dashboard.
Fase 2 (5-10 semanas):- TE/WOE com validação time-aware, fitas gráficas e calendários.
- Análise slice e fairness, calibragem das probabilidades.
- Materialização de fichas pesadas offline, dinheiro online, quotas.
- Geração automática de documentação de fichas, stability-selecção em CI.
- Desativação automática «caros e inúteis» fic (CPF↑, vklad↓).
- A/B compara conjuntos de fichas, relatórios expected-cost.
18) Folha de cheque antes de vender
- Todos os fichas têm especificações (owner, fórmula, versões, SLO).
- Testes de ponto-in-time e equivalência online/offline foram concluídos.
- Selecionado filter → embedded (SHAP/L1) → stability.
- Monitoramento à deriva e relatabilidade configurado; Há liminares e alertas.
- CPF/latency se encaixam no orçamento; Fici pesados são materializados.
- Políticas PII cumpridas (CLS/RLS, torneização, residência).
- Documentação e exemplos de uso foram adicionados ao catálogo.
19) Anti-pattern e riscos
Lakage (eventos futuros/efeitos da promoção).
Fórmulas online/offline discordantes.
One-hot reeleito de categorias altamente radicais sem hasing/TE.
Sem aumento de qualidade mensurável.
Falta de análise slice/fairness - degradação oculta.
TE/WOE sem time-aware de revalidação cruzada → reaproveitamento.
20) Total
A função do Engineering é uma disciplina gerenciável: point-in-time, sentido empresarial, reprodução, monitoramento e economia. Os fichas fortes + a seleção rigorosa (filter/wrapper/embedded) e uma única Função Store fornecem modelos sustentáveis, interpretáveis e baratos que melhoram a Net Revenue, reduzem o frod e suportam RG - de forma transparente e completa.