我当前正在使用Statsmodels库进行预测。我正在尝试使用季节性,趋势和平滑因子进行三重指数平滑,但始终会出错。这是一个已设置频率的示例熊猫系列:
2018-01-01 25
2018-02-01 30
2018-03-01 40
2018-04-01 38
2018-05-01 33
2018-06-01 36
2018-07-01 34
2018-08-01 35
2018-09-01 37
2018-10-01 41
2018-11-01 36
2018-12-01 32
2019-01-01 31
2019-02-01 29
2019-03-01 28
2019-04-01 29
2019-05-01 30
Freq: MS, dtype:float64
这是我的代码:
import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing, SimpleExpSmoothing
def triple_expo(input_data_set, output_list1):
data = input_data_set
model1 = ExponentialSmoothing(data, trend='add', seasonal='mul', damped=False, seasonal_periods=12, freq='M').fit(smoothing_level=0.1, smoothing_slope=0.1, smoothing_seasonal=0.1, optimized=False)
fcast1 = model1.forecast(12)
fcast_list1 = list(fcast1)
output_list1.append(fcast_list1)
for product in unique_products:
product_slice = sorted_product_df["Product"] == product
unique_slice = sorted_product_df[product_slice]
amount = unique_slice["Amount"].tolist()
index = unique_slice["Date"].tolist()
unique_series = pd.Series(amount, index)
unique_series.index = pd.DatetimeIndex(unique_series.index, freq=pd.infer_freq(unique_series.index))
triple_expo(unique_series, triple_out_one)
我最初根本没有频率参数,因为我遵循的是statsmodels网站上的示例:http://www.statsmodels.org/stable/examples/notebooks/generated/exponential_smoothing.html
他们根本没有传递频率参数,因为他们使用熊猫中的DateTimeIndex推断了频率参数。当我没有频率参数时,我的错误是“操作数不能与形状<5,> <12,>一起广播”。我有17个月的数据,大熊猫将其识别为“女士”。 5和12指的是17。然后像代码示例中一样传递freq ='M',然后得到“给定的频率参数与给定的索引不兼容”。然后,我尝试将其设置为从len(data)到len(data)-1的所有内容,并始终出现错误。我尝试了len(data)-1,因为我最初是引用此堆栈帖子:seasonal_decompose: operands could not be broadcast together with shapes on a series
在那篇文章中,他说,如果您将频率设置为小于数据集长度的一倍,那将会起作用。虽然它对我不起作用。任何帮助,将不胜感激。谢谢!