shuki mann - lixfix (all things data 2015)
TRANSCRIPT
#ATDconf#ATDconf [email protected]
#ATDconf#ATDconf [email protected]
Business Question
First of All - Implementation Process
Defining KPIs
Requirements
Implementation-
QA
Implementation-
#ATDconf
#ATDconf [email protected]
!The First Magic: Cohort Analysis by The Last Seen Post!
(in other words: how the last seen post affects the FTD!amount)
! Difficulty: 2
#ATDconf#ATDconf [email protected]
What is “Cohort”Cohort analysis divides website users into groups (=cohorts) based on a common characteristic, and compares behaviour over time across those groups. !Cohort Types: • Date of first visit (retention by…) - default • Date of registration (churn rate by…) • Acquisition Campaign (sign ups by…) • App download date (in-app purchases by…) !and… • Last blog post they read (Avg. FTD amount by…)
#ATDconf#ATDconf [email protected]
conversion rate by acquisition week
Problem: GA presents only “acquisition date” as the common characteristic.
#ATDconf#ATDconf [email protected]
Our Business Question:!!
Whats the effect of the last post the user has read on the FTD amount by the number of days
passed since reading that post
#ATDconf#ATDconf [email protected]
FTD
!Implementation Plan!
1. While the user reads a post - save this post name to a cookie 2. …and also save the current date. 3. When the user is performing his FTD - take the date that was
stored to the cookie, calculate the days/weeks/months passed since that date and send that with GA transaction tag.
!4. What would happen if the user reads another post? It will overwrite
the stored information in the cookie, aka last click attribution. (It can easily be adjusted to first-click-attribution)
PostA PostB
#ATDconf#ATDconf [email protected]
1. Create cookies with the post’s URL and its reading time
#ATDconf#ATDconf [email protected]
2. Create variables to get these values from the cookies when the FTD occurs
#ATDconf#ATDconf [email protected]
3. Create Custom JS Variable that calculates the days passed since the date stored in the cookie
#ATDconf#ATDconf [email protected]
3. Create Custom JS Variable that calculates the weeks passed since the date stored in the
cookie
#ATDconf#ATDconf [email protected]
3. Create Custom JS Variable that calculates the months passed since the date stored in the
cookie
#ATDconf#ATDconf [email protected]
4. Create session-scoped custom dimensions in GA
#ATDconf#ATDconf [email protected]
Debugging with WASP inspector - all CDs are sent!
download chrome ext. from: bit.ly/wasp-inspector
#ATDconf#ATDconf [email protected]
Create Custom Report in GA! (in our case use only Average Order Value)
#ATDconf#ATDconf [email protected]
A little bit of Tableau work and…
Business insights (here comes the money): !1. After reading post3 you have an
opportunity window of 3 days to bring high valued FTDs
!2. Something interesting happens in the
second week after reading post1… We should investigate it further
#ATDconf#ATDconf [email protected]
Another example: save the affiliate name (instead of post name) and monitor his traffic deposits across the
following weeks
FTDAff 1 Aff 2
#ATDconf#ATDconf [email protected]
So what did we have?!1. We wanted to see how different groups of the same users
behave across the timeline. !2. What defines “the same user”? In our case we are referring to
users that originated from a specific affiliate or read post X before their FTD.
3. When a user reads a post, we store the post name and reading date to a cookie.
4. When the user performs an FTD we retrieve the days+weeks+months since the last post reading date, and send it through custom dimension to GA (plus the post name of course).
5. We create a custom report in GA, export the data and visualise it in Tableau (or any other software).
#ATDconf#ATDconf [email protected]
More examples !!
1. e-Commerce - Store the registration date and see how these users convert through time. Maybe you will find that users that registered because of X converted less than users that registered because of Y.
!2. Apps - in-app purchases by installation date.
#ATDconf
#ATDconf [email protected]
! The Second Magic: Optimizing Internal Site
!Search
Difficulty: 3
#ATDconf#ATDconf [email protected]
Search Terms report in GA - we have lots of usersthat didn’t find what they’ve searched for
#FAIL
#ATDconf#ATDconf [email protected]
Action Plan!!1. Grabbing the search term query from the URL !2. Return an HTML and inject it to the post’s feed code
for each search query
Business Goal!!
We want to provide more relevant search results or promote certain items that would of not been showed organically.
#ATDconf#ATDconf [email protected]
When searching for “adwords” youwould see a boring post:
#ATDconf#ATDconf [email protected]
…but after the injection, you can see a promoted post for my
AdWords Workshop
#ATDconf#ATDconf [email protected]
Step 1: grab the search query from the URL
#ATDconf#ATDconf [email protected]
Step 2: return a specific HTML code to inject for each search query:
#ATDconf#ATDconf [email protected]
Step 3: When the user is in the search results page - inject the returned
HTML to the main post feed (div withclass “columns” in our case)
#ATDconf#ATDconf [email protected]
#ATDconf#ATDconf [email protected]
Try it yourself: search for “google analytics”
#ATDconf#ATDconf [email protected]
But…!Lookup Table works only with “equals” operator. If someone is searching for “google adwords” and
not “adwords” it won’t work :-/
#ATDconf#ATDconf [email protected]
RegEx Lookup Table
take the search look if the phrase in return the right cell
#ATDconf#ATDconf [email protected]
Take the returned value from our RegEx lookup table, and return the promoted
post HTML we want to inject
#ATDconf#ATDconf [email protected]
#ATDconf#ATDconf [email protected]
Try it yourself: search for “google analytics”
#ATDconf#ATDconf [email protected]
#ATDconf#ATDconf [email protected]
The problem:!Ecommerce shop with gibberish URLs - no way to analyse
with GA
alternatives before GTM:!!
1. 301 redirects (very risky) 2. Search & replace filters in GA (no way. thousands of products)
#ATDconf#ATDconf [email protected]
What are we going to do? - Solution #1
We want to be able to see more meaningful URLs in GA reports !1. Grabbing the “ugly” parameter from the original URL with a
GTM variable (macro) !2. Replace this old parameter with a new and more
meaningful one !3. Send virtual pageview to GA with the new parameter
#ATDconf#ATDconf [email protected]
Grab the itemId parameter with URL-Query variable
#ATDconf#ATDconf [email protected]
Return a new itemId for each ugly itemId!for example: “{8317F274-701D-46A3-A8D1}” >>> “Blue T-shirt -
Men”
#ATDconf#ATDconf [email protected]
Solution #1: Lookup Tables
The lookup table takes the value from the {{Old Item Id}} variable, and returns a new value to the {{New Item Id}} variable. !“if {{Old Item Id}} value is “ItemA” return “NewItemIdA” to the New Item Id”
#ATDconf#ATDconf [email protected]
Create Custom JS Variable that returns the {{New Item Id}} !only if the ItemId is in the URL
#ATDconf#ATDconf [email protected]
Send the New Item Id with virtual PV within the GA tag
#ATDconf#ATDconf [email protected]
But wait, we have 10,000+ products!!!
How can we create 10,000 rows more easily?
bit.ly/lookup-table-builder
#ATDconf#ATDconf [email protected]
Paste the code in the console and… hopa!
bit.ly/lookup-table-builder
#ATDconf#ATDconf [email protected]
Still - it takes a lot of time to create the lookup table, so I’ve looked for
an easier way
#ATDconf#ATDconf [email protected]
Step 1: Custom JS variable to get the last element on the breadcrumbs