我试图预测2000多种产品的销售情况。在我的数据中,我将每个产品的销售数据重新采样为每周销售数据,每个产品的时间序列数据表现出不同的行为。季节性模式并不明显,这就是为什么我决定在Python中使用auto_arima函数来处理两种不同的情况,即假设有季节性和没有季节性。对于季节性情况,我假设周期为52周,因为在1年后观察到的数据季节分解峰值相同。 现在,我的问题是,尝试自动arima函数的两种不同条件并捕获给出最低mse的最佳模型(arima或SARIMAX)是否是一种良好的实践?此外,auto_arima函数在尝试查找sarimax模型的阶数时工作非常缓慢。我很高兴听到任何关于加速的建议和我的第一个问题
谢谢
df_models = pd.DataFrame()
df_model_results = pd.DataFrame()
for k in range(len(df_stationary_items)):
test_df = grouped_df.get_group(df_stationary_items[k])
X = test_df['Quantity'].values
train, test = X[0:len(X)-1], X[len(X)-1:]
try:
stepwise_fit = auto_arima(test_df['Quantity'], start_p=0, start_q=0,
max_p=6, max_q=6,m=52,
start_P=0,seasonal=True,alpha=0.05,
d=None,D=None, max_D=1 ,trace=True,n_jobs=-1,
error_action='ignore',stepwise=True)
df_models =df_models.append({"ItemNo": df_stationary_items[k], "Order": stepwise_fit.order,"SeasonalOrder": stepwise_fit.seasonal_order},ignore_index=True)
model = SARIMAX(train, order=stepwise_fit.order,seasonal_order=stepwise_fit.seasonal_order)
model_fit = model.fit()
predictions = model_fit.predict(start=len(train), end=len(train)+len(test)-1, dynamic=False)
rmse= sqrt(mean_squared_error(test, predictions))
df_model_results =df_model_results.append({"ItemNo": df_stationary_items[k],"StationaryP":result[1] ,"Order": stepwise_fit.order,"SeasonalOrder": stepwise_fit.seasonal_order,"Predicted":predictions[0],"Expected":test[0],"STDEV":test_df['Quantity'].std(),"rmse":rmse},ignore_index=True)
except:
continue
df_test_results_nonseasonal = pd.DataFrame()
df_model_results_nonseasonal = pd.DataFrame()
df_models_nonseasonal=pd.DataFrame()
for m in range(len(df_stationary_items)):
test_df_nonseasonal = grouped_df.get_group(df_stationary_items[m])
X_non = test_df_nonseasonal['Quantity'].values
train_non, test_non = X_non[0:len(X_non)-1], X_non[len(X_non)-1:]
try:
stepwise_nonseasonal = auto_arima(test_df_nonseasonal['Quantity'],error_action='ignore',seasonal=False)
df_models_nonseasonal =df_models_nonseasonal.append({"ItemNo": df_stationary_items[m], "Order": stepwise_nonseasonal.order},ignore_index=True)
model_non = ARIMA(train_non, order=stepwise_nonseasonal.order)
model_fit_non = model_non.fit()
predictions_non = model_fit_non.predict(start=len(train_non), end=len(train_non)+len(test_non)-1, dynamic=False)
rmse_non= sqrt(mean_squared_error(test_non, predictions_non))
df_model_results_nonseasonal =df_model_results_nonseasonal.append({"ItemNo": df_stationary_items[m],"StationaryP":result_non[1] ,"Order": stepwise_nonseasonal.order,"Predicted":predictions_non[0],"Expected":test_non[0],"STDEV":test_df_nonseasonal['Quantity'].std(),"rmse":rmse_non},ignore_index=True)
except:
continue
任何关于预测多种产品的建议都将非常好
目前没有回答
相关问题 更多 >
编程相关推荐