Type: | Package |
Title: | Analysis & Measurement of Promotion Effectiveness |
Version: | 0.1.5 |
Date: | 2021-04-13 |
Description: | Analysis and measurement of promotion effectiveness on a given target variable (e.g. daily sales). After converting promotion schedule into dummy or smoothed predictor variables, the package estimates the effects of these variables controlled for trend/periodicity/structural change using prophet by Taylor and Letham (2017) <doi:10.7287/peerj.preprints.3190v2> and some prespecified variables (e.g. start of a month). |
Depends: | R (≥ 3.5.0), Rcpp (≥ 0.12.17), dplyr (≥ 0.7.6), ggplot2 (≥ 3.0.0), scales (≥ 1.0.0) |
Imports: | KernSmooth (≥ 2.23.15), ggpubr (≥ 0.1.8), reshape2 (≥ 1.4.3), stringr (≥ 1.3.1), strucchange (≥ 1.5.1), lmtest (≥ 0.9), crayon (≥ 1.3.4), prophet (≥ 0.6.1) |
License: | BSD_3_clause + file LICENSE |
URL: | https://github.com/ncsoft/promotionImpact |
LazyData: | true |
RoxygenNote: | 7.1.1 |
Encoding: | UTF-8 |
Author: | Nahyun Kim [cre, aut], Hyemin Um [aut], Eunjo Lee [aut], NCSOFT Corporation [cph] |
Maintainer: | Nahyun Kim <nhkim1302@ncsoft.com> |
NeedsCompilation: | no |
Packaged: | 2021-04-13 08:07:44 UTC; nhkim1302 |
Repository: | CRAN |
Date/Publication: | 2021-04-13 15:00:05 UTC |
compare several models
Description
compareModels
Usage
compareModels(
data,
promotion,
fix = list(logged = TRUE, differencing = TRUE),
time.field = "dt",
target.field = "sales",
dummy.field = NULL,
trend.param = 0.05,
period.param = 3,
var.type = "smooth",
smooth.except.date = NULL,
smooth.bandwidth = 2,
smooth.var.sum = TRUE,
allow.missing = TRUE
)
Arguments
data |
Dataframe containing date, target variable, and some additional time dummies that the researcher wants to account for. |
promotion |
Dataframe containing promotion ID, start date, end date, promotion tag(type). Might include daily payments associated with the promotion. |
fix |
A List of constraints to find the best model. Constraints can only be in following list: 'period','trend','logged','synergy.var','differencing','smooth.origin','structural.change','synergy.promotion' |
time.field |
Specify the date field of 'data'. |
target.field |
Specify the target field of 'data'. |
dummy.field |
Specify the additional time dummies of 'data'. |
trend.param |
Flexibility of trend component. Default is 0.05, and as this value becomes larger, the trend component will be more flexible. |
period.param |
Flexibility of period component. Default is 3, and as this value becomes larger, the period component will be more flexible. |
var.type |
'smooth' to use smoothed promotion variables, 'dummy' to use dummy promotion variables |
smooth.except.date |
Date value that will be excluded from the smoothing process. eg) '01' to exclude every start day of a month |
smooth.bandwidth |
Bandwidth of local polynomial regression used in the smoothing process. Default value is 2. |
smooth.var.sum |
If TRUE, the smoothing values for times when multiple promotions in a single tag overlap will be the values from the latest promotion. Otherwise, the values will be added(default). |
allow.missing |
TRUE to allow missing data in promotion sales during the promotion period |
Details
compareModels compares several models under user-defined conditions and suggests the best options.
Examples
comparison <- compareModels(data = sim.data, promotion = sim.promotion.sales,
fix = list(logged = TRUE, differencing = TRUE, smooth.origin='all',
trend = FALSE, period = NULL),
time.field = 'dt', target.field = 'simulated_sales',
trend.param = 0.02, period.param = 2)
generate data.frame with dummy variables for each promotion period
Description
generate data.frame with dummy variables for each promotion period
Usage
create.dummy.vars(target.data, promotion.data, tovar.col = "pro_id")
calculate smoothed values imitated promotion sales
Description
calculate smoothed values imitated promotion sales
Usage
create.smooth.vars(
target.data,
promotion.data,
smooth.except.date = NULL,
smooth.bandwidth = 2,
smooth.origin = "all",
smooth.var.sum = TRUE,
smooth.scale = "minmax"
)
detect some outliers
Description
detectOutliers
Usage
detectOutliers(
model,
threshold = list(cooks.distance = 1, dfbetas = 1, dffits = 2),
option = 2
)
Arguments
model |
Execution result object : promotionImpact |
threshold |
List of threshold values to be determined as outliers if greater than the written values |
option |
The number of indicators that must be greater than the threshold values to be outliers. |
Details
detectOutliers extracts outliers which affect the average effects of promotions.
Examples
pri1 <- promotionImpact(data=sim.data, promotion=sim.promotion,
time.field = 'dt', target.field = 'simulated_sales',
trend = FALSE, period = NULL, structural.change = FALSE,
logged = TRUE, differencing = TRUE, synergy.promotion = FALSE,
synergy.var = NULL, allow.missing = TRUE)
out <- detectOutliers(model = pri1,
threshold = list(cooks.distance=1, dfbetas=1, dffits=2), option = 1)
unify date format
Description
unify date format
Usage
format_time(data)
generate final input data and fit promotion model
Description
generate final input data and fit promotion model
Usage
promotion.model(
data,
time.field = "date",
target.field = "value",
dummy.field = NULL,
logged = TRUE,
differencing = TRUE,
trend = TRUE,
period = "auto",
structural.change = FALSE,
trend.param = 0.05,
period.param = 3
)
estimate effectiveness of promotions
Description
promotionImpact
Usage
promotionImpact(
data,
promotion,
time.field = "date",
target.field = "value",
dummy.field = NULL,
trend = TRUE,
period = "auto",
structural.change = FALSE,
trend.param = 0.05,
period.param = 3,
var.type = "smooth",
smooth.except.date = NULL,
smooth.bandwidth = 2,
smooth.origin = "all",
smooth.var.sum = TRUE,
logged = TRUE,
differencing = TRUE,
synergy.promotion = FALSE,
synergy.var = NULL,
allow.missing = TRUE
)
Arguments
data |
Dataframe containing date, target variable, and some additional time dummies that the researcher wants to account for. |
promotion |
Dataframe containing promotion ID, start date, end date, promotion tag(type). Might include daily payments associated with the promotion. |
time.field |
Specify the date field of 'data'. |
target.field |
Specify the target field of 'data'. |
dummy.field |
Specify the additional time dummies of 'data'. |
trend |
TRUE to incorporate trend component, FALSE to exclude the trend component. |
period |
NULL to exclude any periodicity from the model, 'auto' to automatically determine the period, certain numeric value(e.g. '30.5' for month) to manually specify the period |
structural.change |
TRUE to incorporate structural changes in the intercept(baseline) |
trend.param |
Flexibility of trend component. Default is 0.05, and as this value becomes larger, the trend component will be more flexible. |
period.param |
Flexibility of period component. Default is 3, and as this value becomes larger, the period component will be more flexible. |
var.type |
'smooth' to use smoothed promotion variables, 'dummy' to use dummy promotion variables |
smooth.except.date |
Date value that will be excluded from the smoothing process. eg) '01' to exclude every start day of a month |
smooth.bandwidth |
Bandwidth of local polynomial regression used in the smoothing process. Default value is 2. |
smooth.origin |
'all' to estimate a global smoothing function for all promotions. 'tag' to estimate different smoothing functions for different promotion types(tags). |
smooth.var.sum |
If TRUE, the smoothing values for times when multiple promotions in a single tag overlap will be the values from the latest promotion. Otherwise, the values will be added(default). |
logged |
TRUE to take logs to the target variable and the trend/period component |
differencing |
TRUE to first difference the target variable, smoothed regressors, and the trend/period component values |
synergy.promotion |
TRUE to incorporate synergy between promotion tags. |
synergy.var |
Specify the synergy variables. 'names of fields' between each promotion tag and other variables. eg) c('month_start') to incorparate synergy between each promotion tag and 'month_start'. |
allow.missing |
TRUE to allow missing data in promotion sales during the promotion period |
Details
promotionImpact is for analysis & measurement of the effectiveness of promotions, controlling for some prespeficied or estimated control variables.
Examples
pri1 <- promotionImpact(data=sim.data, promotion=sim.promotion,
time.field = 'dt', target.field = 'simulated_sales',
trend = FALSE, period = NULL, structural.change = FALSE,
logged = TRUE, differencing = TRUE, synergy.promotion = FALSE,
synergy.var = NULL, allow.missing = TRUE)
Daily Total Sales
Description
This data set is simulated daily total sales data contaning 958 observations of 2 variables. 'dt': date with Date format. 'simulated_sales': simulated daily sales with numeric format.
Usage
sim.data
Format
A dataset containing 958 observations of 2 variables.
Source
NCsoft AnalysisModeling Team <gimmesilver@ncsoft.com> <windy0126@ncsoft.com> <nhkim1302@ncsoft.com>
Promotion Schedule
Description
This data set is promotion schedule data including promotion tag information. 'pro_id': promotion ID. 'start_dt': start date of each promotion 'end_dt': end date of each promotion. 'tag_info': promotion tag information (promotion type).
Usage
sim.promotion
Format
A dataset containing 50 observations of 4 variables.
Source
NCsoft AnalysisModeling Team <gimmesilver@ncsoft.com> <windy0126@ncsoft.com> <nhkim1302@ncsoft.com>
Daily Promotion Sales with Promotion information
Description
This data set is simulated daily promotion sales data with promotion information. 'pro_id': promotion ID 'start_dt': start date of each promotion 'end_dt': end date of each promotion 'tag_info': promotion tag information (promotion type) 'dt': date 'payment': simulated daily promotion sales
Usage
sim.promotion.sales
Format
A dataset containing 1486 observations of 6 variables.
Source
NCsoft AnalysisModeling Team <gimmesilver@ncsoft.com> <windy0126@ncsoft.com> <nhkim1302@ncsoft.com>
generate ggplot with fitted and target values
Description
generate ggplot with fitted and target values
Usage
value_fit_plot(data)