R 的“forecast”包有一个函数 nnetar,它使用带有单个隐藏层的前馈神经网络在时间序列中进行预测。
现在我正在使用 Python 进行类似的分析。我想使用不需要像深度学习那样复杂的神经网络。也许 2 层和几个节点对我来说已经足够了。
那么,Python 是否有一个简单的神经网络模型可以用于像 nnetar 这样的时间序列?如果不是,如何处理这个问题?
我使用ExponentialSmoothingfrom statsmodels( Version: 0.10.1) 对一些数据进行拟合和预测。为了在设置配置时方便使用,我编写了一个函数exp_smoothing_forecast,它接受np array数据、配置列表 ( ) 和要预测[trend, damped, seasonal, seasonal_periods, use_boxcox, remove_bias]的数量。periods
from statsmodels.tsa.holtwinters import ExponentialSmoothing\n\ndef exp_smoothing_forecast(data, config, periods):\n '''\n Perform Holt Winter\xe2\x80\x99s Exponential Smoothing forecast for periods of time.\n '''\n t,d,s,p,b,r = config\n # define model\n model = ExponentialSmoothing(np.array(data), trend=t, damped=d, seasonal=s, seasonal_periods=p)\n\n # fit model\n model_fit = model.fit(use_boxcox=b, remove_bias=r)\n\n # make one step forecast\n return model_fit.forecast(periods) \nRun Code Online (Sandbox Code Playgroud)\n\n我使用的数据是每周的。经过一些训练后,我找到了最佳配置并尝试在整个数据上使用它们。
\n\ndata_1 = [21725.64924, 20826.08817, …Run Code Online (Sandbox Code Playgroud) R 中有一个非常有用的函数在包上调用findfrequency,forecast它返回时间序列的主频率周期。可以在此处找到有关作者功能的更多信息:https : //robjhyndman.com/hyndsight/tscharacteristics/
我想在 Python 中实现一些等效的东西,但我在处理应该等于spec.arfindfrequency 内的R 函数的函数时遇到了问题。
该函数从去趋势序列开始,这很容易用x = statsmodels.tsa.tsatools.detrend(myTs, order=1, axis=0). 现在我有了残差,我想在 Python 中做相当于spec.arR中的函数,它首先将 AR 模型拟合到 x(或使用现有拟合)并计算(并默认绘制)拟合模型的谱密度.
我没有发现任何类似的东西,所以我一次做每一步,首先是 AR,然后是规格估计。我正在使用Airpassengers时间序列,但对于 AR 顺序或系数,我无法在 R 和 Python 上获得相同的结果。
我的R代码:
x <- AirPassengers
x <- residuals(tslm(x ~ trend))
ARmodel <- ar(x)
ARmodel
Run Code Online (Sandbox Code Playgroud)
我知道 15 是我的自回归模型的选定顺序。
我的 Python 代码:
import statsmodels.api as sm
dataPeriodic = pd.read_csv('AirPassengers.csv')
tsPeriodic = dataPeriodic.iloc[:,1]
x = statsmodels.tsa.tsatools.detrend(tsPeriodic, order=1, axis=0)
n = x.shape[0]
est_order = …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用 statsmodels ARIMA 库实现直接和递归多步骤预测策略,它提出了一些问题。
递归多步预测策略将训练单步模型,预测下一个值,将预测值附加到输入预测方法的外生值的末尾并重复。这是我的递归实现:
def arima_forecast_recursive(history, horizon=1, config=None):
# make list so can add / remove elements
history = history.tolist()
model = ARIMA(history, order=config)
model_fit = model.fit(trend='nc', disp=0)
for i, x in enumerate(history):
yhat = model_fit.forecast(steps=1, exog=history[i:])
yhat.append(history)
return np.array(yhat)
def walk_forward_validation(dataframe, config=None):
n_train = 52 # Give a minimum of 2 forecasting periods to capture any seasonality
n_test = 26 # Test set should be the size of one forecasting horizon
n_records = len(dataframe)
tuple_list = []
for …Run Code Online (Sandbox Code Playgroud) 我创建了一个具有有效 DatetimeIndex 的 pandas DataFrame
df.index = df.timestamp
df = df.resample("10Min", how="mean")
plt.plot_date(df.index, df['delay'])
fig = plt.gcf()
fig.set_size_inches(18.5, 8.5)
Run Code Online (Sandbox Code Playgroud)
它是这样的:
模型拟合的相关属性:
df['delay'].head(5)
timestamp
2016-10-30 04:30:00 32.000000
2016-10-30 04:40:00 12.714286
2016-10-30 04:50:00 36.941176
2016-10-30 05:00:00 37.273381
2016-10-30 05:10:00 38.960526
Name: delay, dtype: float64
Run Code Online (Sandbox Code Playgroud)
然后我将 ARIMA 拟合到数据中:
import pmdarima as pm
import numpy as np
import matplotlib.pyplot as plt
df = df.dropna()
model = pm.auto_arima(df.delay, error_action='ignore', trace=1,
suppress_warnings=True,
seasonal=True, m=12)
model.plot_diagnostics(figsize=(7,5))
plt.show()
Run Code Online (Sandbox Code Playgroud)
诊断结果:
Fit ARIMA: order=(2, 0, 2) seasonal_order=(1, 0, 1, 12); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Windows10 上的 python 3.7 中实现 auto arima 所以我尝试使用以下命令安装 Pyramid-armia
pip install pyramid-arima
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息
Could not find a version that satisfies the requirement pyramid-arima (from versions: )]
No matching distribution found for pyramid-arima
Run Code Online (Sandbox Code Playgroud)
我也尝试过这里提到的步骤
但收到了同样的错误消息,您能指导我安装吗?
我想在同一个图上用不同的颜色绘制多个预测,但是比例尺不正确。我对任何其他方法持开放态度。
可重现的例子:
require(forecast)
# MAKING DATA
data <- c(3.86000, 19.55810, 19.51091, 20.74048, 20.71333, 29.04191, 30.28864, 25.64300, 23.33368, 23.70870 , 26.16600 ,27.61286 , 27.88409 , 28.41400 , 24.81957 , 24.60952, 27.49857, 32.08000 , 29.98000, 27.49000 , 237.26150, 266.35478, 338.30000, 377.69476, 528.65905, 780.00000 )
a.ts <- ts(data,start=c(2005,1),frequency=12)
# FORECASTS
arima011_css =stats::arima(x = a.ts, order = c(0, 1, 1), method = "CSS") # css estimate
arima011_forecast = forecast(arima011_css, h=10, level=c(99.5))
arima321_css =stats::arima(x = a.ts, order = c(3, 2, 1), method = "CSS") # …Run Code Online (Sandbox Code Playgroud) 我的电子表格包含A列中的一些数据 - 日期,B列(2012年特定日期的关键字使用情况)和C列(2013年特定日期的关键字使用情况),如图所示.我想要做的是创建类似FORECAST公式,根据这些数据,它将"预测"2月22日(C5)的未来日期的值.你可以帮我配方奶.

谢谢!
我正在尝试运行下面的代码,但收到以下错误。该代码使用预测包中的 auto.arima 来确定 arima 模型并将其拟合到某些数据。它还在 xreg 参数中使用回归量。我认为 xreg 中两列的名称可能是问题所在,但我不确定为什么。列的名称类似于“struct.c.NA..NA..211L..”,它们是函数的输出。如果我在 xreg 参数中没有这些列的情况下运行 auto.arima ,它似乎做得很好。非常感谢任何有关如何解决此问题的提示。
代码:
auto.arima(df2_comb[1:100,names(df2_comb)=='ECDD'], xreg = df2_comb[,names(df2_comb)!='ECDD'][1:100,names(df2_comb[,!names(df2_comb)%in%c('ECDD','order_dts')])])
Run Code Online (Sandbox Code Playgroud)
错误:
Error in auto.arima(df2_comb[1:100, names(df2_comb) == "ECDD"], xreg = df2_comb[, :
xreg should be a numeric matrix or vector
Run Code Online (Sandbox Code Playgroud)
数据:
dput(df2_comb[1:100,])
structure(list(ECDD = c(319.4, 319.4, 319.4, 319.4, 319.4, 319.4,
319.4, 319.4, 319.4, 319.4, 319.4, 319.4, 319.4, 319.4, 319.4,
319.4, 319.4, 319.4, 319.4, 198, 142, 254, 178, 97, 113, 116,
109, 127, 102, 99, 107, 109, 89, 101, 106, 319.4, 319.4, 319.4,
319.4, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 fable 包创建 1000 家商店的预测。包是否fable像函数一样并行工作forecast?
非常感谢
我在 R 中对缺失值的数据运行 ARIMA 模型。这是财务数据,因此缺失的日期要么是公共假期,要么是周末,所以不是完全随机的。我仍在思考应该对缺失值做出哪个决定。
然而,我看到的是该函数本身运行没有错误。因此 ARIMA 会自动以某种方式处理缺失值。但我在文档中找不到运行 ARIMA 时缺失值到底发生了什么(只是为了知道它是否会删除它们/估算或其他什么?)
best_fit = auto.arima(data_vector, stationary = is_stationary, ic = "bic", stepwise = FALSE, allowmean = TRUE, allowdrift = TRUE, approximation = FALSE)
Run Code Online (Sandbox Code Playgroud)
有人知道 auto.arima 默认情况下做什么吗?
我的自由度小于数据集中的行数。为什么我有错误“估计的自由度不足”。我该怎么做才能解决此错误?
我试图减少 中的值differenced = difference(X,11),但它仍然显示错误。
dataset, validation = series[0:split_point], series[split_point:]
print('Dataset %d, Validation %d' % (len(dataset), len(validation)))
dataset.to_csv('dataset.csv')
validation.to_csv('validation.csv')
from pandas import Series
from statsmodels.tsa.arima_model import ARIMA
import numpy
# load dataset
series = Series.from_csv('dataset.csv', header=None)
series = series.iloc[1:]
series.head()
series.shape
from pandas import Series
from statsmodels.tsa.arima_model import ARIMA
import numpy
# create a differenced series
def difference(dataset, interval=1):
diff = list()
for i in range(interval+1, len(dataset)):
value = int(dataset[i]) - int(dataset[i - interval])
diff.append(value)
return numpy.array(diff)
# …Run Code Online (Sandbox Code Playgroud) 我有多个熊猫数据框如下:
data1 = {'1':[4], '2':[2], '3':[6]}
baseline = pd.DataFrame(data1)
# baseline output
1 2 3
0 4 2 6
data2 = {'1':[3], '2':[5], '5':[5]}
forecast1 = pd.DataFrame(data2)
# forecast1 output
1 2 5
0 3 5 5
data3 = {'1':[2], '3':[4], '5':[5], '6':[2]}
forecast2 = pd.DataFrame(data3)
# forecast2 output
1 3 5 6
0 2 4 5 2
Run Code Online (Sandbox Code Playgroud)
与基线数据框(即基线 vs 预测 1 和基线 vs 预测 2)相比,我如何计算预测 1和预测 2(分别)的准确性(或混淆矩阵)?
另请注意,与基线数据框相比,预测 1 和预测 2 可能有一些额外的列。因此,精度计算需要考虑可用列的数量并处理额外的列。有没有办法处理这种情况?
这些数据帧是我正在做的数据清理的结果,这就是为什么其中一些数据帧几乎没有基线数据帧中不可用的额外列。 …
forecast ×13
python ×7
arima ×5
r ×5
statsmodels ×4
time-series ×4
forecasting ×3
pandas ×2
convergence ×1
exponential ×1
fable-r ×1
plot ×1
signals ×1