buscas = read_csv(here::here("data/search_data.csv"))
## Parsed with column specification:
## cols(
##   session_id = col_character(),
##   search_index = col_double(),
##   session_length = col_double(),
##   session_start_timestamp = col_double(),
##   session_start_date = col_datetime(format = ""),
##   group = col_character(),
##   results = col_double(),
##   num_clicks = col_double(),
##   first_click = col_double()
## )
glimpse(buscas)
## Observations: 136,234
## Variables: 9
## $ session_id              <chr> "0000cbcb67c19c45", "0001382e027b2ea4", …
## $ search_index            <dbl> 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 2, 1, 1…
## $ session_length          <dbl> 0, 303, 435, 58, 58, 58, 58, 58, 58, 0, …
## $ session_start_timestamp <dbl> 20160303152045, 20160307084955, 20160305…
## $ session_start_date      <dttm> 2016-03-03 15:20:45, 2016-03-07 08:49:5…
## $ group                   <chr> "b", "b", "b", "a", "a", "a", "a", "a", …
## $ results                 <dbl> 20, 18, 20, 20, 20, 20, 20, 20, 20, 1, 0…
## $ num_clicks              <dbl> 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0…
## $ first_click             <dbl> NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA…

1) Qual diferença entre o clickthrough rate dos grupos A e B

Com Intervalos de Confiança (ICs)

theta_diferenca_grupos_click = function(d, i){
    clicks_grupos = d %>% 
        slice(i) %>% 
        group_by(group) %>% 
        summarise(click_grupo = mean(num_clicks > 0)) 
    
    a = clicks_grupos %>% filter(group == "a") %>% pull(click_grupo)
    b = clicks_grupos %>% filter(group == "b") %>% pull(click_grupo)
    
    a - b
}

theta_diferenca_grupos_click(buscas, 1:NROW(buscas))
## [1] 0.136344
ci1 = buscas %>% 
    boot(statistic = theta_diferenca_grupos_click, R = 500) %>% 
    tidy(conf.level = 0.95, 
         conf.int = TRUE)

glimpse(ci1)
## Observations: 1
## Variables: 5
## $ statistic <dbl> 0.136344
## $ bias      <dbl> 0.00001457066
## $ std.error <dbl> 0.002369003
## $ conf.low  <dbl> 0.1316861
## $ conf.high <dbl> 0.1413082
ci1 %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    labs(x = "a - b", 
         y = "")

Com teste de hipótese (TH)

theta_embaralhado = function(d){
    clicks_grupos_th = d %>%
        mutate(grupo_embaralhado = sample(group, n())) %>%
        group_by(grupo_embaralhado) %>%
        summarise(click_grupo_th = mean(num_clicks > 0))

    a = clicks_grupos_th %>% filter(grupo_embaralhado == "a") %>% pull(click_grupo_th)
    b = clicks_grupos_th %>% filter(grupo_embaralhado == "b") %>% pull(click_grupo_th)

    a - b
}

theta_embaralhado(buscas)
## [1] 0.001712871
diffs1 = replicate(1000, {theta_embaralhado(buscas)})
tibble(diferenca = diffs1) %>%
  ggplot(aes(x = diferenca)) +
  # geom_histogram(binwidth = .2, fill = "white", color = "darkgreen") +
    geom_density(fill = "white", color = "darkgreen") +
  geom_vline(xintercept = theta_diferenca_grupos_click(buscas, 1:NROW(buscas)),
             color = "orange") +
    geom_vline(xintercept = - theta_diferenca_grupos_click(buscas, 1:NROW(buscas)),
             color = "orange") +
    geom_rug()

# p-valor (click)
mean(abs(diffs1) >= abs(theta_diferenca_grupos_click(buscas, 1:NROW(buscas))))
## [1] 0
# p-valor biblioteca (click)
 grupo_a = buscas %>% filter(group == "a", num_clicks > 0) %>% pull(num_clicks)
 grupo_b = buscas %>% filter(group == "b", num_clicks > 0) %>% pull(num_clicks)
 permTS(grupo_a, grupo_b)
## 
##  Permutation Test using Asymptotic Approximation
## 
## data:  grupo_a and grupo_b
## Z = 21.695, p-value < 0.00000000000000022
## alternative hypothesis: true mean grupo_a - mean grupo_b is not equal to 0
## sample estimates:
## mean grupo_a - mean grupo_b 
##                   0.2407235

A diferença entre o clickthrough rate dos grupos A e B via intervalos de confiança de 95% e R = 500 foi igual a 0.136344, com limite inferior igual a 0.1319746, limite superior igual a 0.1407032 e erro padrão igual a 0.002198737. A diferença entre o clickthrough rate dos grupos A e B via testes de hipótese com permutação foi igual a 0.0007414102, com p-valor muito próximo de zero e igual a 0.00000000000000022. Com o teste de hipóteses, vimos que o p-valor foi muito próximo de zero, significando que a probabilidade de ele ser igual a um modelo nulo também é muito próxima de zero. Já com os intervalos de confiança, vimos que a diferença entre os grupos é muito pequena, em torno de 0,1. Eles concordam e são importantes para alguém tomando decisões na wikimedia, pois mostram que a diferença entre esses dois grupos é muito pequena nos dois casos (com intervalos de confiança e testes de hipótese).


2) A diferença na proporção buscas com zero resultados nos grupos A e B

Com Intervalos de Confiança (ICs)

theta_diferenca_grupos_resultado = function(d, i){
    resultados_grupos = d %>% 
        slice(i) %>% 
        group_by(group) %>% 
        summarise(resultado_grupo = mean(results == 0)) 
    
    a = resultados_grupos %>% filter(group == "a") %>% pull(resultado_grupo)
    b = resultados_grupos %>% filter(group == "b") %>% pull(resultado_grupo)
    
    a - b
}

theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas))
## [1] -0.00257301
ci2 = buscas %>% 
    boot(statistic = theta_diferenca_grupos_resultado, R = 500) %>% 
    tidy(conf.level = 0.95, 
         conf.int = TRUE)

glimpse(ci2)
## Observations: 1
## Variables: 5
## $ statistic <dbl> -0.00257301
## $ bias      <dbl> -0.00003937472
## $ std.error <dbl> 0.002202617
## $ conf.low  <dbl> -0.006896372
## $ conf.high <dbl> 0.001630891
ci2 %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    labs(x = "a - b", 
         y = "")

Com teste de hipótese (TH)

theta_embaralhado = function(d){
    clicks_grupos_th = d %>%
        mutate(grupo_embaralhado = sample(group, n())) %>%
        group_by(grupo_embaralhado) %>%
        summarise(click_grupo_th = mean(results == 0))

    a = clicks_grupos_th %>% filter(grupo_embaralhado == "a") %>% pull(click_grupo_th)
    b = clicks_grupos_th %>% filter(grupo_embaralhado == "b") %>% pull(click_grupo_th)

    a - b
}

theta_embaralhado(buscas)
## [1] -0.0009650742
diffs2 = replicate(1000, {theta_embaralhado(buscas)})
tibble(diferenca = diffs2) %>%
  ggplot(aes(x = diferenca)) +
  # geom_histogram(binwidth = .2, fill = "white", color = "darkgreen") +
    geom_density(fill = "white", color = "darkgreen") +
  geom_vline(xintercept = theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas)),
             color = "orange") +
    geom_vline(xintercept = - theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas)),
             color = "orange") +
    geom_rug()

# p-valor (resultados zero)
mean(abs(diffs2) >= abs(theta_diferenca_grupos_resultado(buscas, 1:NROW(buscas))))
## [1] 0.271

A diferença na proporção buscas com zero resultados dos grupos A e B via intervalos de confiança de 95% e R = 500 foi igual a -0.00257301, com limite inferior igual a -0.00257301, limite superior igual a 0.001727133 e erro padrão igual a 0.002130845. A diferença na proporção buscas com zero resultados dos grupos A e B via testes de hipótese com permutação foi igual a 0.0009108504, com p-valor igual a 0.239. Com o teste de hipóteses, vimos que o p-valor foi em torno de 0.24, significando que a probabilidade de ele ser igual a um modelo nulo é em torno de 24%. Já com os intervalos de confiança, vimos que a diferença entre os grupos é muito pequena, em torno de -0,002. Eles não concordam e ficaria difícil para alguém da wikimedia tomar decisões com esses dados vindos de intervalos de confiança e testes de hipóteses, porque além de ter dado diferenças pequenas, o p-valor foi alto.