Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Avaliação de testes A/B com Pandas

Avaliação de testes A/B com Pandas

Antes de qualquer alteração no ecommerce, é fundamental validar se a nova proposta realmente tem o efeito esperado. E para decidir qual grupo é o melhor, basta escolher o que teve mais vendas, certo? Errado!

Conheça todas as análises feitas na Chaordic durante o acompanhamento de testes A/B. Mostraremos como usamos o Pandas para detectar outliers, montar intervalos de confiança, etc.

Larissa Lautert

May 03, 2017
Tweet

More Decks by Larissa Lautert

Other Decks in Science

Transcript

  1. você está vendo Compre junto + + = Valor dos

    3 ítens 169 130 COMPRAR JUNTO A você está vendo Compre junto + + = Valor dos 3 ítens 149 120 COMPRAR JUNTO B
  2. Avaliação de A/B’s • E se o resultado foi por

    acaso? • Ferramenta interna • Mais de 60 testes avaliados NumPy matplotlib
  3. Outliers - 1% maiores n = len(ab_table) / 100 ab_table

    = ab_table.sort(ascending=False) ab_table = ab_table.loc[n+1:]
  4. Outliers - distância da média mean = ab_table.revenue.mean() std_dev =

    ab_table.revenue.std() threshold = mean + 3 * std_dev ab_table = ab_table.query("revenue < " + threshold)
  5. • E se o resultado foi por acaso? • p-value:

    chance de estarmos errados ao confiar na média ◦ Valor seguro: 5% Significância estatística
  6. Significância from scipy.stats import norm zscores_for_significance = abs(means[‘A’]-means[‘B’]) \ /

    (stds[‘A’] / np.sqrt(sizes[‘A’]) + stds[‘B’] / np.sqrt(sizes[‘B’])) pvalue = 1 - zscores_for_significance.apply(lambda z: 1-norm.sf(z)*2) YA - YB n σA + σB
  7. Intervalo de confiança from scipy.stats import norm two_tailed_zscore = norm.ppf(1

    - significance / 2) margins_of_error = two_tailed_zscore * stds / np.sqrt(sizes) Y + Z S . n
  8. Intervalo de confiança import matplotlib.pyplot as plt ax = means.plot(style="o--")

    for ab_group in margins_of_error: ax.fill_between( margins_of_error.index, means[ab_group] +margins_of_error[ab_group], means[ab_group] -margins_of_error[ab_group], alpha=0.2 )
  9. Análise Bayesiana Bayes Factor = chance de B ser melhor

    chance de A ser melhor Strength of evidence < 100 negative 100 to 101/2 barely worth mentioning 101/2 to 101 substantial 101 to 103/2 strong 103/2 to 102 very strong > 102 decisive
  10. • Tempo do teste: ◦ Alto volume de dados ◦

    Diferença de eficácia entre soluções Concluindo o teste
  11. • Valide suas ideias com testes A/B • Análise Bayesiana

    é mais simples • Slides em https://speakerdeck.com/llautert • Vaga de estágio em Data Science na Chaordic ◦ https://chaordic.github.io/machinelearning-challenge/ Conclusão