◇ OpenCyber Academy
Máster · Capítulo 6 · Español

Capítulo 6 — Recogida y análisis de datos

Aprendizaje gratuito y abierto para quienes desean proteger a las personas y la tecnología. No se necesita una cuenta para estudiar ni consultar las respuestas.

Capítulo 6 — Recogida y análisis de datos

Mapa de la lección

Lección 06 publicada. Mapa, ejemplo, EX033.

flowchart TD
  N0["Resultados de aprendizaje"]
  N1["6.1 Ejecutar el estudio principal"]
  N2["6.2 Comprobaciones de la calidad de los datos"]
  N3["6.3 Análisis principal"]
  N4["6.4 Resultados secundarios y costes"]
  N5["6.6 Actividades de práctica"]
  N6["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Ejemplo resuelto"]
  EX --> Q["Ejercicio EX033"]

Dibujo lógico

flowchart LR
  N0["Resultados de aprendizaje"]
  N1["6.1 Ejecutar el estudio principal"]
  N2["6.2 Comprobaciones de la calidad de los datos"]
  N3["6.3 Análisis principal"]
  N4["6.4 Resultados secundarios y costes"]
  N5["6.6 Actividades de práctica"]
  N6["Síntesis del capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX033"]
[Resultados de aprendizaje]
    |
    v
[6.1 Ejecutar el estudio principal]
    |
    v
[6.2 Comprobaciones de la calidad de los datos]
    |
    v
[6.3 Análisis principal]
    |
    v
[6.4 Resultados secundarios y costes]
    |
    v
[6.6 Actividades de práctica]
    |
    v
[Síntesis del capítulo]
    |
    v
[Ejemplo resuelto] --> [Ejercicio EX033]

Resultados de aprendizaje

Usted será capaz de (1) ejecutar los experimentos principales exactamente según lo planificado y registrar las desviaciones; (2) comprobar la calidad de los datos antes del análisis; (3) calcular los resultados principales con su incertidumbre (intervalos de Wilson, bootstrap, variación entre semillas); (4) analizar comparaciones emparejadas y resultados secundarios; y (5) presentar los resultados en tablas y figuras que respondan a la pregunta de investigación.

6.1 Ejecutar el estudio principal

Congele el código en un commit etiquetado, bloquee los archivos de configuración y ejecute las condiciones en un orden intercalado o aleatorio, para que los problemas dependientes del tiempo (un nodo que se ralentiza, una actualización de una biblioteca) no coincidan con una sola condición. Cada ejecución escribe un registro: condición, semilla, hash de la configuración, hora de inicio y de fin, métricas y rutas a las salidas en bruto. Mantenga un registro de desviaciones como en el piloto. Las ejecuciones de Leo se intercalaron por condición y semilla, y su registro de desviaciones recogió la ejecución ausente de la semilla 4 y su reejecución. Revise el registro antes del análisis, no después.

6.2 Comprobaciones de la calidad de los datos

Antes de calcular nada, compruebe: ¿están presentes todas las ejecuciones previstas? ¿Se superan las comprobaciones canario (el modelo sin defensa debe ser atacable; un modelo entrenado con etiquetas barajadas debería rendir al nivel del azar)? ¿Hay duplicados entre particiones? ¿Están los valores de las métricas dentro de intervalos plausibles? Estas comprobaciones detectan errores que, de otro modo, se convertirían en «hallazgos». Las comprobaciones de Leo encontraron una ejecución ausente de la semilla 4, que se reejecutó y se registró antes del análisis. Escriba las comprobaciones como un script para que se ejecuten igual cada vez, y guarde su salida junto con los resultados.

6.3 Análisis principal

Calcule el resultado principal por condición con intervalos. Para tasas, use intervalos de Wilson; para métricas promediadas sobre elementos, haga bootstrap sobre los elementos; informe aparte de la variación entre semillas. Para comparaciones emparejadas (los mismos registros o instrucciones en todas las condiciones), haga bootstrap de la diferencia. Siga el plan de análisis; etiquete cualquier análisis adicional como exploratorio. Cuando se hacen varias comparaciones, corrija por multiplicidad o preséntelas como exploratorias. El laboratorio siguiente muestra las tres herramientas. Con 3 éxitos de 20, el intervalo de Wilson va del 5 % al 36 %: una muestra tan pequeña no puede sustentar una afirmación precisa. Las tasas por semilla muestran la dispersión de una semilla a otra. El bootstrap emparejado estima la reducción que logra una defensa sobre las mismas instrucciones, con un intervalo que excluye el cero.

"""Lab S: reporting attack-success rates honestly: Wilson intervals,
seed variation and a paired bootstrap. Synthetic trial outcomes only."""
import math, random
def wilson(k, n, z=1.96):
    p = k/n; d = 1 + z*z/n
    c = (p + z*z/(2*n))/d; h = z*math.sqrt(p*(1-p)/n + z*z/(4*n*n))/d
    return c - h, c + h
for k, n in ((3, 20), (30, 200), (300, 2000)):
    lo, hi = wilson(k, n); print(f"successes={k}/{n} rate={k/n:.3f} wilson95=[{lo:.3f}, {hi:.3f}]")
# five seeds of a synthetic defence evaluation: per-seed attack success rate
rates = []
for seed in range(5):
    r = random.Random(seed); rates.append(sum(r.random() < 0.12 for _ in range(200))/200)
m = sum(rates)/5; sd = math.sqrt(sum((x-m)**2 for x in rates)/4)
print("per-seed rates:", " ".join(f"{x:.3f}" for x in rates), f"mean={m:.3f} sd={sd:.3f}")
# paired bootstrap: baseline vs defence on the same 300 synthetic prompts
r = random.Random(42)
base = [r.random() < 0.30 for _ in range(300)]
defn = [b and r.random() < 0.6 for b in base]   # defence blocks ~40% of successes
diffs = []
for _ in range(2000):
    idx = [r.randrange(300) for _ in range(300)]
    diffs.append(sum(base[i] for i in idx)/300 - sum(defn[i] for i in idx)/300)
diffs.sort()
print(f"baseline_asr={sum(base)/300:.3f} defended_asr={sum(defn)/300:.3f} "
      f"reduction_ci95=[{diffs[50]:.3f}, {diffs[1949]:.3f}]")

Salida esperada:

successes=3/20 rate=0.150 wilson95=[0.052, 0.360]
successes=30/200 rate=0.150 wilson95=[0.107, 0.206]
successes=300/2000 rate=0.150 wilson95=[0.135, 0.166]
per-seed rates: 0.110 0.130 0.135 0.105 0.145 mean=0.125 sd=0.017
baseline_asr=0.350 defended_asr=0.190 reduction_ci95=[0.120, 0.203]

6.4 Resultados secundarios y costes

Toda mejora de seguridad tiene costes: exactitud, latencia, rechazos de peticiones legítimas, cómputo, mantenibilidad. Infórmelos sobre los mismos elementos. Una defensa de la privacidad que reduce la fuga a la mitad pero hace caer el F1 macro 10 puntos es una propuesta distinta de otra que cuesta 1 punto. Represente el compromiso (por ejemplo, la TPR con una FPR del 1 % frente al F1 macro) para todas las condiciones. El resultado de Leo es del segundo tipo: la eliminación de casi duplicados redujo la TPR con una FPR del 1 % a menos de la mitad, hasta el 4,2 %, mientras el F1 macro caía menos de un punto. Informe de ambos números juntos, con intervalos, para que los lectores puedan sopesar el compromiso por sí mismos.

6.5 Ejemplo resuelto (caso sintético de Harbourline)

Resultados principales de Leo (sintéticos, cinco semillas, 20.000 registros): la TPR con una FPR del 1 % bajo el ataque calibrado fue del 9,8 % (original), 7,9 % (eliminación aleatoria), 5,1 % (eliminación de duplicados exactos) y 4,2 % (eliminación de casi duplicados). La diferencia emparejada entre la eliminación de casi duplicados y la eliminación aleatoria fue de 3,7 puntos (IC del 95 % por bootstrap: 2,6–4,9). El F1 macro cayó de 0,912 a 0,905 con la eliminación de casi duplicados. Las comprobaciones de calidad de los datos encontraron una ejecución ausente de la semilla 4, que se reejecutó y se registró. Un análisis exploratorio, etiquetado como tal, mostró que la fuga se concentraba en los registros que habían aparecido tres o más veces. El hallazgo exploratorio sobre los registros vistos tres o más veces es una hipótesis para trabajos futuros, no un resultado confirmado.

6.6 Actividades de práctica

  1. Redacte una lista de comprobación de la calidad de los datos para su estudio y aplíquela. 2. Elabore la tabla principal con intervalos. 3. Represente el compromiso entre seguridad y utilidad. En la lista de comprobación, incluya todas las ejecuciones previstas, las comprobaciones canario, los duplicados entre particiones y los intervalos plausibles, y aplíquela antes de cualquier análisis. En la tabla principal, dé el resultado de cada condición con un intervalo y el número de semillas. En el gráfico, enfrente la métrica de privacidad al F1 macro para cada condición, de modo que el lector vea el compromiso de un vistazo, como hace la figura de Leo.

6.7 Errores y límites

Cuatro errores se repiten, y cada uno sesga los resultados u oculta costes; revise su análisis en busca de los cuatro:

Ejercicios — capítulo 6

Síntesis del capítulo

El análisis es donde el diseño cuidadoso da fruto: las ejecuciones intercaladas, las comprobaciones de calidad, los intervalos y las comparaciones emparejadas convierten los registros en bruto en una respuesta defendible, y los costes hacen útil la respuesta.

Siga estudiando — capítulo 06 de 08

← Capítulo 05 (borrador) · Índice de capítulos del curso · Capítulo 07 (borrador) →

Respuestas desarrolladas

EX033. Si las condiciones se ejecutan en bloques, un cambio dependiente del tiempo (hardware, biblioteca, carga) puede hacerse pasar por un efecto del tratamiento; intercalar reparte esos problemas entre las condiciones.

EX034. Todas las ejecuciones presentes; se superan los canarios (modelo sin defensa atacable, modelo con etiquetas barajadas al nivel del azar); sin duplicados entre particiones; valores de las métricas plausibles.

EX035. ASR de referencia 0.350; con defensa 0.190; IC del 95 % de la reducción [0.120, 0.203].

EX036. Los elementos varían en dificultad; emparejar cancela esa variación compartida y da un intervalo más ajustado y correcto para la diferencia. Comparar intervalos separados que se solapan es conservador y puede inducir a error.

EX037. Utilidad/exactitud; latencia; rechazos falsos o falsos positivos; coste de cómputo y de mantenimiento.

EX038. Como resultado exploratorio en una subsección etiquetada, planteado como hipótesis para un trabajo confirmatorio futuro.