本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。
Prophet
算法
在时间序列中Prophet
是Facebook开源的时间序列预测算法,可以有效处理节假日信息,并按周、月、年对时间序列数据的变化趋势进行拟合。
https://facebook.github.io/prophet/
# pip
python -m pip install prophet
# conda
conda install -c conda-forge prophet
截至2023年1月,这个Python包通过PyPI已被下载超过1600万次,每月下载量仍保持在100万次。
Prophet
对具有强烈周期性特征的历史数据拟合效果很好,不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形。
模型定义
Prophet
使用了可分解的时间序列模型,模型包含三个主要组件:趋势、季节性和假日。它们通过以下方程组合在一起:
-
是趋势函数,用于模拟时间序列值的非周期性变化
-
表示周期性变化(例如每周和每年的季节性变化)
-
表示假日效应,这些假日在一个或多个不规则时间安排的日子内发生
-
误差项表示模型未能捕捉的变化
Prophet
适用场景
-
有至少几个月(最好是一年)的每小时、每天或每周观察的历史数据;
-
有多种人类规模级别的较强的季节性趋势:每周的一些天和每年的一些时间;
-
有事先知道的以不定期的间隔发生的重要节假日(比如国庆节);
-
缺失的历史数据或较大的异常数据的数量在合理范围内;
-
有历史趋势的变化(比如因为产品发布);
Prophet
出发点
Prophet
的出发点是提供一种灵活的、可解释的回归模型,该模型可以直观地由具有时间序列知识的分析师调整。这种模型的设计考虑了以下几个关键点:
-
易于使用:
Prophet
旨在使没有时间序列方法训练的大量人员也能进行预测。 -
灵活性:它能够适应具有潜在特殊特征的多种预测问题。
-
自动化与人工干预相结合:
Prophet
通过自动化的方式进行预测,同时在模型性能不佳或需要人工干预时,允许分析师进行调整。 -
大规模评估:在创建大量预测时,需要有效、自动化的方法来评估和比较预测结果,并检测可能表现不佳的情况。
-
可解释性:
Prophet
的参数具有直观的解释,使得即使非专家也能根据领域知识进行模型配置。
Prophet
模型的设计允许它捕捉时间序列数据中的多种特征,如趋势、季节性、假日效应等,同时提供了一种机制来评估预测性能并根据需要进行调整。
Prophet
使用案例
案例 1:拟合基础模型
import pandas as pd
from prophet import Prophet
# 需要有两列,ds 列和 y 列
df = pd.read_csv('https://mirror.coggle.club/prophet/example_wp_log_peyton_manning.csv')
# 定义模型,并训练
m = Prophet()
m.fit(df)
# 推理未来的日期,并镜像预测
future = m.make_future_dataframe(