Ouvi falar um pouco sobre o uso de redes neurais para prever séries temporais.
Como posso comparar, qual método para prever minhas séries temporais (dados diários de varejo) é melhor: auto.arima (x), ets (x) ou nnetar (x).
Eu posso comparar auto.arima com ets por AIC ou BIC. Mas como posso compará-los com redes neurais?
Por exemplo:
> 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
Nesse caso, o auto.arima se encaixa melhor do que o ets.
Vamos tentar cantar rede neural:
library(caret)
fit <- nnetar(x)
plot(forecast(fit,h=60))
points(1:length(x),fitted(fit),type="l",col="green")
Pelo gráfico, posso ver, que o modelo de rede neural se encaixa muito bem, mas como posso compará-lo com o auto.arima / ets? Como posso calcular o AIC?
Outra pergunta é: como adicionar intervalo de confiança para a rede neural, se possível, como se fosse adicionado automaticamente para auto.arima / ets.?
auto.arima()
, use oxreg
parâmetro Veja?auto.arima
.A sugestão de Stephan acima é boa. Eu acrescentaria que o uso da AIC é definitivamente uma maneira válida de escolher entre modelos - mas não entre eles. Ou seja, você pode (e deve!) Usar critérios de informação para escolher quais modelos ARIMA, quais modelos de suavização exponencial etc., e então comparar seus principais candidatos usando previsões fora da amostra (MASE, MAPE etc.) )
http://robjhyndman.com/hyndsight/aic/
fonte
Assista a este vídeo do Prof Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k
No vídeo, o professor Rob ensinou sobre a função de precisão e as diferenças entre a precisão da amostra e a precisão fora da amostra.
ou seja: digamos 80-90% dos seus dados, ajuste um modelo, faça uma previsão. Em seguida, verifique a precisão usando os dados previstos com 10% (como temos o valor real dos dados de 10%, podemos verificar a precisão fora do modelo da amostra)
Além de consultar o livro on-line em otext
Como mencionado anteriormente, quando comparamos modelos x modelos, usamos a precisão () para comparar com o conjunto de testes. Então você pode ter várias medidas de erro como MAE, MSE, RMSE ... etc, que são usadas para comparar modelos vs modelos
fonte
Em vez de atribuir um nome ao modelo NN, use fit_nn. Da mesma forma, fit_arima e fit_ets. para que você possa comparar todos os modelos.
Agora, você pode comparar os dois modelos usando ME, MAE ou o que quiser.
fonte