我希望通过每小时应用更好的广告系列来实现收入最大化。
我想创建一个可以帮助我选择更好的广告系列的树。
根据以下数据,每小时每个广告系列的收入都有记录。
查看数据,我可能会看到广告系列A在1-12小时之间更好,而广告系列B在13-24小时之间更好。
如何在R中创建告诉我的树?
hour campaign revenue
1 A 23
1 B 20
2 A 21
2 B 22
3 A 23
3 B 20
4 A 21
4 B 22
5 A 23
5 B 20
6 A 21
6 B 22
7 A 20
7 B 17
8 A 18
8 B 19
9 A 20
9 B 17
10 A 18
10 B 19
11 A 20
11 B 17
12 A 19
12 B 18
13 A 8
13 B 9
14 A 6
14 B 11
15 A 9
15 B 8
16 A 6
16 B 11
17 A 9
17 B 8
18 A 6
18 B 11
19 A 3
19 B 2
20 A 3
20 B 2
21 A 0
21 B 5
22 A 3
22 B 2
23 A 3
23 B 2
24 A 0
24 B 5
答案 0 :(得分:3)
我不确定您正在寻找什么样的树,但revenue
的线性模型树(带有回归量campaign
和分区变量hour
)可能很有用。使用包lmtree()
中的partykit
,您可以通过拟合具有两个系数的线性模型(拦截和广告系列B效果)来开始树,然后只要存在重要的不稳定性,就会对数据进行拆分。至少有一个系数:
library("partykit")
(tr <- lmtree(revenue ~ campaign | hour, data = d))
## Linear model tree
##
## Model formula:
## revenue ~ campaign | hour
##
## Fitted party:
## [1] root
## | [2] hour <= 12: n = 24
## | (Intercept) campaignB
## | 20.583333 -1.166667
## | [3] hour > 12: n = 24
## | (Intercept) campaignB
## | 4.666667 1.666667
##
## Number of inner nodes: 1
## Number of terminal nodes: 2
## Number of parameters per node: 2
## Objective function (residual sum of squares): 341.1667
在这个(可能是人为的)数据中,这选择了12小时的单个分割,然后有两个终端节点:一个具有负面的活动B效果(即A更好)和一个具有正面活动B效果(即,B更好)。结果plot(tr)
产生:
这也表明,分割也受到收入水平变化的驱动,而不仅仅是不同的竞选效应(相当小)。
底层树算法称为“基于模型的递归分区”(MOB),也适用于线性回归以外的模型。有关详细信息,请参阅手册和插图中的参考资料。
另一种可能有趣的算法是Dusseldorp&amp; amp;的QUINT(定性交互树)。 Van Mechelen,可在quint
包中找到。
为便于复制上述示例:可以通过
重新创建d
数据框
d <- read.table(textConnection("hour campaign revenue
1 A 23
1 B 20
2 A 21
2 B 22
3 A 23
3 B 20
4 A 21
4 B 22
5 A 23
5 B 20
6 A 21
6 B 22
7 A 20
7 B 17
8 A 18
8 B 19
9 A 20
9 B 17
10 A 18
10 B 19
11 A 20
11 B 17
12 A 19
12 B 18
13 A 8
13 B 9
14 A 6
14 B 11
15 A 9
15 B 8
16 A 6
16 B 11
17 A 9
17 B 8
18 A 6
18 B 11
19 A 3
19 B 2
20 A 3
20 B 2
21 A 0
21 B 5
22 A 3
22 B 2
23 A 3
23 B 2
24 A 0
24 B 5"), header = TRUE)
答案 1 :(得分:0)
这样的事情会起作用吗?
## create a sequence of hours from column 1 of the data
hr <- as.numeric(unique(data[,1]))
## Set up vectors to hold the A and B campaign "best" hours
A.hours=NULL
B.hours=NULL
## start at the lowest hour
i=1
while(i<=max(hr)) {
## create a subset of data from the current hour
sub.data <- data[matrix(which(data[,1]==hr[i])),]
## find the campaign with the highest revenue
best.camp <- sub.data[which(sub.data[,3]==max(sub.data[,3])),2]
if(best.camp=="A") {
A.hours <- c(A.hours,hr[i])
}
if(best.camp=="B") {
B.hours <- c(B.hours,hr[i])
}
i=i+1
}
代码表明,在A.hours(小时:1 3 5 7 9 11 12 15 17 19 20 22 23)期间,活动A更有利可图。
然而,在B.hours(小时:2 4 6 8 10 13 14 16 18 21 24)期间,B运动更有利可图。