He escuchado un poco sobre el uso de redes neuronales para pronosticar series temporales.
¿Cómo puedo comparar qué método para pronosticar mi serie temporal (datos minoristas diarios) es mejor: auto.arima (x), ets (x) o nnetar (x).
Puedo comparar auto.arima con ets por AIC o BIC. ¿Pero cómo puedo compararlos con las redes neuronales?
Por ejemplo:
> dput(x)
c(1774, 1706, 1288, 1276, 2350, 1821, 1712, 1654, 1680, 1451,
1275, 2140, 1747, 1749, 1770, 1797, 1485, 1299, 2330, 1822, 1627,
1847, 1797, 1452, 1328, 2363, 1998, 1864, 2088, 2084, 594, 884,
1968, 1858, 1640, 1823, 1938, 1490, 1312, 2312, 1937, 1617, 1643,
1468, 1381, 1276, 2228, 1756, 1465, 1716, 1601, 1340, 1192, 2231,
1768, 1623, 1444, 1575, 1375, 1267, 2475, 1630, 1505, 1810, 1601,
1123, 1324, 2245, 1844, 1613, 1710, 1546, 1290, 1366, 2427, 1783,
1588, 1505, 1398, 1226, 1321, 2299, 1047, 1735, 1633, 1508, 1323,
1317, 2323, 1826, 1615, 1750, 1572, 1273, 1365, 2373, 2074, 1809,
1889, 1521, 1314, 1512, 2462, 1836, 1750, 1808, 1585, 1387, 1428,
2176, 1732, 1752, 1665, 1425, 1028, 1194, 2159, 1840, 1684, 1711,
1653, 1360, 1422, 2328, 1798, 1723, 1827, 1499, 1289, 1476, 2219,
1824, 1606, 1627, 1459, 1324, 1354, 2150, 1728, 1743, 1697, 1511,
1285, 1426, 2076, 1792, 1519, 1478, 1191, 1122, 1241, 2105, 1818,
1599, 1663, 1319, 1219, 1452, 2091, 1771, 1710, 2000, 1518, 1479,
1586, 1848, 2113, 1648, 1542, 1220, 1299, 1452, 2290, 1944, 1701,
1709, 1462, 1312, 1365, 2326, 1971, 1709, 1700, 1687, 1493, 1523,
2382, 1938, 1658, 1713, 1525, 1413, 1363, 2349, 1923, 1726, 1862,
1686, 1534, 1280, 2233, 1733, 1520, 1537, 1569, 1367, 1129, 2024,
1645, 1510, 1469, 1533, 1281, 1212, 2099, 1769, 1684, 1842, 1654,
1369, 1353, 2415, 1948, 1841, 1928, 1790, 1547, 1465, 2260, 1895,
1700, 1838, 1614, 1528, 1268, 2192, 1705, 1494, 1697, 1588, 1324,
1193, 2049, 1672, 1801, 1487, 1319, 1289, 1302, 2316, 1945, 1771,
2027, 2053, 1639, 1372, 2198, 1692, 1546, 1809, 1787, 1360, 1182,
2157, 1690, 1494, 1731, 1633, 1299, 1291, 2164, 1667, 1535, 1822,
1813, 1510, 1396, 2308, 2110, 2128, 2316, 2249, 1789, 1886, 2463,
2257, 2212, 2608, 2284, 2034, 1996, 2686, 2459, 2340, 2383, 2507,
2304, 2740, 1869, 654, 1068, 1720, 1904, 1666, 1877, 2100, 504,
1482, 1686, 1707, 1306, 1417, 2135, 1787, 1675, 1934, 1931, 1456)
Usando auto.arima:
y=auto.arima(x)
plot(forecast(y,h=30))
points(1:length(x),fitted(y),type="l",col="green")
> summary(y)
Series: x
ARIMA(5,1,5)
Coefficients:
ar1 ar2 ar3 ar4 ar5 ma1 ma2 ma3 ma4 ma5
0.2560 -1.0056 0.0716 -0.5516 -0.4822 -0.9584 1.2627 -1.0745 0.8545 -0.2819
s.e. 0.1014 0.0778 0.1296 0.0859 0.0844 0.1184 0.1322 0.1289 0.1388 0.0903
sigma^2 estimated as 58026: log likelihood=-2191.97
AIC=4405.95 AICc=4406.81 BIC=4447.3
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 1.457729 240.5059 173.9242 -2.312207 11.62531 0.6157512
Usando ets:
fit <- ets(x)
plot(forecast(fit,h=30))
points(1:length(x),fitted(fit),type="l",col="red")
> summary(fit)
ETS(M,N,N)
Call:
ets(y = x)
Smoothing parameters:
alpha = 0.0449
Initial states:
l = 1689.128
sigma: 0.2094
AIC AICc BIC
5570.373 5570.411 5577.897
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 7.842061 359.3611 276.4327 -4.81967 17.98136 0.9786665
En este caso, auto.arima se ajusta mejor que ets.
Intentemos cantar la red neuronal:
library(caret)
fit <- nnetar(x)
plot(forecast(fit,h=60))
points(1:length(x),fitted(fit),type="l",col="green")
Desde el gráfico, puedo ver, que el modelo de red neuronal se ajusta bastante bien, pero ¿cómo puedo compararlo con auto.arima / ets? ¿Cómo puedo calcular AIC?
Otra pregunta es, ¿cómo agregar el intervalo de confianza para la red neuronal, si es posible, como si se agrega automáticamente para auto.arima / ets?
auto.arima()
, use elxreg
parámetro. Ver?auto.arima
.La sugerencia de Stephan anterior es buena. Agregaría que usar AIC es definitivamente una forma válida de elegir dentro de los modelos, pero no entre ellos. Es decir, puede (¡y debería!) Usar criterios de información para elegir qué modelo (s) de ARIMA, qué modelo (s) de suavizado exponencial, etc., y luego comparar a sus principales candidatos utilizando predicciones fuera de la muestra (MASE, MAPE, etc.) )
http://robjhyndman.com/hyndsight/aic/
fuente
Mire este video del profesor Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k
En el video, el profesor Rob enseñó sobre la función de precisión y las diferencias entre la precisión de la muestra y la precisión de la muestra.
es decir: Tomando digamos 80-90% de sus datos, ajuste un modelo, pronostique. Luego verifique la precisión utilizando los datos pronosticados con el 10% (dado que tenemos el valor real de sus datos del 10%, podemos verificar la precisión de la muestra fuera del modelo)
Además de consultar el libro de texto en línea en otext
Como otros mencionados, cuando comparamos modelos versus modelos, usamos la precisión () para comparar con el conjunto de prueba. Entonces puede tener varias medidas de error como MAE, MSE, RMSE ... etc. que se utilizan para comparar modelos versus modelos
fuente
En lugar de dar nombre al modelo NN, use fit_nn. Del mismo modo, fit_arima y fit_ets. para que puedas comparar todos los modelos.
ahora, puede comparar ambos modelos usando ME, MAE o lo que quiera.
fuente