Skip to main content
Version: Latest (3.20.2)

mmm_attribution

Python

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:

measureaggregation_weight
direct_searches0.45
clicks0.45
impressions0.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.

import pandas as pd
from ChannelAttributionPro import mmm_attribution

token = "yourtoken"

Data = pd.read_csv("https://app.channelattribution.io/data/data_mmm_3.csv")

D_variables = pd.DataFrame({
"variable": [
"direct_searches",
"facebook_impressions",
"facebook_clicks",
"google_impressions",
"google_clicks",
"tv"
],
"channel": [
"direct",
"facebook_ads",
"facebook_ads",
"google_ads",
"google_ads",
"tv"
],
"measure": [
"direct_searches",
"impressions",
"clicks",
"impressions",
"clicks",
"impressions"
],
})

D_measures = pd.DataFrame({
"measure": ["direct_searches", "clicks", "impressions"],
"aggregation_weight": [0.45, 0.45, 0.10],
})

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(res.head())

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,
)