I want to consider an approach of forecasting I really like and frequently use. It allows to include the promo campaigns (or another activities and other variables as well) effect into the prediction of total amount. I will use a fictitious example and data in this post, but it works really good with my real data.  So, you can adapt this algorithm for your requirements and test it. Also, it seems simple for non-math people because ofcomplete automation.

Suppose we sell some service and our business depends on the number of subscribers we attract. Definitely, we measure the number of customers and want to predict their quantity. If we know the customer’s life time value (CLV) it allows us to predict the total revenue based on quantity of customers and CLV. So, this case looks like justified.

The first way we can use for solving this problem is multiple regression. We can find a great number of relevant indicators which influence the number of subscribers. It can be service price, seasonality, promotional activities, even S&P or Dow Jones index, etc. After we found all parameters affecting number of customers we can calculate formula and predict number of customers.

This approach has disadvantages:

  • we should collect all these indicators in one place and have historical data of all of them,
  • they should be measured at the same time intervals,
  • most importantly, we should predict all of these indicators as well. If our customers buy several different packages of our service and for different periods, even our average price doesn’t look like it can be easily predicted (not mentioning S&P index). If we use predicted indicators, their prediction errors will affect the final prediction as well.

On the other hand, stock market analysts use time-series forecasting. They are resigned by the fact that stock prices are influenced by a great number of indicators. Thus, they are looking for dependence inside the price curve. This approach is not fully suitable for us too. In case we regularly attracted extra customers via promos (we can see some peaks on curve) the time-series algorithms can identify peaks as seasonality and draw future curve with the same peaks, but what we can do if we are not planning promos in these periods or we are going to make extra promos or change their intensity.

And final statement before we start working on our prediction algorithm. I’m sure it is important for marketers to see how their promos or activities affect the number of customers / revenue (or subscribers in our case).

So, our task is to create the model which doesn’t depend on a great number of predictors from one side (looks like time-series forecasting) and on the other side includes promos effect on total number of subscribers from the other side (looks like regression).

My answer is extended ARIMA model. ARIMA is Auto Regression Integrated Moving Average. “Extended” means we can include some other information in time-series forecasting based on ARIMA model. In our case, other information is the result of promos we had and we are going to get in the future. In case we repeat promo campaigns every year at the same period and get approximately the same number of new customers ARIMA model (not extended) would be enough. It should recognize peaks as a seasonality. This example we won’t review.

Let’s start. Suppose our data is:

We have (from the left to the right):

  • # of period,
  • year,
  • month,
  • number of subscribers,
  • monthly growth (difference between number of subscribers in the next month and number of subscribers in the previous month),
  • extended (sum of promos effect),
  • several types of promo campaigns which affected the number of customers (promo1, promo2, etc.). Also, you can see that some subscribers from particular promo are gone (negative number). When we run some special low pricing promos we realize that part of these customers won’t extend their subscriptions. So, this is the example which includes negative effect of promo campaigns as well.

We need only two variables to make the prediction (‘growth’ and ‘extended’). There are other variables just for your information. Also we have two last months without number of subscribers (we are going to predict these values), but we should have promos effect which we are planning to get in future. Further, the heat-map of growth and extended variables look alike. Thus, we can make conclusion that they are connected.

In the example we will predict values from the 37th to the 42nd to see accuracy of prediction on factual data.

The code in R can be the next:

#load libraries
library(forecast)
library(TSA)
#load data set
df <- read.csv(file='data.csv')
#define periods (convenient for future, you can just change values for period you want to predict or include to factual)
s.date <- c(2010,1) #start date - factual
e.date <- c(2011,12) #end date - factual
f.s.date <- c(2013,1) #start date - prediction
f.e.date <- c(2013,12) #end date - prediction #transform values to time-series and define past and future periods
growth <- ts(df$Growth, start=s.date, end=e.date, frequency=12)
ext <- ts(df$Extended, start=s.date, end=f.e.date, frequency=12)
past <- window(ext, s.date, e.date)
future <- window(ext, f.s.date, f.e.date)
#ARIMA model
fit <- auto.arima(growth, xreg=past, stepwise=FALSE, approximation=FALSE) #determine model
forecast <- forecast(fit, xreg=future) #make prediction
plot(forecast) #plot chart
summary(forecast) #print predicted values

We should get chart and values:

As you remember we have factual data for Jan.2013-Apr.2013 which we can compare: 384 vs 451, 1224 vs 1271, 709 vs 796 and 699 vs 753. Although values are not very close, we can see that February promo affected and we saw a peak. After we add Jan.2013-Mar.2013 to factual periods, our prediction for April will be 718 which is closer to 699 than 753. That means once we have factual data we should recalculate and precise the prediction.

Thus, we have predicted number of subscribers including promo campaigns effect. If we are not satisfied with this number we can add some activity and measure new prediction. Suppose we add new activity for attracting 523 new customers in April 2013 (this means Extended will be 500 instead of -23). In this case our prediction will be:

We got the new peak 1295 in April instead of 753 (in previous prediction). Thus, we have tool for targeting number of subscribers, the only thing we need is to attract these subscribers which we are going to use for prediction ;).

Note, for making prediction for more periods just add values of extended variable in the initial data and change prediction period in the R code.

In case when described approach works poorly I can recommend you this great book written by ‘forecast’ package creator prof. Rob J Hyndman to deepen into forecasting.

Have an accurate predictions!

转自:http://analyzecore.com/2014/06/27/include-promo-effect-into-prediction/

Include promo/activity effect into the prediction (extended ARIMA model with R)的更多相关文章

  1. Module中引用Module中的Activity时报错了,错误是找不到R文件中的id引用

    1.好像库modul和主modul不能有相同名字和layout文件 2.资源文件名冲突导致的

  2. STATS 326 Applied Time Series

    STATS 326Applied Time SeriesASSIGNMENT THREEDue: 2 May 2019, 11.00 am(Worth 6% of your final grade)H ...

  3. Android官方文档翻译 十七 4.1Starting an Activity

    Starting an Activity 开启一个Activity This lesson teaches you to 这节课教给你 Understand the Lifecycle Callbac ...

  4. Android布局优化之include、merge、ViewStub的使用

    本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味 ...

  5. Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activ ...

  6. 【转】关于Activity和Task的设计思路和方法

    Activity和Task是Android Application Framework架构中最基础的应用,开发者必须清楚它们的用法和一些开发技巧.本文用大量的篇幅并通过引用实例的方式一步步深入全面讲解 ...

  7. uva 1560 - Extended Lights Out(枚举 | 高斯消元)

    题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5∗6的矩阵,每一个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,假设按了这个位置的开关,将会导致周围包含自 ...

  8. Android布局优化之ViewStub、include、merge使用与源码分析

    在开发中UI布局是我们都会遇到的问题,随着UI越来越多,布局的重复性.复杂度也会随之增长.Android官方给了几个优化的方法,但是网络上的资料基本上都是对官方资料的翻译,这些资料都特别的简单,经常会 ...

  9. android布局中使用include及需注意点

    在android布局中,使用include,将另一个xml文件引入,可作为布局的一部分,但在使用include时,需注意以下问题: 一.使用include引入 如现有标题栏布局block_header ...

随机推荐

  1. struts2自定义日期类型转换器

    在java web表单中提交的数据难免会有日期类型,struts2支持的日期类型是yyyy-MM-dd,如果是其他格式,就需要自己进行转换.比如yy-MM-dd 要完成自己定义的转换需要完成. 主要的 ...

  2. nginx学习笔记——http module分析

         源码:nginx 1.12.0           nginx由于其高性能.扩充性好等特点在迅速走红,越来越多的公司采用nginx作web服务器.负载均衡.waf等 工作,一些基于nginx ...

  3. Java: 隐性赋值(Implicit Assignment)

    初学 Java 时,我总是记不住如何区别 i++ 和 ++i.在<算法(第四版)>一书中第16页,作者提到: ** ++i ** is the same as i = i+1, and h ...

  4. 简单的RTSP消息交互过程

    C表示RTSP客户端,S表示RTSP服务端 第一步:查询服务器端可用方法 1. C->S:OPTION request       //询问S有哪些方法可用 2. S->C:OPTION ...

  5. 想成为Java高级工程师的看过来

    想成为Java高级工程师,有哪些要求呢? 1.Core Java,就是Java基础.JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看 ...

  6. 基于AngularJS的过滤与排序【转载】

    程序设计分析 首先,如果要是先查询过滤,就要使用到AngularJS中的 过滤器filter 了. 直接在表达式的后面使用管道命令符 | ,按照下面的写法就可以达到一个过滤的效果: {{ person ...

  7. 又拍云SSL证书全新上线,提供一站式HTTPS安全解决方案

    互联网快速发展,云服务早已融入每一个人的日常生活,而互联网安全与互联网的发展息息相关,这其中涉及到信息的保密性.完整性.可用性.真实性和可控性.又拍云上线了与多家国际顶级 CA 机构合作的数款OV & ...

  8. linux下安编译安装redis

    1.先进入要安装到的目录,比如我要把redis安装到/usr/local/redis下,那就先进入/usr/local cd /usr/local 2.然后下载安装包,并解压 wget http:// ...

  9. [进程管理]linux 下 进程和线程的区别(baidu 面试)

    进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是CPU调度和分派的 ...

  10. 深入解析MySQL视图view

    阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...