sobota 22. července 2017

Využití BSTS modelu při vyhodnocování efektu marketingových kampaní na zisky eshopu

Tento příspěvek je prezentací mého závěrečného projektu, zpracovaného v rámci tříměsíčního kurzu Digitální Akademie, pořádaného Czechitas.

Na trhu existuje několik produktů, které pomáhají eshopům správně spravovat své produkty na vyhledávačích zboží, jako je heuréka nebo například zboží.cz. Úkolem těchto nástrojů je biddování (nastavení ceny za proklik) automatizovat podle uživatelem zadaných pravidel, minimalizovat náklady (finanční i časové) na správu těchto kanálů a zároveň maximalizovat obrat.

Cílem mé práce bylo statisticky vyhodnotit a zároveň kvantifikovat vliv jednoho z těchto nástrojů (BEED) na obraty a zisk spravovaných eshopů. Pro statistické vyhodnocení vlivu v čase jsem použila BSTS model - bayesian structural time-series model. Jedná se o machine-learningový model, který se, jak název napovídá, využívá pro vyhodnocení vývoje událostí v čase. Momentálně se často používá v marketingu, kde umožňuje stanovit efektivitu kampaně.

BSTS model pracuje s daty uspořádanými podle data, pro správné provedení výpočtu je potřeba nadefinovat období před startem kampaně (pre.period) a následné období po startu kampaně (post.period). Začátek kampaně v mém případě definoval datum nasazení BEEDu. Pre.period a post.period by měly být v poměru 70:30.
Jako závislou proměnnou jsem v tomto případě použila revenue eshopu z kanálu ovlivněného nástrojem a jako vysvětlující proměnnou jsem použila revenue eshopu z kanálu neošetřeného žádným nástrojem, tudíž "Organic Traffic". Stejná analýza následně proběhla i s údaji ohledně nákladů na biddování v BEEDu.
BSTS model se vytvoří na hodnotách pre.period a následně během post.period predikuje hodnoty, kterých by závislá proměnná dosahovala bez zásahu v podobě spuštění nástroje.
Pro tyto výsledky následně vyjádří statistickou významnost a jejich absolutní i relativní rozdíly - ať už pro průměrné nebo kumulované hodnoty:

Grafický výstup CausalImpactu v R.1. graf srovnává reálné hodnoty (černá linka) vůči predikovaným hodnotám (přerušovaná čára).
2. graf vyjadřuje vliv na závislou proměnnou v průběhu časového období post.period
3. graf vizualizuje kumulativní vliv kampaně na závislou proměnnou

Projekt jsem zpracovávala v programovacím jazyku R.
Data jsem získávala z Google Analytics, kam jsem přistupovala skrz API pomocí R balíčku RGoogleAnalytics (Pearmain a kol., 2015). Jak si nastavit API v GA a získat přístupové tokeny jsem psala v předchozím příspěvku. Samotný BSTS model je implementován v balíčku CausalImpact (Brodersen a kol., 2015).

Kód je k nahlédnutí zde:

devtools::install_github("Tatvic/RGoogleAnalytics")
### REQUIREMENTS ####
library(RGoogleAnalytics)
library(dplyr)
library(plyr)
library(CausalImpact)
library(zoo)
### ACESS TO API ####
#Update the client.id and client.secret from the file you downloaded
client.id <- "xxxxxxxxxxxxxx"
client.secret <- "xxxxxxxxxxx"
token <- Auth(client.id,client.secret)
# Save the token
save(token,file="./token_file")
# Load the token
load("./token_file")
# Validate the token
ValidateToken(token)
### QUERY FOR TESTED DATA ####
# Create query for tested data
query.init <- Init(start.date = "YYYY-MM-DD",
end.date = "YYYY-MM-DD",
dimensions = c("ga:date", "ga:source"),
metrics ="ga:transactionRevenue",
max.results = 10000,
segments = "sessions::condition::ga:source=@heureka",
sort = "ga:date",
table.id = "ga:xxxx")
# Create the Query Builder object so that the query parameters are validated
query <- QueryBuilder(query.init)
# Extract the data and store it in a dataframe
heureka.data <- GetReportData(query, token)
head(heureka.data)
# Group data by date
heureka.data <- heureka.data %>% group_by(date) %>% dplyr::summarise(num = n(),transactionRevenue = sum(transactionRevenue))
head(heureka.data)
### QUERY FOR CONTROL ####
# Create query for control data
query.init <- Init(start.date = "YYYY-MM-DD",
end.date = "YYYY-MM-DD",
dimensions = c("ga:date", "ga:medium"),
metrics ="ga:transactionRevenue",
max.results = 10000,
filters = "ga:medium==organic",
sort = "ga:date",
table.id = "ga:xxxxx")
# Create the Query Builder object so that the query parameters are validated
query <- QueryBuilder(query.init)
# Extract the data and store it in a data-frame
organic.data <- GetReportData(query, token)
head(organic.data)
# Merge dataframes by date
all.data <- merge(heureka.data,organic.data,by="date",all = T)
head(all.data)
# Select only date and revenue columns
revenue.data <- dplyr::select(all.data, date, transactionRevenue.x, transactionRevenue.y)
head(revenue.data)
# Rename columns
revenue.data <- plyr::rename(revenue.data, c("transactionRevenue.x"="heureka.revenue", "transactionRevenue.y"="organic.revenue"))
head(revenue.data)
# Transform yyyymmdd into regular date
sapply(revenue.data, class)
revenue.data$date <- as.Date(revenue.data$date, "%Y%m%d")
head(revenue.data)
sapply(revenue.data, class)
revenue.data[is.na(revenue.data)] <- 0
### CAUSAL IMPACT ANALYSIS ####
# Define pre and post period for GCI
pre.period <- as.Date(c("YYYY-MM-DD", "YYYY-MM-DD"))
post.period <- as.Date(c("YYYY-MM-DD", "YYYY-MM-DD"))
# Run the analysis
impact <- CausalImpact(revenue.data, pre.period, post.period)
# Visualize the results
plot(impact)
# Summary
summary(impact)
summary(impact, "report")
view raw GCI_DA.R hosted with ❤ by GitHub

Pro milovníky GUI je v shiny napsána i pěkná webová aplikace GA effect, která poskytuje stejné grafické i textové výstupy jako R CausalImpact.

Reference:
Brodersen et al., 2015, Annals of Applied Statistics. Inferring causal
  impact using Bayesian structural time-series models.
  http://research.google.com/pubs/pub41854.html

Michael Pearmain. Contributions from Nick Mihailowski, Vignesh Prajapati,
  Kushan Shah, Nicolas Remy and person) (2015). RGoogleAnalytics: R Wrapper
  for the Google Analytics API. R package version 0.1.5.
  https://CRAN.R-project.org/package=RGoogleAnalytics

Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis.
  Journal of Statistical Software, 40(1), 1-29. URL
  http://www.jstatsoft.org/v40/i01/.

Hadley Wickham, Romain Francois, Lionel Henry and Kirill Müller (2017).
  dplyr: A Grammar of Data Manipulation. R package version 0.7.1.
  https://CRAN.R-project.org/package=dplyr

středa 12. července 2017

Setting of Google Analytics API

This tutorial will lead you through setting of Google Analytics API.

1. Go to the Google API dashboard and in the left corner click on Select a project.





2. If you don´t have any, let´s create one with the plus button on the right side.


3. You can create up to 12 projects. Give it a name and create it. It will get unique ID.


4.  Now you have to select the Analytics API for your project. On the Dashboard you can find it in Other popular APIs, or use search tool. Click on it. 


5. Now you have to Enable Analytics API. Dashboard will warn you, that your API won´t work without creating Credentials. Let´s do it. 




6. On the left side select Credentials.




7. Now just select OAuth Client ID. APIs manager warn you, that you have to Create consent screen. Click on the button. 



8. Now APIs manager filled in your email address and you have to just specify your Product name and if you want to add Homepage, Product page and other things. 




9. If you have created Consent screen, now you can create Client ID. From Application type select Other and specify name of your Client. 





10. Now you can see your client in APIs manager Credentials. If you want to view your Client ID and Client Secret, click on the Edit button on the right side. 




11. Now you can copy your Client ID and Secret or download it as a .json file to your computer.