Python FBprophet如何在预测中让其他列用作权重

时间:2018-07-17 09:41:00

标签: python pandas facebook-prophet

我正在尝试根据可用数据预测收盘价。我已经开始使用框架FbPropet来预测值。请参阅以下我尝试过的内容:
从fbprophet导入先知

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize']=(20,10)
plt.style.use('ggplot')
df = pd.read_csv("EURUSD_M1.csv",sep='\t',encoding="utf-16",usecols = [0,1,2,3,4])
df.head(5)

输出:

Time    open    high    low close
2018.05.31 23:59:00 1.16928 1.16935 1.16906 1.16906
2018.06.01 00:00:00 1.16879 1.16906 1.16852 1.16855
2018.06.01 00:01:00 1.16871 1.16884 1.16871 1.16879
2018.06.01 00:02:00 1.16879 1.16900 1.16872 1.16895
2018.06.01 00:03:00 1.16895 1.16895 1.16883 1.16890

接下来我尝试了

df.rename(columns={'Time':'ds'}, inplace=True)
df['y'] = np.log(df.close)
df.head(5)

输出:

ds  open    high    low close   y
2018.05.31 23:59:00 1.16928 1.16935 1.16906 1.16906 0.156200
2018.06.01 00:00:00 1.16879 1.16906 1.16852 1.16855 0.155764
2018.06.01 00:01:00 1.16871 1.16884 1.16871 1.16879 0.155969
2018.06.01 00:02:00 1.16879 1.16900 1.16872 1.16895 0.156106
2018.06.01 00:03:00 1.16895 1.16895 1.16883 1.16890 0.156063

我知道dsyfbprophet中模型训练的输入变量。因此,将其放置在数据框本身中。

但是可以看到,我仅使用y列中的收盘价。这就是在框架中生成权重的方式。

我想在预测中加上open high low的权重。但是我不知道如何使用fbprophet将完整的数据作为输入来预测输出。

请给我建议一种方法。

已编辑

我已经尝试使用add_regressor,但在进行绘图和预测时遇到了使用它的问题:

future_Time_frame = model.make_future_dataframe(periods=4000, freq='T')
display(future_Time_frame.tail(10))

输出:

ds
2018-07-02 18:30:00
2018-07-02 18:31:00
2018-07-02 18:32:00
2018-07-02 18:33:00
2018-07-02 18:34:00
2018-07-02 18:35:00
2018-07-02 18:36:00
2018-07-02 18:37:00
2018-07-02 18:38:00
2018-07-02 18:39:00

下一步:

forecast = model.predict(future_Time_frame.tail(4000))

错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-85-a7ed34b7336a> in <module>()
----> 1 forecast = model.predict(future_Time_frame.tail(4000))

/usr/local/lib/python3.5/dist-packages/fbprophet/forecaster.py in predict(self, df)
   1036             if df.shape[0] == 0:
   1037                 raise ValueError('Dataframe has no rows.')
-> 1038             df = self.setup_dataframe(df.copy())
   1039 
   1040         df['trend'] = self.predict_trend(df)

/usr/local/lib/python3.5/dist-packages/fbprophet/forecaster.py in setup_dataframe(self, df, initialize_scales)
    249             if name not in df:
    250                 raise ValueError(
--> 251                     'Regressor "{}" missing from dataframe'.format(name))
    252 
    253         df = df.sort_values('ds')

ValueError: Regressor "high" missing from dataframe

0 个答案:

没有答案