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

问题描述

全部,

我的数据集如下所示.我正在尝试使用 fbProphet 或其他模型来预测未来 6 个月的金额".但我的问题是,我想根据每个组(即 A、B、C、D)预测未来 6 个月的数量.我不确定如何在 python 中使用 fbProphet 或其他模型来做到这一点?我参考了 fbprophet 的官方页面,但我找到的唯一信息是先知"只有两列,一是日期",另一列是金额".

My dataset looks like following. I am trying to predict the 'amount' for next 6 months using either the fbProphet or other model. But my issue is that I would like to predict amount based on each groups i.e A,B,C,D for next 6 months. I am not sure how to do that in python using fbProphet or other model ? I referenced official page of fbprophet, but the only information I found is that "Prophet" takes two columns only One is "Date" and other is "amount" .

我是 python 新手,非常感谢任何关于代码解释的帮助!

I am new to python, so any help with code explanation is greatly appreciated!

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)

输出:

         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


解决方案

fbprophet 需要 dsy 两列,所以需要先重命名两列

fbprophet requires two columns ds and y, so you need to first rename the two columns

df = df.rename(columns={'Date': 'ds', 'Amount':'y'})

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

Assuming that your groups are independent from each other and you want to get one prediction for each group, you can group the dataframe by "Group" column and run forecast for each group

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())

请注意,您在问题中提供的输入数据框对于模型来说是不够的,因为 D 组只有一个数据点.fbprophet 的预测至少需要 2 个非 Nan 行.

Take note that the input dataframe that you supply in the question is not sufficient for the model because group D only has a single data point. fbprophet's forecast needs at least 2 non-Nan rows.

如果您想将所有预测合并到一个数据帧中,想法是为每个观察分别命名 yhat,在循环,然后在最后挑选您需要的列:

if you want to merge all predictions into one dataframe, the idea is to name the yhat for each observations differently, do pd.merge() in the loop, and then cherry-pick the columns that you need at the end:

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()]]

相关文章