赞
踩
Prophet 的输入必须包含两列的数据框:ds 和 y 。
example_wp_log_peyton_manning.csv下载地址:
import pandas as pd
from prophet import Prophet
# 读入数据集
df = pd.read_csv('data/example_wp_log_peyton_manning.csv')
print(df.tail(5))
"""
ds y
2900 2016-01-16 7.817223
2901 2016-01-17 9.273878
2902 2016-01-18 10.333775
2903 2016-01-19 9.125871
2904 2016-01-20 8.891374
"""
通过使用辅助的方法 Prophet.make_future_dataframe 来将未来的日期扩展指定的天数,得到一个合规的数据框。
m = Prophet()
m.fit(df)
# 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天
horizon = 365
future = m.make_future_dataframe(periods=horizon)
future.tail(5)
"""
ds
3265 2017-01-15
3266 2017-01-16
3267 2017-01-17
3268 2017-01-18
3269 2017-01-19
"""
# 预测
forecast = m.predict(future)
# 通过 Prophet.plot 方法传入预测得到的数据框,可以对预测的效果进行绘图。
fig1 = m.plot(forecast)
# 使用 Prophet.plot_components 方法。默认情况下,将展示趋势、时间序列的年度季节性和周季节性。如果之前包含了节假日,也会展示出来。
fig2 = m.plot_components(forecast)
如果想查看预测的成分分析,可以使用 Prophet.plot_components 方法。默认情况下,将展示趋势、时间序列的年度季节性和周季节性。如果之前包含了节假日,也会展示出来。
在前面的文章【Prophet代码实战(一)趋势项调节】和【Prophet代码实战(二)季节项调节】介绍了Prophet算法的趋势项和季节项。接下来我们开始介绍Prophet算法的外部变量
Prophet内置的节假日
m = Prophet()
m.add_country_holidays(country_name="US")
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
# 查看节假日
m.train_holiday_names
"""
0 New Year's Day
1 Martin Luther King Jr. Day
2 Washington's Birthday
3 Memorial Day
4 Independence Day
5 Labor Day
6 Columbus Day
7 Veterans Day
8 Thanksgiving
9 Christmas Day
10 Christmas Day (Observed)
11 Veterans Day (Observed)
12 Independence Day (Observed)
13 New Year's Day (Observed)
dtype: object
"""
fig = m.plot_components(forecast)
超参数holidays_prior_scale
m = Prophet(holidays_prior_scale=0.001)
m.add_country_holidays(country_name="US")
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)
fig = m.plot_components(forecast)
自定义节假日、特殊日期
# 自定义两个对运动员的热度具有很大影响的特殊日期:休赛期和超级碗
playoffs = pd.DataFrame({
"holiday":"playoff",
"ds":pd.to_datetime(["2008-01-13", "2009-01-13", "2010-01-16",
"2010-01-24", "2010-02-07", "2011-01-08",
"2013-01-12", "2014-01-12", "2014-01-19",
"2014-02-02", "2015-01-11", "2016-01-17",
"2016-01-24", "2016-02-07"]),
"lower_window":0,
"upper_window":1
})
superbowls = pd.DataFrame({
"holiday":"superbowl",
"ds":pd.to_datetime(["2010-02-07", "2014-02-02", "2016-02-07"]),
"lower_window":0,
"upper_window":1
})
holidays = pd.concat([playoffs,superbowls])
m = Prophet(holidays=holidays)
m.add_country_holidays(country_name="US") # 同时考虑传统节假日和自定义节假日
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
forecast = m.predict(future)
fig = m.plot_components(forecast)
其他外部变量
# 添加外部变量:是否时橄榄球赛季的周六、周日
def nfl_sunday(ds):
date = pd.to_datetime(ds)
if date.weekday() == 6 and (date.month > 8 or date.month < 2):
return 1
else:
return 0
def nfl_saturday(ds):
date = pd.to_datetime(ds)
if date.weekday() == 5 and (date.month > 8 or date.month < 2):
return 1
else:
return 0
df["nfl_sunday"] = df["ds"].apply(nfl_sunday)
df["nfl_saturday"] = df["ds"].apply(nfl_saturday)
m = Prophet()
m.add_regressor("nfl_sunday")
m.add_regressor("nfl_saturday")
m.fit(df)
horizon = 365
future = m.make_future_dataframe(periods=horizon)
# 未来日期也需要外部变量的值
future["nfl_sunday"] = future["ds"].apply(nfl_sunday)
future["nfl_saturday"] = future["ds"].apply(nfl_saturday)
forecast = m.predict(future)
fig = m.plot_components(forecast)
可调整的超参数
也许可以调整的超参数
基本不用调整的参数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。