Quiero predecir la carga eléctrica interdiaria. Mis datos son las cargas eléctricas de 11 meses, muestreadas en intervalos de 30 minutos. También tengo los datos específicos del tiempo de una estación meteorológica (temperatura, humedad relativa, dirección del viento, velocidad del viento, luz solar). A partir de estos datos, quiero predecir la carga eléctrica hasta el final del día.
Puedo ejecutar mi algoritmo hasta las 10:00 del día en curso y después debería dar la predicción de cargas en intervalos de 30 minutos. Así, debería decir la carga a las 10:30, 11:00, 11:30 y así sucesivamente hasta las 24:00.
Mi primer intento fue crear un modelo lineal en R.
BP.TS <- ts(Buying.power, frequency = 48)
a <- data.frame(
Time, BP.TS, Weekday, Pressure, Temperature, RelHumidity, AvgWindSpeed, AvgWindDirection, MaxWindSpeed, MaxWindDirection, SunLightTime,
m, Buying.2dayago, AfterHolidayAndBPYesterday8, MovingAvgLast7DaysMidnightTemp
)
a <- a[(6*48+1):nrow(a),]
start = 9716
steps.ahead = 21
par(mfrow=c(5,2))
for (i in 1:10) {
train <- a[1:(start+(i-1)*48),]
test <- a[((i-1)*48+start+1):((i-1)*48+start+steps.ahead),]
summary(reg <- lm(log(BP.TS)~., data=train, na.action=NULL))
pred <- exp(predict(reg, test))
plot(test$BP.TS, type="o")
lines(pred, col=2)
cat("MAE", mean(abs(test$BP.TS - pred)), "\n")
}
Esto no tiene mucho éxito. Ahora intento modelar los datos con ARIMA. He utilizado auto.arima() de la paquete de previsiones . Estos son los resultados que obtuve:
> auto.arima(BP.TS)
Series: BP.TS
ARIMA(2,0,1)(1,1,2)[48]
Call: auto.arima(x = BP.TS)
Coefficients:
ar1 ar2 ma1 sar1 sma1 sma2
1.1816 -0.2627 -0.554 0.4381 -1.2415 0.3051
s.e. 0.0356 0.0286 0.033 0.0952 0.0982 0.0863
sigma^2 estimated as 256118: log likelihood = -118939.7
AIC = 237893.5 AICc = 237893.5 BIC = 237947
Ahora si intento algo como:
reg = arima(train$BP.TS, order=c(2,0,1), xreg=cbind(
train$Time,
train$Weekday,
train$Pressure,
train$Temperature,
train$RelHumidity,
train$AvgWindSpeed,
train$AvgWindDirection,
train$MaxWindSpeed,
train$MaxWindDirection,
train$SunLightTime,
train$Buying.2dayago,
train$MovingAvgLastNDaysLoad,
train$X1, train$X2, train$X3, train$X4, train$X5, train$X6, train$X7, train$X8, train$X9,
train$X11, train$X12, train$X13, train$X14, train$X15, train$X16, train$X17, train$X18,
train$MovingAvgLast7DaysMidnightTemp
))
p <- predict(reg, n.ahead=21, newxreg=cbind(
test$Time,
test$Weekday,
test$Pressure,
test$Temperature,
test$RelHumidity,
test$AvgWindSpeed,
test$AvgWindDirection,
test$MaxWindSpeed,
test$MaxWindDirection,
test$SunLightTime,
test$Buying.2dayago,
test$MovingAvgLastNDaysLoad,
test$X1, test$X2, test$X3, test$X4, test$X5, test$X6, test$X7, test$X8, test$X9,
test$X11, test$X12, test$X13, test$X14, test$X15, test$X16, test$X17, test$X18,
test$MovingAvgLast7DaysMidnightTemp
))
plot(test$BP.TS, type="o", ylim=c(6300,8300))
par(new=T)
plot(p$pred, col=2, ylim=c(6300,8300))
cat("MAE", mean(p$se), "\n")
Obtengo resultados aún peores. ¿Por qué? Me he quedado sin ideas, así que por favor ayuda. Si hay información adicional que necesito dar, por favor pregunte.
4 votos
Se prueban modelos muy generales para problemas concretos. ¿Has investigado antes de probar estos modelos? La búsqueda en Google sobre "previsión de la carga eléctrica" ofrece muchos enlaces.
4 votos
Hay mucha literatura sobre este problema. Consulte forecasters.org/ijf/journal-issue/320 para algunos trabajos publicados en el IJF.
0 votos
¿Sabe por qué su modelo lineal no tiene éxito? ¿Y ha introducido una gran cantidad de predictores en su modelo, sin pensarlo mucho? - Yo encontraría primero los 4 ó 5 mejores predictores y vería cómo van (en el modelo lineal).
0 votos
@mpiktas: Hice algunos artículos, sin embargo son muy escasos de implementación. Uno que encontré muy instructivo es sciencedirect.com/ . En este artículo, modelizan cada hora mediante una serie temporal diferente. Sin embargo, puede que no disponga de datos suficientes para hacerlo.
0 votos
También obtuvieron muy buenos resultados con la regresión con errores autocorrelacionados. Intenté hacerlo con la función arima() en R. Muchos de los predictores son de ese artículo. @Rob Hyndman: Gracias por el enlace, voy a mirar esos artículos. ¿Hay algún artículo que usted sugeriría para empezar? Me gustaría que fuera lo más cercano posible a la implementación. @probabilityislogic: Sí, mi modelo lineal no tiene éxito probablemente porque la dinámica de mi sistema no es lineal. Por eso intenté modelar el sistema con arima() - autoregresión con errores autocorrelacionados.
0 votos
En lugar de utilizar un modelo ARIMA, podría intentar añadir variables ficticias estacionales (variables 0/1) a su modelo lineal. Por ejemplo, podría añadir una serie de variables ficticias para la hora del día y una serie de variables ficticias para el mes del año.
0 votos
Estoy buscando lo mismo, ¿tienes algo que compartir? Saludos, Nicolas
0 votos
No estoy seguro de si es buena idea resucitar un hilo antiguo como éste. En cualquier caso, parece que tienes mucha suerte: robjhyndman.com/hyndsight/mefm