使用Facebook Prophet同时预测多个变量

7
我对Python和Facebook Prophet都很陌生,所以这可能是一个简单易懂的问题,但我在网上没有找到答案。
我有一个7列的csv文件。其中一列包含日期时间戳('ds')列,以日为增量,另外6列('y1','y2','y3'等)包含6个变量,其值与日期时间戳相对应。
我想找到一种同时预测所有六个变量的方法,而不是创建六个不同的两列csv文件并运行Prophet六次(一次只预测一个变量)。以下是我的尝试:
df = pd.read.csv('example_file.csv')
cols = ['y1','y2','y3','y4','y5','y6']
results = []
for col in cols:
    subdf = df[['ds', col]].dropna()
    m = Prophet()
    m.fit(subdf)
    result = m.predict(m.make.future.dataframe(periods = 90))
    results.append(result)
df.predict = pd.concat(results, axis=1)
df.predict.to_csv('example_file.csv')

当我运行它时,出现以下错误:
ValueError: Dataframe must have columns 'ds' and 'y' with the dates and values respectively.

任何见解/帮助将不胜感激。谢谢!

错误信息非常明确:第二列必须命名为“y”。您是要修复代码还是采用全新的方法? - Mad Physicist
我基本上是在寻找warwick12给我的答案。我知道Prophet想要第二列被命名为“y”,但我不知道如何在多列中实现这一点。 - Carl
如果您喜欢这个答案,请接受它。这将从未回答的队列中删除您的问题,并为您和沃里克赚取一些积分。 - Mad Physicist
1个回答

10

抱歉,我想评论,但我还没有足够的声望。请在循环中重命名您的列。

subdf = subdf.rename(columns={'ds':'ds', col:'y'})

Prophet强制要求输入的列分别命名为ds(时间列)和y(指标列)。


非常感谢!这解决了我的问题!(我还需要使用下划线而不是句点来替换“make_future_dataframe”。)现在我想知道如何仅导出每个变量的yhat值(而不是“趋势”,“yhat_lower”,“yhat_upper”等)。 - Carl
欢迎来到SO。您的回答作为一个答案完全没问题,+1,希望原帖作者会选择它。 - Mad Physicist
1
@Chuck,感谢您接受答案。您只需执行以下操作即可获取“yhat”列:result_df = result[['ds', 'yhat']],然后将其附加到结果中。这应该就可以了。 - warwick12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接