例子代码


https://github.com/lilihongjava/prophet_demo/tree/master/multiplicative_seasonality

# encoding: utf-8
"""
@author: lee
@time: 2019/8/6 8:55
@file: main.py
@desc: 
"""
from fbprophet import Prophet
import pandas as pd


def main():
    df = pd.read_csv('./data/example_air_passengers.csv')
    m = Prophet()
    m.fit(df)
    future = m.make_future_dataframe(50, freq='MS')
    forecast = m.predict(future)
    fig = m.plot(forecast)
    fig.show()

    m = Prophet(seasonality_mode='multiplicative')
    m.fit(df)
    forecast = m.predict(future)
    fig = m.plot(forecast)
    fig.show()

    fig = m.plot_components(forecast)
    fig.show()

    m = Prophet(seasonality_mode='multiplicative')
    m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
    m.add_regressor('regressor', mode='additive')


if __name__ == "__main__":
    main()

默认情况下,Prophet是加法季节性,论文中公式为y(t) = g(t) + s(t) + h(t),这意味着季节性的影响是以加法的方法加到趋势中以获得预测。下面预测航空旅客数量的时间序列是加法季节性不起作用的一个例子:

# Python
df = pd.read_csv('../examples/example_air_passengers.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(50, freq='MS')
forecast = m.predict(future)
fig = m.plot(forecast)


这个时间序列有一个明显的年度周期,但预测的季节性在时间序列开始时太大而在结束时太小。在上面这个时间序列里,季节性不是prophet所假设的恒定加性因子,而是随着趋势而增长。这是乘法季节性的一个案例。


prophet可以通过设置

seasonality_mode='multiplicative'

参数来建模乘法季节性,公式为

y(t) = g(t) *s(t) * h(t)


以下组件图显示季节性占趋势的百分比:


设置了

seasonality_mode='multiplicative'

,假日效应也将被建模为乘法。任何添加的季节性或额外的回归量将默认使用

seasonality_mode

设置的内容,但可以通过指定

mode='additive'



mode='multiplicative'

作为参数来覆盖

seasonality_mode设置的内容



例如,以下内置季节性设置为乘法,但是可以把季节性

quarterly

和额外回归量

regressor

设置为加法:

# Python
m = Prophet(seasonality_mode='multiplicative')
m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
m.add_regressor('regressor', mode='additive')

加法和乘法额外回归量将显示在组件图的单独面板中。

参考资料:


https://facebook.github.io/prophet/docs/multiplicative_seasonality.html



版权声明:本文为qq_33873431原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_33873431/article/details/98586695