第四章 fbprohet三大基础

饱和预测

默认情况下,Prophet 使用线性模型进行预测。在预测增长时,通常有一些最大可达到的点:总市场规模、总人口规模等。这称为承载能力,预测应该在这个点饱和。

饱和预测

预测什么时候会达到饱和
什么意思?
在一定资源情况下,兔子数量的生长曲线呈sigmoid函数那样的趋势,我们就是预测那个趋势
那个环境资源能使得存在的最大兔子数量为下面设定的cap

曲线的趋势变化呈 sigmoid函数那样子变化

在这里插入图片描述

趋势变化点

默认情况下,Prophet 会自动检测这些变化点,并允许趋势进行适当的调整。但是,如果您希望对这个过程有更好的控制(例如,Prophet 错过了一个速率变化,或者在历史中过度拟合了速率变化),那么您可以使用几个输入参数。
我的理解是拐点数量关于拐点的幅度的曲线如右图

在这里插入图片描述

季节性、假期效应和回归量
对比:假期效应一般按年算,季节性更加细分时间段

假期

假期效应是什么意思?
基于指定假期或者是国家法定节假日那个时间(一般是基于year的)作为一个关键点,构建模型的时候会优先考虑

如果您有假期或其他要建模的重复事件,则必须为它们创建一个数据框。它有两列(holiday和ds)和一行用于假期的每次出现。它必须包括假期的所有事件,包括过去(就历史数据而言)和未来(就做出预测而言)。如果它们将来不再重复,Prophet 将对它们进行建模,然后不将它们包含在预测中。
在这里插入图片描述

我的理解:
假期会作为影响曲线变化的因素,我们对假期这个时间段单独抽取出来进行分析

两种方式:
指定日期时间进行分析(对这个时间段进行一个命名,也类似与对假期进行一个补充)
使用python内置的各个国家的法定假期日,不用自己定义时间段了

对这个进行操作的结果是,多了一列分析数据,是假期的

添加假期:
自定义holiday
代码
m = Prophet(holidays=holidays)
m.fit(df)
国家法定节假日
m = Prophet(holidays=holidays)
m.add_country_holidays(country_name=‘US’)
m.fit(df)

调整假期的曲线拟合程度,
如果您发现假期过度拟合,您可以使用参数调整它们的先验比例以平滑它们holidays_prior_scale。默认情况下,此参数默认为 10,它提供的正则化很少。减少此参数会抑制假期效果:
代码:
m = Prophet(holidays=holidays, holidays_prior_scale=0.05).fit(df)
forecast = m.predict(future)
forecast[(forecast[‘playoff’] + forecast[‘superbowl’]).abs() > 0][
[‘ds’, ‘playoff’, ‘superbowl’]][-10:]

季节性

季节性的傅里叶顺序

什么意思?

基于近几年的数据,通过周期性(每年yearly,每周weekly,每日daily)建立一个周期性模型,使用傅里叶级数拟合曲线

季节性是使用部分傅立叶和来估计的。有关完整详细信息,请参阅论文,以及Wikipedia上的此图,以说明部分傅立叶和如何近似任意周期信号。部分和(顺序)中的项数是一个参数,它决定了季节性变化的速度。为了说明这一点,请考虑快速入门中的 Peyton Manning 数据。年度季节性的默认傅立叶阶数为 10,这会产生以下拟合:
原理:

在这里插入图片描述

默认傅里叶阶数为10
from prophet.plot import plot_yearly
m = Prophet().fit(df)
a = plot_yearly(m)

修改傅里叶阶数,阶数越高拟合精度越高
说明
默认值通常是合适的,但是当季节性需要适应更高频率的变化时可以增加它们,并且通常不太平滑。实例化模型时,可以为每个内置季节性指定傅立叶阶数,这里增加到 20:
from prophet.plot import plot_yearly
m = Prophet(yearly_seasonality=20).fit(df)
a = plot_yearly(m)

???跟下面季节性曲线的平滑调整有什么区别????

指定自定义季节性

默认的季节性(每年yearly,每周weekly,每日daily),想要添加月季节性需要手动添加

这里是什么意思?
把Prophet模型去计算周季节性关闭,同时添加一个自定义季节性计算,以每30.5天作为一个周期即月来计算周期性
将所有数据按照30.5天为一个周期总结出一个月周期变化的关系曲线

代码
m = Prophet(weekly_seasonality=False)
m.add_seasonality(name=‘monthly’, period=30.5, fourier_order=5)

对这个指定季节性进行调整,调整季节性的拟合程度
说明:
如果您发现假期过度拟合,您可以使用参数调整它们的先验比例以平滑它们holidays_prior_scale。默认情况下,此参数为 10,它提供的正则化很少。减少此参数会抑制假期效果:

m = Prophet()
m.add_seasonality(
name=‘weekly’, period=7, fourier_order=3, prior_scale=0.1)

取决于其他因素的季节性
什么意思?
数据集原本就是2月份到8月份之间销量很少,如上面的yearly图 下面的做法类似这个思路: 把数据集划分成2~8月份和1,9,10,11,12月份两个数据集分别计算两个"季度"的周期性!!!

这里举例子:在一年中划分旺季和淡季的时间段,分别做周期性分析
def is_nfl_season(ds):
date = pd.to_datetime(ds)
return (date.month > 8 or date.month < 2)

df[‘on_season’] = df[‘ds’].apply(is_nfl_season)
df[‘off_season’] = ~df[‘ds’].apply(is_nfl_season)

m = Prophet(weekly_seasonality=False)
m.add_seasonality(name=‘weekly_on_season’, period=7, fourier_order=3, condition_name=‘on_season’)
m.add_seasonality(name=‘weekly_off_season’, period=7, fourier_order=3, condition_name=‘off_season’)

future[‘on_season’] = future[‘ds’].apply(is_nfl_season)
future[‘off_season’] = ~future[‘ds’].apply(is_nfl_season)
forecast = m.fit(df).predict(future)
fig = m.plot_components(forecast)

在这里插入图片描述

额外的回归量

不太懂这个是什么

猜你喜欢

转载自blog.csdn.net/weixin_46124467/article/details/129502001
今日推荐