El monitoreo y la predicción de variables climatológicas, especialmente la temperatura, desempeñan un papel crítico en la planificación urbana, la gestión energética, la salud pública y la optimización de procesos industriales. En una ciudad con las dinámicas climáticas y geográficas de Cali, las fluctuaciones térmicas no solo afectan el confort de la población, sino que también generan impactos directos sobre la demanda de energía eléctrica (debido al uso de sistemas de refrigeración y aire acondicionado) y el comportamiento de diversos sectores productivos.
Para abordar esta variabilidad de manera estratégica, la ciencia de datos y la estadística aplicada ofrecen herramientas avanzadas como el análisis de series de tiempo. Estas metodologías permiten transformar registros históricos secuenciales en modelos matemáticos capaces de identificar patrones ocultos, tendencias y comportamientos cíclicos o estacionales que caracterizan el clima de la región.
El comportamiento de la temperatura a lo largo del tiempo es inherentemente estocástico; sin embargo, posee una fuerte dependencia cronológica, lo que significa que los valores pasados e inmediatos influyen significativamente en el comportamiento futuro. El desafío principal de este estudio radica en que los métodos descriptivos tradicionales (como los promedios o análisis de varianza simples) son insuficientes para capturar la estructura dinámica y de autocorrelación que presentan estos datos.
Por lo tanto, el problema central a resolver en este informe consiste
en modelar la estructura de la serie temporal de la temperatura
en la ciudad de Cali a partir de un conjunto de datos
históricos (Compartir2.xlsx). El objetivo es identificar y
evaluar probabilísticamente el modelo predictivo óptimo bajo el enfoque
Box-Jenkins (metodología ARIMA). A través de esto, se busca evaluar las
propiedades de estacionariedad, analizar las funciones de
autocorrelación (ACF y PACF), diagnosticar el comportamiento de los
residuos y, finalmente, generar un pronóstico estadísticamente
confiable para las próximas 24 horas. Este horizonte a corto
plazo es fundamental para la toma de decisiones operativas y de
mitigación ante picos térmicos en la región.
Para el desarrollo de este estudio, se extrajo un conjunto de datos
históricos provenientes del archivo Compartir2.xlsx. La
estructura de la información está compuesta por las siguientes variables
principales:
xts), asegurando que las observaciones mantengan una
secuencia ordenada y equidistante.El análisis predictivo se fundamenta en la Metodología Box-Jenkins, utilizando modelos de tipo ARIMA (Autoregressive Integrated Moving Average) o Modelos Autorregresivos Integrados de Media Móvil. Este enfoque es idóneo para el análisis de series de tiempo univariadas debido a su capacidad para capturar la estructura de dependencia lineal e inercia que presentan los datos cronológicos sin necesidad de variables explicativas externas.
Un modelo ARIMA se denota matemáticamente como ARIMA(p, d, q), donde sus componentes principales se definen de la siguiente manera:
La metodología se implementa en cuatro fases consecutivas reflejadas en el código:
adf.test) y la inspección visual
de las funciones de autocorrelación simple (ggAcf) y
parcial (ggPacf).auto.arima. La selección del modelo óptimo se realiza bajo
criterios de parsimonia estadística, priorizando aquellos con los
menores valores en los criterios de información de Akaike
(AIC) y Bayesiano (BIC).checkresiduals para comprobar que cumplan con las
propiedades de “ruido blanco” (residuos independientes, no
autocorrelacionados y con distribución normal).En esta primera etapa se realiza la lectura del conjunto de datos y
una exploración básica de las dimensiones y el tipo de variables
contenidas en el archivo Compartir2.xlsx. Esto permite
garantizar que las estructuras primarias sean consistentes antes de
iniciar cualquier transformación matemática.
## [1] "Fecha & Hora" "O3 (ug/m3)"
## [3] "Vel Viento (m/s)" "Dir Viento (Grados)"
## [5] "Temperatura (C°)" "Humedad (%)"
## [7] "Radiacion Solar (Watt/M2)" "Lluvia (mm)"
## # A tibble: 6 × 8
## `Fecha & Hora` `O3 (ug/m3)` `Vel Viento (m/s)` `Dir Viento (Grados)`
## <dttm> <dbl> <dbl> <dbl>
## 1 2018-01-01 01:00:00 9.6 1.9 132.
## 2 2018-01-01 02:00:00 8.2 1.7 169.
## 3 2018-01-01 03:00:00 8.2 1.8 202.
## 4 2018-01-01 04:00:00 8 1.8 165.
## 5 2018-01-01 05:00:00 8.4 1.6 116.
## 6 2018-01-01 06:00:00 8.2 1.8 250.
## # ℹ 4 more variables: `Temperatura (C°)` <dbl>, `Humedad (%)` <dbl>,
## # `Radiacion Solar (Watt/M2)` <dbl>, `Lluvia (mm)` <dbl>
## tibble [8,760 × 8] (S3: tbl_df/tbl/data.frame)
## $ Fecha & Hora : POSIXct[1:8760], format: "2018-01-01 01:00:00" "2018-01-01 02:00:00" ...
## $ O3 (ug/m3) : num [1:8760] 9.6 8.2 8.2 8 8.4 8.2 10.5 13.5 15.3 14.1 ...
## $ Vel Viento (m/s) : num [1:8760] 1.9 1.7 1.8 1.8 1.6 1.8 2.1 3 2.4 2.4 ...
## $ Dir Viento (Grados) : num [1:8760] 132 169 202 165 116 ...
## $ Temperatura (C°) : num [1:8760] 25.2 24.7 24.3 24.4 24.3 23.5 23.4 22.9 22 22 ...
## $ Humedad (%) : num [1:8760] 73.2 74 74.4 73.5 74.4 79.9 79.1 80.3 83.1 82.9 ...
## $ Radiacion Solar (Watt/M2): num [1:8760] 0 0 0 0 0 0 0 3.8 12.3 15.4 ...
## $ Lluvia (mm) : num [1:8760] 0 0 0 0 3.3 ...
Con el fin de inspeccionar la consistencia interna y la calidad de la variable climatológica antes de cualquier procesamiento, se genera un entorno interactivo para explorar los registros originales de la serie.
Temperatura <- xts(
datos$`Temperatura (C°)`,
order.by = datos$`Fecha & Hora`
)
g <- ggplot(datos, aes(x = `Fecha & Hora`, y = `Temperatura (C°)`)) +
geom_line(color = "pink") +
labs(title = "Temperatura a lo largo del tiempo", x = "Fecha & Hora", y = "Temperatura (C°)") +
theme_minimal()
ggplotly(g)El control de la estructura inicial del set de datos permite auditar la calidad de la información bajo los siguientes parámetros:
NA):
Para evitar interpretaciones genéricas, se extrae la matriz de
indicadores cuantitativos clave de la serie depurada
(Temperatura2). Estas métricas describen numéricamente el
comportamiento térmico y proporcionan los fundamentos matemáticos que
justifican el uso del modelo de predicción.
# Extracción de estadísticos empleando funciones base y la desviación estándar
Temperatura2 <- na.omit(Temperatura)
# Calcular estadísticos descriptivos detallados
estadisticos <- describe(as.numeric(Temperatura2))
# Guardar los valores exactos en variables para el texto automático
mean_val <- round(estadisticos$mean, 2)
sd_val <- round(estadisticos$sd, 2)
med_val <- round(estadisticos$median, 2)
min_val <- round(estadisticos$min, 2)
max_val <- round(estadisticos$max, 2)
rango_val <- round(estadisticos$range, 2)
skew_val <- round(estadisticos$skew, 2)
kurt_val <- round(estadisticos$kurtosis, 2)
# Construcción de una tabla limpia para mostrar en el reporte
tabla_descriptiva <- data.frame(
Métrica_Estadística = c("Media Aritmética", "Desviación Estándar", "Mediana", "Valor Mínimo", "Valor Máximo", "Rango Absoluto", "Asimetría (Skewness)", "Curtosis"),
Valor_Numerico = c(mean_val, sd_val, med_val, min_val, max_val, rango_val, skew_val, kurt_val)
)
# Imprimir tabla en el reporte
print(tabla_descriptiva)## Métrica_Estadística Valor_Numerico
## 1 Media Aritmética 28.28
## 2 Desviación Estándar 3.64
## 3 Mediana 27.30
## 4 Valor Mínimo 19.90
## 5 Valor Máximo 38.50
## 6 Rango Absoluto 18.60
## 7 Asimetría (Skewness) 0.45
## 8 Curtosis -0.96
La interpretación de estos indicadores define los parámetros clave para el comportamiento del sistema y el diseño del modelo:
Para profundizar en el comportamiento descriptivo, se recurre a la
creación de componentes visuales dinámicos e interactivos utilizando la
librería plotly. Estos gráficos permiten realizar
acercamientos, inspeccionar valores puntuales al pasar el cursor y
evaluar detalladamente la distribución de las observaciones y picos
térmicos.
plot_ly(
x = datos$`Fecha & Hora`,
y = datos$`Temperatura (C°)`,
type = "scatter",
mode = "lines",
line = list(color = "pink")
) |>
layout(
title = "Temperatura en Cali",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Temperatura (°C)")
)Análisis: Rastrea secuencialmente cada medición cronológica. Permite constatar visualmente cómo la serie oscila de forma homogénea alrededor de la media calculada de 28.28 °C, facilitando la identificación de patrones cíclicos u horarios repetitivos y sugiriendo la ausencia de tendencias determinísticas a largo plazo.
# Histograma
plot_ly(
x = datos$`Temperatura (C°)`,
type = "histogram",
nbinsx = 20,
opacity = 0.8,
marker = list(
color = "pink",
line = list(color = "gray", width = 1)
)
)Análisis: Evalúa el comportamiento probabilístico de la variable mediante sus 20 clases. Muestra interactivamente la alta concentración de frecuencias en torno a la mediana de 27.3 °C, sirviendo para verificar de forma visual el grado de simetría y si la estructura posee una forma unimodal bien definida.
# Boxplot
plot_ly(
y = datos$`Temperatura (C°)`,
type = "box",
fillcolor = "gray",
line = list(color = "pink")
) |>
layout(
title = "Boxplot de la temperatura",
yaxis = list(title = "Temperatura (°C)")
)Análisis: Sintetiza gráficamente la dispersión de los datos. Permite confirmar que el 50% central de las observaciones se mantiene estable y agrupado, mientras que los límites de los “bigotes” descartan o confirman si el valor mínimo de 19.9 °C y el máximo de 38.5 °C actúan como anomalías aisladas (outliers) capaces de sesgar el modelo predictivo.
Antes de proceder con la estimación de los modelos autorregresivos,
es un requisito matemático estricto garantizar que la serie temporal no
contenga valores faltantes (NA) y cumpla con la condición
de estacionariedad (media y varianza constantes en el
tiempo).
En este bloque se contabilizan los datos ausentes, se eliminan mediante una omisión listada y se aplican las pruebas correspondientes para verificar si la serie requiere o no diferenciación (\(d\)).
## [1] 634
## [1] 0
# 2. Gráfico interactivo de la serie de tiempo
p_linea <- autoplot(Temperatura2) +
labs(title = "Comportamiento Histórico de la Temperatura", x = "Tiempo", y = "Temperatura (°C)") +
theme_minimal()
ggplotly(p_linea)##
## Augmented Dickey-Fuller Test
##
## data: Temperatura2
## Dickey-Fuller = -8.1442, Lag order = 20, p-value = 0.01
## alternative hypothesis: stationary
# 4. Correlogramas ACF y PACF Interactivos (Lado a Lado)
p_acf <- ggAcf(Temperatura2) + labs(title = "Función de Autocorrelación (ACF)") + theme_minimal()
p_pacf <- ggPacf(Temperatura2) + labs(title = "Función de Autocorrelación Parcial (PACF)") + theme_minimal()
# Combinar de forma dinámica usando subplot de plotly
subplot(ggplotly(p_acf), ggplotly(p_pacf), nrows = 1, titleX = TRUE, titleY = TRUE)La evaluación inicial mediante la función sum(is.na())
detectó un total de 634 registros faltantes (NA) en la
serie original, causados presumiblemente por fallas de medición o
pérdida de señal en la estación meteorológica. Tras aplicar la función
de omisión na.omit(), se removieron de manera segura estas
observaciones, confirmando un segundo conteo de 0 datos
faltantes en la variable depurada Temperatura2,
dejándola apta para los algoritmos de estimación.
autoplot)La representación visual de Temperatura2 revela dos
características fundamentales del comportamiento histórico entre 2018 y
2019: 1. Gaps de Información: Se evidencia una ventana
de pérdida de datos prolongada en el primer trimestre de 2018
(identificada por la línea recta diagonal continua), lo que valida la
necesidad del proceso de depuración previo. 2. Componente
Cíclico: La variable muestra una oscilación densa y repetitiva
confinada entre los 22°C y los 37°C. A nivel macro, no se percibe una
tendencia determinística (creciente o decreciente) a lo largo del año,
sugiriendo estabilidad en su comportamiento global.
adf.test)Para validar estadísticamente la estacionariedad de la serie sin depender únicamente de la inspección visual, se analizan los resultados del test:
Resultados del Test: El estadístico Dickey-Fuller obtenido es de -8.1442 con un orden de rezago de 20, arrojando un p-valor = 0.01. Al ser este valor estrictamente menor al nivel de significancia estándar (\(\alpha = 0.05\)), se cuenta con evidencia estadística suficiente para rechazar la hipótesis nula (\(H_0\)).
Por lo tanto, se concluye formalmente que la serie de temperatura es estacionaria. Esto implica teóricamente que el orden de integración para los modelos predictivos base debe ser \(d = 0\), evitando una diferenciación innecesaria que sobre-procese la serie.
La inspección en paralelo de la Función de Autocorrelación Simple (ACF) y Parcial (PACF) entrega información crucial sobre la estructura estocástica de los datos:
Con base en la estructura de dependencia observada en los
correlogramas de la sección anterior (donde se aprecian rezagos
significativos), se proponen cinco configuraciones manuales competitivas
basadas en un orden de integración \(d=1\) y un tope de 4 rezagos
autorregresivos (\(p=4\)). Estos
modelos se contrastan de manera directa contra el algoritmo de selección
automatizada auto.arima() utilizando las métricas de Akaike
(AIC) y Bayesiano (BIC).
# Estimación de los 5 modelos candidatos manuales
modelo1 <- Arima(Temperatura2, order = c(4,1,0))
modelo2 <- Arima(Temperatura2, order = c(4,1,1))
modelo3 <- Arima(Temperatura2, order = c(4,1,2))
modelo4 <- Arima(Temperatura2, order = c(4,1,3))
modelo5 <- Arima(Temperatura2, order = c(4,1,4))
# Estimación del modelo automatizado por defecto
modelo_auto <- auto.arima(Temperatura2)
# Construcción de la matriz comparativa de criterios de información
tabla_criterios <- data.frame(
Modelo = c("ARIMA(4,1,0)", "ARIMA(4,1,1)", "ARIMA(4,1,2)", "ARIMA(4,1,3)", "ARIMA(4,1,4)", "Auto ARIMA"),
AIC = c(modelo1$aic, modelo2$aic, modelo3$aic, modelo4$aic, modelo5$aic, modelo_auto$aic),
BIC = c(modelo1$bic, modelo2$bic, modelo3$bic, modelo4$bic, modelo5$bic, modelo_auto$bic)
)
# Desplegar resultados en el informe
print(tabla_criterios)## Modelo AIC BIC
## 1 ARIMA(4,1,0) 21565.50 21600.51
## 2 ARIMA(4,1,1) 19956.78 19998.80
## 3 ARIMA(4,1,2) 19513.76 19562.78
## 4 ARIMA(4,1,3) 19504.92 19560.94
## 5 ARIMA(4,1,4) 19560.32 19623.34
## 6 Auto ARIMA 19504.92 19560.94
Una vez estimadas las diferentes estructuras candidatas para modelar la serie de temperatura de Cali, se procede a la selección del modelo óptimo. Esta decisión se fundamenta en el principio de parsimonia de la metodología Box-Jenkins, el cual busca el equilibrio perfecto entre la bondad de ajuste (explicación de la varianza) y la simplicidad del modelo (menor número de parámetros).
Para evaluar este balance de forma cuantitativa, se analizan en paralelo el Criterio de Información de Akaike (AIC) y el Criterio de Información Bayesiano (BIC), los cuales penalizan fuertemente la inclusión innecesaria de rezagos para evitar el sobreajuste (overfitting).
Al examinar los estadísticos resumidos en la tabla comparativa, se identifican los siguientes hallazgos claves:
De acuerdo con la teoría econométrica, la minimización de estos criterios demuestra que la configuración de 4 rezagos autorregresivos (\(p=4\)), una diferencia lineal (\(d=1\)) y 3 términos de media móvil (\(q=3\)) representa la estructura más eficiente para capturar la memoria de corto plazo y la variabilidad climática de la serie sin saturar el algoritmo numérico.
Por lo tanto, el ARIMA(4,1,3) es seleccionado formalmente como el modelo definitivo. No obstante, para validar su idoneidad matemática antes de proceder con el pronóstico (forecasting), este modelo deberá someterse en la siguiente sección a una auditoría estricta de sus residuos para garantizar que se comporten como ruido blanco.
Para determinar si el modelo seleccionado ARIMA(4,1,3) es estadísticamente adecuado para realizar pronósticos, se ejecuta un diagnóstico triple sobre sus errores acompañado de la prueba formal de hipótesis de Ljung-Box. El objetivo es evaluar si los residuos cumplen con las propiedades de ruido blanco (independencia, media cero y varianza constante).
# Extraer los residuos del modelo seleccionado
residuos <- residuals(modelo4)
# 1. Gráfico de Línea de Residuos
p_res_linea <- autoplot(residuos) +
labs(title = "Residuos del Modelo en el Tiempo", y = "Error", x = "Tiempo") +
theme_minimal()
# 2. Correlograma (ACF) de Residuos
p_res_acf <- ggAcf(residuos) +
labs(title = "Función de Autocorrelación (ACF) de Residuos") +
theme_minimal()
# 3. Histograma de Distribución de Residuos
p_res_hist <- ggplot(data.frame(res = as.numeric(residuos)), aes(x = res)) +
geom_histogram(bins = 20, fill = "pink", color = "gray", alpha = 0.8) +
labs(title = "Distribución y Simetría de los Residuos", x = "Residuos", y = "Frecuencia") +
theme_minimal()
# Convertir los gráficos a formato interactivo/dinámico
ggplotly(p_res_linea)# Ejecución formal de la prueba de hipótesis de Ljung-Box
Box.test(residuos, lag = 10, type = "Ljung-Box")##
## Box-Ljung test
##
## data: residuos
## X-squared = 195.49, df = 10, p-value < 2.2e-16
La ejecución de la función de diagnóstico genera tres gráficos críticos que contradicen el supuesto ideal de ruido blanco:
Para validar de forma matemática la independencia global de los residuos, se evalúan los resultados numéricos de la prueba computada en R:
Interpretación Técnica: Al examizar la salida de la consola, el \(p\text{-valor}\) obtenido es estrictamente menor al nivel de significancia estándar (\(\alpha = 0.05\)) (aproximándose a un valor de cero). Bajo esta regla de decisión, se rechaza categóricamente la hipótesis nula (\(H_0\)).
El rechazo de la hipótesis de ruido blanco confirma formalmente que los residuos están autocorrelacionados. Desde la perspectiva de la teoría de Box-Jenkins, esto significa que el modelo ARIMA(4,1,3) es insuficiente.
Justificación del Hallazgo: Esta falla estructural ocurre porque un modelo ARIMA tradicional no posee los parámetros necesarios para absorber la fuerte estacionalidad cíclica de 24 horas detectada originalmente en la serie climatológica de Cali. Este resultado justifica técnicamente por qué en análisis avanzados de series de tiempo institucionales se hace obligatorio migrar de un modelo ARIMA simple hacia un enfoque SARIMA (Seasonal ARIMA), el cual sí incluye coeficientes estacionales capaces de limpiar por completo los residuos en el lag 24.
A partir del modelo ARIMA(4,1,3) seleccionado, se ejecuta la predicción de la temperatura para un horizonte de corto plazo correspondiente a las próximas 24 observaciones (\(h = 24\)), incorporando bandas de confianza del 80% y 95%. A pesar de las limitaciones de validación identificadas en los residuos, el análisis visual y cuantitativo del gráfico de pronóstico permite extraer las siguientes conclusiones técnicas y operativas:
# Generación de la predicción a 24 horas con bandas del 80% y 95%
pronostico_24h <- forecast(modelo4, h = 24, level = c(80, 95))
# Construcción del gráfico base en ggplot
p_pronostico <- autoplot(pronostico_24h) +
labs(
title = "Pronóstico Interactivo de Temperatura para las Próximas 24 Horas",
x = "Tiempo / Período",
y = "Temperatura (°C)"
) +
theme_minimal()
# Renderizar el gráfico de pronóstico de forma dinámica
ggplotly(p_pronostico)Comportamiento de la Estimación Puntual: La línea central azul detalla la trayectoria proyectada por el modelo. Debido a que se está trabajando con un modelo ARIMA(4,1,3) con un orden de diferenciación \(d=1\), la predicción de largo plazo no converge hacia el valor medio histórico global de la serie. En su lugar, una vez que se disipan los efectos dinámicos de los choques aleatorios de corto plazo (los términos AR y MA), la curva se estabiliza de forma suavizada en un nivel horizontal determinado por la inercia de las últimas observaciones reales.
Evidencia Visual de la Limitación Estacional: Visualmente es evidente que la estimación puntual carece de oscilaciones y se convierte en una línea plana. Esto confirma de manera práctica lo diagnosticado en los residuos: al no incorporar un componente estacional explícito (como un modelo SARIMA), el modelo es incapaz de replicar el ciclo diario (onda de día y noche) de la temperatura de Cali, limitándose a proyectar el nivel promedio final de la serie.
Análisis de las Bandas de Incertidumbre: Las áreas sombreadas (azul oscuro para el 80% de confianza y azul claro para el 95%) reflejan visualmente el incremento de la incertidumbre a medida que la predicción se aleja en el tiempo del último dato real registrado. Este ensanchamiento en forma de “abanico” es teóricamente consistente con los procesos que contienen una raíz unitaria (\(d=1\)), donde el error de pronóstico se acumula con el horizonte de tiempo.
Relevancia Operativa: En el ámbito de la ingeniería industrial, delimitar estos rangos máximos y mínimos esperados con rigor matemático permite cuantificar riesgos térmicos, optimizar la programación de sistemas de ventilación o climatización industrial, y planificar eficientemente demandas energéticas basadas en escenarios climatológicos controlados.
El desarrollo de este taller permitió aplicar la metodología Box-Jenkins para el modelado y pronóstico de la temperatura de Cali, extrayendo las siguientes conclusiones fundamentales desde una perspectiva estadística y de ingeniería:
Insuficiencia de los Modelos ARIMA Tradicionales para Variables Climatológicas: A pesar de que el modelo ARIMA(4,1,3) fue seleccionado de manera rigurosa por minimizar los criterios de información (AIC y BIC) bajo el principio de parsimonia, el diagnóstico de residuos demostró que la estructura clásica es insuficiente. El modelo logró absorber la memoria de corto plazo, pero fue incapaz de capturar la fuerte estacionalidad diaria (ciclo de 24 horas) intrínseca al clima local.
Falla en el Supuesto de Ruido Blanco: La prueba formal de Ljung-Box arrojó un \(p\text{-valor}\) estrictamente menor a 0.05, lo que llevó al rechazo categórico de la hipótesis nula de independencia. Visualmente, el ACF de los residuos confirmó este hallazgo al presentar picos significativos que sobresalen de las bandas de confianza. Esto implica que los errores aún contienen información estructurada no explicada, por lo que el modelo ARIMA(4,1,3) no es estadísticamente óptimo para la inferencia definitiva.
Impacto de las Limitaciones en el Pronóstico: La consecuencia directa de omitir el componente estacional se evidenció en la generación de pronósticos a 24 horas. La estimación puntual se tradujo en una línea recta horizontal estancada en la inercia del nivel local de las últimas observaciones. Al carecer de oscilaciones cíclicas (picos de calor en el día y descensos en la noche), el modelo pierde precisión y utilidad para proyecciones detalladas hora a hora.
Calidad de los Datos y Robustez del Historial:
La auditoría inicial identificó 634 datos faltantes y un vacío de
información considerable en el primer trimestre de 2018. Aunque la
aplicación de na.omit() permitió viabilizar los algoritmos
de estimación en R, estos “gaps” temporales representan una
vulnerabilidad en la continuidad de la serie meteorológica que puede
sesgar la varianza del modelo.
Recomendación de Ingeniería (Migración a Modelos SARIMA): Para efectos operativos reales en ingeniería industrial —tales como la planificación de la demanda energética en el Valle del Cauca, la gestión de riesgos térmicos o la automatización de sistemas de climatización industrial—, se recomienda descartar el enfoque ARIMA simple. Es imperativo migrar hacia un modelo SARIMA (Seasonal ARIMA) que incorpore explícitamente coeficientes estacionales de orden \(S=24\), garantizando así la remoción de la autocorrelación en los residuos y un pronóstico dinámico que replique con fidelidad los ciclos de la naturaleza.