Referencia técnica · Paso 7a · Combinaciones — interacciones
Cómo se arman los combos antes de puntuarlos: las tres medidas de interacción entre reglas, la generación de los AND con sus guardas de solape y soporte, la jerarquía trigger/context multi-timeframe, y el modo de regla atómica.
Tres formas de mirar la relación entre dos reglas — cada una responde una pregunta distinta.
overlap se usa como guarda (descarta pares donde una regla contiene a la otra → el AND no aporta grado de libertad). assoc_lift es diagnóstico (target-agnóstico — mide co-ocurrencia, no edge). jaccard se usa en el dedup final (7b).
Un combo se enciende solo donde todas sus reglas están activas. Dos guardas por par lo filtran antes de puntuarlo.
El filtro viejo assoc_lift > 1.1 se eliminó: era redundante con min_support (si el AND dispara ≥30 veces, la potencia está garantizada) y contradecía el objetivo — reglas casi independientes del target son justo las candidatas a interacción genuina.
Al mezclar timeframes, no todas las reglas cumplen el mismo rol. La distinción evita combinar dos condiciones lentas que no aportan al timing de entrada.
| n_way | Aceptar | Rechazar |
|---|---|---|
| 2 | (t,t) (c,t) | (c,c) * |
| 3 | (t,t,t) (c,t,t) (c,c,t) | (c,c,c) |
* (c,c) se acepta solo con allow_context_only_combos (opt-in, para gates macro / hedges). El threshold de overlap laxo 0.95 en (context, trigger) es correcto: overlap alto ahí significa "el trigger cae dentro del régimen" → es un filtro efectivo, no redundancia.
Aceptar dos contexts colineales daría grados de libertad aparentes (sobreajuste) sin poder discriminador real. Un context_only_ratio > 0.30 emite un warning de selection bias (el pool está sesgado a context).
n_way = 1 · regla atómicaUna estrategia puede ser una sola regla. En ese modo, este paso es un pass-through: no hay interacciones que medir ni combos que generar.
La regla ya pasó FDR + Katz + MI + dedup en el paso de lift, así que no hay nada que combinar ni volver a filtrar. El scoring (7b) se le aplica igual — el combo_lift se reinterpreta como el lift de la regla suelta. El n_way se pre-registra antes de ver resultados (no correr el mismo dataset con varios n_way y elegir).
Continúa en 7b: combo_lift, FDR con m_total = combos evaluados, sinergia (Friedman-Popescu), composite z_norm puro y dedup Jaccard.
Fuentes:
· domain/combinations/interactions.py — measure_interactions (overlap, assoc_lift, jaccard)
· domain/combinations/generator.py — generate_combinations, roles, overlap por rol, colinealidad
· domain/combinations/constants.py — overlap 0.7 / ct 0.95, min_support 30, allow_context_only
· domain/combinations/pipeline.py — branch n_way=1 (score_singles)