When marketers talk about measurement, they’re really talking about causation. Why, you may ask? Because at the root of it, marketers want to understand causal links between their advertising and their KPIs. They want to know whether the ads they run on any given channel actually cause people to take action and buy their product.
Causation is important because it helps us understand where to best spend our budget. It helps demonstrate value, and gives us the information we need to make decisions, like whether to run a channel or not. Today we take a deep dive into the world of causation, understanding its dynamics within the user journey and how it impacts attribution.
Measuring Causation
You may have heard the common phrase: correlation doesn’t imply causation. In the context of marketing, this reminds us not to treat correlations in our data as if they are causations. And yet, many of us do just that.
If you’re running any digital ad, you’re inevitably reliant on some form of rule-based attribution. Last touch, first touch, all of it. All these types of methods try to derive causation from correlation.
Rule-based attribution goes like this: If a user sees an ad on Channel X, and then goes on to convert, that’s sufficient justification for the ad manager to decide that the ad Channel X caused the conversion.
This default method for attribution pervades across every platform we’ve all worked on. It’s hard to imagine marketing without it. And yet, for all its popularity, it’s an idea that’s deeply flawed.
To see where rule-based attribution falls short, let’s consider an example.
In a game of soccer, one team scores a goal. Now, prior to it being scored, 5 different players from that team touch the ball.
So, which player caused the goal to happen? In marketing, we’d have to say this.
While some approaches may work in specific circumstances, none truly offer a full understanding of which player caused the goal.
To determine causality, we have to look deeper than the simple order of events.
So if the ordering in certain events doesn’t explain causation, what does?
Let’s continue our soccer example. Normally, people would say that the player touched the ball (first, last, whichever), so that means the player is responsible for the goal. But, that’s the wrong way to think about it. Instead, we should be saying “if the player didn’t touch the ball – regardless of whether first, last, or otherwise Causation is important because it helps us understand where to best spend our budget — would the goal have been scored? That is a more accurate way of understanding attribution: the player caused the goal to be scored if the goal wouldn’t have been scored had that player not touched the ball.
This “counterfactual” idea — the idea that something would not have happened but for that player’s involvement — seems to fit better than a rule-based approach because you are able to specifically weigh the player’s contribution to the goal. The absence of that player means the goal wouldn’t have been scored. This information is more relevant to causation than who touched the ball first or last before the goal.
So how can we apply this approach to channel measurement for something like display ads.
Instead of asserting that a given display ad caused a user to convert, simply based on the fact that it was the last (or first) channel they interacted with before converting, we consider a different question: Would that buyer convert if they hadn’t interacted with our display ads?
Of course, we can’t rewind time and see what that user would’ve done if they hadn’t seen our display ads. We can, however, compare the buyer’s journey to other identical user journeys that had not seen the display. If users who didn’t interact with display are just as likely to convert as those who did, then display probably isn’t causing buyers to convert (and vice versa!). This is how ‘data-driven’ attribution methods work.
This method of measuring causation works well, but it requires an assumption that pre-existing likelihoods don’t impact ad interaction. In other words, users with high pre-existing likelihoods of converting are no more or less likely to interact with display ads than users with low pre-existing likelihoods of converting.
But this presents a bit of a challenge. If we only show our display ads to users who are already likely to convert (perhaps because they are part of a retargeting audience of users who have recently browsed the site), then we have created something called delivery bias.
We can’t use the data-driven approach to determine causation, because our display ads are inherently biased toward users already likely to convert. Because of this, it’s not fair — nor accurate — to compare users who have and haven’t interacted with display ads.
Given how effective ad platforms are at finding users that are predisposed to convert, this is a real issue.
The only way around the problem of delivery bias is to stop channels from showing content exclusively to users predisposed to convert. Since it’s not necessary to remove all targeting to do this, we can simply run what are called lift tests.
A lift test creates a control group and an exposed group that is created just before the ad is shown. Users in the control don’t see the ad or any future ads, while users in the exposed group continue to see them. The fact that the assignment happens just before a user sees the ad removes the potential for delivery bias — users in the target audience are no more or less likely to be in the exposed group.
With a lift test, you can measure how much more likely the exposed group was to convert over time. And best of all, this gives us what we’ve been looking for: a way to measure the causal effect of a channel on conversions.
Given its use in academia, measuring everything from vaccine efficacy to economic interventions, it’s no surprise that lift testing is generally considered the gold standard of marketing attribution. They do take time and can be difficult to run, but ultimately, they offer marketers the best chance of accurately measuring causation.
If you have questions about causation, rule-based attribution, or just want to talk more about how Performance Branding can transform your marketing plan, let’s talk.
Taryn is the VP, Marketing at WITHIN. When not building demand gen machines and content engines, she can be found enjoying outside sports with her kids and husband. Taryn lives in Toronto, ON. Go Leafs Go.
Get industry insights and news directly to your inbox.
Thank you. Check your email for details on your request.
Cookie | Duration | Description |
---|---|---|
__hssrc | session | This cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session. |
checkForPermission | 10 minutes | This cookie is set by Beeswax to determine whether the user has accepted the cookie consent box. |
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category . |
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | Records the default button state of the corresponding category & the status of CCPA. It works only in coordination with the primary cookie. |
elementor | never | This cookie is used by the website's WordPress theme. It allows the website owner to implement or change the website's content in real-time. |
JSESSIONID | session | The JSESSIONID cookie is used by New Relic to store a session identifier so that New Relic can monitor session counts for an application. |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
Cookie | Duration | Description |
---|---|---|
__cf_bm | 30 minutes | This cookie, set by Cloudflare, is used to support Cloudflare Bot Management. |
__hssc | 30 minutes | HubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie. |
bcookie | 2 years | LinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser ID. |
bscookie | 2 years | LinkedIn sets this cookie to store performed actions on the website. |
lang | session | LinkedIn sets this cookie to remember a user's language setting. |
lidc | 1 day | LinkedIn sets the lidc cookie to facilitate data center selection. |
UserMatchHistory | 1 month | LinkedIn sets this cookie for LinkedIn Ads ID syncing. |
Cookie | Duration | Description |
---|---|---|
_uetsid | 1 day | Bing Ads sets this cookie to engage with a user that has previously visited the website. |
_uetvid | 1 year 24 days | Bing Ads sets this cookie to engage with a user that has previously visited the website. |
Cookie | Duration | Description |
---|---|---|
__hstc | 1 year 24 days | This is the main cookie set by Hubspot, for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session). |
__lotl | 5 months 27 days | This cookie is set by Lucky Orange to identify the traffic source URL of the visitor's orginal referrer, if any. |
_ga | 2 years | The _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors. |
_gcl_au | 3 months | Provided by Google Tag Manager to experiment advertisement efficiency of websites using their services. |
_gd_session | 4 hours | This cookie is used for collecting information on users visit to the website. It collects data such as total number of visits, average time spent on the website and the pages loaded. |
_gd_svisitor | 2 years | This cookie is set by the Google Analytics. This cookie is used for tracking the signup commissions via affiliate program. |
_gd_visitor | 2 years | This cookie is used for collecting information on the users visit such as number of visits, average time spent on the website and the pages loaded for displaying targeted ads. |
_gid | 1 day | Installed by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously. |
_hjAbsoluteSessionInProgress | 30 minutes | Hotjar sets this cookie to detect the first pageview session of a user. This is a True/False flag set by the cookie. |
_hjFirstSeen | 30 minutes | Hotjar sets this cookie to identify a new user’s first session. It stores a true/false value, indicating whether it was the first time Hotjar saw this user. |
_hjIncludedInPageviewSample | 2 minutes | Hotjar sets this cookie to know whether a user is included in the data sampling defined by the site's pageview limit. |
_lo_uid | 2 years | This cookie is set by Lucky Orange as a unique identifier for the visitor. |
_lo_v | 1 year | This cookie is set by Lucky Orange to show the total number of visitor's visits. |
_lorid | 10 minutes | This cookie is set by Lucky Orange to identify the ID of the visitors current recording. |
hubspotutk | 1 year 24 days | HubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts. |
IR_gbd | session | Impact Radius sets this cookie to store a unique ID which is used to identify the user's device, when they return to the websites that used the same network. |
Cookie | Duration | Description |
---|---|---|
__qca | 1 year 26 days | The __qca cookie is associated with Quantcast. This anonymous data helps us to better understand users' needs and customize the website accordingly. |
_fbp | 3 months | This cookie is set by Facebook to display advertisements when either on Facebook or on a digital platform powered by Facebook advertising, after visiting the website. |
_mkto_trk | 2 years | This cookie, provided by Marketo, has information (such as a unique user ID) that is used to track the user's site usage. The cookies set by Marketo are readable only by Marketo. |
B | 1 year | This Cookie is used by Yahoo to anonymously store data related to user's visits, such as the number of visits, average time spent on the website and what pages have been loaded. This data helps to customize website content to enhance user experience. |
bito | 1 year 1 month | This cookie is set by Beeswax for advertisement purposes. |
bitoIsSecure | 1 year 1 month | Beeswax sets this cookie for targeting and advertising. The cookie is used to serve the user with relevant advertisements based on real time bidding. |
fr | 3 months | Facebook sets this cookie to show relevant advertisements to users by tracking user behaviour across the web, on sites that have Facebook pixel or Facebook social plugin. |
mc | 1 year 1 month | Quantserve sets the mc cookie to anonymously track user behaviour on the website. |
MUID | 1 year 24 days | Bing sets this cookie to recognize unique web browsers visiting Microsoft sites. This cookie is used for advertising, site analytics, and other operations. |
test_cookie | 15 minutes | The test_cookie is set by doubleclick.net and is used to determine if the user's browser supports cookies. |
tuuid | 2 years | The tuuid cookie, set by BidSwitch, stores an unique ID to determine what adverts the users have seen if they have visited any of the advertiser's websites. The information is used to decide when and how often users will see a certain banner. |
tuuid_lu | 2 years | This cookie, set by BidSwitch, stores a unique ID to determine what adverts the users have seen while visiting an advertiser's website. This information is then used to understand when and how often users will see a certain banner. |
Cookie | Duration | Description |
---|---|---|
__pdst | 1 year | No description available. |
_an_uid | 7 days | No description available. |
_dc_gtm_UA-61749619-1 | 1 minute | No description |
_dlt | 1 day | No description |
_hjSession_1771567 | 30 minutes | No description |
_hjSessionUser_1771567 | 1 year | No description |
_nx-nocache | session | No description available. |
6suuid | 2 years | No description available. |
A3 | 1 year | No description |
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ | session | No description |
AnalyticsSyncHistory | 1 month | No description |
BIGipServerab44web-nginx-app_https | session | No description |
bounceClientVisit3783c | 30 minutes | No description |
bounceClientVisit3783v | 30 minutes | No description |
dgzsdl08v4 | 10 minutes | No description |
IR_11658 | session | No description |
li_gc | 2 years | No description |
tableau_locale | session | No description available. |
tableau_public_negotiated_locale | session | No description available. |
test | 1 year | No description available. |