1 Visão geral

Nessa análise usaremos dados sobre padrões de buscas e navegação em páginas de projetos da wikimedia. Vamo dar uma olhada nos dados:

buscas$session_start_timestamp <- NULL
head(buscas %>% arrange(session_id))
session_id search_index session_length session_start_date group results num_clicks first_click
0000cbcb67c19c45 1 0 2016-03-03 b 20 0 NA
0001382e027b2ea4 1 303 2016-03-07 b 18 1 1
0001e8bb90445cb2 1 435 2016-03-05 b 20 1 1
000216cf18ae1ab1 1 58 2016-03-08 a 20 0 NA
000216cf18ae1ab1 2 58 2016-03-08 a 20 0 NA
000216cf18ae1ab1 3 58 2016-03-08 a 20 0 NA

Nosso dataframe conta com 9 variáveis, sendo elas:

Através de uma análise exploratória rápida podemos ter uma ideia da quantidade e do comportamento dos dados que estamos lidando. Vamos analisar a quantidade de clicks em cada sessão por grupo, ignorando sessões com duração 0.

buscas %>%
    filter(session_length > 0) %>%
    group_by(session_id) %>%
    summarise(num_clicks = sum(num_clicks), group = first(group)) %>%
    ggplot(aes(x = group, y = num_clicks, group = group, color = group)) +
    geom_boxplot(show.legend = FALSE) +
    scale_y_log10()

Podemos ver que a mediana para ambos os grupos é de 1 clique em cada sessão, porém existem alguns valores muito altos para essa quantidade (outliers) o que pode interferir no valor da média. É possível observar também os dados em a são mais espaçados e possivelmente estão em maior quantidade.

buscas %>%
    group_by(group) %>%
    summarise(numberGroup = n())
group numberGroup
a 92056
b 44178

O grupo ‘a’ tem pouco mais que o dobro de dados que o grupo ‘b’. Agora vamos observar a quantidade de resultados de cada sessão.

buscas %>%
    filter(session_length > 0) %>%
    group_by(session_id) %>%
    summarise(qtd_results = sum(results), session_length = first(session_length)) %>%
    ggplot(aes(qtd_results, session_length)) +
    geom_point() +
    scale_x_log10() +
    scale_y_log10()

Traçando um gráfico entre a quantidade de resultados de cada sessão e o tamanho da sessão (ignorando aquelas com duração 0), não conseguimos enxergar uma relação com muita clareza. Se calcularmos a correlação entre essas duas variáveis veremos que ela é fraca.

correlation = buscas %>%
    filter(session_length > 0) %>%
    group_by(session_id) %>%
    summarise(qtd_results = sum(results), session_length = first(session_length))
    
correlation %>% 
    summarise(pearson  = cor(qtd_results, session_length, method = "pearson"),
              spearman = cor(qtd_results, session_length, method = "spearman"),
              kendall  = cor(qtd_results, session_length, method = "kendall"))
pearson spearman kendall
0.0532509 0.2315436 0.1664127

2 Perguntas

Após uma pequena análise exploratória para conhecer os dados que estamos usando, vamos responder algumas perguntas sobre eles.

2.1 Qual é a taxa de cliques geral diária? Como isso varia entre os grupos?

Iremos calcular a quantidade de cliques por sessão e então dividiremos esse valor pelo número total de sessões, desconsiderando aquelas em que não houveram cliques.

buscasSessao <- buscas %>%
    group_by(session_id, group) %>%
        summarise(session_length = first(session_length), 
              date = first(session_start_date),
              sum_clicks = sum(num_clicks))

buscasSessao %>%
    group_by(date, group) %>%
    summarise(click_rate = round(mean(sum_clicks > 0),2)) %>%
    ggplot(aes(x = date, y = click_rate * 100, group = group, color = group)) +
    geom_point() +
    geom_line(show.legend = FALSE) +
    labs(title = "Daily clickthrough rate", x = "", y = "clickthrough rate (%)") +
    theme(axis.text.x = element_text(hjust = 1, angle = 45)) +
    facet_wrap(~group)

Agrupando a taxa de cliques por sessão e desconsiderando sessões em que não houveram cliques, podemos ver que para o grupo ‘a’ possui uma taxa de cliques muito maior que o grupo ‘b’, que não passa dos 20%.

2.2 Quais resultados as pessoas tendem a tentar primeiro? Como isso muda no dia-a-dia?

Iremos desconsiderar os casos onde a posição do link da página visitada é maior que 25, isso pois a incidência de cliques é bem baixa como podemos ver a seguir.

head(buscas %>%
    filter(first_click >= 25) %>%
    group_by(first_click) %>%
    summarise(count = n()))
first_click count
25 6
26 2
27 4
28 7
29 5
30 5

Traçando um gráfico de barras, podemos ver que, no geral, a grande maioria das pessoas clica no primeiro link, enquanto que o outros valores estão muito abaixo.

buscas %>%
    filter(first_click <= 25) %>%
    ggplot(aes(x = first_click, fill = "#FF6666")) +
    geom_bar(show.legend = FALSE) +
    labs(title = "Results people tend to try",x = "first click")

Para fazer a mesma análise, porém considerando no dia-a-dia, teremos que usar outro valor como medida visto que se usarmos valores dos 50% percentil dos dados ou menos, a grande maioria dos valores será a mesma para todos os dias e nossa visualização não mostrará muita coisa. Vamos utilizar o 95% percentil.

buscas %>%
    group_by(date = session_start_date) %>%
    summarise(percentil = quantile(first_click, c(.95), na.rm = TRUE)) %>%
    ggplot(aes(x = date, y = percentil)) +
    geom_line() +
    geom_point()

Podemos ver uma variação considerável entre os dias, para o 95% percentil, sendo o dia 04 de março aquele com o maior valor.

2.3 Qual é a taxa diária de resultados zero no geral? Como isso varia entre os grupos?

Para responder essa pergunta, vamos traçar um gráfico entre os dias e a média dos resultados 0, ao dividir por grupos teremos uma visualização que responderá a pergunta.

buscas %>%
    group_by(date = session_start_date, group) %>%
    mutate(mean_zero = round(mean(results == 0), 2) * 100) %>%
    ggplot(aes(x = date, y = mean_zero, group = group, color = group)) +
    geom_point(show.legend = FALSE) +
    geom_line(show.legend = FALSE) +
    labs(title = "Daily overall zero results rate", x = "", y = "zero results (%)") +
    theme(axis.text.x = element_text(hjust = 1, angle = 45)) +
    facet_wrap(~group)

Podemos ver que os gráficos são idênticos de 04 de março para trás, porém desse dia em diante as taxas de resultado 0 mudam para os grupos. O grupo tem as menores taxas, chegando a 17% das buscas retornando zero. O maior valor, para ambos os grupos, foi de 20%.

2.4 Escolha uma variável do conjunto de dados e descreva sua relação com o tamanho da sessão. Visualize o relacionamento.

Vamos analisar a relação entre o tamanho de uma sessão e a quantidade de cliques que ocorrem nela.

buscasSessao %>%
    ggplot(aes(session_length, sum_clicks, color = group)) +
    geom_point(alpha = .2, show.legend = FALSE) +
    scale_x_log10() +
    facet_wrap(~group)

Podemos observar que não há uma relação clara entre essas variáveis, independente do tamanho da sessão o número de cliques sempre tende a ser baixo, porém ao separarmos em grupos vemos a presença de muitos outliers no grupo ‘a’. Abaixo calculamos as correlações entre essas variáveis.

buscasSessao %>% 
    group_by(group) %>%
    summarise(pearson  = cor(session_length, sum_clicks, method = "pearson"),
              spearman = cor(session_length, sum_clicks, method = "spearman"),
              kendall  = cor(session_length, sum_clicks, method = "kendall"))
group pearson spearman kendall
a 0.0921041 0.4188649 0.3265668
b 0.1336444 0.7652151 0.7117830