J'ai un peu entendu parler de l'utilisation des réseaux de neurones pour prévoir les séries chronologiques.
Comment puis-je comparer la meilleure méthode de prévision de mes séries chronologiques (données quotidiennes sur la vente au détail): auto.arima (x), ets (x) ou nnetar (x).
Je peux comparer auto.arima avec ets par AIC ou BIC. Mais comment les comparer aux réseaux de neurones?
Par exemple:
> 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)
Utilisation de 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
Utilisation de 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
Dans ce cas, auto.arima s'adapte mieux que ets.
Essayons de chanter le réseau neuronal:
library(caret)
fit <- nnetar(x)
plot(forecast(fit,h=60))
points(1:length(x),fitted(fit),type="l",col="green")
D'après le graphique, je peux voir que ce modèle de réseau de neurones correspond assez bien, mais comment le comparer avec auto.arima / ets? Comment puis-je calculer l'AIC?
Une autre question est de savoir comment ajouter un intervalle de confiance pour le réseau de neurones, si cela est possible, comme il est ajouté automatiquement pour auto.arima / ets.?
auto.arima()
, utilisez lexreg
paramètre. Tu vois?auto.arima
.La suggestion de Stephan ci-dessus est bonne. J'ajouterais que l'utilisation de l'AIC est certainement un moyen valable de choisir parmi les modèles - mais pas parmi eux. C'est-à-dire que vous pouvez (et devriez!) Utiliser des critères d'information pour choisir quel (s) modèle (s) ARIMA, quel (s) modèle (s) de lissage exponentiel, etc., puis comparer vos meilleurs candidats en utilisant la prédiction hors échantillon (MASE, MAPE, etc. ).
http://robjhyndman.com/hyndsight/aic/
la source
Regardez cette vidéo du Prof Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k
Dans la vidéo, le professeur Rob a enseigné la fonction de précision et les différences entre la précision de l'échantillon et la précision hors échantillon.
c'est-à-dire: en prenant par exemple 80 à 90% de vos données, ajustez un modèle, prévoyez. Ensuite, vérifiez l'exactitude en utilisant les données prévues avec les 10% (puisque nous avons la valeur réelle de vos données de 10%, nous pouvons vérifier l'exactitude de l'échantillon du modèle)
En plus de se référer au manuel en ligne dans otext
Comme d'autres mentionnés, lorsque nous comparons des modèles contre des modèles, nous utilisons la précision () pour comparer avec l'ensemble de test. Ensuite, vous pouvez avoir diverses mesures d'erreur comme MAE, MSE, RMSE ... etc. qui sont utilisées pour comparer les modèles par rapport aux modèles
la source
Au lieu de donner un nom adapté au modèle NN, utilisez fit_nn. De même, fit_arima et fit_ets. afin que vous puissiez comparer tous les modèles.
maintenant, vous pouvez comparer les deux modèles en utilisant ME, MAE ou tout ce que vous voulez.
la source