Skip to main content
Version: 3.19.1

Aggregated attribution with mmm_attribution

mmm_attribution is the unified aggregated attribution interface in ChannelAttributionPro.

It replaces the need to expose separate public workflows for different aggregated-attribution strategies. Instead of asking the user to choose between multiple functions, the same data structure can be used with a simple model parameter:

model = "linear" | "reward" | "copula"

The default model is:

model = "linear"

This makes the first result easier to interpret, while still allowing more adaptive scoring strategies when needed.


Why aggregated attribution matters

Many marketing signals are not available as complete user journeys.

A company may have daily conversions, impressions, clicks, searches, visits, email activity, marketplace signals, or offline indicators. These signals do not always tell us who converted after seeing what. But they still contain useful information.

Aggregated attribution starts from a practical question:

When marketing signals move over time, which channels appear to carry useful evidence about the business outcome?

mmm_attribution is designed for this type of question.

It works with a table of aggregated signals and returns attribution at channel level. The same channel can be described by multiple input variables, and different channels can be measured through different types of signals.


One interface, different ways to read the signal

The function exposes three model choices.

ModelIntuition
linearA simple positive relationship baseline. Useful as the most interpretable starting point.
rewardA movement-oriented view. Useful when the analyst wants to reward signals that repeatedly move in a direction consistent with the target.
copulaA dependence-oriented view. Useful when the relationship may be less linear or more distributional.

The important point is that the workflow does not change. The user keeps the same input data and changes only the model interpretation.

This makes mmm_attribution useful both for quick baselines and for sensitivity analysis.


The core idea

At a high level, the function looks for signals that are informative about the target.

A signal can be informative in more than one way.

Sometimes the level matters: when a channel is high, the target also tends to be high.

Sometimes the movement matters: when a channel increases or decreases, the target tends to move in a compatible direction.

Rather than forcing the user to manually choose one of these views, the internal logic can combine both perspectives. Stable signals can be read more through their level. More dynamic signals can carry more information through their movements.

This is deliberately described at a conceptual level. The user does not need to manage the internal scoring details to use the function correctly.


Why measure types are needed

Marketing variables often have different units.

An impression is not a click. A click is not a visit. A search is not an email send.

For this reason, mmm_attribution asks the user to describe each signal with a measure type.

Example:

VariableFinal channelMeasure type
google_impressionsgoogle_adsimpressions
google_clicksgoogle_adsclicks
facebook_impressionsfacebook_adsimpressions
email_clicksemailclicks
direct_searchesdirectsearches

This mapping allows the model to understand that several variables may describe the same final channel, while still respecting the fact that the variables are measured differently.

The output remains at channel level.


How the function thinks about multiple measures

When several measure types are present, mmm_attribution does not simply put every variable into the same bucket.

Conceptually, it works in two layers:

  1. It reads the contribution of different measure families.
  2. It distributes contribution inside each family across the relevant variables and channels.

This helps avoid a common attribution problem: signals with larger numeric scale should not automatically dominate signals with smaller numeric scale.

The purpose is not to make all variables identical. The purpose is to make the comparison more meaningful.


Example input structure

A typical aggregated dataset may look like this:

dateconversionsgoogle_clicksgoogle_impressionsfacebook_impressionsemail_clicksdirect_searches
2024-01-011203401200018000210900
2024-01-021353601260017500230950
2024-01-031283301190018200220910

The model also needs a mapping that tells it how to interpret each variable:

google_clicks       -> google_ads -> clicks
google_impressions -> google_ads -> impressions
facebook_impressions -> facebook_ads -> impressions
email_clicks -> email -> clicks
direct_searches -> direct -> searches

The target column could be conversions, revenue, leads, or another outcome.


Choosing a model

linear

Use linear when you want a clear and conservative baseline.

It is the default because it is the easiest model to explain: channels receive support when their signals show a positive relationship with the target.

This is often the best starting point before comparing more adaptive alternatives.

reward

Use reward when you care about directional behavior.

This model is useful when the question is not only “is the signal high when the target is high?”, but also “does the signal repeatedly move in a way that is compatible with changes in the target?”

It can be useful for signals that are naturally event-like, intermittent, or strongly campaign-driven.

copula

Use copula when you want a more flexible dependence view.

This model is useful when the relationship between a signal and the target may not be well described by a simple linear association.

It is a good candidate for sensitivity analysis when the baseline result needs to be compared with a more distribution-aware interpretation.


Relationship with UAM

mmm_attribution is the aggregated-attribution layer used by UAM.

When UAM is used with aggregated data only, this layer produces the baseline attribution.

When customer journeys are also available, UAM can refine that baseline with journey evidence.

The UAM parameter:

baseline_model = "linear" | "reward" | "copula"

selects the aggregated model used internally.

The default is:

baseline_model = "linear"

Why this design is useful

mmm_attribution is useful because it separates three concerns:

  1. Data structure — which variables are available and which channels they represent.
  2. Signal interpretation — which model is used to score the relationship with the target.
  3. Channel output — how the final attribution is returned at a readable channel level.

This makes the function practical for real marketing datasets, where signals are mixed, incomplete, and measured in different units.

It also makes experimentation easier. The analyst can start with the default linear baseline and then compare reward or copula results to understand whether the attribution picture is stable.


Conclusion

mmm_attribution provides a single interface for aggregated attribution.

It reads mixed channel signals, maps them to final channels, and estimates attribution from time-series evidence. The default linear model gives a clear baseline, while reward and copula provide alternative ways to read movement and dependence.

The goal is not to expose every internal mechanism. The goal is to give users a practical and interpretable way to turn fragmented aggregated marketing data into channel-level attribution.