Corridas DOE
16
2⁴ combinaciones · todos los efectos estimables
Clínicas asignadas
120
60 treatment · 60 control · 3 regiones
Factores
4
hora · asunto · personalización · descuento
Interacciones
11
4 pares · 4 triples · 1 cuádruple · todas estimables
Árbol de decisión
Diseño elegido
Árbol de decisión DOE — caso NutriPaw
Selección justificada del diseño antes de recoger datos
▶ ¿Qué queremos aprender?
│
├─ Comparar condiciones predefinidas (combinaciones de 4 parámetros de email)?
│ ├─ Unidades independientes (clínicas) con nuisance factor conocido (región)? → SÍ
│ │ └─ Cuantificar efectos principales E INTERACCIONES entre 4 factores? → SÍ
│ │ └─ ✓ FULL 2⁴ FACTORIAL — todos los efectos + interacciones estimables · 16 runs
│
└─ ¿Nuisance factor (región) controlado?
└─ ✓ RANDOMIZED BLOCK por región — Norte / Centro / Sur, 40 clínicas c/u
└─ Aleatorización estratificada con bloques permutados (seed=2026, reproducible)
──────────────────────────────────────────────────────────────────
Diseño final: Full 2⁴ Factorial + Stratified Block Randomization (3 regiones)
Runs: 16 combinaciones DOE × 4 réplicas por región = 64 observaciones
Errores evitados: pseudoreplicación, confusión región→tratamiento, drift temporal
Matriz DOE generada por scripts/doe_designs.py
Matriz 2⁴ Factorial — 16 corridas (orden aleatorizado seed=2026)
Orden de ejecución aleatorizado: las corridas no siguen el orden sistemático Yates — están permutadas con seed=2026 para que ningún factor quede confundido con la deriva temporal (machine warm-up, cambios en el algoritmo de inbox).
Matriz experimental · two_level_factorial(factors, seed=2026)
16 combinaciones únicas · orden de envío aleatorizado · archivable y re-genereable
| Run | Hora envío | Long. asunto (palabras) | Personalización | Descuento | Condición |
|---|---|---|---|---|---|
| 1 | 8h mañana | 10 palabras | Genérico | 20% | A₋B₊C₋D₊ |
| 2 | 8h mañana | 4 palabras | Personalizado | 20% | A₋B₋C₊D₊ |
| 3 | 8h mañana | 10 palabras | Genérico | 0% | A₋B₊C₋D₋ |
| 4 | 18h tarde | 4 palabras | Personalizado | 0% | A₊B₋C₊D₋ |
| 5 | 18h tarde | 10 palabras | Personalizado | 0% | A₊B₊C₊D₋ |
| 6 | 18h tarde | 4 palabras | Personalizado | 20% | A₊B₋C₊D₊ |
| 7 | 8h mañana | 4 palabras | Personalizado | 0% | A₋B₋C₊D₋ |
| 8 | 18h tarde | 10 palabras | Genérico | 20% | A₊B₊C₋D₊ |
| 9 | 18h tarde | 4 palabras | Genérico | 0% | A₊B₋C₋D₋ |
| 10 | 8h mañana | 10 palabras | Personalizado | 0% | A₋B₊C₊D₋ |
| 11 | 18h tarde | 10 palabras | Personalizado | 20% | A₊B₊C₊D₊ |
| 12 | 8h mañana | 4 palabras | Genérico | 0% | A₋B₋C₋D₋ (baseline) |
| 13 | 8h mañana | 4 palabras | Genérico | 20% | A₋B₋C₋D₊ |
| 14 | 18h tarde | 4 palabras | Genérico | 20% | A₊B₋C₋D₊ |
| 15 | 8h mañana | 10 palabras | Personalizado | 20% | A₋B₊C₊D₊ |
| 16 | 18h tarde | 10 palabras | Genérico | 0% | A₊B₊C₋D₋ |
Aleatorización — scripts/randomization.py
Balance por región (estrato) — 120 clínicas veterinarias
stratified_block_randomization({Norte:40, Centro:40, Sur:40}, seed=2026)
Bloques permutados dentro de cada región → balance perfecto 50/50 sin chance de deriva
Norte — 40 clínicas
Ratio 1:1 · 10 bloques de 4 · seed=2027
Centro — 40 clínicas
Ratio 1:1 · 10 bloques de 4 · seed=2028
Sur — 40 clínicas
Ratio 1:1 · 10 bloques de 4 · seed=2029
Efectos estimables — diseño full factorial 2⁴
Todos los 15 efectos son estimables (sin alias)
Estructura de efectos · Resolución V completa
Un diseño fraccional habría aliasado interacciones importantes — el full 2⁴ las estima todas
A — Hora de envío
¿La mañana (8h) o la tarde (18h) genera más aperturas en clínicas veterinarias B2B?
✓ Estimable sin confusión
B — Longitud del asunto
¿Asuntos cortos (4 palabras) vs. descriptivos (10 palabras) impactan el CTR?
✓ Estimable sin confusión
C — Personalización
Incluir nombre de la clínica + especie más tratada vs. plantilla genérica.
✓ Estimable sin confusión
D — Descuento
Ofrecer 20% de descuento en primer mes vs. precio normal en el onboarding.
✓ Estimable sin confusión
A×C — Hora × Personalización
¿El efecto de personalizar depende de si el email llega de mañana o de tarde?
✓ Interacción de 2 factores estimable
B×D — Asunto × Descuento
¿Mencionar el descuento en el asunto corto es más efectivo que en el largo?
✓ Interacción de 2 factores estimable
A×C×D — triple interacción
Interacción de 3er orden: hora × personalización × descuento. Rara en la práctica.
✓ Estimable · se usará para validación del modelo
A×B×C×D — cuádruple interacción
Interacción completa de los 4 factores. Se espera no significativa (sirve como error puro en algunos análisis).
✓ Estimable · 16 runs permiten estimarla
Garantías del diseño
Errores estructurales evitados
Checklist de validez causal — pre-registro
Errores que el diseño evita activamente (no recuperables en análisis posteriores)
| Error potencial | Mecanismo de protección | Estado |
|---|---|---|
| Pseudoreplicación | La clínica = unidad de randomización Y análisis; no se cuentan emails individuales como réplicas | ✓ Protegido |
| Confusión región → brazo | Stratified block randomization: 20 treatment + 20 control en CADA región | ✓ Protegido |
| Confusión temporal (drift) | Orden de envío aleatorizado (run_order permutado con seed=2026) | ✓ Protegido |
| Alias / interacciones no estimables | Full 2⁴ (no fraccional): todos los 15 efectos estimables sin confusión | ✓ Protegido |
| No reproducibilidad | Seed=2026 archivado → diseño idéntico re-genereable en cualquier momento | ✓ Protegido |
| Asignación por conveniencia | Bloques permutados de tamaño 4 → no es posible predecir el siguiente brazo | ✓ Protegido |
| Curvatura ignorada | Respuesta esperada lineal en estos factores; si se sospecha curvatura → CCD en fase 2 | ⚠ Fase 2 (CCD) |