• 拓端tecdat|Prophet在R语言编程代写中进行时间序列数据预测


    原文链接:http://tecdat.cn/?p=7327

     

    您将学习如何使用Prophet(在R中)解决一个常见问题:预测公司明年的每日订单。 

    数据准备与探索

    先知最适合每日定期数据以及至少一年的历史数据。 我们将使用SQL处理每天要预测的数据:

    `select
    ``  date,
      value
    from modeanalytics.daily_orders
    order by date`
    
    

    现在,我们每天都有数据,我们可以将SQL查询结果集通过管道传递到R笔记本中的R数据框对象中。首先,将您的SQL查询重命名为Daily Orders。然后,在R 中,我们可以使用以下语句将查询结果集传递到数据帧df中:

    df <- datasets[["Daily Orders"]]
    

    为了快速了解您的数据框包含多少个观测值,可以运行以下语句:

    # Retreive dimension of object
    dim(df)
    

    Prophet总是希望输入DataFrame中有两列:ds,分别y,包含日期和数值。 

    # Inspect variables
    str(df)
    

    在此示例中,您将需要进行一些手动的类转换:

    # Parse date column
    df <- mutate (
    df,
    date = ymd_hms(date) # parse date column using lubridate ymd_hms function
    )
    

    一旦确认数据框中的列是正确的类,就可以ds在数据框中创建一个新列,该列是date列的精确副本,一个新列y是value列的精确副本:

    df <- mutate (
    df,
    ds = date,  # Create new ds column from date using mutate
    y = value   # Create new y column from value using mutate
    )
    

    然后,您可以重新调整该date列的用途,以用作数据框 :

    现在您已经准备好要与Prophet一起使用的数据,在将数据输入到Prophet中之前,将其作图并检查数据的外观是个好习惯。 

    1. 2017年5月左右,趋势轨迹发生了明显变化。默认情况下,Prophet自动检测到此类“ 趋势变化点 ”,并允许趋势进行适当调整。先知还允许对这些趋势变化点的识别进行更细粒度的控制。
    2. 每周和每年都有明显的季节性。如果时间序列长于两个周期以上,则先知将自动适应每周和每年的季节性。
    3. 我们的观察结果的均值和方差随时间增加。 

    Box-Cox变换

    通常在预测中,您会明确选择一种特定类型的幂变换,以将其应用于数据以消除噪声,然后再将数据输入到预测模型中(例如,对数变换或平方根变换等)。但是,有时可能难以确定哪种功率变换适合您的数据。 

    Box-Cox变换是一种数据变换,用于评估一组Lambda系数(λ)并选择可实现最佳正态性近似值的值。

     

    如果我们将新转换的数据与未转换的数据一起绘制,则可以看到Box-Cox转换能够消除随着时间变化而观察到的许多增加的方差:

    预测

    使用Prophet通过Box-Cox转换的数据集拟合模型后,现在就可以开始对未来日期进行预测。 
    现在,我们可以使用该predict()函数对未来数据帧中的每一行进行预测。

    forecast <- predict(m, future)
    

    此时,Prophet将创建一个分配给预测变量的新数据框,其中包含名为的列下的未来日期的预测值yhat以及不确定性间隔和预测的组成部分。 :

    plot(m, forecast)
    

    在我们的示例中,我们的预测如下所示:

    如果要可视化各个预测组件,则可以使用Prophet的内置plot_components功能:
    plot_components在我们的示例数据上运行将返回以下一组组件可视化:

    预测和组件可视化显示,Prophet能够准确地建模数据中的潜在趋势,同时还可以精确地建模每周和每年的季节性(例如,周末和节假日的订单量较低)。

    逆Box-Cox变换

    由于先知用于Box-Cox转换后的数据,因此您需要将预测值转换回其原始单位。要将新的预测值转换回其原始单位,您将需要执行Box-Cox逆转换。

    现在,您已将预测值转换回其原始单位,现在可以将预测值与历史值一起可视化:

     

    如果您有任何疑问,请在下面发表评论。

    ▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。 ▍咨询链接:http://y0.cn/teradat ▍联系邮箱:3025393450@qq.com
  • 相关阅读:
    python学习笔记3:基础(元组、字符串、列表、字典)
    python学习笔记2:基础(邮件发送)
    pycharm版本控制
    Pycharm版本控制之本地Git用法
    GitHub使用
    qtp简单说明
    查询Activity方便一点的方法
    appium基础框架
    loadrunner基本流程
    python下的unittest框架
  • 原文地址:https://www.cnblogs.com/tecdat/p/11648942.html
Copyright © 2020-2023  润新知