Attribution models
ga4_attribution_models apportions each closing conversion's revenue and conversion count across the traffic touches of its journey, once per model. The table is one row per touch_date × conversion_date × model × channel dimensions, and it is additive - sum attributed_revenue / attributed_conversions at any grain.
Models are configured under attribution_models in the config. The table only builds once journey.closing_conversions is set.
Model types
type | Credit rule | Parameters |
|---|---|---|
first_touch | 100% to the first traffic touch | - |
last_touch | 100% to the last traffic touch | - |
linear | Split evenly across all traffic touches | - |
position_based | first_weight to first, last_weight to last, the rest split across the middle | first_weight, last_weight (default 0.4 / 0.4) |
time_decay | More credit to touches closer to the conversion (exponential) | half_life_days (default 7) |
participation | Full credit to every touch | - |
Notes:
position_basedwith only two touches (no middle) renormalizes to 50/50 between first and last.- You can configure the same type more than once with different parameters and distinct
names (e.g. twoposition_basedvariants); they appear side by side inmodel_name.
Fractional credit vs influence
The first five models are fractional: the credit for a single conversion sums to exactly 1.0 across its touches. So SUM(attributed_revenue) for any fractional model reconciles to total closing revenue - it is true attribution, safe to compare across channels.
participation is different on purpose. It gives every touch full credit, so a journey with 4 touches contributes 4× its revenue. It does not reconcile and it overcounts - it answers "which channels were involved?", not "who gets the credit?". Treat it as an influence metric.
participation overcounts by design. Compare it only to itself (or to the assist/influence reports), never alongside first_touch / linear / etc. in a "total credit" view.
The same influence-vs-credit distinction applies to two reports:
ga4_attribution_channel_assist_report-participated_revenue/assisted_revenuedouble-count across the channels of a journey (influence), unlike the fractionalattributed_revenuein the models table.ga4_attribution_micro_conversion_report-closing_revenue_withis the journey's final outcome, so summing it across micro-conversions double-counts a journey.
Additivity
Every report in this module follows one rule: store additive building blocks, derive rates in BI.
- Counts (
journeys,closed_journeys,closing_conversion_count, ...) and SUM numerators (sum_days_to_conversion,total_revenue,sum_traffic_touches, ...) are stored. - Rates and averages are not stored, because they do not roll up - an average of averages is wrong. Compute them in your BI tool from the stored parts, e.g.:
- conversion rate =
closed_journeys / journeys - avg days to conversion =
sum_days_to_conversion / closed_journeys - avg revenue per closing conversion =
total_revenue / closing_conversion_count
- conversion rate =
Because only additive parts are stored, these derived metrics stay correct at any aggregation level - by day, channel, path length, or all-up. See each table's columns in Output tables.