Variables del EDA — SPAB (estado_turismo)
Fecha: 2026-09-18
Fuente: spab-retrieval/src/lib/schema.ts, data/base/observaciones.csv, data/modelos/, scripts/clustering.py
Variables tal como salen del EDA. Nada inventado: conteos verificados contra la base.
1. Unidad canónica: Observacion (schema.ts)
Cada fila de data/base/observaciones.csv (1,744 obs · 11 destinos):
| Variable | Tipo | Descripción |
|---|---|---|
destino | string | slug (tulum, bacalar, …) |
periodo | string YYYY-MM | mes |
metrica | enum | ver §2 |
valor | number | valor de la métrica |
fuente | enum | ver §3 |
modo | enum | http | file (cómo llegó el dato) |
n | int | null | muestras que respaldan; baja n = baja confianza |
capturado | ISO string | timestamp de captura |
Regla: si un conector no puede llenar un campo → null. Nunca inventa.
2. Métricas (16 definidas; 11 con datos)
Con datos (fuente × métrica reales):
| Métrica | Fuente | Filas | Rango/sentido |
|---|---|---|---|
precio_hospedaje | booking | 10 | MXN/noche, mediana |
rating | googleplaces | 10 | 0–5 |
reviews_conteo | googleplaces | 10 | conteo |
menciones_caro | googleplaces | 10 | 0–1 |
ocupacion_hotelera | datatur (383), insideairbnb (1) | 384 | 0–1 |
llegadas_turistas | datatur | 1006 | conteo |
cuartos_oferta | compendio | 99 | cuartos del estado |
establecimientos_oferta | compendio | 99 | establecimientos del estado |
vistas_wikipedia | wikipedia | 110 | conteo mensual |
anfitriones_multi | insideairbnb | 1 | 0–1 |
llegadas_vuelo | opensky | 4 | conteo (ventana ~2 días) |
Definidas sin datos (huecos): asientos_domesticos, asientos_totales, delitos_100k, interes_busqueda, severidad_sargazo.
3. Fuentes (FuenteId) — 11
datatur, aero, sesnsp, insideairbnb, googleplaces, trends, sargazo, wikipedia, opensky, booking, compendio
Canónica por métrica (clustering.py): ocupacion_hotelera → datatur, precio_hospedaje → booking.
4. Variables de destino (destinos.json)
| Variable | Notas |
|---|---|
slug, nombre, estado | identidad |
lat, lon | coordenadas |
claves.datatur | nombre en DataTur |
claves.aero_iata, claves.aero_icao | aeropuerto |
claves.sesnsp_cve_mun | clave municipal |
claves.insideairbnb | slug Airbnb |
claves.trends_termino | término Trends |
claves.wikipedia | artículo |
5. Features de clustering (scripts/clustering.py)
FEATURES_V1 = [precio_hospedaje, rating, reviews_conteo, menciones_caro, vistas_wikipedia]
FEATURES_V2 = FEATURES_V1 + [ocupacion_hotelera, delitos_100k]
LOG_FEATURES = {reviews_conteo, vistas_wikipedia, llegadas_turistas}
MAX_FALTANTES = 1 # destino con ≥2 huecos sale
KS = range(2, 7)
SEMILLA = 20260914cuartos_ofertano entra (es estatal, no del destino).- Salida:
cluster,etiqueta,silueta,ward,ocupacion_media,amplitud,mes_pico,mes_valle. - Diagnóstico por k:
inercia,silueta,davies_bouldin,estabilidad_ari.
6. Variables estacionales (k=3, silueta 0.409, ARI 1.0)
Fuente datatur · ocupacion_hotelera · mín 24 meses · 12 meses como features.
Salida (asignacion_estacional.csv): destino, cluster, etiqueta, ocupacion_media, amplitud, mes_pico, mes_valle, silueta, ward.
perfil_estacional.csv: índice ocupación mes/media anual (ene…dic). ocupacion_por_mes.csv: ocupación media por mes.
7. Burbuja_Index (derivadas, panel.py)
precio_rel = precio / mediana(precio)
rating_rel = rating / mediana(rating)
ocupacion_rel = ocupacion / mediana(ocupacion)
base = precio_rel / (rating_rel × ocupacion_rel)
indice = base × (1 + 1.5 × menciones_caro)
corte = estable <1.15 · inflación <1.45 · tensión <1.85 · crítico ≥1.85
8. Variables de lugares (data/base/lugares.csv, 558 filas)
destino, lugar, giro (hoteles/restaurantes/atracciones/tours), place_id, lat, lon, rating, n_resenas, capturado.
Usadas para las rutas (generar-rutas.mjs) → giro→categoria, vol=n_resenas/10000, price=hoteles?3:2.
9. Variables de corpus (sentimiento, panel.py)
Por documento: fuente, destino, texto, score ([-1,1]), etiqueta (pos/neu/neg), fecha, likes, lugar, rating.
Léxicos POS/NEG ES+EN → señal gruesa. Fuentes: youtube_*, reddit, x_qroo, prensa_qroo, resenas_maps.
10. Huecos declarados en el propio panel
delitos_100k(SESNSP) yllegadas_vuelo(OpenSky): los huecos grandes.- OpenSky sin cobertura (404 ≠ 0): tulum, oaxaca, puerto-escondido, acapulco, puerto-vallarta.
- Sin aeropuerto propio: bacalar, playa-del-carmen, san-miguel-de-allende.
bacalarsin ocupación DataTur (no imputado).tulum= proxy “Riviera Maya” (n=0).