如何使用fbProphet或其他模型在Python中执行包含多个组的时间序列分析?

Dat*_*wer 9 python time-series pandas facebook-prophet

所有,

我的数据集如下所示。我正在尝试使用fbProphet或其他模型来预测未来6个月的“金额” 。但是我的问题是我想根据每个组(即A,B,C,D)预测未来6个月的数量。我不确定在python使用fbProphet或其他模型时该怎么做?我引用了fbprophet的官方页面,但我发现的唯一信息是“ Prophet”仅占据两列,一个是“ Date”,另一个是“ amount”。

我是python新手,因此对代码说明的任何帮助将不胜感激!

import pandas as pd
data = {'Date':['2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01','2017-05-01','2017-06-01','2017-07-01'],'Group':['A','B','C','D','C','A','B'],
       'Amount':['12.1','13','15','10','12','9.0','5.6']}
df = pd.DataFrame(data)
print (df)
Run Code Online (Sandbox Code Playgroud)

输出:

         Date Group Amount
0  2017-01-01     A   12.1
1  2017-02-01     B     13
2  2017-03-01     C     15
3  2017-04-01     D     10
4  2017-05-01     C     12
5  2017-06-01     A    9.0
6  2017-07-01     B    5.6
Run Code Online (Sandbox Code Playgroud)

Adi*_*oso 11

fbprophet需要两列dsy,因此您需要先重命名这两列

df = df.rename(columns={'Date': 'ds', 'Amount':'y'})
Run Code Online (Sandbox Code Playgroud)

假设您的组彼此独立,并且要为每个组获得一个预测,则可以按“组”列对数据框进行分组,并为每个组运行预测

from fbprophet import Prophet
grouped = df.groupby('Group')
for g in grouped.groups:
    group = grouped.get_group(g)
    m = Prophet()
    m.fit(group)
    future = m.make_future_dataframe(periods=365)
    forecast = m.predict(future)
    print(forecast.tail())
Run Code Online (Sandbox Code Playgroud)

请注意,您在问题中提供的输入数据框不足以用于模型,因为组D仅具有单个数据点。fbprophet的预测至少需要2个非Nan行。

编辑:如果要将所有预测合并到一个数据框中,则想法是yhat为每个观察值分别命名,pd.merge()在循环中执行,然后在最后选择所需的列:

final = pd.DataFrame()
for g in grouped.groups:
    group = grouped.get_group(g)
    m = Prophet()
    m.fit(group)
    future = m.make_future_dataframe(periods=365)
    forecast = m.predict(future)    
    forecast = forecast.rename(columns={'yhat': 'yhat_'+g})
    final = pd.merge(final, forecast.set_index('ds'), how='outer', left_index=True, right_index=True)

final = final[['yhat_' + g for g in grouped.groups.keys()]]
Run Code Online (Sandbox Code Playgroud)

  • 。感谢代码和解释!上面的代码适用于小型数据集。但是,我的数据集包含约8个组的83,000行。当我尝试运行上面建议的代码时。我收到MemoryError问题。我检查了我的python位,它是64位。有没有办法将代码分成两个部分?我很好奇我是否可以创建数据框并在以后附加它。我尝试过,但是很不幸收到了索引错误。据我了解,预测变量仅显示/保存最后分组的数据。我认为这是导致错误的原因。有关如何解决此问题的任何建议? (2认同)