/ Trabajo / (03)

Naturgy — EDA y predicción

Cuatro años de electricidad horaria española (2015–2018): limpios, ingenierizados y predichos 6 horas antes con XGBoost contra una NN de Keras, cara a cara.

Abrir el notebook completo — /notebooks/naturgy-eda
Año
2024
Rol
EDA + modelado (notebook); arquitectura GCP por el equipo del máster
Categoría
Ciencia de datos / predicción de series temporales
Estado
Caso de estudio

Un encargo ficticio de Naturgy planteado como proyecto final de máster. Desde parquets de capa silver ejecuté el EDA completo, feature engineering (poda por VIF, codificación cíclica sin/cos, construcción de lags) y un benchmark dividido cronológicamente entre XGBoost y una red neuronal de Keras — prediciendo carga, precio y generación renovable seis horas adelante.

(Destacados)

Qué hace que funcione.

  1. 01

    Eliminadas todas las columnas de predicción TSO day-ahead para evitar fugas de target antes del EDA.

  2. 02

    Poda de multicolinealidad por VIF — con excepciones deliberadas para variables de generación renovable correlacionadas.

  3. 03

    División train/val/test cronológica con el último mes de 2018 reservado por completo — sin shuffle, sin fugas.

(Caso de estudio) 2024 · EDA + modelado (notebook); arquitectura GCP por el equipo del máster

— Contexto

Un proyecto final de máster planteado como un encargo ficticio de Naturgy en 2019. El equipo global diseñó el pipeline de GCP (Cloud Storage → Dataproc/Spark → BigQuery → Vertex AI / Power BI). Mi parte fue el notebook analítico: tomar los parquets de capa silver y convertirlos en una historia de predicción defendible.

— El problema

Cuatro años de datos horarios de electricidad española con más de 30 fuentes de generación, variables meteorológicas y un conjunto tentador de predicciones TSO 'day ahead' que habrían filtrado la respuesta. El trabajo: predecir carga, precio y generación renovable seis horas en el futuro, sin trampas.

(Proceso)

El proceso, paso a paso.

  1. 01 Research

    Elimina la fuga antes que nada.

    El dataset incluye predicciones TSO day-ahead: usarlas es fuga de target. Eliminadas primero 'price day ahead', 'forecast wind onshore day ahead', 'forecast solar day ahead' y 'total load forecast'. Cada métrica posterior es honesta gracias a esta única decisión.

  2. 02 Research

    EDA — distribuciones, outliers, correlaciones sobre un dataset real.

    Distribuciones univariantes en cada columna numérica; revisión de outliers con box-plot (se mantuvieron los extremos — las horas de pico de demanda llevan señal); matriz de correlación completa más una matriz focalizada solo en targets sobre carga, precio y total_renewable_generation.

  3. 03 Build

    Feature engineering con VIF + cíclico + lags.

    Capados los outliers extremos en una lista reducida de columnas. Transformadas las variables sesgadas hacia la simetría (mediana ≈ media). Poda por VIF (variance inflation factor) — pero se mantuvieron algunas columnas renovables correlacionadas a propósito porque portan señal física distinta. Codificada la `hora` como sin/cos para que el modelo vea 23h → 0h como adyacentes. Añadidos features de lag.

  4. 04 Build

    Pipeline de preprocesado reutilizable.

    Toda la transformación envuelta en `preprocess_data_pipeline(energy_path, weather_path)` — una llamada de parquets en bruto a frame listo para el modelo. El mismo camino se ejecuta durante entrenamiento, validación y el test reservado, así que no hay riesgo de deriva sutil entre pasos.

  5. 05 Model

    XGBoost vs NN de Keras — holdout cronológico, sin shuffle.

    División en `cutoff = 2018-12-10`: todo lo anterior va a train + validation; diciembre de 2018 se reserva por completo para el test final. Construidos tres targets H+6 (renovable, carga, precio). Entrenado XGBoost dentro de un Pipeline de sklearn; entrenada una MLP de Keras con el mismo preprocesador. Ambos guardados con joblib para reproducibilidad total.

  6. 06 Ship

    Compara en validación, luego en el mes final no visto.

    Gráficas actual-vs-predicho lado a lado para ambos modelos en validación, y de nuevo en el holdout de diciembre 2018. El notebook cierra con un veredicto escrito: qué modelo gana en qué target, y en qué se equivoca sistemáticamente cada uno.

— Resultado

Cifras, sin adornos.

  • H+6 Horizonte de predicción — Multi-target conjunto: carga, precio, renovables
  • 2018-12 Mes de test reservado — Cronológico — sin shuffle, sin fugas
  • VIF Poda de multicolinealidad — Con excepciones deliberadas en renovables
  • XGB ↔ NN Benchmark cara a cara — Mismo pipeline, reproducible con joblib

Elimina la fuga primero; todo lo que midas después será honesto.

— Naturgy EDA — principio de trabajo