2014-01-27 115 views
3

我作为实施新计划的销售组织的一员工作。基本上,我们正在测试是否向潜在客户发送电子邮件使他们更有可能出现并查看我们产品的“演示”。我的数据包含约26,000个与潜在客户进行互动的观察结果,其中一些已经发送了“演示提醒”(电子邮件的用语),另一些则没有发送。每行数据还有列进一步细分数据(呼叫多久,销售人员打了多少电话,电话是否成功举行了演示等)。R:是否可以在拟合模型上绘制数据?

我使用这些数据在R中生成了一个广义线性模型,它似乎很适合。然后,使用没有发送提醒的数据,我绘制了关于他们发送了一个假想情况的预测图。

这里是我的代码如下所示:

library(car) 
library(ggplot2) 

#data 
demo.reminder.data <- read.csv("demo mo mixed aggregate raw.csv") 

#model 
demo.glm.final <- glm(Demos_Held ~ Rep_Channel + Demo_sent + Contacts + Opportunities + Vertical + Total_calls_bucket + Rep_Location, data = demo.reminder.data, family = binomial(link = "logit")) 

#null model and goodness of fit 
demo.null <- glm(Demos_Held ~ 1, data = demo.reminder.data, family = 'binomial') 
AIC(demo.null) 
AIC(demo.glm.final) 

#data with no demo reminders 
demo.reminder.data.none.sent <- demo.reminder.data 
demo.reminder.data.none.sent$Demo_sent <- "No Demo Reminder" 

#data with demo reminders 
demo.reminder.data.all.sent <- demo.reminder.data 
demo.reminder.data.all.sent$Demo_sent <- "Demo Reminder" 


#predict probability of hold with no reminder 
demo.reminder.data$none.sent.pred <- predict(demo.glm.final, newdata=demo.reminder.data.none.sent, type="response") 

#predict probability of hold with reminder 
demo.reminder.data$all.sent.pred <- predict(demo.glm.final, newdata=demo.reminder.data.all.sent, type="response") 


demo.reminder.data$abs.lift.pred <- demo.reminder.data$all.sent.pred - demo.reminder.data$none.sent.pred 

#plot 1 
qplot(none.sent.pred, abs.lift.pred, data=demo.reminder.data) + xlab("Probability of Hold - No Reminder") + ylab("Increase in Probability With Reminder") + ggtitle("Effect of Demo Reminders") 

#plot 2 
qplot(demo.reminder.data$none.sent.pred, demo.reminder.data$all.sent.pred, data = demo.reminder.data)+ xlab("Probability of Hold - No Reminder") + ylab("Increase in Probability With Reminder") + ggtitle("Effect of Demo Reminders") 

问题/问题:当我绘制这个数据看起来方式太完美了。它基本上显示了一种可能性,即在初始可能性低于25%的情况下展示任何事情的可能性提高65%,而我的直觉告诉我一封电子邮件不具备这种权力。我怀疑问题是我只是在绘制拟合模型的点,这就是为什么我看到这个完美的日志曲线(将附加图片,但鉴于这是我的第一篇文章,我的声誉不够高)。我认为实际的数据会更加分散,并且曲线下方有更多的点(以及曲线上方的点)。

有没有一种方法可以让我绘制左右该模型可以显示实际的外观?

更重要的是,我想这是正确的方法吗?我相信是的,但我可能会错过一些非常明显的东西。

提前致谢!

编辑:拿到足够的积分后的情节 Plot 1

+1

一个好的答案需要一段时间,但是您希望在参数和过程(采样)误差中包含不确定性。 'simulate()'方法会很方便;你可以通过使用'update(mymodel,data = transform(origdata,y = simulate(mymodel)))'然后'从这些模型中模拟()'来做参数自举。 –

回答

2

的照片,除非您提供的数据的至少一个(代表)的样品,你一定会得到含糊的答复。像这样......

首先,你把一切加上厨房水槽扔进你的模型,所以它可能是过分指定的。你跑summary(demo.glm.final)看看哪个参数有p<0.05?你看过合适的统计数字吗?特别是,使用:

plot(demo.glm.final) 

这将显示残差是否正常分布,以及是否存在具有非常高杠杆的情况。

二,您是否在demo.glm.final上运行stepAIC(...)?这将删除不重要的参数。

第三,你是比较完整的数据集Demo_sent人为地设置为"Demo Reminder",与Demo_sent完整数据集人为地设置为"No Demo Reminder"。更好的比较可能是只查看那些没有发送提醒的记录,并预测仅在这些情况下发送提醒的效果:

## not tested... 
test.data   <- subset(demo.reminder.data, Demo_sent=="No Reminder") 
test.data$pred.no <- predict(demo.glm.full, data=test.data, type="response") 
test.data$Demo_sent <- "Reminder Sent" 
test.data$pred.yes <- predict(demo.glm.full, data=test.data, type="response") 
library(ggplot2) 
ggplot(test.data) + geom_line(aes(x=pred.no, y=pred.yes)) 
相关问题