首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过先知交叉验证获得更好的预测结果?

如何通过先知交叉验证获得更好的预测结果?
EN

Stack Overflow用户
提问于 2020-01-21 14:33:02
回答 1查看 2.9K关注 0票数 1

我有10年的每日需求数据,有一个积极的趋势。https://gofile.io/?c=PS3YCO

在一年的最后三个月里,总是会有1到2的需求冲击。以及15-16岁。当月(晋升)。

我试着预测了:

未来= m.make_future_dataframe(periods=365)

预测=m.predict(未来)

但结果并不如我所料。我能得到的最好的MSE是6681。但是当我尝试交叉验证时,结果与6690几乎相同。

  • 有什么可以通过我的设置来改变以获得更好的结果吗?
  • 会帮助获得一个更大的数据集,比方说50年吗?
  • :我是否正确地理解了它,要么使用“预测=m.predict(未来)”,要么使用交叉验证的选项?

另外:当我使用"from fbprophet.diagnostics import performance_metrics“来计算MSE时,它会给出测试数据的值,但会给出更长的时间。我怎么才能计算去年的MSE呢?

非常感谢你的帮助:)

代码语言:javascript
复制
import numpy as np
from fbprophet import Prophet
import matplotlib.pyplot as plt
from fbprophet.diagnostics import cross_validation

df = pd.read_excel('Dataset2.3_kurz.xls')   

promotions = pd.DataFrame({ 
 'holiday': 'winter_promotion',
    'ds': pd.to_datetime(['2009-10-1','2009-10-2','2009-10-15','2009-10-16',
                          '2009-11-1','2009-11-2','2009-11-15','2009-11-16',
                          '2009-12-1','2009-12-2','2009-12-15','2009-12-16',
                          '2010-10-1','2010-10-2','2010-10-15','2010-10-16',
                          '2010-11-1','2010-11-2','2010-11-15','2010-11-16',
                          '2010-12-1','2010-12-2','2010-12-15','2010-12-16',
                          '2011-10-1','2011-10-2','2011-10-15','2011-10-16',
                          '2011-11-1','2011-11-2','2011-11-15','2011-11-16',
                          '2011-12-1','2011-12-2','2011-12-15','2011-12-16',
                          '2012-10-1','2012-10-2','2012-10-15','2012-10-16',
                          '2012-11-1','2012-11-2','2012-11-15','2012-11-16',
                          '2012-12-1','2012-12-2','2012-12-15','2012-12-16',
                          '2013-10-1','2013-10-2','2013-10-15','2013-10-16',
                          '2013-11-1','2013-11-2','2013-11-15','2013-11-16',
                          '2013-12-1','2013-12-2','2013-12-15','2013-12-16',
                          '2014-10-1','2014-10-2','2014-10-15','2014-10-16',
                          '2014-11-1','2014-11-2','2014-11-15','2014-11-16',
                          '2014-12-1','2014-12-2','2014-12-15','2014-12-16',
                          '2015-10-1','2015-10-2','2015-10-15','2015-10-16',
                          '2015-11-1','2015-11-2','2015-11-15','2015-11-16',
                          '2015-12-1','2015-12-2','2015-12-15','2015-12-16',
                          '2016-10-1','2016-10-2','2016-10-15','2016-10-16',
                          '2016-11-1','2016-11-2','2016-11-15','2016-11-16',
                          '2016-12-1','2016-12-2','2016-12-15','2016-12-16',
                          '2017-10-1','2017-10-2','2017-10-15','2017-10-16',
                          '2017-11-1','2017-11-2','2017-11-15','2017-11-16',
                          '2017-12-1','2017-12-2','2017-12-15','2017-12-16',
                          '2018-10-1','2018-10-2','2018-10-15','2018-10-16',
                          '2018-11-1','2018-11-2','2018-11-15','2018-11-16',
                          '2018-12-1','2018-12-2','2018-12-15','2018-12-16',
                          '2019-10-1','2019-10-2','2019-10-15','2019-10-16',
                          '2019-11-1','2019-11-2','2019-11-15','2019-11-16',
                          '2019-12-1','2019-12-2','2019-12-15','2019-12-16']),
    'lower_window': 0, 
    'upper_window': 0, 
})

#model
m = Prophet( growth='linear',
           holidays=promotions,
           seasonality_mode='multiplicative',

           holidays_prior_scale=10,  
           seasonality_prior_scale=10,            
            yearly_seasonality=True,
           )

m.fit(df)  

df_cv = cross_validation(m, initial='732 days', period='365 days', horizon = '366 days')

from fbprophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)
df_p = df_p[-365:]
df_p.tail()
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 13:45:22

尝试网格搜索并调优超参数。使用changepoint_prior_scale参数可能也有帮助。这只是个人的观点,但将每年的季节性设置为假,并在外部加上一个新的傅立叶顺序和优先级也会有帮助。关于cross_validation,请查看this link以获得更好的理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59843351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档