关于算法:R语言指数平滑法holtwinters分析谷歌Google-Analytics时间序列数据预测博客用户访问数量

47次阅读

共计 4286 个字符,预计需要花费 11 分钟才能阅读完成。

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

在等距时间段内以一系列点取得的数据通常称为工夫序列数据。月度批发销售、每日天气预报、就业数据、消费者情绪考察等都是工夫序列数据的经典示例。事实上,自然界、迷信、商业和许多其余利用中的大多数变量都依赖于能够在固定工夫距离内测量的数据。

剖析工夫序列数据的要害起因之一是理解过来并预测将来。科学家能够利用历史气象数据来预测将来的气候变化。营销经理能够查看某种产品的历史销售额并预测将来的需要。

在数字世界中,工夫序列数据的一个很好的利用能够是剖析特定网站 / 博客的访问者,并预测该博客或页面未来会吸引多少用户。

在本文中,咱们将查看与拜访此博客的用户无关的工夫序列数据集。我将在 R 中建设与 Google Analytics API 的连贯,并将每日用户引入。而后咱们将创立一个预测来预测博客可能会吸引的用户数量。我随机抉择了日期范畴仅用于阐明目标。

这里的想法是让咱们学习如何将 Google Analytics 中的数据查问到 R 中以及如何创立工夫序列预测。

让咱们首先设置咱们的工作目录并加载必要的库:

# 设置工作目录
setwd("/Users/")

# 加载所需的软件包。library(ggplot2) # 用于绘制一些初始图。library(forecast) # 用于工夫序列的预测。

从 Google Analytics API 查问博客用户的每日工夫序列数据。上面是设置我想要的参数的初始查问。在这个例子中,我只是从 2017 年 1 月中旬到 2017 年 5 月中旬每天拉博客的用户数据。

# 创立一个在谷歌剖析查问中应用的参数列表
listparam = Int(
             dinsns= "ga:date",
             mercs = "ga:users",
             sot = "ga:date",
             maresults = 10000,
             tae.id = "ga:99395442"
             )

设置了我的查问参数列表,我就能够开始查问 Google Analytics API:

# 存储谷歌剖析的查问后果
es = QueyBlder(lit_pram)

#通过查问后果和 oauth 从 Google Analytics 取得数据
df = GetRporData(rs, oaut_tken, splidawse = T)

# 对后果从新排序 
# 查看前 30 天的用户
head(df,30)

从下面的 30 条记录中能够看出,惟一应用的特色或变量是日期和用户数量。这是一个非常简单的数据集,但能够很好地阐明工夫序列预测示例。

工夫序列剖析中最重要的步骤之一是绘制数据并查看它是否有序列中的任何模式和稳定。让咱们在工夫序列图中绘制咱们日常用户的后果,以查看趋势或季节性,周末用 S 符号标识:

# 解决日期和绘制每日用户
df$dte <- as.ate(dfdte, '%m%d')
df$d = as. fator(weekays(dfdate))
ggplot(daa = df, as( dateusers)) + 
  geom_line()

用这个博客的每日用户数据看下面的图表,用户仿佛随着工夫的推移而减少。该序列从不到 100 名用户开始,在一天外在给定的工夫点减少到 400 多名用户。用户仿佛普遍存在回升 趋势 。咱们还能够粗略地辨认出系列中的波峰和波谷,或起伏。这种模式可能与  季节性变动无关。换句话说,每天拜访此博客的用户数量仿佛存在肯定水平的季节性。咱们能够按星期几运行一个简略的箱线图,尝试更好地可视化这种模式:

# 创立工作日作为因素并绘制它
df$wd = fator(df$kd)
ggplot(df, aes(x=wd, y=srs)) + 
  geom_boxplt()

正如您在上图中所看到的,周二到周四是访客最多的日子。它吸引了很多用户,在某些时候,某些工作日的用户曾经超过 400 人。事实上,与一周中的其余日子相比,周四仿佛蕴含大量异样值。相同,与一周中的其余日子相比,周六、周日和周一吸引的用户数量起码。

因而,当咱们从新扫视下面的工夫序列图时,咱们当初能够说用户偏向于在周内(星期四的高峰期)更多地拜访此博客,而在周末(星期日)则更少。这是咱们之前察看到的季节性变动。

在工夫序列剖析中,咱们偏向于将察看到的工夫序列数据 合成 为三个根本组成部分:趋势 季节性  和  不规则

咱们这样做是为了察看它的个性并将_信号_ 与 _噪声_离开。咱们合成工夫序列识别模式、进行预计、对数据建模并进步咱们理解正在产生的事件和预测将来行为的能力。合成工夫序列使咱们可能在最能形容其行为的数据中拟合模型。

趋势成分是工夫序列的长期方向,反映了察看到的潜在程度或模式。在咱们的例子中,趋势是向上的,这反映了越来越多的用户拜访博客。

季节性成分包含在工夫、幅度和方向上统一的数据中察看到的个别效应。例如,在咱们这里的例子中,咱们看到用户在周三到周四频繁呈现正峰值。季节性可能由许多因素驱动。在零售业,季节性产生在特定日期,例如长假、双十一。在咱们的博客示例中,仿佛用户在学习 / 工作周拜访更多,而在周末拜访更少。

不规则,或者也被称为残差,是咱们去除趋势和季节性成分后剩下的成分。它反映了序列中不可预知的稳定。

在咱们合成这个博客日常用户的工夫序列之前,咱们须要将查问的用户数据框转换为 R 中的工夫序列对象 _ts()_:

# 将数据框转换成工夫序列对象
dfts = ts(df$ers, freqny = 7)

# 合成工夫序列并绘制后果
dcmp = dompose(dfts, tye = "aditve")
prit(dcmp)

 

plot(decp)

通常,工夫序列合成采纳 加法  或  乘法 的模式。还有其余模式的合成,但咱们不会在本例中波及这些。

简略地说,加法合成用于工夫序列,其中序列的根底程度稳定但季节性的幅度放弃绝对稳固。随着趋势程度随工夫变动,季节性和不规则成分的幅度不会产生显着变动。

另一方面,当季节性和不规则的幅度随着趋势的减少而减少时,应用乘法合成。

咱们能够在下面的初始工夫序列图中察看到,季节性的幅度在整个工夫序列中根本保持稳定,这表明加法合成更有意义。

咱们在这个练习中的指标之一也是尝试和拟合一个模型,使咱们可能推断数据并进行预测,预测本博客的将来用户。很显著,预测工夫序列的一个要害假如是,目前的趋势将持续。也就是说,在没有任何令人诧异的变动或冲击的状况下,总体趋势在将来应该放弃相似(至多在短期内)。咱们也将不思考察看到的模式的任何潜在起因(例如,本博客的任何帖子在微信公众号有很大的知名度,可能促使很多用户来到博客页面,等等)。

当咱们在工夫序列中进行预测时,咱们的目标是在给定某个工夫点的过来察看历史的状况下预测某个将来值。须要围绕拟合工夫序列模型所需的指数平滑模式进行许多思考。为简略起见,咱们将在这里只波及一种办法。

因而,思考到咱们的工夫序列存在季节性并应用加法合成,适当的平滑办法是 Holt-Winters,它应用指数加权挪动平均线来更新估计值。

让咱们在工夫序列数据中拟合一个预测模型:

# 在工夫序列中利用 HoltWinters 模型并查看拟合状况
print(pred)

从下面的模型拟合中能够看出,Holt-Winters 的平滑是应用三个参数实现的:alphabeta 和 gamma。Alpha 预计趋势(或程度)重量,β 预计趋势重量的斜率,而 gamma 预计季节性重量。这些估计值基于系列中的最新工夫点,这些值将用于预测。alpha、beta 和 gamma 的值范畴从 0 到 1,其中靠近 0 的值示意最近的观测值在预计中的权重很小。

从下面的后果中,咱们能够看到 alpha 的平滑估计值为 0.4524278,beta 为 0.0211364,gamma 为 0.5593518。alpha 的值大概为 0.5,这表明短期的、近期的察看和历史的、更远的察看都在工夫序列的趋势预计中起作用。beta 值接近于零,这表明趋势重量的斜率(从一个时间段到下一个时间段的程度变动)在整个序列中放弃绝对类似。gamma 的值与 alpha 绝对类似,这表明季节性预计基于近期和远距离观测。

上面的模型拟合(红色)和理论察看值(彩色)的图有助于阐明后果:

# 绘制模型拟合图
plot(pred)

咱们当初能够推断模型来预测这个博客的将来用户:

# 对将来用户的预测
forecast(pred, h=28)

请留神上图中,粗而亮的蓝线示意用户在下个月左右拜访此博客的预测。深蓝色暗影区域代表 80% 的预测区间,浅蓝色暗影区域代表 95% 的预测区间。正如咱们所见,该模型通常阐明了察看到的模式,并且在预计此博客的将来用户数量方面做得绝对较好。

倡议咱们查看预测模型准确性。首先让咱们看看 平方误差总和 (SSE),它掂量咱们的模型与理论察看数据的差距。执行平方是为了防止负值,并为较大的差别赋予更多权重。靠近 0 的值总是更好。在咱们的例子中,咱们能够看到咱们模型的 SSE 是 9.8937336 10^4。

查看自相干也很重要。一般来说,自相干是用来评估工夫序列和同一时间序列的时滞之间是否存在相干关系。这就像把该工夫序列复制屡次,并在每一步工夫前粘贴,评估是否发现了一个模式。在工夫序列误差的背景下,自相干被用来尝试和寻找存在于残差中的模式。这就是上面的关系图所要做的。

 

# 模型残差的相干图和柱状图
acf(residuals\[8:length\])

无需在 Correlogram 自身上破费太多工夫,咱们能够留神到,尽管模型运行得绝对较好,但它在系列的晚期阶段并没有像 _acf() 函数的_ 自相干后果 (y 轴)在滞后 2 和 3 处。

此外,咱们能够从残差的直方图中看到,预测误差在肯定水平上呈正态分布,存在一些异样值,表明模型拟合绝对较好。


最受欢迎的见解

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 模型进行工夫序列预测

正文完
 0