Este proyecto implementa un sistema completo de forecasting para la demanda eléctrica utilizando modelos de machine learning, enfocado en la predicción del día siguiente.
- Carga automática de múltiples archivos Excel desde la carpeta
demanda-energia-sin/ - Análisis exploratorio completo con visualizaciones interactivas y estadísticas descriptivas
- Predicción del día siguiente con 24 horas de anticipación
- Modelo baseline usando valores equivalentes de fechas anteriores
- Modelo autoregresivo recursivo con LightGBM optimizado
- Variables exógenas basadas en calendario, luz solar, festivos y temperatura
- Optimización de hiperparámetros con búsqueda bayesiana
- Selección automática de predictores con RFECV
- Visualizaciones mejoradas con gráficos de distribución, box plots por año y zoom temporal
- Exportación de resultados en formato CSV para uso posterior
Este proyecto incluye los siguientes archivos:
energy_demand_forecasting.py: Script original que utiliza datos de Victoria, Australia (para demostración)energy_demand_forecasting_xlsx.py: Script principal para predicción del día siguiente con archivos Excelforecasting_demanda_energia.ipynb: NUEVO - Notebook de forecasting recursivo multi-step con ForecasterRecursiveforecasting_colab.ipynb: Notebook completo para Google Colab (recomendado)demanda-energia-sin/: Carpeta con archivos Excel de demanda energética por año (2000-2025)requirements.txt: Dependencias del proyecto
- Clona el repositorio:
git clone <url-del-repositorio>
cd forecasting- Crea un entorno virtual:
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate- Instala las dependencias:
pip install -r requirements.txt- Los archivos Excel de demanda energética ya están incluidos en la carpeta
demanda-energia-sin/
Para forecasting recursivo multi-step (NUEVO - Recomendado):
jupyter notebook forecasting_demanda_energia.ipynbPara predicción del día siguiente (script):
python energy_demand_forecasting_xlsx.pyPara usar con datos de demostración (Victoria, Australia):
python energy_demand_forecasting.pyNotebook de Forecasting Recursivo (forecasting_demanda_energia.ipynb):
- Análisis exploratorio completo con gráficos interactivos (Plotly + Matplotlib)
- Partición de datos train/validation/test (70/15/15)
- Modelo recursivo multi-step con ForecasterRecursive y LightGBM
- Gráficos de dispersión para evaluar real vs predicho
- Series temporales con predicciones superpuestas
- Predicción del día siguiente con 24 horas de anticipación
- Archivo CSV con las predicciones (
prediccion_demanda_YYYYMMDD.csv) - Métricas de rendimiento (MAE, RMSE, R²)
Scripts Python:
- Análisis exploratorio completo con gráficos interactivos
- Predicción horaria para las 24 horas del día siguiente
- Archivo CSV con las predicciones (
prediccion_demanda_YYYYMMDD.csv) - Métricas de rendimiento del modelo
- Descarga el archivo
forecasting_colab.ipynbdesde este repositorio - Sube el notebook a Google Colab: Ve a colab.research.google.com y selecciona "Subir notebook"
- Ejecuta las celdas en orden - el notebook está completamente autocontenido e incluye:
- Instalación automática de dependencias
- Interfaz para subir tu archivo Excel
- Todo el código necesario integrado
- Visualizaciones interactivas
-
Abre Google Colab: Ve a colab.research.google.com
-
Crea un nuevo notebook y ejecuta las siguientes celdas:
# Instalar dependencias
!pip install skforecast lightgbm feature-engine astral shap plotly
# Clonar el repositorio
!git clone https://github.com/tu-usuario/forecasting.git
%cd forecasting
# Subir tu archivo Excel
from google.colab import files
uploaded = files.upload()
# Renombrar el archivo si es necesario
import os
if 'Demanda_Energia_SIN_2023.xlsx' not in os.listdir():
for filename in uploaded.keys():
if filename.endswith('.xlsx'):
os.rename(filename, 'Demanda_Energia_SIN_2023.xlsx')
break
# Ejecutar el script para Excel
!python energy_demand_forecasting_xlsx.py-
Sube tu archivo Excel a Google Drive con el nombre
Demanda_Energia_SIN_2023.xlsx -
Monta Google Drive en Colab:
from google.colab import drive
drive.mount('/content/drive')
# Copia el archivo al directorio de trabajo
!cp "/content/drive/MyDrive/Demanda_Energia_SIN_2023.xlsx" "/content/"
# Clonar el repositorio
!git clone https://github.com/tu-usuario/forecasting.git
%cd forecasting
# Ejecutar el script
!python energy_demand_forecasting_xlsx.pyEl proyecto incluye datos históricos de demanda energética del Sistema Interconectado Nacional (SIN) de Colombia:
- Período: 2000-2025 (26 años de datos)
- Frecuencia: Datos diarios convertidos automáticamente a horarios
- Archivos: 25 archivos Excel organizados por año
- Formato: Cada archivo contiene columnas de fecha y demanda energética
Los archivos Excel siguen el formato estándar:
- Columna de fecha: Detectada automáticamente por palabras clave
- Columna de demanda: Detectada automáticamente por palabras clave
- Header: Los datos comienzan en la fila 4 (header en fila 3)
- Conversión automática: Datos diarios se convierten a horarios simulando patrones típicos
| Año | Archivo | Observaciones |
|---|---|---|
| 2000 | Demanda_Energia_SIN_2000.xlsx | ~119 días |
| 2001 | Demanda_Energia_SIN_2001.xlsx | ~108 días |
| ... | ... | ... |
| 2023 | Demanda_Energia_SIN_2023.xlsx | ~142 días |
| 2024 | Demanda_Energia_SIN_2024.xlsx | ~115 días |
| 2025 | Demanda_Energia_SIN_2025.xlsx | ~93 días |
forecasting/
├── energy_demand_forecasting.py # Script original (datos Victoria)
├── energy_demand_forecasting_xlsx.py # Script principal para predicción
├── forecasting_demanda_energia.ipynb # NUEVO: Notebook forecasting recursivo
├── forecasting_colab.ipynb # Notebook completo para Colab
├── requirements.txt # Dependencias
├── .gitignore # Archivos ignorados por git
├── demanda-energia-sin/ # Carpeta con datos históricos
│ ├── Demanda_Energia_SIN_2000.xlsx
│ ├── Demanda_Energia_SIN_2001.xlsx
│ ├── ...
│ ├── Demanda_Energia_SIN_2023.xlsx
│ ├── Demanda_Energia_SIN_2024.xlsx
│ └── Demanda_Energia_SIN_2025.xlsx
├── prediccion_demanda_YYYYMMDD.csv # Archivo de salida con predicciones
└── README.md # Este archivo
Método: Forecasting Recursivo Multi-Step con ForecasterRecursive
- Carga automática: Lectura de múltiples archivos Excel desde
demanda-energia-sin/ - Análisis exploratorio: Estadísticas descriptivas, visualizaciones interactivas con Plotly
- Procesamiento: Conversión de datos diarios a horarios con patrones simulados
- Partición temporal: 70% entrenamiento, 15% validación, 15% prueba
- Modelo recursivo: ForecasterRecursive con LightGBM
- Lags: 24 horas (último día completo)
- Features de ventana: Media y desviación estándar de 24h y 7 días
- Evaluación: Métricas MAE, RMSE, R² en validación y prueba
- Visualizaciones: Gráficos de dispersión (real vs predicho) y series temporales
- Predicción del día siguiente: 24 horas de anticipación con visualizaciones
- Exportación: Resultados guardados en CSV para uso posterior
- Carga automática: Lectura de múltiples archivos Excel desde
demanda-energia-sin/ - Análisis exploratorio: Estadísticas descriptivas, visualizaciones y detección de patrones
- Procesamiento: Conversión de datos diarios a horarios con patrones simulados
- Partición temporal: 70% entrenamiento, 15% validación, 15% prueba
- Modelo baseline: Valores del día anterior como referencia
- Variables exógenas: Calendario, luz solar, festivos y temperatura
- Optimización: Búsqueda bayesiana de hiperparámetros de LightGBM
- Selección de predictores: RFECV para identificar variables más relevantes
- Predicción del día siguiente: 24 horas de anticipación con visualizaciones
- Exportación: Resultados guardados en CSV para uso posterior
El forecasting recursivo multi-step es un método que utiliza las propias predicciones del modelo como valores de entrada para predecir el siguiente valor. Por ejemplo, para predecir las 5 horas siguientes:
- El modelo predice t+1 usando datos históricos
- Usa esa predicción para predecir t+2
- Usa t+2 para predecir t+3, y así sucesivamente
- Captura dependencias temporales complejas: El modelo aprende patrones de largo plazo
- Automatización completa: La clase
ForecasterRecursivemaneja el proceso recursivo - Eficiencia computacional: Un solo modelo para múltiples pasos
- Ideal para series temporales: Especialmente efectivo para demanda energética
# Configuración del modelo recursivo
forecaster = ForecasterRecursive(
regressor=LGBMRegressor(n_estimators=100, max_depth=6),
lags=24, # Usar las últimas 24 horas
window_features=RollingFeatures(
stats=["mean", "std"],
window_sizes=[24, 24*7] # 24 horas y 7 días
)
)El script crea automáticamente las siguientes variables:
- Calendario: mes, semana, día de la semana, hora
- Luz solar: hora de salida/puesta del sol, horas de luz, período diurno (adaptado a Colombia)
- Festivos: festivos actuales, anteriores y siguientes
- Temperatura: promedios, máximos y mínimos (1 día y 7 días) - simulada si no está disponible
- Interacciones: combinaciones polinómicas entre variables
El notebook genera:
- Métricas de evaluación: MAE, RMSE, R² para validación y prueba
- Gráficos de dispersión: Comparación visual entre valores reales y predichos
- Series temporales: Visualización de predicciones superpuestas en datos históricos
- Predicción del día siguiente: 24 horas con estadísticas detalladas (total, promedio, máximo, mínimo)
- Archivos de salida:
prediccion_demanda_YYYYMMDD.csv- Predicciones horariasmetricas_modelo.csv- Métricas de rendimiento
El pipeline genera métricas de error (MAE) para cada modelo implementado, permitiendo comparar el rendimiento de diferentes enfoques.
- Verifica que el archivo esté en el directorio correcto
- Asegúrate de que el nombre sea exactamente
Demanda_Energia_SIN_2023.xlsx
- Verifica que los nombres de las columnas contengan las palabras clave mencionadas
- Revisa que el archivo Excel tenga al menos una columna de fecha y una de demanda
- Asegúrate de que el header esté en la fila 3 (datos desde fila 4)
- Usa
Runtime > Restart runtimesi el notebook se queda sin memoria - Considera usar un subconjunto de datos más pequeño para pruebas
- El script automáticamente convierte datos diarios a horarios simulando patrones típicos
- Si tienes datos horarios reales, asegúrate de que la frecuencia sea correcta
- Amat Rodrigo, J., & Escobar Ortiz, J. (2025). Predicción (forecasting) de la demanda energética con machine learning. https://www.cienciadedatos.net/documentos/py29-forecasting-demanda-energia-electrica-python.html
- skforecast: https://skforecast.org/
Disponible bajo licencia CC BY-NC-SA 4.0.