我正在尝试根据可用数据预测收盘价。我已经开始使用框架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
我知道ds
和y
是fbprophet
中模型训练的输入变量。因此,将其放置在数据框本身中。
但是可以看到,我仅使用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