与先知一起预测两组

问题描述 投票:0回答:2

您好,我正在尝试预测每个商店和商品的以下单位

df.head()
ds  item    store   y
0   2019-01-13  A18-303 31  1.000
1   2021-02-21  104451-N04  3   2.000
2   2021-03-07  K231-G39    26  1.000
3   2021-01-10  K288-G39    26  -1.000
4   2019-06-30  A18-303 6   6.000
final = pd.DataFrame(columns=['item','store','ds','yhat'])    
grouped = df.groupby('store','item')
    for g in grouped.groups:
        group = grouped.get_group(g)
        m = Prophet()
        m.fit(group)
        future = m.make_future_dataframe(periods=14)
        forecast = m.predict(future)
        forecast['item','store'] = g
        final = pd.concat([final, forecast], ignore_index=True)

我的结果是所有商店和商品均为 NaN。

python pandas time-series forecasting facebook-prophet
2个回答
0
投票

这是因为您没有正确定义

final
数据框。

第一次运行

pd.concat([final, forecast], ignore_index=True)
时,
final
仍然是未定义的,因此会产生错误。

您可以执行以下操作:

grouped = df.groupby(['store','item'])
dfs =[]  # list of dataframes 
for g in grouped.groups:
    group = grouped.get_group(g)
    m = Prophet()
    m.fit(group)
    future = m.make_future_dataframe(periods=14)
    forecast = m.predict(future)
    forecast['item','store'] = g
    dfs.append(forecast)
final = pd.concat(dfs, ignore_index=True)

0
投票

我意识到这是一篇旧帖子,但它对我的用例很有帮助(按商店、按国家/地区进行预测)。您可以使用列表理解并访问 g 的索引,在附加到最终之前将它们单独添加到预测 df 中,如下所示:

final = pd.DataFrame(columns=['item','store','ds','yhat'])    
grouped = df.groupby('store','item')
    for g in grouped.groups:
        group = grouped.get_group(g)
        m = Prophet()
        m.fit(group)
        future = m.make_future_dataframe(periods=14)
        forecast = m.predict(future)
        forecast['store'] = g[0]
        forecast['item'] = g[1]
        final = pd.concat([final, forecast], ignore_index=True)
© www.soinside.com 2019 - 2024. All rights reserved.