Objetivo: fazer um Teste A/B para saber se o comportamento do consumidor de uma loja online é alterado quando, após selecionar um item para ser comprado, o consumidor é direcionado de volta para a lista de produtos (controle) ou para a página de checkout (tratamento).

Carregando a base de dados.

testeab <- read.csv2("C:/Users/Daniel/Desktop/Projetos/Teste AB/dados.csv")
head(testeab)
##   ï..id checkout     dia itens valor d
## 1   538        1 Domingo     8    64 1
## 2   553        1 Domingo     3   211 1
## 3   554        1 Domingo     5    92 1
## 4   556        0 Domingo     8   268 1
## 5   574        1 Domingo     2   229 1
## 6   584        0 Domingo     4   157 1

Separando os dados entre Controle (Retorno ao Site) e Tratamento (Direcionado ao Checkout) e visualizar a distribuição dos dados.

controle <- subset(testeab, testeab$checkout == 0)
tratamento <- subset(testeab, testeab$checkout == 1)
summary(controle[3:5])
##       dia         itens           valor      
##  Domingo:43   Min.   :1.000   Min.   : 24.0  
##  Quarta :37   1st Qu.:2.750   1st Qu.:117.0  
##  Quinta :78   Median :4.000   Median :207.0  
##  Sabado :51   Mean   :4.292   Mean   :200.3  
##  Segunda:71   3rd Qu.:6.000   3rd Qu.:274.0  
##  Sexta  :81   Max.   :8.000   Max.   :367.0  
##  Terca  :43
summary(tratamento[3:5])
##       dia          itens           valor      
##  Domingo: 58   Min.   :1.000   Min.   : 22.0  
##  Quarta : 53   1st Qu.:2.000   1st Qu.: 83.0  
##  Quinta : 62   Median :3.000   Median :151.0  
##  Sabado : 77   Mean   :3.292   Mean   :157.4  
##  Segunda:120   3rd Qu.:4.000   3rd Qu.:226.0  
##  Sexta  :156   Max.   :8.000   Max.   :362.0  
##  Terca  : 91

Plotando boxplots para cada variável.

for (i in testeab[4:5]){
  cont <- subset(i, testeab$checkout == 0)
  trat <- subset(i, testeab$checkout == 1)
  boxplot(cont, trat, 
        names = c("Retorno ao Site", "Checkout"),
        col = c("lightblue", "lightgreen"),
        main = if (i == testeab[4]){
          "Quantidade de Itens de cada Venda"
        } else { "Valor Total de cada Venda"
      })
}

Testes de médias

Antes de realizar um teste de médias é necessário verificar se as variâncias são iguais ou diferentes. Assim, se p<0,05 então as variâncias são diferentes.

var.test(controle$itens, tratamento$itens)
## 
##  F test to compare two variances
## 
## data:  controle$itens and tratamento$itens
## F = 1.4661, num df = 403, denom df = 616, p-value = 1.945e-05
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  1.229346 1.754321
## sample estimates:
## ratio of variances 
##           1.466103
var.test(controle$valor, tratamento$valor)
## 
##  F test to compare two variances
## 
## data:  controle$valor and tratamento$valor
## F = 1.2685, num df = 403, denom df = 616, p-value = 0.008086
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  1.063619 1.517823
## sample estimates:
## ratio of variances 
##           1.268459

Os testes indicam que nos dois casos as variancias são diferentes.

Desta forma, os testes de médias devem indicar var.equal=FALSE

t.test(controle$itens, tratamento$itens, alternative= "two.sided", conf.level=0.95, var.equal=FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  controle$itens and tratamento$itens
## t = 7.745, df = 746.01, p-value = 3.12e-14
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.7467853 1.2539047
## sample estimates:
## mean of x mean of y 
##  4.292079  3.291734
t.test(controle$valor, tratamento$valor, alternative= "two.sided", conf.level=0.95, var.equal=FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  controle$valor and tratamento$valor
## t = 7.3367, df = 788.92, p-value = 5.443e-13
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  31.45096 54.42832
## sample estimates:
## mean of x mean of y 
##  200.3416  157.4019

Podemos afirmar que a média de itens comprados e a média do valor da compra são diferentes entre os grupos de controle e tratamento. Enquanto o consumidor que volta para o site compra em média 4.3 produtos, o consumidor que vai direta para o checkout compra 3.2 produtos. A maior quantidade de produtos reflete em um maior ticket médio. O grupo que volta para o site tem o ticket médio de $200 e o grupo que vai para o checkout tem o ticket médio de $157.

Contudo, uma informação que não está disponível e é muito importante para a análise é a porcentagem de conversões, ou seja, a relação entre consumidores que escolheram um produto e efetivamente compraram o produto. Os gráficos abaixo mostram que apesar de ter uma cesta com menos produtos e um ticket médio inferior, o grupo de tratamento teve um total de produtos e de gasto maior do que o grupo de controle em praticamente todos os dias da semana. Levando em conta que os grupos foram separados aleatoriamente, este pode ser um indicador de que enviar os consumidores para o checkout garante que estes, ainda que comprem menos, finalizarão o processo de compra.

Plotando gráficos para visualizar a quantidade e o valor das vendas por dia da semana.

ven <- xtabs(testeab$valor ~ testeab$checkout + testeab$d)
barplot(ven,
     main = "Valor Total de Vendas",
     ylim = c(0, 25000),
     names.arg = c("Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado"), 
     col = c("lightblue", "lightgreen"),
     beside = TRUE)
legend(1, 25000, c("Retorno ao Site","Checkout"), fill = c("lightblue","lightgreen"), box.lty=0)

qnt <- table(testeab$checkout, testeab$d)
barplot(qnt,
     main = "Quantidade de Vendas Concluídas",
     ylim = c(0,200),
     names.arg = c("Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado"), 
     col = c("lightblue", "lightgreen"),
     beside = TRUE)
legend(1, 200, c("Retorno ao Site","Checkout"), fill = c("lightblue","lightgreen"), box.lty=0)