Objetivo: Maximizar accuracy en cualificación de leads (coste controlado)
E_dev: eval.py --split dev --n 80
E_test: eval.py --split test --n 400 --seed 42
Rama final:arbor/best
Fecha: 2026-06-15
Accuracy Test Final
83.2%
▲ +22.2 pp vs M₀ (61%)
Nodos Explorados
9
3 dir. × 3 leaves
Merge Gate Pasados
3 / 9
6 rechazados (dev≠test)
Coste por Lead
$0.0031
−38% vs versión naive CoT
Árbol de Hipótesis
Merged (test pasó)
Validado (solo dev)
Podado
Pendiente
🌱
n0 — M₀: qualify_agent.py v0
Baseline GPT-4o-mini · prompt básico sin CoT · sin herramientas · dev 61% · test 61%
61%
│
n1✓ Merged
El cuello de botella es el razonamiento: el modelo clasifica sin descomponer los atributos del lead en criterios explícitos.
Chain-of-thought estructurado con criterios BANT mejora consistentemente la calibración del score. Genera el mayor delta absoluto del experimento.
n2Parcial
La señal de la web del lead no está siendo procesada: el agente recibe la URL pero no extrae contexto de empresa/sector.
Enriquecer con scraping de la landing mejora dev (+8 pp) pero añade latencia e inconsistencia que el test gate detecta. Direccion válida, implementación incompleta.
n3✗ Podado
El modelo sobreusa el score 50 como âncora: calibrar con few-shot de distribución forzará mayor discriminación.
El few-shot overfit a dev. Los ejemplos memorizaban patrones de la partición de dev y no generalizaban. Razón de poda: no hay transferencia al test.
n1.1
dev 79%test 78.5% ✓
Prompt con CoT BANT (Budget·Authority·Need·Timeline) paso a paso, sin cambiar el modelo ni tools. MERGED → M_best v1
n1.2
dev 84%test 83.2% ✓
CoT BANT + agregación k=3 rollouts con evidence dossier en lugar de majority vote. MERGED → M_best v2 (FINAL)
n1.3
dev 87%test 79% ✗
CoT BANT + k=5 + juez GPT-4o para desempate. Dev muy alto, test rechazado: el juez adicional sobreajusta la partición de dev.
n2.1
dev 82%test 74% ✗
Scraping simple (requests+BS4) de la web del lead. Dev mejora, test cae: webs inaccesibles o cambiadas crean señal ruidosa.
n2.2
dev 80%test 76% ✗
Enriquecimiento con Clearbit Reveal (sector+tamaño). Mejora moderada dev, no supera merge gate por dependencia API externa.
n2.3
pendiente
Extracción de señales LinkedIn (cargo exacto + crecimiento empresa) sin API externa. Presupuesto agotado antes de ejecutar.
n3.1
dev 76%test 63% ✗
Few-shot 8 ejemplos balanceados (4+/4-). Alta brecha dev/test: 13 pp. Overfitting claro a patrones de dev.
n3.2
dev 73%test 61% ✗
Few-shot 4 ejemplos extremos (leads muy buenos/muy malos). Sin mejora sobre baseline en test. Dirección n3 podada.
n3.3
cancelado
Few-shot dinámico (retrieval de ejemplos similares). Cancelado tras poda de n3 por ausencia de señal transferible.
Evolución de Scores y Conocimiento Acumulado
Accuracy por ciclo — Dev vs. Test (merge gate)
Dev score
Test score (solo en merge)
M_best actual
Insights Globales Destilados
▲ Prior Global #1
El razonamiento estructurado (BANT CoT) es la palanca principal en esta tarea. Las mejoras en enriquecimiento solo tienen efecto marginal si el razonamiento base es pobre.
✓ Lección Merged
K=3 rollouts con evidence dossier domina majority vote: las respuestas correctas aparecen en minoría de rollouts; la agregación por evidencia las recupera sin inflar coste.
✗ Constraint Negativo
Few-shot con ejemplos de la partición dev no transfiere: la brecha dev/test supera 12 pp en todos los nodos n3.x. Evitar en futuras direcciones.
⚠ Frontera Conocida
Enriquecimiento web (n2.x) tiene potencial (+8 pp dev) pero la implementación actual introduce ruido que el test gate detecta. Requiere caching robusto y fallback.
El cuello de botella es el razonamiento: clasificar sin descomponer atributos BANT.
merged
—
—
dir/n1-reasoning
n1.1
CoT estructurado BANT paso a paso (sin cambio de modelo).
merged
79.0%
78.5% ✓
wt/n1-1
n1.2
CoT BANT + k=3 rollouts con evidence dossier (agrega en lugar de majority).
merged
84.0%
83.2% ✓
arbor/best
n1.3
CoT BANT + k=5 + juez GPT-4o para desempate.
rechazado
87.0%
79.0% ✗
wt/n1-3
n2
La URL del lead no se procesa: el agente no extrae contexto de empresa/sector.
parcial
—
—
dir/n2-enrich
n2.1
Scraping requests+BS4 de la landing del lead para extraer sector y tamaño.
rechazado
82.0%
74.0% ✗
wt/n2-1
n2.2
Enriquecimiento con Clearbit Reveal (sector + headcount).
rechazado
80.0%
76.0% ✗
wt/n2-2
n2.3
Señales LinkedIn (cargo exacto + crecimiento empresa) sin API externa.
pendiente
—
—
—
n3
El modelo sobreusa score 50 como áncora; few-shot forzará mayor discriminación.
podado
—
—
dir/n3-fewshot
n3.1
Few-shot 8 ejemplos balanceados (4+ / 4−) del dataset dev.
podado
76.0%
63.0% ✗
wt/n3-1
n3.2
Few-shot 4 ejemplos extremos (leads muy buenos / muy malos).
podado
73.0%
61.0% ✗
wt/n3-2
n3.3
Few-shot dinámico por similitud (retrieval). Cancelado tras poda de n3.
cancelado
—
—
—
Check de Overfitting y Direcciones Abiertas
Dev vs. Test — Honest Gap
Nodos con mejora en dev (vs M₀)7 / 9
Nodos que pasaron merge gate (test)2 / 7
Brecha media dev/test en rechazados−9.4 pp
Conclusión: 5 de 7 candidatos mejoran dev pero no transfieren. El gap dev/test fue especialmente pronunciado en n3.x (few-shot, −13 pp) y n1.3 (juez GPT-4o, −8 pp). El merge gate fue esencial — sin él, n1.3 habría sido la "mejor" versión a pesar de ser peor que n1.2 en producción.
Direcciones Abiertas (próximo run)
1
n2.3 LinkedIn signals: La dirección n2 tiene potencial real (+8 pp dev en n2.1). Completar con extracción de señales LinkedIn sin API usando parsing de perfiles públicos. Requiere caching y fallback robusto para superar el test gate.
2
Modelo mayor selectivo: n1.3 mostró que un juez GPT-4o en todos los casos introduce sobreajuste. Hipótesis: usar GPT-4o solo en leads de score medio (45-65) reduce coste y mejora calibración en los casos difíciles.
3
Nueva formulación alta nivel: El árbol actual asume que el modelo tiene toda la información necesaria. Posible límite estructural: puede ser necesario replantear el task como tool-use con herramientas de búsqueda en lugar de clasificación pura. Escalar al equipo antes de invertir más presupuesto en HTR local.