我试图使用ARMA ARIMA模型预测每周销售额.我找不到调整顺序(p,d,q)的函数statsmodels
.目前R具有forecast::auto.arima()
调整(p,d,q)参数的功能.
如何为我的模型选择正确的订单?为此目的,python中是否有可用的库?
我一直在尝试使用Holt-Winters算法的这种实现来进行Python中的时间序列预测,但是遇到了障碍......基本上,对于某些(正)输入系列,它有时会预测负数,这应该清楚不是这样的.即使预测不是负面的,它们有时也是非常不准确的 - 比它们应该的数量级更高/更低.为算法提供更多的数据周期似乎没有帮助,实际上往往会使预测变得更糟.
我正在使用的数据具有以下特征,可能是问题:
非常频繁地采样(每15分钟一个数据点,而不是示例使用的月度数据) - 但从我所读到的,Holt-Winters算法应该没有问题.也许这表明实施存在问题?
有多个周期 - 每日峰值(即每96个数据点)以及周末数据的每周周期显着低于工作日数据 - 例如工作日可以在4000左右达到峰值但周末达到峰值1000 - 但即使我只给出它是工作日的数据,我遇到了负数问题.
对于Holt-Winters算法的实现或使用,我是否还缺少一些东西?我不是统计学家,所以我使用上面链接中指出的alpha,beta和gamma的'默认'值 - 这可能是问题,是否有更好的方法来计算这些值?
或者......有没有比Holt-Winters更好的算法?最后,我只想根据历史数据创建合理的预测.我尝试过单指数和双指数平滑,但(据我所知)并不支持数据的周期性.
任何帮助/输入将不胜感激!
我正在研究一个多变量(100 多个变量)多步(t1 到 t30)预测问题,其中时间序列频率为每 1 分钟一次。该问题需要预测 100 多个变量之一作为目标。我很想知道是否可以使用 FB Prophet 的 Python API 来做到这一点。我能够仅使用目标变量和日期时间变量以单变量方式完成此操作。任何帮助和指导表示赞赏。请让我知道这个问题是否需要进一步的输入或澄清。
python machine-learning time-series forecasting facebook-prophet
我有很多已知异常值的数据集(大订单)
data <- matrix(c("08Q1","08Q2","08Q3","08Q4","09Q1","09Q2","09Q3","09Q4","10Q1","10Q2","10Q3","10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2","13Q3","13Q4","14Q1","14Q2","14Q3","14Q4","15Q1", 155782698, 159463653.4, 172741125.6, 204547180, 126049319.8, 138648461.5, 135678842.1, 242568446.1, 177019289.3, 200397120.6, 182516217.1, 306143365.6, 222890269.2, 239062450.2, 229124263.2, 370575384.7, 257757410.5, 256125841.6, 231879306.6, 419580274, 268211059, 276378232.1, 261739468.7, 429127062.8, 254776725.6, 329429882.8, 264012891.6, 496745973.9, 284484362.55),ncol=2,byrow=FALSE)
Run Code Online (Sandbox Code Playgroud)
这个特定系列的前11个异常值是:
outliers <- matrix(c("14Q4","14Q2","12Q1","13Q1","14Q2","11Q1","11Q4","14Q2","13Q4","14Q4","13Q1",20193525.68, 18319234.7, 12896323.62, 12718744.01, 12353002.09, 11936190.13, 11356476.28, 11351192.31, 10101527.85, 9723641.25, 9643214.018),ncol=2,byrow=FALSE)
Run Code Online (Sandbox Code Playgroud)
有哪些方法可以预测考虑这些异常值的时间序列?
我已经尝试更换下一个最大的异常值(因此,运行数据集10次,用下一个最大值替换异常值,直到第10个数据集替换掉所有异常值).我也试过简单地删除异常值(因此每次再次运行数据集10次删除异常值,直到在第10个数据集中删除所有10个异常值)
我只想指出,删除这些大订单并不会完全删除数据点,因为该季度还会发生其他交易
我的代码通过多个预测模型测试数据(ARIMA加权样本,ARIMA加权样本,ARIMA加权,ARIMA,加性Holt-winters加权和Multiplcative Holt-winters加权)所以它需要是可以的适应这些多种模式.
以下是我使用的几个数据集,但我没有这些系列的异常值
data <- matrix(c("08Q1","08Q2","08Q3","08Q4","09Q1","09Q2","09Q3","09Q4","10Q1","10Q2","10Q3","10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2","13Q3","13Q4","14Q1","14Q2","14Q3", 26393.99306, 13820.5037, 23115.82432, 25894.41036, 14926.12574, 15855.8857, 21565.19002, 49373.89675, 27629.10141, 43248.9778, 34231.73851, 83379.26027, 54883.33752, 62863.47728, 47215.92508, 107819.9903, 53239.10602, 71853.5, 59912.7624, 168416.2995, 64565.6211, 94698.38748, 80229.9716, 169205.0023, …
Run Code Online (Sandbox Code Playgroud) 我正在研究python中的时间序列.我觉得有用和有前途的图书馆是
也用于可视化:matplotlib
有没有人知道指数平滑的库?
我试图向自己解释将ARIMA模型应用于时间序列数据集的预测结果.数据来自M1-Competition,系列是MNB65.我试图将数据拟合到ARIMA(1,0,0)模型并获得预测.我正在使用R.以下是一些输出片段:
> arima(x, order = c(1,0,0))
Series: x
ARIMA(1,0,0) with non-zero mean
Call: arima(x = x, order = c(1, 0, 0))
Coefficients:
ar1 intercept
0.9421 12260.298
s.e. 0.0474 202.717
> predict(arima(x, order = c(1,0,0)), n.ahead=12)
$pred
Time Series:
Start = 53
End = 64
Frequency = 1
[1] 11757.39 11786.50 11813.92 11839.75 11864.09 11887.02 11908.62 11928.97 11948.15 11966.21 11983.23 11999.27
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
(1)我如何解释尽管数据集显示出明显的下降趋势,但该模型的预测趋势向上.这也适用于ARIMA(2,0,0),这是使用auto.arima(预测包)和ARIMA(1,0,1)模型的数据的最佳ARIMA.
(2)ARIMA(1,0,0)模型的截距值为12260.298.截距不应满足等式:C = mean*(1 - sum(AR coeffs)),在这种情况下,该值应为715.52.我必须遗漏一些基本的东西.
(3)这显然是一个具有非平稳均值的系列.为什么AR(2)模型仍被auto.arima选为最佳模型?可以有一个直观的解释吗?
谢谢.
我正在使用statsmodels来适应ARMA模型.
import statsmodels.api as sm
arma = sm.tsa.ARMA(data, order =(4,4));
results = arma.fit( full_output=False, disp=0);
Run Code Online (Sandbox Code Playgroud)
data
一维数组在哪里.我知道要获得样本内预测:
pred = results.predict();
Run Code Online (Sandbox Code Playgroud)
现在,给定第二个数据集data2
,我如何使用先前校准的模型生成一系列基于此观察结果的预测(预测)?
我做了一个简单的时间序列,我给sin函数添加了一点噪音,并尝试使用R中的"stl"和"decompose"函数对其进行分解,而我的序列肯定有超过2个周期并且是周期性的,R两个函数给我以下错误:
x
[1] 1.4537365796 2.7185844368 2.8394728999 3.8926989923 4.3405508086 5.1959080871
[7] 5.6602505790 5.4829985648 5.6357660330 4.6084976233 4.6617322922 4.0286486832
[13] 3.3641752333 1.7408063182 0.8815147612 0.2895139342 -0.5402768515 -1.5612641107
[19] -2.1584502547 -2.9878043526 -3.5545638149 -4.0530074199 -4.0748538612 -4.7581704662
[25] -4.6555349052 -4.0726206240 -3.1646413472 -2.6934453823 -2.2364605277 -1.2643569882
[31] -0.1202011946 1.1136371449 2.2504199271 3.0313528996 3.5384449109 4.5176211013
[37] 5.4013172839 5.4252837451 5.4768196692 5.8979709077 5.6698285659 4.5133489450
[43] 4.2702602998 3.5180837069 2.2652913344 1.1975595698 0.5412697849 -0.5966162032
[49] -1.0827728340 -1.8488242277 -3.4118061838 -3.9009752140 -3.9102671954 -4.3486102172
[55] -4.7481017993 -4.0097598695 -3.9078554267 -3.8070416888 -2.5968567322 -2.2567568949
[61] -1.1423907008 0.0002492447 0.4338279080 1.2431986797 2.3216397323 3.3235925116
[67] …
Run Code Online (Sandbox Code Playgroud) 我有很多时间序列(零售数据),我想对所有这些进行预测.
例如,让我们来看看其中一个:
> 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, …
Run Code Online (Sandbox Code Playgroud) 目前,MetOffice在英国的预测存在很大的风暴.他们预测一个温和,潮湿的冬天,而我们在北爱尔兰有最冷的温度和地面上的积雪,通常在十二月罕见.
这是我喜欢玩的东西,而不是我声称我可以击败它们,但是想知道目前人们正在使用哪些算法?它们基于什么数据集?
可能性可能包括神经网络建模输入,其中适应性是预测的准确性,复杂的数学模型,甚至是与我昨天所预测的"与昨天相同"的预测(虽然没有看到证据),它对于单日预测更可靠(虽然在那之后明显下降).
理想情况下,喜欢听天气中心的一些开发人员或者能够访问超级计算机的人,听到方法很有意思......
forecasting ×10
time-series ×7
python ×5
r ×5
statsmodels ×3
algorithm ×1
outliers ×1
pandas ×1
statistics ×1
weather ×1
weather-api ×1