您将学习如何使用Prophet(在R中)解决一个常见问题:预测公司明年的每日订单。
数据准备与探索
Prophet最拟合每日数据以及至少一年的历史数据。我们将使用SQL处理每天要预测的数据:
代码语言:javascript复制
`select
`` date,
value
from modeanalytics.daily_orders
order by date`
我们可以将SQL查询结果集通过管道传递R数据框对象中。首先,将您的SQL查询重命名为Daily Orders
。然后,在R 中,我们可以使用以下语句将查询结果集传递到数据帧df中:
代码语言:javascript复制df <- datasets[["Daily Orders"]]
代码语言:javascript复制为了快速了解您的数据框包含多少个观测值,可以运行以下语句:
代码语言:javascript复制
#
dim(df)
代码语言:javascript复制Prophet输入DataFrame中有两列:分别包含日期和数值。
代码语言:javascript复制
str(df)
代码语言:javascript复制在此示例中,您将需要进行一些手动的日期格式转换:
代码语言:javascript复制
df <- mutate (
df,
date = ymd_hms(date) #
)
代码语言:javascript复制
现在您已经准备好要与Prophet一起使用的数据,在将数据输入到Prophet中之前,将其作图并检查数据。
- 2017年5月左右,趋势轨迹发生了明显变化。默认情况下,Prophet自动检测到此类“ 趋势变化点 ”,并允许趋势进行适当调整。
- 每周和每年都有明显的季节性。如果时间序列长于两个周期以上,则Prophet将自动适应每周和每年的季节性。
- 我们的观察结果的均值和方差随时间增加。
Box-Cox变换
通常在预测中,您会明确选择一种特定类型的幂变换,以将其应用于数据以消除噪声,然后再将数据输入到预测模型中(例如,对数变换或平方根变换等)。但是,有时可能难以确定哪种变换适合您的数据。
Box-Cox变换是一种数据变换,用于评估一组Lambda系数(λ)并选择可实现最佳正态性近似值的值。
如果我们将新转换的数据与未转换的数据一起绘制,则可以看到Box-Cox转换能够消除随着时间变化而观察到增加的方差:
预测
使用Prophet通过Box-Cox转换的数据集拟合模型后,现在就可以开始对未来日期进行预测。
现在,我们可以使用该predict()
函数对未来数据帧中的每一行进行预测。
代码语言:javascript复制forecast <- predict(m, future)
代码语言:javascript复制此时,Prophet将创建一个预测变量的新数据框,其中包含名为的列下的未来日期的预测值yhat。
代码语言:javascript复制
代码语言:javascript复制plot(m, forecast)
代码语言:javascript复制在我们的示例中,我们的预测如下所示:
如果要可视化各个预测成分,则可以使用plot_components
:
预测和组件可视化显示,Prophet能够准确地建模数据中的潜在趋势,同时还可以精确地建模每周和每年的季节性(例如,周末和节假日的订单量较低)。
逆Box-Cox变换
由于先知用于Box-Cox转换后的数据,因此您需要将预测值转换回其原始单位。要将新的预测值转换回其原始单位,您将需要执行Box-Cox逆转换。
现在,您已将预测值转换回其原始单位,现在可以将预测值与历史值一起可视化:
最受欢迎的见解
1.在python中使用lstm和pytorch进行时间序列预测
2.python中利用长短期记忆模型lstm进行时间序列预测分析
3.使用r语言进行时间序列(arima,指数平滑)分析
4.r语言多元copula-garch-模型时间序列预测
5.r语言copulas和金融时间序列案例
6.使用r语言随机波动模型sv处理时间序列中的随机波动
7.r语言时间序列tar阈值自回归模型
8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类
9.python3用arima模型进行时间序列预测