Ficha Técnica del
Modelo Prophet

Anatomía completa del motor de predicción de EpiForecast-MX

v6 — Febrero 2026 — 312 modelos · 3 padecimientos · 32 entidades

48Combinaciones grid
4Folds CV
3Transformaciones target
5Capas anti-Newton
0.76MASE medio (3 pad.)

1. Transformaciones del Target

Tres pasos secuenciales convierten los conteos crudos en el espacio donde Prophet entrena

Por qué no entrenar directamente sobre conteos absolutos: CDMX tiene 9.2 millones de habitantes y Colima 730 mil. El RMSE de CDMX dominaría cualquier métrica agregada. Las tres transformaciones eliminan este sesgo de escala, estabilizan la varianza y colocan el target en un espacio donde Prophet puede aprender patrones estacionales comparables entre entidades.
Paso 1

Normalización a tasa por 100K

y_tasa = (incidencia / población) × 100,000

Normaliza por tamaño de la entidad. CDMX y Colima ahora son directamente comparables. El RMSE deja de estar dominado por los estados grandes.

Fuente de población: data/utils/inegi.csv — columna Total (proyecciones CONAPO por año)

Paso 2

Log-transform

y = log(1 + y_tasa)

Estabiliza la varianza. Series con picos extremos (Depresión post-pandemia, alertas epidemiológicas) quedan comprimidas. El +1 garantiza que log(0)=0 sin indefinidos.

Impacto medido: redujo el RMSE mediano de Depresión en -64% vs serie sin log-transform

Paso 3

Espacio de entrenamiento

Prophet.fit(df[y = log(1 + y_tasa)])

El modelo aprende en espacio log-tasa. Al predecir, se revierten ambas transformaciones para obtener conteos absolutos:

conteos = (exp(ŷ) - 1) × población / 100,000
Salida

all_forecast.csv

Conteos absolutos desnormalizados por entidad y semana. El CSV sidecar del .pkl guarda y_original y Total (población) para la inversión exacta en producción.

Columnas: yhat (conteos), yhat_lower, yhat_upper (IC 95%)

Efecto del log-transform en Depresión

Comparación conceptual: varianza antes y después. Datos estilizados representativos.

Propiedades matemáticas

Simetrizacion

El log comprime colas largas a la derecha. Series de Depresión con CV >2 quedan cerca de distribución normal en log-espacio.

Interpretabilidad

Prophet modela cambios relativos (multiplicativos en log-espacio). Un cambio de +0.1 en y representa ~+10.5% en tasa original.

Restriccion de no-negatividad

exp(ŷ) ≥ 0 siempre. Nunca se predice una tasa negativa, lo que elimina post-procesamiento de clipping.

Config activa

normalizar_tasa: true
log_transform: true
tasa_por: 100000
columna_poblacion: "Total"

2. Estacionalidad y Tendencia

Configuración de los componentes estructurales de Prophet para series epidemiológicas semanales

Prophet descompone la serie en: tendencia (changepoints) + estacionalidad (Fourier) + efectos de calendario (holidays) + ruido. La configuración de EpiForecast-MX deshabilita las estacionalidades default de Prophet y las reemplaza con una estacionalidad anual personalizada de mayor precisión.

Estacionalidades deshabilitadas

yearly_seasonality

False

La estacionalidad anual default de Prophet usa periodo=365.25 días (sin decimales), impreciso para series semanales. Se reemplaza con una estacionalidad personalizada de periodo exacto.

Sustituida por: add_seasonality(period=52.18, fourier_order=5)

weekly_seasonality

False

Los datos tienen una observación por semana epidemiológica (SINAVE). No existe variación intra-semanal que modelar — activarla solo agrega ruido al modelo.

Frecuencia de datos: 1 obs/semana (resolución temporal = semana)

daily_seasonality

False

Mismo razonamiento: sin variación diaria en datos semanales. Activarla introduce 14 coeficientes sin respaldo empírico (7 sin + 7 cos para fourier_order=7).

Siempre False en series epidemiológicas semanales

Estacionalidad personalizada

period (estacionalidad anual)

52.18 semanas

Equivalente exacto de 365.25 / 7 = 52.1786... semanas. Captura el ciclo anual real con mayor precisión que el periodo default de Prophet en días.

365.25 / 7 = 52.178... — el 0.25 captura los años bisiestos en promedio

fourier_order — Nacional

5 (10 columnas)

Genera 5 funciones seno + 5 coseno = 10 regresores en la matriz de diseño. Permite patrones estacionales complejos con hasta 5 "armónicos".

Ejemplo: brotes de otoño + temporada navideña + repunte primaveral = 3 armónicos mínimo

fourier_order — Regional/Estatal

3 (6 columnas)

Series estatales son más cortas y volátiles. Con fourier_order=5 en series de ~285 puntos, hay riesgo de overfitting al patrón de entrenamiento. -40% coeficientes.

Activo cuando: modelado_estados: true en params.yaml

n_changepoints — Nacional

25 (default Prophet)

1 changepoint cada ~11 semanas en la serie completa (~285 semanas). Captura cambios de tendencia anuales y post-pandemia con suficiente granularidad.

Prophet los distribuye uniformemente en el 80% inicial de la serie

n_changepoints — Regional/Estatal

12

Con 25 changepoints en series cortas (~150 puntos para estados pequeños), Prophet sobreajusta cambios locales. 12 = 1 changepoint cada ~12 semanas (~1 por trimestre).

Activo cuando: modelado_estados: true — previene overfitting en estados <1M hab.

growth

"linear"

Tendencia lineal (por tramos, ajustada en changepoints). La tendencia "logistic" requiere definir una capacidad de saturación (cap) que no está justificada epidemiológicamente.

Apropiado para padecimientos crónicos sin límite observable de saturación a corto plazo

Armónicos de Fourier: Fourier Order 3 vs 5

Comparación conceptual de la riqueza de patrones estacionales con 3 vs 5 armónicos (1 año = 52 semanas)

3. Grid de Hiperparámetros

Grids v5 diferenciados por padecimiento — optimizados con datos de 297 modelos v4

3.1 Qué controla cada parámetro

changepoint_prior_scale

Flexibilidad de la tendencia

Controla qué tanto puede cambiar la tendencia en cada changepoint. Es una prior Laplace sobre los deltas de tendencia.

cp = 0.01 Tendencia muy suave, pocos cambios
cp = 0.05 Balance entre flexibilidad y estabilidad
cp muy bajo Riesgo: activa optimizador Newton (lento)
seasonality_prior_scale

Regularización estacional

Controla la amplitud de los coeficientes de Fourier. Prior Normal(0, sp). Valores bajos = estacionalidad más suave y regularizada.

sp = 0.025 Alta regularización (series volátiles)
sp = 0.5 Amplitud estacional moderada (ganador frecuente en Parkinson)
sp = 1.0+ Riesgo: sobreajuste estacional, peor test RMSE
seasonality_mode

Modo de estacionalidad

Define cómo interactúa la componente estacional con la tendencia.

additive

y(t) = tendencia(t) + estacionalidad(t) + ruido
La amplitud estacional es constante independiente del nivel de tendencia. Mejor para Depresión.

multiplicative

y(t) = tendencia(t) × (1 + estacionalidad(t)) + ruido
La amplitud escala con la tendencia. Mejor para Alzheimer (crecimiento poblacional).

3.2 Alzheimer — 6 combinaciones

Enfermedad neurodegenerativa con crecimiento tendencial. La estacionalidad multiplicativa gana siempre: a mayor prevalencia, mayor amplitud estacional. changepoint_prior_scale bajo (0.01-0.03) prefiere tendencias suaves — la incidencia de Alzheimer no presenta quiebres abruptos. sp=0.05 (nuevo en v5) fue el ganador en 41% de los modelos.

Grid activo (v5)

cp \ sp 0.05 nuevo 0.1 0.5
cp=0.01 Ganador 41% Frecuente Raro
cp=0.03 Moderado Moderado Raro

seasonality_mode: solo multiplicative (additive eliminado: +51% RMSE vs multiplicative)

Resumen del grid

Combinaciones totales6
seasonality_mode[multiplicative]
changepoint_prior_scale[0.01, 0.03]
seasonality_prior_scale[0.05, 0.1, 0.5]
Eliminadoadditive (+51% RMSE)
RMSE medio v60.027

3.3 Depresión — 24 combinaciones

La serie más volátil y el grid más amplio. Depresión presenta picos pandémicos, sub-registro temporal y recuperación no lineal. Se prueban ambos seasonality_mode y el rango más amplio de cp y sp. sp=0.025 (nuevo en v5) aplica mayor regularización para series estatales inestables. sp=1.0 fue eliminado: ganaba en 29% de modelos individuales pero con peor RMSE medio global.

Grid additive (12 combos)

cp \ sp 0.025 nuevo 0.05 0.1 0.5
cp=0.01ModeradoAltoModeradoBajo
cp=0.03ModeradoAltoModeradoBajo
cp=0.05BajoModeradoModeradoBajo

Grid multiplicative (12 combos)

cp \ sp 0.0250.050.10.5
cp=0.01BajoModeradoModeradoBajo
cp=0.03BajoModeradoAltoBajo
cp=0.05BajoBajoModeradoBajo

Resumen del grid

Combinaciones totales24
seasonality_mode[additive, multiplicative]
changepoint_prior_scale[0.01, 0.03, 0.05]
seasonality_prior_scale[0.025, 0.05, 0.1, 0.5]
Eliminadosp=1.0 (peor RMSE medio)
Additive RMSE medio0.2017
Multiplicative RMSE medio0.2183
RMSE medio v60.183

3.4 Parkinson — 18 combinaciones

El grid más depurado tras la guerra contra Newton. cp=0.01 eliminado (causaba Newton en el 35% de series). cp=0.07 eliminado (nunca ganaba). cp=0.04 nuevo (interpolación entre 0.03 y 0.05 que mejoró cobertura). sp=0.5 fue el ganador claro con RMSE=0.0461, reduciéndolo ~15% vs sp=0.1.

Grid activo (v5)

cp \ sp 0.1 0.5 ganador 1.0
cp=0.03 Moderado RMSE 0.046 Raro
cp=0.04 nuevo Moderado Alto Raro
cp=0.05 Moderado Moderado Bajo
Eliminados: cp=0.01 (Newton-prone), cp=0.07 (nunca ganaba) — ambos de v4

seasonality_mode: [multiplicative, additive]

Resumen del grid

Combinaciones totales18
seasonality_mode[multiplicative, additive]
changepoint_prior_scale[0.03, 0.04, 0.05]
seasonality_prior_scale[0.1, 0.5, 1.0]
sp ganador0.5 (RMSE 0.046)
RMSE medio v60.057

Combinaciones por padecimiento

Total de combinaciones en el grid de CV por enfermedad

Distribución de hiperparámetros

Valores de changepoint_prior_scale por padecimiento

3.5 Evolución del Grid: v4 → v5 → v6

Parámetro / Padecimiento v4 v5 v6 Motivo
Alzheimer · additive Incluido Eliminado Eliminado +51% RMSE vs multiplicative
Alzheimer · sp=0.05 No estaba Agregado Mantiene Ganador en 41% de modelos Alzheimer
Depresión · sp=0.025 No estaba Agregado Mantiene Mayor regularización para series volátiles
Depresión · sp=1.0 Incluido Eliminado Eliminado Ganaba 29% individual pero peor RMSE medio
Parkinson · cp=0.01 Incluido Eliminado Eliminado Newton-prone en 35% de series Parkinson
Parkinson · cp=0.07 Incluido Eliminado Eliminado Nunca ganaba — desechar para ahorrar tiempo
Parkinson · cp=0.04 No estaba Agregado Mantiene Interpolación 0.03–0.05, ganador en 20% Parkinson
fourier_order estatal 5 (igual que nacional) 3 (reducido) Mantiene 3 Previene overfitting en series cortas estatales
n_changepoints estatal 25 (igual que nacional) 12 (reducido) Mantiene 12 1 changepoint cada 24 sem vs 11 sem (más estable)
MASE metric en CV No estaba No estaba Agregado v6 MAE_modelo / MAE_naive_lag52 — escala-independiente
Modo híbrido (fallback regional) No estaba No estaba Agregado v6 100% cobertura estatal (vs 87% en v5)

4. Cross-Validation Temporal

4 folds con pesos progresivos — los periodos recientes pesan más en la selección del modelo

Por qué validación cruzada temporal y no aleatoria: Las series epidemiológicas tienen dependencia temporal. Una división aleatoria permitiría que el modelo "vea el futuro" durante el entrenamiento. TimeSeriesSplit garantiza que el fold de test siempre está cronológicamente después del fold de entrenamiento — igual que la situación de producción.

Estructura de los 4 folds

Fold 1
Entrenamiento (2014-2020)
Test 2020-21
×0.50 Post-COVID atípico
Fold 2
Entrenamiento (2014-2021)
Test 2021-22
×0.75 Recuperación pandémica
Fold 3
Entrenamiento (2014-2022)
Test 2022-23
×1.00 Estabilización post-COVID
Fold 4
Entrenamiento (2014-2023)
Test 2023-24
×1.25 Comportamiento actual

Ponderacion progresiva

En lugar de np.mean(metrics) sobre los 4 folds, se usa:

RMSE_cv = np.average(
  [rmse_f1, rmse_f2, rmse_f3, rmse_f4],
  weights=[0.50, 0.75, 1.00, 1.25]
)

El fold post-COVID (2020-2021) recibe la mitad del peso del fold actual. Evita que el periodo atípico domine la selección de hiperparámetros.

Parámetros de CV

MétodoTimeSeriesSplit
n_splits4
test_size53 semanas (~1 año)
Criterio de selecciónRMSE ponderado mínimo
Modelo finalReentrenar con serie COMPLETA
Timeout por fold35 segundos

Pesos de los folds de CV

Mayor peso a periodos recientes — menor al periodo pandémico

Entrenamiento del modelo final

Después de la CV, el mejor conjunto de hiperparámetros se usa para entrenar el modelo con la serie completa (2014-2026), no solo el split de entrenamiento del último fold.

Razonamiento

CV evalúa el desempeño predictivo. El .pkl en producción necesita toda la información disponible para el pronóstico futuro — incluir 2024-2026 mejora la proyección a 52 semanas.

Impacto

+53 semanas de datos adicionales en el modelo final vs v4 (que entrenaba solo hasta el split de CV). Mejora especialmente la proyección en series con tendencia reciente marcada.

5. Protección Anti-Newton

Sistema de 5 capas para prevenir que Prophet caiga al optimizador Newton (100-500x más lento)

El problema: Prophet usa L-BFGS por defecto (rápido). Cuando no converge — usualmente con changepoint_prior_scale muy bajo — cae silenciosamente al optimizador Newton, que puede tardar 30-90 minutos por modelo. Chihuahua-Depresión tardaba 39 minutos en v4. Con las 5 capas de protección, pasó a 4 minutos en v5 — una reducción de 9.75x.
39 min
Chihuahua-Depresión v4
4 min
Chihuahua-Depresión v5
9.75x
Speedup logrado
35 s
Timeout por fold
90 s
Timeout por combo
Capa 1 — Sort cp descendente

El grid se ordena de mayor a menor changepoint_prior_scale antes de iniciar CV. Los combos con cp alto (ej. 0.05) son menos propensos a Newton y convergen más rápido — se prueban primero para establecer un baseline rápido.

Capa 2 — Timeout por fold (35 s)

Cada fold de CV corre en un ThreadPoolExecutor con un timeout de 35 segundos. Si el fold excede ese límite, se cancela y el combo recibe RMSE=infinito para ese fold.

Capa 3 — Newton-prone threshold

Si un combo con cp=X genera timeout en cualquier fold, se registra X como "umbral Newton". Todos los combos con cp < X se saltan (skip) automáticamente, ya que son aún más propensos a Newton.

Capa 4 — Timeout por combo (90 s)

Backstop total por combinación. Si los 4 folds juntos superan 90 segundos, el combo completo se descarta. Evita que un solo combo atípico bloquee el grid search.

Capa 5 — Fallback a defaults

Si todos los combos del grid generan timeout, se usa el primer valor del grid con el mayor cp disponible (el menos propenso a Newton). Garantiza que siempre se produce un modelo, aunque sea con hiperparámetros conservadores.

Caso de estudio: Chihuahua-Depresión

Tiempo de entrenamiento v4 vs v5 — impacto de la protección anti-Newton

Por qué cp bajo activa Newton

Con changepoint_prior_scale=0.01, la prior Laplace es extremadamente estrecha. L-BFGS necesita muchos pasos para encontrar la curvatura correcta en ese espacio de parámetros — y a menudo falla la convergencia, activando el fallback a Newton.

L-BFGS (normal)

Optimizador quasi-Newton de memoria limitada. Típicamente converge en 50-200 iteraciones. Tiempo: 2-10 segundos por fold.

Newton (lento)

Newton completo requiere la Hessiana exacta. En espacio de alta dimensión (Fourier + changepoints), puede tardar 500-2000 iteraciones. Tiempo: 5-40 minutos por fold.

Con protección anti-Newton

cp=0.01 se prueba primero (orden descendente). Si timeout en fold 1, se salta todos los cp menores. Tiempo total: <5 min por serie.

6. Modo Híbrido y Confianza

Cobertura 100% estatal — estados con datos insuficientes usan modelos regionales como fallback

Problema v5: 41 series estatales tenían promedio <0.5 casos/semana. En v5, estos modelos producían proyecciones planas (sin información útil). En v6, el modo híbrido los redirige a un modelo regional — manteniendo la desnormalización con la población individual de cada estado.
0.5
Umbral mínimo (casos/sem)
41
Modelos insuficientes v6
100%
Cobertura estatal v6
87%
Cobertura estatal v5
4
Regiones INEGI salud mental
umbral_minimo_semanal

0.5 casos/semana

Si el promedio semanal de una serie estatal es < 0.5, se marca como confianza: "insuficiente". Reducido de 1.0 (v5) a 0.5 (v6) para recuperar ~40 modelos que tenían datos usables pero escasos.

Distribución por padecimiento:
Alzheimer: 36 insuficientes · Parkinson: 5 insuficientes · Depresión: 0
modelado_hibrido: true

Lógica de fallback

1

CV y entrenamiento regional se realizan normalmente (datos agregados suficientes)

2

Estado insuficiente: el .pkl regional del estado correspondiente se usa para predicción

3

La desnormalización usa la población individual del estado, no la regional — escala correcta

4

El CSV all_forecast.csv incluye columna usar_regional y mapeo a .pkl regional

Regiones INEGI de Salud Mental

Región 1
Metropolitana alta

CDMX, Jalisco, Nuevo León, Estado de México. Alta densidad, servicios de salud mental desarrollados.

Región 2
Urbana media

Aguascalientes, Querétaro, Guanajuato, Coahuila. Urbanización creciente, cobertura IMSS media.

Región 3
Sur-Sureste vulnerable

Chiapas, Oaxaca, Guerrero, Veracruz. Alta marginalidad, sub-registro alto, series más cortas.

Región 4
Rural / dispersa

Durango, Zacatecas, Colima, BCS, Nayarit. Baja densidad, mayor proporción de modelos insuficientes.

Distribución de modelos por confianza y padecimiento

Modelos con confianza "normal" vs "insuficiente" — los insuficientes usan fallback regional en v6

7. Periodos Atípicos

Holidays de Prophet que absorben eventos extraordinarios sin contaminar los patrones estacionales normales

Cómo funcionan en Prophet: Los periodos atípicos se pasan como holidays con lower_window y upper_window. Prophet aprende un efecto específico para esas fechas, separándolo del componente estacional. Esto evita que COVID-19, por ejemplo, distorsione el patrón anual aprendido para todos los años.
2020-03-23

Pandemia COVID-19

913 días ~2.5 años Activo

Declaración de pandemia. Los tres padecimientos experimentaron disrupciones distintas: Depresión con pico de demanda + colapso de reporte, Parkinson con interrupción de consultas, Alzheimer con sub-registro en domicilios. La ventana de 913 días cubre hasta mediados de 2022, absorbiendo la fase de recuperación gradual.

lower_window: 0  ·  upper_window: 913
2023-01-09

Tabasco — Cambio de régimen (Depresión)

365 días Solo Depresión Activo

Quiebre estadístico en la serie de Depresión de Tabasco a principios de 2023 — posiblemente asociado a cambio en protocolo de diagnóstico o sistema de reporte. Sin este holiday, el RMSE de Tabasco-Depresión era 6.2% más alto. Filtrado por entidad="Tabasco" y padecimiento="Depresión".

lower_window: 0  ·  upper_window: 365  ·  RMSE mejora: -6.2%
Probados

Rechazados — sin mejora de RMSE

Descartados
Atípico 2016

No produjo mejora estadísticamente significativa en ningún padecimiento. Removido en v5.

Step functions (Nayarit, Colima, Durango, BCS)

Cambios de régimen permanentes (posibles fusiones de clínicas o redefinición de catchment). Prophet trata los holidays como eventos temporales — mal ajuste para escalones permanentes. Empeoraron el RMSE.

8. Métricas de Evaluación

Cuatro métricas complementarias — cada una captura un aspecto distinto del error de pronóstico

Métrica principal de selección

RMSE

RMSE = sqrt( (1/n) ∑ (y&hat; - y)² )

Error cuadrático medio. Penaliza errores grandes (outliers) más que errores pequeños debido al cuadrado. Se minimiza en el grid search de CV. Expresado en unidades de log-tasa por 100K.

Alzheimer < 0.03 Depresión < 0.20 Parkinson < 0.06
Reportada en resultados

MAE

MAE = (1/n) ∑ |y&hat; - y|

Error absoluto medio. Más interpretable que RMSE: representa el error típico en unidades log-tasa. Más robusto a outliers que RMSE. Se incluye en all_forecast.csv como métrica de diagnóstico.

Complementa al RMSE Sin thresholds fijos
Solo si mape_confiable

MAPE

MAPE = (100/n) ∑ |y&hat; - y| / |y|

Error porcentual absoluto medio. Problemático cuando y ≈ 0 (explosión a infinito). Se usa la bandera mape_confiable: solo se reporta si el mínimo de y es >0.1. Se clipea a 999 para evitar infinitos.

Inestable con series esporádicas Clipeado a 999
Nuevo en v6 — escala-independiente

MASE

MASE = MAE_modelo / MAE_naive_lag52

MAE_naive_lag52 = (1/n) ∑ |y(t) - y(t-52)|

Error absoluto medio escalado. El denominador es el MAE de un modelo naive que predice el mismo valor que hace 52 semanas (lag-52). MASE < 1 significa que el modelo supera al baseline seasonal naive.

MASE < 1 = mejor que naive MASE > 1 = peor que naive
v6: Alzheimer 0.74, Depresión 0.80, Parkinson 0.75 — todos < 1

Comparación de métricas por padecimiento (v6)

RMSE y MASE medios — normalizado para visualización conjunta (escala diferente entre métricas)

9. Resultados v6

297 modelos estatales + 15 fallback regionales — 312 series, ~45 minutos con n_jobs=-2

297
Modelos estatales
15
Modelos regionales fallback
312
Gráficos generados
~45
Minutos entrenamiento total
52
Semanas de proyección
Padecimiento Modelos Insuficientes Fallback regional RMSE medio MAE medio MASE medio Tiempo
Alzheimer 99 36 36 0.027 0.021 0.74 ~2 min
Depresión 99 0 0 0.183 0.143 0.80 ~28 min
Parkinson 99 5 5 0.057 0.044 0.75 ~14 min

Conclusiones del modelado v6

Los tres padecimientos presentan MASE < 1 — los modelos Prophet superan consistentemente al baseline naive estacional (lag-52 semanas). El modo híbrido elevó la cobertura estatal informada del 87% (v5) al 100% (v6). La protección anti-Newton redujo el tiempo de entrenamiento de Depresión de >2 horas (v4) a 28 minutos. El sistema está listo para producción con 52 semanas de proyección por entidad.

0.76
MASE medio global
312
Gráficos PNG
100%
Cobertura estatal
45 min
Entrenamiento completo

RMSE medio por padecimiento (v6)

En espacio log-tasa por 100K — escalas diferentes entre padecimientos

MASE medio por padecimiento (v6)

MASE < 1.0 indica superioridad sobre el baseline naive estacional

10. Mapa Completo de Parámetros

Referencia exhaustiva de todos los parámetros de configuración del sistema Prophet en EpiForecast-MX

Parámetro Archivo config Valor Tipo Condicional Impacto
Target y normalización
normalizar_tasamodelado.yaml truebool Siempre Convierte conteos a tasa por 100K
tasa_pormodelado.yaml 100000int Siempre Factor de escala per cápita
columna_poblacionmodelado.yaml "Total"str Siempre Columna INEGI para desnormalizar
log_transformmodelado.yaml truebool Siempre log(1+y_tasa) — estabiliza varianza
Estacionalidad
yearly_seasonalityprophet.py Falsebool Siempre Reemplazada por custom add_seasonality
weekly_seasonalityprophet.py Falsebool Siempre Sin variación intra-semanal (1 obs/sem)
daily_seasonalityprophet.py Falsebool Siempre Sin variación diaria en datos semanales
period (custom anual)prophet.py 52.18float Siempre 365.25/7 — captura años bisiestos
fourier_order (nacional)modelado.yaml 5int modelado_estados: false 10 coeficientes — patrones complejos
fourier_order_regionalmodelado.yaml 3int modelado_estados: true 6 coeficientes — previene overfitting estatal
Tendencia y changepoints
growthprophet.py "linear"str Siempre Sin capacidad de saturación definida
n_changepoints (nacional)prophet.py 25int modelado_estados: false 1 cp cada ~11 sem — resolución alta
n_changepoints_regionalmodelado.yaml 12int modelado_estados: true 1 cp cada ~24 sem — evita sobreajuste
Hiperparámetros del grid
changepoint_prior_scalemodelado.yaml [0.01–0.05]float Por padecimiento Flexibilidad de tendencia — riesgo Newton si muy bajo
seasonality_prior_scalemodelado.yaml [0.025–1.0]float Por padecimiento Regularización estacional — mayor = más compleja
seasonality_modemodelado.yaml additive / multiplicativestr Por padecimiento Interacción estacionalidad-tendencia
Cross-validation
n_splitsmodelado.yaml 4int Siempre Folds temporales de CV
test_sizemodelado.yaml 53int (semanas) Siempre ~1 año de evaluación por fold
cv_weightsmodelado.yaml [0.5, 0.75, 1.0, 1.25]list[float] Siempre Ponderación progresiva — más peso a folds recientes
Protección anti-Newton
fold_timeout_segmodelado.yaml 35int (seg) Siempre Máximo por fold en ThreadPoolExecutor
combo_timeout_segmodelado.yaml 90int (seg) Siempre Backstop total por combinación de hiperparámetros
Modo híbrido y confianza
modelado_hibridoparams.yaml truebool v6+ Fallback regional para estados insuficientes
umbral_minimo_semanalmodelado.yaml 0.5float modelado_hibrido: true Casos/sem mínimo para confianza "normal"
Periodos atípicos (holidays)
COVID-19 holidaymodelado.yaml 2020-03-23 + 913ddate + days Todos los padecimientos Absorbe disrupción pandémica sin contaminar estacionalidad
Tabasco-Depresión holidaymodelado.yaml 2023-01-09 + 365ddate + days Solo Tabasco + Depresión -6.2% RMSE en esa serie específica
Entrenamiento paralelo
n_jobsmodelado.yaml -2int make train joblib: todos los núcleos menos uno (loky backend)
backendprophet.py "loky"str Siempre Multiprocessing robusto para Prophet (fork-safe)