mmm_attribution
R
D_variables maps each raw input variable to a final channel and measure. It must contain only the structural columns variable, channel, and measure.
D_measures is optional. When provided, the recommended user-facing structure is one row per measure with measure and aggregation_weight:
| measure | aggregation_weight |
|---|---|
direct_searches | 0.45 |
clicks | 0.45 |
impressions | 0.10 |
aggregation_weight controls how strongly each measure contributes when variable-level attributions are aggregated into final channel-level attribution. The internal signal scaling is estimated automatically from the data.
library(ChannelAttributionPro)
token <- "yourtoken"
Data <- read.csv("https://app.channelattribution.io/data/data_mmm_3.csv")
D_variables <- data.frame(
variable = c(
"direct_searches",
"facebook_impressions",
"facebook_clicks",
"google_impressions",
"google_clicks",
"tv"
),
channel = c(
"direct",
"facebook_ads",
"facebook_ads",
"google_ads",
"google_ads",
"tv"
),
measure = c(
"direct_searches",
"impressions",
"clicks",
"impressions",
"clicks",
"impressions"
),
stringsAsFactors = FALSE
)
D_measures <- data.frame(
measure = c("direct_searches", "clicks", "impressions"),
aggregation_weight = c(0.45, 0.45, 0.10),
stringsAsFactors = FALSE
)
target <- "conversions"
res <- mmm_attribution(
Data = Data,
D_variables = D_variables,
D_measures = D_measures,
target = target,
model = "linear", # "linear", "reward", or "copula"
max_p = 12,
seed = 1234567,
verbose = 1,
password = token
)
print(head(res))
Using a different internal model:
res_reward <- mmm_attribution(
Data = Data,
D_variables = D_variables,
D_measures = D_measures,
target = target,
model = "reward",
max_p = 12,
seed = 1234567,
password = token
)
res_copula <- mmm_attribution(
Data = Data,
D_variables = D_variables,
D_measures = D_measures,
target = target,
model = "copula",
max_p = 12,
nsim = 1000,
seed = 1234567,
password = token
)