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"
})
}
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)