The effects of marketing have always been difficult to measure - so how can big data help?
This talk outlines how to get started using state-of-the-art controlled experiments methods in GNU R to understand the ROI of advertising campaign, integrating directly against Google's Analytics Core Reporting API, and provides an example to understand the "between" estimator for differences-differences.
(German)
Keywordrecherche, Keywordstrategien und Keywordtools - SMX 2019
Using GNU R and Google Analytics to optimize AdWords Bids
1. GNU R, Google Analytics und Optimierung von
Google Adwords
Hinnerk Gnutzmann
data2day September 30, 2015
2. Zur Person: Hinnerk Gnutzmann
Gr¨under flexponsive UG (haftungsbeschr¨ankt)
E-Commerce Beratung
Fokus auf Data Analytics
Qualitatives User Testing
PhD Economics, European University Institute (2013)
Kontakt
mailto: gnutzmann@flexponsive.net
web: https://www.flexponsive.net/
t: @flexponsive
3. Worum geht es heute?
Erfolg von Marketing
schwer zu definieren
noch schwerer zu messen
Vor Big Data: “Half the money I spend on advertising is
wasted; the trouble is I don’t know which half.” (John
Wanamaker, 1838–1922)
4. Worum geht es heute?
Erfolg von Marketing
schwer zu definieren
noch schwerer zu messen
Vor Big Data: “Half the money I spend on advertising is
wasted; the trouble is I don’t know which half.” (John
Wanamaker, 1838–1922)
Nach Big Data: “(AdWords) brand keyword ads have no
measurable short-term benefits” (Blake et al., 2015) - 100%
wasted?
5. Worum geht es heute?
Erfolg von Marketing
schwer zu definieren
noch schwerer zu messen
Vor Big Data: “Half the money I spend on advertising is
wasted; the trouble is I don’t know which half.” (John
Wanamaker, 1838–1922)
Nach Big Data: “(AdWords) brand keyword ads have no
measurable short-term benefits” (Blake et al., 2015) - 100%
wasted?
Viele offene Fragen
Incrementality Debate: Verdr¨angen Kampagnen organische
Besucher?
Qualit¨at: Sind “gekaufte” Besucher gute oder schlechte
Kunden?
Heterogenit¨at: Wirken Kampagnen unterschiedlich nach
Kunde?
6. Agenda
1. Fallbeispiel Brand Keyword: Das Geheimnnis des
verschwindenden ROI f¨ur AdWords
2. Was kann man tun?
Attributionsmodelle
Kontrollierte Experimente
GNU R & Google Analytics: Ein Dream Team
3. Wie gehts?
Google Core Reporting API & GNU R
GA Query Explorer
Experiment in AdWords konfigurieren
4. Analyse mit GNU R
Data wrangling, sampling, etc.
GA Metriken replizieren
Regressionsanalyse
8. Was ist passiert?
Das AdWord ist hochgradig relevant f¨ur die Suche
Navigational Query: Der Besucher will zur Telekom
Hat sich bereits f¨ur ein Telekom-Produkt entschieden?
Ergebnis: Das “wohl beste” Keyword im Account
Hervorragende CTR
Sehr gute Conversion on-site
CPC vielleicht gar nicht mal so hoch
9. Was ist passiert?
Das AdWord ist hochgradig relevant f¨ur die Suche
Navigational Query: Der Besucher will zur Telekom
Hat sich bereits f¨ur ein Telekom-Produkt entschieden?
Ergebnis: Das “wohl beste” Keyword im Account
Hervorragende CTR
Sehr gute Conversion on-site
CPC vielleicht gar nicht mal so hoch
Noch Fragen?
10. Was ist passiert?
Das AdWord ist hochgradig relevant f¨ur die Suche
Navigational Query: Der Besucher will zur Telekom
Hat sich bereits f¨ur ein Telekom-Produkt entschieden?
Ergebnis: Das “wohl beste” Keyword im Account
Hervorragende CTR
Sehr gute Conversion on-site
CPC vielleicht gar nicht mal so hoch
Noch Fragen?
Das organische Ergebnis ist das gleiche!
Was w¨are wenn. . . es nur das organische Ergebnis g¨abe?
12. Die eBay Studie
Blake et al. (2015), “Consumer Heterogeneity and Paid
Search Effectiveness: A Large Scale Field Experiment”
Feldexperiment: Funktioniert AdWords f¨ur eBay?
Sehr kontroverse Ergebnisse:
1. Click Substition: Wenn das Brand AdWord wegf¨allt, klicken
fast alle Nutzer auf das organische Ergebnis
2. Informative Advertising: AdWords funktionieren, wenn Sie
einen Besucher ¨uber ein Angebot informieren, von dem er
noch nichts wusste
AdWords hat fast keinen Effekt auf Ums¨atze bei
Bestandskunden
H¨atten auch sonst den Weg zu eBay gefunden!
14. Was kann man tun? Kontrolliertes Experiment
Nach Zufallsprinzip Behandlungs & Kontrollgruppe
ausw¨ahlen, z.B.
Pro Benutzer: A/B Testing
Nach geographischer Region
Annahme: Ohne Experiment verhalten sich beide Gruppen
¨ahnlich
Auswertung: difference in differences
Unterschied in Kontrollgruppe: Noise
Unterschied in Behandlungsgruppe: Effekt + Noise
Metrik: ∆TREATED − ∆UNTREATED
Vorteile geographisches Experiment:
kein multi-device Tracking notwendig
einfache Integration mit externen Daten
komplizierte Customer Journeys k¨onnen abgebildet werden
Caveat: Geographische Gruppen m¨ussen wirklich vergleichbar
sein, mobile Benutzer
15. GNU R und Google Analytics: Dream Team
1. Auswahl der Behandlungs- und Kontrollgruppe
R installieren, Sample mit GNU R erzeugen
Export: Copy&paste zu AdWords
2. Datensammlung: macht Marketing!
Google Analytics oft schon vorhanden und konfiguriert
3. Aggregierung und Abfrage
In der Cloud: Google Analytics mit Query Explorer
Integration mit RGoogleAnalytics
4. Auswertung: Sch¨atzung und Visualisierung
Alle notwendigen Funktionen als Pakete in R vorhanden
16. R installieren
Open Source f¨ur Windows/Mac/Linux etc.
GNU R: https://www.r-project.org/
RStudio IDE: http://www.rstudio.com
Cheat Sheets helfen weiter!
R Reference Card
https://www.rstudio.com/resources/cheatsheets/
Paketmanagement ¨uber CRAN
install.package(’RGoogleAnalytics’)
install.package(’plm’);
install.package(’ggplot2’);
23. Google Analytics Core Reporting API & R
1. “App” erstellen
Google Developers Seite
Typ: Installed Application, Untertyp: Other
Ergebnis: Client ID und Client Secret
2. GA Profile ID herausfinden
24. Konfiguration GNU R
client.id <- ’xxxxxxxxxxxxxxx.apps.googleusercontent.com’;
client.secret <- ’xxxxxxxxxxxxxxx’;
analyticsProfileId <- ’111111111’;
# redirect to google, paste, code
require(RGoogleAnalytics);
token <- Auth(client.id, client.secret)
# save
save(token, file = ’gatoken.txt’);
# next time
ValidateToken(token);
27. Tip: Sampling vermeiden
> ga.data <- GetReportData(ga.query, token)
Status of Query:
The API returned 1393 results
The query response contains sampled data. It is based on
XX.XX % of your visits. You can split the query day-wise
in order to reduce the effect of sampling.
Set split_daywise = T in the GetReportData function
Note that split_daywise = T will automatically ....
“Sampling occurs automatically when more than 500,000
sessions (25M for Premium) are collected for a report,
allowing Google Analytics to generate reports more quickly for
those large data sets.”
28. Datenintegration
Wide Format: f¨ur jede Region und Zeit eine Zeile
Long Format: Region/Zeit/Dimensionen je eine Zeile (EAV)
require(reshape2);
w<- reshape(ga.data, timevar=’medium’,
idvar = c(’region’,’date’), direction=’wide’);
29. Datenintegration: Fast fertig
Merge: Wer ist in welcher Gruppe?
ds <- merge(w, states[,c(’Name’,’isTreatment’)],
by.x = ’region’, by.y = ’Name’, all.x = T)
Datenset steht bereit!
Komfortable DSL zur Datenmanipulation
Nutzung von Paketen um Code zu minimieren
30. Auswertung
K¨unstliche Daten zur Illustration: 90 Tage
50. Tag: Experiment startet in 8 Bundesl¨andern - AdWords aus
50. Tag: Ebenfalls Saisonende, Suchvolumen f¨allt ¨uberall 50%
Szenario: 100% der Besucher klicken organisch, wenn das
AdWord wegf¨allt
Beispiell¨ander - Randomisierung hat entschieden:
Bayern: Im Experiment, ab 50. Tag keine AdWords
Bremen: Nimmt nicht teil, AdWords laufen weiter
37. Diskussion
Grundproblem: The Missing Counterfactual
wir wissen nicht, was sonst passiert sein k¨onnte
Hilfe: Experiment
Herausfoderung: Big Data without Big Code
Google Analytics & GNU R
Sehr reiche Toolbox
Ergebnis: Differences in Differences kann funktionieren
Annahmen beachten
Viel mit den Daten arbeiten