Mapa de la lección
Lección 06 publicada. Mapa, ejemplo, EX026.
flowchart TD
N0["Resultados de aprendizaje"]
N1["6.1 Mismos datos, dos tratamientos"]
N2["6.2 Cómo leer el resultado"]
N3["6.3 Tomar la decisión"]
N4["6.4 Amenazas a la validez"]
N5["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Ejemplo resuelto"]
EX --> Q["Ejercicio EX026"]
Dibujo lógico
flowchart LR
N0["Resultados de aprendizaje"]
N1["6.1 Mismos datos, dos tratamientos"]
N2["6.2 Cómo leer el resultado"]
N3["6.3 Tomar la decisión"]
N4["6.4 Amenazas a la validez"]
N5["Síntesis del capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX026"]
[Resultados de aprendizaje]
|
v
[6.1 Mismos datos, dos tratamientos]
|
v
[6.2 Cómo leer el resultado]
|
v
[6.3 Tomar la decisión]
|
v
[6.4 Amenazas a la validez]
|
v
[Síntesis del capítulo]
|
v
[Ejemplo resuelto] --> [Ejercicio EX026]
Resultados de aprendizaje
Usted será capaz de (1) diseñar una comparación controlada de dos conjuntos de reglas de alerta sobre la misma reproducción etiquetada; (2) estimar la exhaustividad y la tasa de falsas alertas de cada uno; (3) calcular un intervalo de confianza bootstrap para la diferencia; y (4) decidir si la evidencia justifica un cambio en producción.
6.1 Mismos datos, dos tratamientos
Comparar el conjunto de reglas A (actual) con el conjunto de reglas B (propuesto) sobre semanas de datos distintas confunde las reglas con las semanas. Una evaluación controlada pasa las mismas ventanas etiquetadas por ambos. Las etiquetas proceden de un plan de pruebas: 40 ventanas contienen comportamiento de ataque inyectado en la reproducción y 160 son de operación normal.
"""Lab 06: controlled evaluation of two alerting rule sets on the same synthetic replay, with bootstrap CI."""
import random
rnd = random.Random(6)
# 200 labelled replay windows: (is_attack, alert_by_A, alert_by_B)
data = []
for i in range(200):
att = i < 40
a = rnd.random() < (0.70 if att else 0.08)
b = rnd.random() < (0.85 if att else 0.05)
data.append((att, a, b))
def recall(rows, k): at = [r for r in rows if r[0]]; return sum(r[k] for r in at) / len(at)
def far(rows, k): be = [r for r in rows if not r[0]]; return sum(r[k] for r in be) / len(be)
print(f"A recall={recall(data,1):.3f} false-alert rate={far(data,1):.3f}")
print(f"B recall={recall(data,2):.3f} false-alert rate={far(data,2):.3f}")
diffs = []
for _ in range(2000):
s = [rnd.choice(data) for _ in data]
if any(r[0] for r in s): diffs.append(recall(s, 2) - recall(s, 1))
diffs.sort()
print(f"recall difference B-A 95% bootstrap CI: [{diffs[50]:.3f}, {diffs[1949]:.3f}]")
Ejecútelo con python3 lab_ab.py. Salida verificada:
A recall=0.650 false-alert rate=0.069
B recall=0.850 false-alert rate=0.037
recall difference B-A 95% bootstrap CI: [0.000, 0.388]
El plan de pruebas debe escribirse antes de construir la reproducción, nombrando los comportamientos de ataque, cuántas ventanas recibe cada uno y quién las etiqueta. Lo ideal es que la persona que inyecta los ataques no haya diseñado ninguno de los dos conjuntos de reglas. El laboratorio 6 sustituye esto por resultados aleatorios con semilla fija, así que sus números muestran el método y no el rendimiento real de las reglas de BWRP.
6.2 Cómo leer el resultado
La exhaustividad de B es 0,85 frente a 0,65 de A, y su tasa de falsas alertas es menor (3,7 % frente a 6,9 %). El intervalo bootstrap para la diferencia de exhaustividad va de 0,000 a 0,388: el extremo inferior toca el cero. Con solo 40 ventanas de ataque, no podemos descartar que B no sea mejor que A en exhaustividad, aunque la estimación puntual lo favorece claramente. Cada ventana remuestreada lleva los resultados de ambos conjuntos de reglas, así que el bootstrap anterior ya conserva el emparejamiento; una prueba exacta sobre las ventanas en las que A y B discrepan sería la comprobación cruzada natural.
Informe de los recuentos junto a las tasas para que el lector pueda juzgar la evidencia: 34 de 40 frente a 26 de 40 ventanas de ataque, y 6 frente a 11 de 160 ventanas normales. Con tan pocas ventanas de ataque, un puñado de resultados distintos cambiaría el panorama. Esa es la razón principal por la que Daniel pide una reproducción más grande y construida de forma independiente antes de la siguiente revisión.
6.3 Tomar la decisión
Los líderes rara vez necesitan certeza estadística para actuar; necesitan conocer el riesgo de cada opción. B es más barato en falsas alertas y probablemente mejor en exhaustividad. El inconveniente de cambiar (si B en realidad no fuera mejor) es pequeño. Daniel recomienda cambiar, ampliando a la vez el conjunto de ventanas de ataque a 120 antes de la siguiente revisión. La decisión es más fácil porque B también produce menos falsas alertas, algo que los operadores notan en cada turno. Daniel registra la recomendación con su incertidumbre, fija la fecha de la siguiente revisión y nombra al colega que construirá las 120 ventanas de ataque. Si la reproducción más grande no muestra ninguna ventaja en exhaustividad, la decisión se revisa en lugar de defenderse.
6.4 Amenazas a la validez
Los ataques inyectados reflejan la imaginación del autor de las pruebas; los adversarios reales pueden ser distintos. La reproducción omite la reacción de los operadores. El conjunto de reglas B se diseñó después de ver algunos de estos tipos de ataque, lo que lo favorece. Cada amenaza tiene un remedio parcial. Pida a un colega que no diseñó B que escriba ventanas de ataque nuevas. Deje constancia de que la reproducción mide alertas, no si los operadores actúan sobre ellas. Registre qué tipos de ataque influyeron en el diseño de B e informe de los resultados de B sobre ellos por separado del resto, para que el lector pueda ver si su ventaja se mantiene con comportamientos no vistos.
Ejemplo resuelto (BWRP sintética)
Nota de evaluación de Daniel: «Reproducción R-6 (200 ventanas, 40 de ataque, semilla 6). B: exhaustividad 34/40, falsas alertas 6/160. A: exhaustividad 26/40, falsas alertas 11/160. Diferencia de exhaustividad, IC bootstrap del 95 % [0,000; 0,388]. Recomendación: adoptar B; ampliar a 120 ventanas de ataque construidas por un colega que no diseñó B».
Caso sintético — Bayside Water Reclamation Plant. Las etiquetas de la reproducción y los resultados de las alertas los genera el script con semilla fija.
Errores y límites
Los intervalos bootstrap con pocos positivos son inestables. Los resultados de alerta del laboratorio son sorteos aleatorios que sustituyen al comportamiento real de las reglas.
Ejercicios — capítulo 6
- EX026 — Los recuentos detrás de las tasas. Convierta la tasa de falsas alertas de A, 0,069, en un recuento sobre las 160 ventanas normales.
Mostrar criterios de evaluación
Rúbrica: 3 = 11 de 160; 2 = ≈11; 1 = 0,069 × 200; 0 = nada. - EX027 — Interpretar un IC que toca el cero. ¿Qué le dice a quien decide un límite inferior de 0,000?
Mostrar criterios de evaluación
Rúbrica: 3 = datos compatibles con ninguna mejora de la exhaustividad; incertidumbre por tener 40 positivos; 2 = parcial; 1 = «B es mejor»; 0 = nada. - EX028 — ¿Por qué reproducir las mismas ventanas? Explique la ventaja de un diseño emparejado en este caso.
Mostrar criterios de evaluación
Rúbrica: 3 = elimina la variación de una semana a otra; las diferencias se deben a las reglas; 2 = parcial; 1 = vago; 0 = nada. - EX029 — Autoría independiente de los ataques. ¿Por qué debería un colega construir las nuevas ventanas de ataque?
Mostrar criterios de evaluación
Rúbrica: 3 = evita un sesgo de diseño a favor de B; 2 = parcial; 1 = carga de trabajo; 0 = nada. - EX030 — Inconveniente asimétrico. Argumente por qué cambiar a B es razonable a pesar del intervalo.
Mostrar criterios de evaluación
Rúbrica: 3 = menos falsas alertas y probablemente mejor exhaustividad; coste pequeño si son iguales; reversible; 2 = parcial; 1 = «estadísticamente demostrado»; 0 = nada.
Síntesis del capítulo
Una evaluación controlada empareja los tratamientos sobre datos etiquetados idénticos, informa de recuentos e intervalos, y permite a los líderes actuar de forma proporcionada a partir de evidencia incierta pero útil.
Siga estudiando — capítulo 06 de 12
← Capítulo 05 (borrador) · Índice de capítulos del curso · Capítulo 07 (borrador) →