R中用于广告和销售数据的数据挖掘技术

机器算法验证 r 时间序列 数据挖掘
2022-04-12 05:35:48

我想将一种或多种数据挖掘技术应用于数据集,以了解广告对销售的影响。

我正在使用这个数据集它有 36 个连续的销售和广告月度数据条目 - 它非常小。

我将数据集导出到“.csv”。我删除了日期列,因为我将使用 R 的 ts(时间序列对象)。“.csv”现在看起来像这样:

Advertising,Sales
12,15
20.5,16
21,18
..., ..., ...
23.4,17
16.4,1

下面编码的示例有效。HoltWinters()但是,由于函数的原因,我不得不将矩阵拆分为两个列表。我更愿意在后期一起分析广告和销售。还有哪些其他数据挖掘技术可能更有益?

data <- read.csv("./advertising_sales.csv", header=TRUE)
data_ts <- ts(data, start = c(2011,1), frequency = 12)
print(data_ts) # to check data has been correctly added

> Jan 2012    13        17.3    21
+ Feb 2012    14        25.3    29  
+ ...
+ Nov 2013    35        23.4    17
+ Dec 2013    36        16.4     1

plot(decompose(data_ts))
data_ts_ad <- data_ts[,1] #assign advertising as list, for HoltWinters
data_ts_sa <- data_ts[,2] # assign sales as list, for HoltWinters

#do HoltWinters for advertising
plot(HoltWinters(data_ts_ad))
data_ts_ad.hw <- HoltWinters(data_ts_ad)
predict(data_ts_ad.hw,n.ahead=9)

>           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
+ 2014 18.52852 25.47521 27.16683 36.41340 38.14678 33.04452 33.22488 32.12758
      Sep
+ 2014 32.58964

plot(data_ts_ad,xlim=c(2010,2014))
lines(predict(data_ts_ad.hw, n.ahead=24), col=2)

#do HoltWinters for sales
plot(HoltWinters(data_ts_sa))
data_ts_sa.hw <- HoltWinters(data_ts_sa)
predict(data_ts_sa.hw,n.ahead=9)

>          Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
+ 2014 11.05723 23.27877 50.06859 57.22696 61.50669 26.35195 62.26159 70.83347
      Sep
+ 2014 23.18957

plot(data_ts_sa,xlim=c(2010,2014))
lines(predict(data_ts_sa.hw, n.ahead=24), col=2)

我最近看到一本书,名为R 和数据挖掘:赵延昌的例子和案例研究它有出色的工作示例,这就是我找到灵感的地方。但是,我无法让我的小脑袋思考哪些技术可以应用于这个数据集。

我是 R 的新手,所以请稍微降低你的答案。

编辑: data_ts 的输出如下。

dput(data_ts)

structure(c(12, 20.5, 21, 15.5, 15.3, 23.5, 24.5, 21.3, 23.5, 
28, 24, 15.5, 17.3, 25.3, 25, 36.5, 36.5, 29.6, 30.5, 28, 26, 
21.5, 19.7, 19, 16, 20.7, 26.5, 30.6, 32.3, 29.5, 28.3, 31.3, 
32.2, 26.4, 23.4, 16.4, 15, 16, 18, 27, 21, 49, 21, 22, 28, 36, 
40, 3, 21, 29, 62, 65, 46, 44, 33, 62, 22, 12, 24, 3, 5, 14, 
36, 40, 49, 7, 52, 65, 17, 5, 17, 1), .Dim = c(36L, 2L), .Dimnames = list(
    NULL, c("Advertising", "Sales")), .Tsp = c(2006, 2008.91666666667, 
12), class = c("mts", "ts", "matrix"))
2个回答

保持模型尽可能简单(但不要太简单)非常重要。绝对没有证据表明应该将季节性差异纳入数据的合理模型中。一些分析人士认为,复杂的模型会产生更高的咨询费用。差异是一种转换(并发症)的形式,并且与其他转换(药物/酒精)一样可能会产生后果。早期参考(在干预检测之前http://www.unc.edu/~jbhill/tsay.pdf) 没有意识到对季节性脉冲的需求,当几个季节性指标夜间足够时,通常会包含季节性 AR 或季节性差异。原始系列的 ACF 不需要任何季节差异。滞后 12 的 acf 是由几个月引起的,具有逐年相似性,但这是非典型的,因为只有三个月表现出相似性(3 月 +22、4 月 +12 和 8 月 +35)。在此处输入图像描述. 一个包含 3 个季节性脉冲和 3 个脉冲效应(仅限一次)的有用模型如下。在此处输入图像描述. 残差的 acf 表明充分性在此处输入图像描述,这在视觉上由残差图支持在此处输入图像描述实际/拟合和预测图如下在此处输入图像描述它提供的预测比这里提供的其他预测更令人赏心悦目。请注意,我对 Y 的预测是基于明年的预期 X,使用最近一年的值作为典型基线。对 X 的不同预测将转化为对 Y 的不同预测。在此处输入图像描述. 请注意,AUTOBOX 和 auto.arima 的预测模式“有些相似但级别不同”。另请注意 auto.arima 对明年 7 月高位的“错误预测”,因为它认为 1992 年 7 月的值是基础,而不是像 AUTOBOX 那样挑战 1992/7 年的值。AUTOBOX 感觉 1992 年 7 月明显高于预期(前两年分别为 52 和 21 和 33),因此包含一个幅度为 +22.8623 的“异常值”。通过减去 22.8623 来调整 7 月份的值,得出的预测不会因异常而有缺陷。相比之下,8 月的值为 22,过去两年确认为 62 和 65,因此估计的 8 月效应为正值 35.698。在没有 ARIMA 效应的情况下,8 月的调整将是 [(62+65)/2] -22 或 41。

最后,软件可用性通常会限制一些研究人员可以做的事情,甚至对可以做的事情的了解,因为他们个人无法获得创新方法。Stack_Exchange 的优势在于思想和方法的自由开放和交流。

这个例子来自亚伯拉罕和莱多尔特 1982 年的著作。http://tinyurl.com/mxurcxy 参见第 70 页,他们分析了这个时间序列。他们发现广告有滞后效应,而 auto.arima 没有。请注意,AUTOBOX 包含用于噪声的 AR(1) 结构,该结构转换为 Y 和 X 上的滞后结构,因此通常支持滞后依赖的教科书解决方案。auto.arima 的问题在于,如果您不处理异常,则误差方差会扩大,因此由于 acf 中的向下偏差而错过了必要的 AR 结构,因为 acf 部分基于(膨胀的)误差方差。

为了回答 Whuber 的问题,我在这里准确地介绍了如何对时间段 37 进行预测。在此处输入图像描述

鉴于您有一个时间序列,趋势和季节性可能对销售产生影响,我建议您寻找可以处理诸如广告之类的因果效应的时间序列技术。该线程应该是一个很好的起点,尽管您的重点似乎不是预测。

尝试这样的事情:

> library(forecast)
> model <- auto.arima(data_ts[,"Sales"],xreg=data_ts[,"Advertising"])

这将为销售建立一个 ARIMAX 模型,将广告作为外部变量。然后您可以summary(model)查看,例如,参数估计。

> summary(model)
Series: data_ts[, "Sales"] 
ARIMA(0,0,0)(0,1,0)[12]                    

Coefficients:
      data_ts[, "Advertising"]
                        1.6445
s.e.                    0.6574

sigma^2 estimated as 575.3:  log likelihood=-51
AIC=106   AICc=106.57   BIC=108.35

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE
Training set -2.821585 13.84857 9.039446 -40.91741 64.68516 0.5506261
                    ACF1
Training set 0.003027406

我们看到 ARIMAX 认为每单位的广告会增加 1.64 的销售额。您可以绘制:

plot(data_ts[,"Sales"])
lines(data_ts[,"Advertising"],col="red")

如果您有广告的未来价值data_ts_ad_future,您可以预测和绘制点预测和预测区间:

set.seed(1)
data_ts_ad_future <- ts(sample(data_ts[,"Advertising"],12,replace=TRUE),
    start=c(2009,1),frequency=frequency(data_ts[,"Advertising"]))
fcst <- forecast(model,xreg=data_ts_ad_future)
plot(fcst)
lines(data_ts[,"Advertising"],col="red")
lines(data_ts_ad_future,col="red",lty=2)

时间序列