Prophet文档中文翻译--non-daily_data_chinese

%matplotlib inline
from fbprophet import Prophet
import pandas as pd
import logging
logging.getLogger('fbprophet').setLevel(logging.ERROR)
import warnings
warnings.filterwarnings("ignore")

日以下数据(以小时、分钟等为刻度的数据)(Sub-daily data)

Prophet可以通过在ds列中传入带有时间戳的数据帧,对日以下刻度观察到的数据进行时间序列预测。时间戳的格式应为YYYY-MM-DD HH:MM:SS-- 请参阅此处的示例csv文件。使用日以下数据时,每日季节性将自动加入训练模型。在这里,我们用Prophet解析时间刻度为5分钟的数据帧进行训练模型(Yosemite的每日温度):

df = pd.read_csv('examples/example_yosemite_temps.csv')
m = Prophet(changepoint_prior_scale=0.01).fit(df)
future = m.make_future_dataframe(periods=300, freq='H')
fcst = m.predict(future)
fig = m.plot(fcst)

Prophet文档中文翻译--non-daily_data_chinese_第1张图片

日季节性将显示在组件图面板中:

fig = m.plot_components(fcst)

Prophet文档中文翻译--non-daily_data_chinese_第2张图片

有规律差距的数据(Data with regular gaps)

假设上面的数据集只有从12点到6点的观测值:

df2 = df.copy()
df2['ds'] = pd.to_datetime(df2['ds'])
df2 = df2[df2['ds'].dt.hour < 6]
m = Prophet().fit(df2)
future = m.make_future_dataframe(periods=300, freq='H')
fcst = m.predict(future)
fig = m.plot(fcst)

Prophet文档中文翻译--non-daily_data_chinese_第3张图片

预测似乎相当糟糕,未来的波动幅度远大于历史。这里的问题是我们将每日周期拟合到一个时间序列中,该时间序列仅包含当天部分时间的数据(12点到6点)。因此,每日季节性在一天的剩余时间内不受限制,并且估计不好。解决方案是仅对具有历史数据的时间窗口进行预测。在这里,这意味着将未来的数据帧限制为从12点到6点的时间

future2 = future.copy()
future2 = future2[future2['ds'].dt.hour < 6]
fcst = m.predict(future2)
fig = m.plot(fcst)

Prophet文档中文翻译--non-daily_data_chinese_第4张图片

同样的原则适用于数据中有规律间隙的其他数据集。例如,如果历史记录仅包含工作日,那么应该仅对工作日进行预测,因为每季节性不能很好地估计周末的情况(因为没有周末的数据)。

月份数据

您可以使用Prophet来拟合月度数据。但是,基础模型是连续时间,这意味着如果您将模型与月度数据拟合,然后预测每日的情况,那么可能会得到奇怪的结果。在这里,我们预测未来10年的美国零售量:

df = pd.read_csv('examples/example_retail_sales.csv')
m = Prophet(seasonality_mode='multiplicative').fit(df)
future = m.make_future_dataframe(periods=3652)
fcst = m.predict(future)
fig = m.plot(fcst)

Prophet文档中文翻译--non-daily_data_chinese_第5张图片

这与上面的具有常规间隙的数据集问题相同。当我们符合年度季节性时,它只有每月第一天的数据,剩余天数的季节性成分是无法识别和过度拟合的。通过MCMC查看季节性的不确定性可以清楚地看到这一点:

m = Prophet(seasonality_mode='multiplicative', mcmc_samples=300).fit(df)
fcst = m.predict(future)
fig = m.plot_components(fcst)
WARNING:pystan:n_eff / iter for parameter beta_a[1] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[2] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[3] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[4] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[5] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[6] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[7] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[8] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[9] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[10] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[11] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[12] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[13] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[14] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[15] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[16] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[17] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[18] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[19] is nan!
WARNING:pystan:n_eff / iter for parameter beta_a[20] is nan!
WARNING:pystan:n_eff / iter below 0.001 indicates that the effective sample size has likely been overestimated
WARNING:pystan:Rhat for parameter beta_a[1] is nan!
WARNING:pystan:Rhat for parameter beta_a[2] is nan!
WARNING:pystan:Rhat for parameter beta_a[3] is nan!
WARNING:pystan:Rhat for parameter beta_a[4] is nan!
WARNING:pystan:Rhat for parameter beta_a[5] is nan!
WARNING:pystan:Rhat for parameter beta_a[6] is nan!
WARNING:pystan:Rhat for parameter beta_a[7] is nan!
WARNING:pystan:Rhat for parameter beta_a[8] is nan!
WARNING:pystan:Rhat for parameter beta_a[9] is nan!
WARNING:pystan:Rhat for parameter beta_a[10] is nan!
WARNING:pystan:Rhat for parameter beta_a[11] is nan!
WARNING:pystan:Rhat for parameter beta_a[12] is nan!
WARNING:pystan:Rhat for parameter beta_a[13] is nan!
WARNING:pystan:Rhat for parameter beta_a[14] is nan!
WARNING:pystan:Rhat for parameter beta_a[15] is nan!
WARNING:pystan:Rhat for parameter beta_a[16] is nan!
WARNING:pystan:Rhat for parameter beta_a[17] is nan!
WARNING:pystan:Rhat for parameter beta_a[18] is nan!
WARNING:pystan:Rhat for parameter beta_a[19] is nan!
WARNING:pystan:Rhat for parameter beta_a[20] is nan!
WARNING:pystan:Rhat above 1.1 or below 0.9 indicates that the chains very likely have not mixed
WARNING:pystan:479 of 600 iterations saturated the maximum tree depth of 10 (79.83333333333333%)
WARNING:pystan:Run again with max_treedepth larger than 10 to avoid saturation

Prophet文档中文翻译--non-daily_data_chinese_第6张图片

季节性在每月开始时具有较低的不确定性,其中存在数据点,但两者之间具有非常高的后验方差。用Prophet拟合月度数据时,只进行月度预测,这可以通过将频率传递到make_future_dataframe函数中来完成:

# Python
future = m.make_future_dataframe(periods=120, freq='M')
fcst = m.predict(future)
fig = m.plot(fcst)

Prophet文档中文翻译--non-daily_data_chinese_第7张图片

你可能感兴趣的:(Prophet)