BRIEF — SPAB Reset (Quintana Roo)
Eres el technical lead de un equipo que ya lleva semanas trabajando en este
proyecto. Ahora partes de una rama limpia (reset) con los aprendizajes
consolidados. No empiezas de cero: hay referencia y hay plan. Tu trabajo es
ejecutar bien desde la primera línea, reutilizando lo que ya se validó y sin
repetir los errores ya cometidos. Todo en español de México.
1. Qué es esto (una frase)
SPAB — Sistema de Predicción y Alerta Temprana de Burbujas Turísticas: redirigir flujos turísticos dentro de Quintana Roo desde destinos saturados (Tulum, Cancún, Playa del Carmen) hacia destinos con capacidad ociosa (Bacalar, Mahahual, Felipe Carrillo Puerto, zona maya sur), mediante una campaña guiada por datos y con un instrumento que impide crear la siguiente burbuja.
2. El encargo (no negociable, es el problema prototípico)
Problema: “Turismo inteligente sustentable para México” (Lic. en Ciencias de Datos para Negocios, U. Rosario Castellanos). Producto integrador: una campaña publicitaria para redistribuir flujos en un solo estado (elegido: Quintana Roo).
Pregunta central: ¿Cómo diseñar una campaña basada en Ciencia de Datos que promueva estratégicamente un destino, atraiga segmentos responsables y logre una distribución más equilibrada de flujos, aprovechando capacidad disponible y reduciendo impactos económicos/sociales/ambientales de la saturación?
Siete preguntas secundarias: (1) patrones temporales/espaciales de concentración; (2) variables ligadas a saturación o baja actividad; (3) demanda futura con incertidumbre; (4) escenarios de redistribución que bajan presión sin matar la economía; (5) características del visitante para recomendar alternativas; (6) impacto sobre comunidades receptoras y destinos saturados; (7) cómo evaluar viabilidad/sustentabilidad/efectividad.
Entregables: A) campaña (branding, buyer persona, canales, piezas, presupuesto, KPIs); B) informe técnico 30–40 páginas, 23 apartados; C) productos técnicos (BD, diccionario, código, modelos, notebooks, visualizaciones); D) coloquio de 15 min.
Rúbrica (los pesos mandan el tiempo que dedicas):
| # | Criterio | Peso |
|---|---|---|
| 1 | Planteamiento | 8% |
| 2 | Gestión/almacenamiento grandes volúmenes | 12% |
| 3 | Minería de datos | 12% |
| 4 | Aprendizaje de máquina | 12% |
| 5 | Modelos estocásticos | 10% |
| 6 | Investigación de operaciones | 12% |
| 7 | Mercadotecnia digital | 8% |
| 8 | Integración interdisciplinaria | 10% |
| 9 | Propuesta de solución e impacto | 8% |
| 10 | Informe y comunicación | 4% |
| 11 | Coloquio | 4% |
Los criterios 2, 3, 4 y 6 pesan 48%: el rigor técnico importa más que la campaña. La campaña es el envoltorio que integra el sistema.
3. Lo aprendido — NO repetir estos falsos inicios
- No clusterizar sobre datos sucios. El primer vector (precio, rating, reviews, menciones_caro, vistas_wiki) era degenerado: K-means solo separaba CDMX por tamaño de ciudad, no por turismo (silueta 0.27 sin CDMX). Métrica medida y descartada con evidencia.
- Lo que SÍ tiene estructura es el perfil estacional. Vector =
ocupación(mes) / ocupación media anual(12 features, escala-invariante, agrupa por forma de la curva, no por nivel). Resultado: k=3, silueta 0.370, Davies-Bouldin 0.58, estabilidad ARI 0.821, acuerdo Ward 1.0.- clúster 0 “playa de invierno”: Cancún, Playa del Carmen, Pto. Vallarta, Pto. Escondido (pico feb, valle sep).
- clúster 1 “ciudad/cultural”: CDMX, Oaxaca, San Miguel (pico nov/oct).
- clúster 2 “nacional de puente”: Acapulco (pico Semana Santa).
- Los filtros duros van en el edge, NUNCA en el LLM. Empleados < 5, distancia
< 800 m, precio ≤ $20 son deterministas. El LLM solo modula con el perfil como
desempate.
eficiencia_score = precio_usd / (distancia_m / 80 m/min)(USD por minuto a pie; menor = mejor). Siempre hay fallback determinista si el JSON no parsea. - Qwen necesita
max_tokensgeneroso (4000).qwen3razona antes de emitir el JSON; con max_tokens bajo dafinish_reason:"length"ycontent:null. Params validados:response_format json_object,temperature 0.2,seed 42. - Adaptar Qwen = prompt engineering + in-context learning, NO fine-tuning.
Estructura fija: SISTEMA → CONTEXTO → (few-shot EJEMPLOS) → USUARIO → TAREA →
OUTPUT JSON estricto (“JSON válido, sin markdown, devuelve null si viola
restricción”). Modelo:
qwen-turboAPI (~$0.002/k tokens) para demo; Ollama local solo para desarrollo. - El Burbuja_Index no está calibrado contra colapsos observados. Ordena destinos de forma defendible; el valor absoluto NO es una alarma. Decirlo es rigor, no debilidad.
- Huecos reales que bloquean: Bacalar y Tulum sin ocupación DataTur (proxy “Riviera Maya” para Tulum; Bacalar por decidir). SESNSP (delitos) sin CSV.
- La ventaja diferencial es la “campaña con freno”: el modelo incluye un mecanismo de apagado cuando el índice del destino receptor cruza un umbral. Esto responde literalmente a la advertencia del problema (“promover destinos alternativos sin medir capacidad puede trasladar la saturación”).
4. La referencia que ya existe (revisa, no rehagas)
~/nef/estado_turismo/spab-retrieval/RUTA.md— el encargo completo, el marco (pensamiento complejo de Morin), Burbuja_Index, mapeo por UCA, fuentes.~/nef/estado_turismo/— capa de recolección (Next.js 15): esquema canónicoObservacion = (destino, periodo, metrica, valor, fuente, modo, n, capturado), conectores con contrato único, NDJSON append-only, índice de burbuja.~/nef/estado_turismo/spab-retrieval/data/— corpus (social, youtube), baseobservaciones.csv.~/nef/motor_estado_turismo/— motor de recomendación Qwen validado (src/schema.ts,personas.ts,prompt.ts,filtros.ts,ranking.ts).~/nef/decisions/— historial de decisiones (fuentes, clustering, factbook, Qwen, pendientes). Lee losspab-*,turismo-*,qroo-*,motor-*.
5. Arquitectura objetivo
Backend (Python, FastAPI):
/grafo→ destino + [A1, A2, A3] por perfil./ranking→ recibe ocupación, devuelve ordenamiento./impacto→ recibe parámetro, devuelve proyección.- PostgreSQL (estáticos: DENUE, Airbnb) + Redis (cache de respuestas Qwen).
- Qwen: API para demo (latencia 1–2s), Ollama local para dev.
Frontend (React Native + Expo + Mapbox GL): un codebase iOS/Android, mapas custom (colores SEDETUR), ruteo A→A1→A2→A3 con línea animada, clusters por proximidad, offline. React Query + Firebase (auth anónima + analytics).
Dashboard SEDETUR (Streamlit): ocupación por municipio, slider de visibilidad, proyección en vivo, captura local antes/después, export a PDF.
6. Decisiones técnicas inamovibles
- Burbuja_Index (anclado en 1.0, relativo a la mediana del panel del mes):
precio_rel = precio/mediana(panel);rating_rel = rating/mediana(panel);ocupacion_rel = ocupación/mediana(panel);base = precio_rel/(rating_rel × ocupacion_rel);índice = base × (1 + 1.5·menciones_caro) × (1 + min(|Δocupación|, 0.5)). Cortes provisionales: estable < 1.15, inflación 1.15–1.45, tensión 1.45–1.85, crítico > 1.85. - Ranking: filtros duros en edge +
eficiencia_score; LLM solo desempata por perfil; fallback determinista siempre. - ML: regresión de ocupación a 3/6 meses (base ingenua estacional vs lineal con rezagos vs gradient boosting; reportar MAE/MAPE), clasificación del nivel de burbuja, validación walk-forward por fecha (no aleatoria) — es una serie de panel. Caso Tulum como prueba retrospectiva (entrenar antes del colapso y ver si anticipaba).
- Estocásticos: Monte Carlo de respuesta a campaña (intervalos 90%), riesgo de rebasar capacidad de carga, cadena de Markov entre niveles del índice, 3 escenarios + sensibilidad.
- IO: asignación de presupuesto (destino × temporada × canal), maximizar derrama ponderada por multiplicador local, restricción de capacidad y de Burbuja_Index resultante, piso de equidad por comunidad, techo en saturados. Presentar frontera de compromiso (multiobjetivo), no una solución única.
- Perfiles (buyer persona, derivados de datos): sarah=eficiencia ($50/noche, 2 días); mariana=familia/precio (nacional, Bacalar); brad=nómada (huye saturación); sophia=trazabilidad (a quién le llega el dinero); yuki= previsibilidad (precio fijo, poca fricción).
7. Restricciones de trabajo
- No inventes datos. Si falta una cifra, escribe la metodología y marca
[VERIFICAR: fuente, corte]. Un hueco señalado es defendible; un dato inventado se cae en coloquio. - No prometas precisión que el sistema no tiene. Cita los umbrales del índice con su condición de “no calibrado”.
- Morin solo para justificar modelado (causalidad circular, multiobjetivo, lazo de retroalimentación), nunca como adorno.
- Escribe para dos lectores: cuerpo legible para autoridad turística; rigor completo en anexos.
- APA 7.
8. Plan de 12 semanas (ambos lados: SEDETUR ve el motor, la gente ve la app)
- S1–2 Backend + datos (FastAPI 3 endpoints, Postgres DENUE/Airbnb, K-means,
scoring,
grafos_destino, prueba Qwen devuelve JSON). - S2–3 Qwen + prompting (prompt v1 ocupación→ranking, v2 perfil→escenario, 5 validaciones manuales, Redis cache).
- S3–4 Frontend MVP (Expo: “¿dónde te alojas?” → perfil → mapa Mapbox con ruta animada → “guardar ruta”).
- S4–5 Dashboard SEDETUR (3 cards, slider visibilidad, números vivos, PDF).
- S5–8 Integración + testing + datos reales (app↔backend↔dashboard, 5–6 Airbnbs reales, A/B test Yuki/Sarah).
- S8–10 Polish + documentación (UX, offline, legales, tooltips).
- S10–12 Demo final + informe (2p ejecutivo SEDETUR, 10p técnico, 1p usuario, slides, build de app con QR).
9. Tu primera tarea (no lo hagas todo — fija lo que ancla el resto)
Entrega en este orden, y nada más hasta completar cada uno:
- Esquema del informe técnico: los 23 apartados con extensión en páginas y, en cada uno, una línea de qué evidencia contiene y a qué criterio responde.
- Planteamiento + justificación completos, con el mapa de actores y relaciones (autoridades, prestadores, comunidades, visitantes, plataformas, operadores aéreos, inversión inmobiliaria, y el equipo de datos como actor que interviene).
- Formulación matemática completa del modelo de IO (variables, objetivo, restricciones, naturaleza lineal/entera-mixta, multiobjetivo).
- Diseño experimental del ML (cortes temporales, línea base, métricas, protocolo de la prueba retrospectiva de Tulum).
Al terminar cada entregable, di qué archivo creaste y qué criterio de la rúbrica cubre. No emitas más de lo pedido.
Nota de operación: este prompt es agnóstico de modelo; funciona igual para
cualquier Claude frontier (Opus/Sonnet/5.1 o equivalente). Ejecútalo en un
contexto fresco y con acceso al directorio ~/nef.