Centro de decisión estratégica del Ministerio

Ministerio de Minas y Energía

MIRHE — Monitor Integral de Riesgo Hídrico-Energético

Centro de decisión estratégica del Ministerio para lectura integrada de agua, precio, gas, térmicas y riesgo nacional.

Riesgo Integrado Nacional 70 Índice integrado 0–100 (síntesis)
Riesgo alto

Tendencia: Descendente

Explicación: La celda se clasifica en rojo por combinación de presión de gas, precio alto, estrés hídrico, aunque el embalse proyectado no alcanza umbral hídrico rojo. Alerta…

  • precio: presión naranja
  • gas: variación -11.5%
  • clima: Señal seca activa o altamente probable.
Actualización: 2026-07-29 11:09:26 SIMEM validados: 10/11 NOAA: El Niño Advisory · 9 July 2026 IDEAM ENOS: 2026-07-24T12:00:00Z

Modelo matemático entrenado (precio de bolsa)

Ridge + Gradient Boosting · target log(precio de bolsa) · 22 features · 1268 días · validación temporal 80/20 sin fugas. Métrica principal: error medio (MAE), no el R².

Error del modelo (MAE)36 COP/kWh
métrica interpretable

error absoluto medio fuera de muestra

Línea base "precio = ayer"37 COP/kWh
el modelo mejora poco

habilidad neta del modelo: solo 1,1 COP/kWh menos

R² (con su contexto)0,94
inflado por persistencia

la línea base trivial ya da R² 0,94: el R² alto NO es mérito del modelo

Datos de entrenamiento1014 / 254

train / test cronológico

Por qué NO reportamos el R² como titular: el precio de bolsa es tan persistente que "mañana = hoy" ya explica el 94% de la varianza (R² 0,94). Un R² de 0,94 suena impresionante pero viene casi todo de esa autocorrelación, no del modelo. Por honestidad usamos el error medio (MAE): el modelo acierta a ±36 COP/kWh, apenas mejor que no hacer nada. Su valor real es identificar QUÉ fundamentales mueven el precio, no predecirlo.

Importancia de variables (permutación, modelo no lineal)
Variableimportancia
precio_lag1+1.371
demanda_gwh+0.009
precio_lag7+0.009
aportes_pct+0.006
indisponibilidad_pct+0.006
margen_gen_dem_gwh+0.002
precio_lag14+0.002
precio_mm7+0.001

Lectura honesta: el precio diario es muy persistente, por eso el rezago de 1 día domina; los fundamentales (aportes, El Niño, gas) aportan señal incremental y explican el régimen/nivel sostenido.

Validación temporal sin fugas. Mejora v2: target en log (el precio es muy asimétrico) + rezagos cortos/volatilidad/estacionalidad. El precio diario es muy persistente (línea base 'hoy=ayer' R²≈0.89); el modelo la supera y, sobre todo, aporta los fundamentales que explican el régimen/nivel. El apagón no es entrenable (1 caso histórico).

Intento on-objetivo: estrés operativo del SIN — límite declarado (no predictivo)

target: estres_operativo_gwh (GWh/día) · 1282 días · 1025/257 train/test cronológico.

VeredictoNo predecible

con fundamentales hidro/demanda/gas

Evidenciano supera la media

el modelo no le gana a "usar el promedio histórico" (eso es un R² < 0)

Mantenimientos probadossí, no mejora

indisponibilidad XM incluida

Causaestructural

transmisión y despacho, no series diarias

Por qué mostramos esto (y no un R² positivo maquillado): intentamos predecir el estrés operativo y el modelo no logró superar ni al promedio histórico. Ese fracaso —técnicamente un R² negativo (-1,72)— no es un error de cálculo ni un modelo roto: es la evidencia de que el estrés por restricciones lo determinan la red de transmisión y el despacho de seguridad, no las variables energéticas diarias. Por eso el riesgo se mide con el índice integrado y la suficiencia física (ENFICC), no con esta predicción. Reportar el fracaso es lo que hace creíble lo demás.

Estrés operativo observado vs. predicho
Observado (negro) vs. predicho por el modelo (rojo punteado) en el periodo de prueba fuera de muestra. El modelo se aplana y no sigue los picos de estrés ⇒ no es predecible con estas variables.

HALLAZGO: el estrés operativo por restricciones NO es predecible con los fundamentales hidrológicos/demanda, NI siquiera tras incorporar el dato de mantenimientos (indisponibilidad = capacidad efectiva − disponibilidad real, fuente XM): el R² fuera de muestra siguió siendo negativo (boosting ≈ -1.6) y la indisponibilidad entró con peso bajo y signo contrario al esperado. Esto DESCARTA que la causa sea falta de dato de mantenimientos: el estrés operativo lo determinan la topología de transmisión y las decisiones de despacho de seguridad, no observables en series energéticas diarias. Se reporta como límite estructural; por eso el riesgo se mide con el índice integrado, no con una predicción puntual del estrés.

Referencia empírica de precio por régimen hidrológico

Cuánto ha costado la energía cuando los ríos traen lo de hoy · régimen actual: seco (aportes 30d 80,8%).

Régimen seco (ACTUAL) 618 COP/kWh

p75: 786 · p90: 843 · 73 días

Régimen normal 270 COP/kWh

p75: 322 · p90: 397 · 138 días

Régimen humedo 189 COP/kWh

p75: 250 · p90: 317 · 146 días

Es estadística descriptiva del pasado reciente bajo regímenes similares; NO es pronóstico de precio ni señal oficial del mercado. La proyección heurística por escenarios del módulo original permanece conservada y marcada con su fecha.

Modelo de proyección de precio kWh

La proyección de precio kWh corresponde a un escenario analítico interno construido a partir de histórico de precio de bolsa, embalses, señales climáticas, generación térmica, gas y supuestos de operación. No constituye predicción oficial del mercado ni señal regulatoria.

Precio ponderado definitivo854,0 COP/kWhúltimo definitivo SIMEM (PPBO): 2026-07-24 · esta serie rezaga ~5 días en la fuente
Precio horario reciente664,3 COP/kWhdato más fresco (precio de bolsa horario SIMEM)
Promedio histórico474,1 COP/kWh2023-01-01 a 2026-07-24
Percentil histórico actual87,9posición relativa actual
Nivel de confianzaMedioempirico_diario_rodante

Precio proyectado por horizonte

Escenario Base · escenario analítico interno, no predicción oficial del mercado

30 días · 2026-08-28796,1 COP/kWhrégimen normal
60 días · 2026-09-27738,1 COP/kWhrégimen normal
90 días · 2026-10-27680,2 COP/kWhrégimen normal
120 días · 2026-11-26682,0 COP/kWhrégimen seco
150 días · 2026-12-26751,0 COP/kWhrégimen seco
180 días · 2027-01-25730,3 COP/kWhrégimen seco

Precio proyectado por escenario

Referencia 180 días · escenario analítico interno, no predicción oficial del mercado

Base (régimen esperado)730,3 COP/kWhMedio
Ahorro de agua617,8 COP/kWhMedio
Mayor respaldo térmico786,2 COP/kWhMedio
Restricción de gas842,7 COP/kWhMedio
Niño severo969,1 COP/kWhMedio

Variables que más explican el precio

El ranking refleja la capa estadística disponible y, cuando no es robusta, la priorización heurística documentada.

  • precio_lag1: peso relativo 0,38
  • indispon_mm30: peso relativo 0,25
  • aportes_pct: peso relativo 0,24
  • mes_sin: peso relativo 0,20
  • seca: peso relativo 0,17

Validación actual: error promedio 1.983,9 · MAE 1.983,9 · MAPE 244,7% · R² -1.741,05.

Precio histórico vs embalse agregado

Índice 100: compara dirección del precio y del embalse agregado oficial.

464,4280,796,9 05-0105-1105-20

Precio histórico vs generación térmica

Índice 100: presión de precio frente a térmica total disponible en la capa curada.

100,084,669,2 05-1405-1705-20

Precio histórico vs térmica a gas

Índice 100: compara precio observado contra la generación térmica a gas sin mezclar Mixto como Gas.

105,075,045,0 05-1405-1705-20

Precio histórico vs señal climática

Índice 100: comparación del precio observado con la severidad climática analítica NOAA/IDEAM.

276,5159,342,2 03-2204-2105-20

Precio proyectado por horizonte

Base vs Niño severo para el modelo analítico interno de precio kWh.

2.771,31.986,81.202,3 30d120d180d

Distribución histórica del precio y posición actual

Curva histórica ordenada vs línea del precio actual (percentil actual: 87,3).

2.498,81.299,6100,4 P1P619P1236

La proyección de precio kWh corresponde a un escenario analítico interno construido a partir de histórico de precio de bolsa, embalses, señales climáticas, generación térmica, gas y supuestos de operación. No constituye predicción oficial del mercado ni señal regulatoria.

Validación fuente pydataxm

Capa paralela conservadora. No reemplaza las fuentes actuales; reporta diferencias antes de integrar al dashboard principal.

Estado global: ok Actualizado: 2026-07-21T19:56:14.680702+00:00

Precio

Estado de extracción: ok

Registros: 120 Rango: 2026-07-14 → 2026-07-18 Caché: no Fallback: no

Variables consultadas: XM PrecBolsNaci/Sistema

  • Cruce horario 2026-07-18: media fuente actual=791.507 COP/kWh vs pydataxm=791.507 COP/kWh; horas con diferencia>0.001: 0.

Recomendación: Consistente en esta ventana; mantener pydataxm como validación paralela y evaluar integración en una fase posterior.

Embalses / hidrología

Estado de extracción: ok

Registros: 161 Rango: 2026-07-14 → 2026-07-20 Caché: no Fallback: no

Variables consultadas: XM VoluUtilDiarMasa/Embalse, XM CapaUtilDiarMasa/Embalse

  • Cruce embalses 2026-07-18: 23 embalses comparables; desviación promedio=0.0003 pp; máxima=0.0005 pp.

Recomendación: Mantener pydataxm solo como validación paralela y revisar diferencias antes de integrar cualquier reemplazo.

Demanda

Estado de extracción: ok

Registros: 120 Rango: 2026-07-14 → 2026-07-18 Caché: no Fallback: no

Variables consultadas: XM DemaReal/Sistema

  • Sin fuente actual equivalente integrada en el dashboard para una comparación directa de demanda.

Recomendación: Conservar como capa exploratoria paralela: todavía no existe una fuente actual equivalente para comparación directa.

Generación

Estado de extracción: ok

Registros: 120 Rango: 2026-07-14 → 2026-07-18 Caché: no Fallback: no

Variables consultadas: XM Gene/Sistema

  • La generación total del sistema no tiene una fuente actual equivalente ya integrada para comparación directa en esta fase.

Recomendación: Conservar como capa exploratoria paralela: todavía no existe una fuente actual equivalente para comparación directa.

Térmicas

Estado de extracción: ok

Registros: 366 Rango: 2026-07-14 → 2026-07-18 Caché: no Fallback: no

Variables consultadas: XM ListadoRecursos/Sistema, XM Gene/Recurso, XM CapEfecNeta/Recurso, XM DispoCome/Recurso, XM ConsCombustibleMBTU/Recurso

  • Último corte térmico comparable: actual=65011399.77 kWh vs pydataxm=65011399.77 kWh; delta=-0.00 kWh.
  • Gas: actual=35538237.73 kWh vs pydataxm=35538237.73 kWh; delta=0.00 kWh.
  • Carbón: actual=27409339.95 kWh vs pydataxm=27409339.95 kWh; delta=0.00 kWh.
  • Mixto: actual=0.00 kWh vs pydataxm=0.00 kWh; delta=0.00 kWh.
  • Líquidos: actual=1554489.74 kWh vs pydataxm=1554489.74 kWh; delta=0.00 kWh.
  • Otro: actual=509332.35 kWh vs pydataxm=509332.35 kWh; delta=0.00 kWh.

Recomendación: Mantener pydataxm solo como validación paralela y revisar diferencias antes de integrar cualquier reemplazo.

Recursos

Estado de extracción: ok

Registros: 2247 Rango: 2026-07-21 → 2026-07-21 Caché: no Fallback: no

Variables consultadas: XM ListadoRecursos/Sistema

  • Catálogo pydataxm: 2247 recursos totales, 79 térmicos.
  • Fuente actual térmica: 79 plantas identificadas; geográfico total: 1025 recursos curados.
  • Las coberturas no son 1:1: pydataxm valida catálogo operativo XM, mientras la capa geográfica actual mezcla embalses, gas territorial y recursos curados.

Recomendación: Conservar como capa exploratoria paralela: todavía no existe una fuente actual equivalente para comparación directa.

SIMEM

Estado de extracción: ok

Registros: 1901 Rango: 2026-07-14 → 2026-07-20 Caché: no Fallback: no

Variables consultadas: SIMEM 96D56E/precio_bolsa_ponderado, SIMEM EC6945/precio_bolsa_horario, SIMEM F138B6/aportes_hidricos_masa, SIMEM 8D3CCD/proyeccion_embalse_agregado_corto_plazo, SIMEM A0CF2A/listado_embalses_sin

  • 96D56E/precio_bolsa_ponderado: actual=54 registros vs pydataxm=8 registros; delta=-46.
  • EC6945/precio_bolsa_horario: actual=2592 registros vs pydataxm=432 registros; delta=-2160.
  • F138B6/aportes_hidricos_masa: actual=860 registros vs pydataxm=301 registros; delta=-559.
  • 8D3CCD/proyeccion_embalse_agregado_corto_plazo: actual=3024 registros vs pydataxm=936 registros; delta=-2088.
  • A0CF2A/listado_embalses_sin: actual=640 registros vs pydataxm=224 registros; delta=-416.

Recomendación: Mantener pydataxm solo como validación paralela y revisar diferencias antes de integrar cualquier reemplazo.