fbprophet:错误评估模型对数概率:非有限梯度

fbprophet: Error evaluating model log probability: Non-finite gradient

我收到以下错误:

我所做的就是运行这段代码。我已经使用了这个数据集 https://www.kaggle.com/camnugent/sandp500 但尝试了几个不同的数据集,并且所有的数据集都返回了这条消息。

pandas_df = pd.read_csv(file_path)
data_to_use = pandas_df.filter(['datetime', 'close'])
data_to_use.columns = ['ds', 'y']
data_to_use['ds'] = to_datetime(data_to_use['ds'])

model = Prophet()
model.fit(data_to_use)

future_dates = model.make_future_dataframe(periods=365)
prediction = model.predict(future_dates)

我已经在新的 conda 环境中安装了 pystan 和 fbprophet,python 3.7.10,pystan 2.19.1.1,fbprophet 0.7.1。

我不确定如何进行,所以任何建议将不胜感激。

我无法重现您的错误,但我相信我知道拟合失败的原因。 您尝试拟合的数据是超过 500 只股票的收盘价。当使用 data_to_use.plot.scatter(x='ds', y='y', s=0.01) 绘制时,您会得到:

我认为拟合失败,因为它只是在努力收敛到 this pystan discourse thread 中提到的合理解决方案。当我天真地尝试拟合这些数据时,它并没有失败,而是在 y = 100 附近给出了一条几乎水平的线预测,误差线非常大。

根据您要执行的操作,我建议您通过 Name 选择一只股票,例如:

data_to_use_pcln = pandas_df[pandas_df.Name.eq('PCLN')].filter(['date', 'close'])
data_to_use_pcln.columns = ['ds', 'y']
data_to_use_pcln['ds'] = pd.to_datetime(data_to_use_pcln['ds'])

或像这样将每天的所有股票价格加在一起:

summed_data = pandas_df.groupby('date').agg('sum').reset_index().filter(['date', 'close'])
summed_data.columns = ['ds', 'y']
summed_data['ds'] = pd.to_datetime(summed_data['ds'])

将求和数据传递给model.fit()给出了一个合理的解决方案: