Referencia técnica · Paso 6a · Lift — significancia
La mitad "¿es real?" de la selección: cómo se mide la ventaja de una regla (lift, edge, z-score), cómo se testea contra el azar (p-value binomial), cómo se corrige por probar miles de hipótesis (FDR), y el filtro anti-espurio por información mutua.
Tres formas de la misma ventaja: relativa (lift), absoluta (edge), y estandarizada por el tamaño de muestra (z-score).
lift = cuántas veces más concentra aciertos que la base (1.0 = igual al azar). edge = ventaja absoluta en puntos de probabilidad. z = edge medido en errores estándar → escala con √n: una ventaja fina sobre muchas señales puntúa más que una grande sobre pocas.
Bajo la hipótesis nula de que la regla no aporta (su tasa de acierto es la base p0), ¿qué tan improbable es observar k aciertos en n señales?
Dos tests one-sided: uno busca reglas que aciertan más que la base (candidatas ALPHA), el otro reglas que aciertan menos (candidatas FILTER, para no operar). p0 se acota a [1e−9, 1−1e−9]; con n ≤ 0, p = 1.
Con miles de reglas testeadas, algunas pasan por azar. La corrección de tasa de falso descubrimiento ajusta el listón según cuántas hipótesis se probaron.
mtotal = universo original de reglas evaluadas, no solo las sobrevivientes → mantiene el control real del FDR. El feature_type se decide solo por FDR (sin umbrales duros de lift): ALPHA = lift > 1 cuyo p-value alpha sobrevive BH; FILTER = lift < 1 cuyo p-value filter sobrevive.
Un lift alto sin dependencia estadística real es sospechoso. La información mutua mide esa dependencia, y un piso descarta la que es indistinguible del sesgo del estimador.
0.7213 / N es el sesgo esperado del estimador plug-in de MI bajo independencia (tabla 2×2, corrección de Miller-Madow). El multiplicador ×10 y el floor 1e−4 son empíricos. Opción más cara: piso por permutación (percentil 95 del MI nulo permutando el target).
Entropía binaria (usada como referencia de normalización del MI en 6b):
Antes de puntuar, se rechazan duro las reglas que no son evaluables o que delatan un bug — no entran al scoring estadístico.
| Rechazo | Condición |
|---|---|
| insufficient_signals | n < min_signals (default 30) ∨ n_evaluable < min_evaluable (default 20) |
| statistical_bug | ( p_active ≥ 0.98 ∨ ≤ 0.02 ) ∧ n > 20 // leakage probable |
| no_variance | √( p_active·(1−p_active) ) < 0.03 |
| poor_distribution | 0 señales en el primer O último 20% del dataset |
El std_bernoulli = √(p·(1−p)) del no_variance es la dispersión de la señal (regla casi siempre igual), distinta del SE del edge de §1. min_signals (default 30) y min_evaluable (default 20) son parámetros de entrada; los demás umbrales (0.98/0.02, std 0.03, el 20% temporal) son constantes fijas — guardas contra leakage y degeneración, no ajustables. Un warning informativo adicional (no rechaza) marca concentración temporal fuerte cuando temporal_balance < warn_temporal_below (default 0.30).
Continúa en 6b: IC del Lift (Katz), breakeven económico (Kelly), criterio económico dual y composite score.
Fuentes:
· domain/lift_selector/stats.py — compute_rule_pvalue, benjamini_hochberg, entropy_binary, mi_asymptotic_floor, mi_permutation_floor
· domain/lift_selector/lift_scoring.py — lift, edge, z_score, MI (mutual_info_classif)
· domain/lift_selector/technical_filter.py — rechazos duros, umbrales