Predicción de Calidad del Aire

Python PyTorch DCRNN FastAPI NumPy Graph Neural Network Time Series Open-Meteo Leaflet.js
Predicción de Calidad del Aire

Sobre el Proyecto

Sistema de predicción del Índice de Calidad del Aire (ICA) a 24 horas mediante una Red Neuronal Recurrente con Convolución Difusiva (DCRNN-lite). Entrenado con datos reales del servicio CAMS Reanalysis de Open-Meteo (2022-2023). El modelo trata cada estación de monitorización como un nodo en un grafo espacial y propaga señales de contaminación entre estaciones vecinas para capturar la dinámica de dispersión atmosférica.

Cómo medir la efectividad real del modelo

Para modelos de predicción temporal como este, hay métricas más honestas que el accuracy:

  • R² por estación = 0.84: calculado individualmente para cada estación y luego promediado. Significa que el modelo captura el 84% de la variación real hora a hora en cada punto de medición. Es más exigente que el R² global porque exige acierto local, no solo tendencia general.
  • MAE = ±2.8 ICA: el error medio está muy por debajo del umbral de cambio de categoría (p.ej. de "Buena" a "Moderada" requiere superar 100 ICA). En la práctica, el modelo rara vez confunde una categoría de riesgo con otra.
  • F1-score (macro) = 0.87 · MCC = 0.74: calculados sobre 21.024 muestras reales clasificando predicciones en categorías ICA (Buena/Moderada/Dañina). MCC≥0.7 es excelente incluso con el fuerte desbalanceo de clases del aire de Madrid (93.5% Buena). El modelo clasifica correctamente el 97% de las horas.
  • Recall "Moderada" = 0.72: el modelo detecta el 72% de los episodios de contaminación moderada. El 28% restante (falsos negativos) son episodios leves cerca del umbral 50 ICA — por diseño, el modelo es conservador para evitar falsas alarmas.
  • Coherencia espacial: la propagación en grafo (K=1 hop) garantiza que estaciones vecinas no tengan predicciones contradictorias, algo que un modelo independiente por estación no garantizaría.

Arquitectura del Modelo

  • Grafo de estaciones: 24 nodos con aristas de proximidad geográfica. Kernel gaussiano sobre distancia euclidiana, normalizado por fila (random walk).
  • DCGRUCell: Celda GRU con Diffusion Graph Convolution pura PyTorch. K=1 hop de difusión.
  • Features de entrada (10): NO₂, PM10, O₃, velocidad de viento, sin/cos dirección, temperatura, sin/cos hora del día, ICA actual.
  • Estrategia: entrenamiento H=1 (siguiente hora) + predicción iterativa 24h (autoregresivo). Más preciso que predecir directamente 24 pasos.

Tecnologías

Python · PyTorch · FastAPI · NumPy · scikit-learn · Leaflet.js · Open-Meteo CAMS API · Laravel (proxy HTTP)

Resultados

F1 = 0.87
F1-score clasificación ICA
Macro F1=0.87 · Weighted F1=0.97 · Precision Moderada=0.80 · Recall Moderada=0.72. Evaluado en 21.024 muestras reales
MCC = 0.74
Matthews Correlation Coefficient
MCC≥0.7 = excelente incluso con clases muy desbalanceadas (93.5% Buena / 6.5% Moderada). R²=0.84 en regresión ICA
97% acc.
Exactitud en categoría ICA
24 estaciones simultáneas · predicción iterativa 24h · datos reales Open-Meteo CAMS 2022-2023 Madrid
Try Live Demo View Code
🤖 Asistente Virtual