Técnicas de exploração e muito mais. No entanto, todas essas coisas têm uma coisa em comum - precisamos entender se uma mudança é para melhor ou não, e precisamos fazer isso enquanto permitimos que muitos testes sejam executados em paralelo.
Podemos pensar em muitos KPIs para novas modificações algorítmicas - latência do sistema, diversidade de recomendações ou interação do usuário, para citar algumas - mas no final do dia, a única métrica que mais importa para min no Avance Network é RPM (velocidade de acesso), que indica quanta velocidade criamos para nossos usuários. O RPM pode ficar um pouco lento - é influenciado por fatores externos, como eventos atuais (quão interessantes são os posts no momento) ou época do ano (não estamos todos esperando as férias?), Mas também por fatores internos, como o sistema atualizações e nossos próprios experimentos - que podem afetar um ao outro e adicionar ruído extra ao servidor. Tudo isso significa que o RPM pode mudar de 5 a 10% no dia a dia. Mas uma melhoria algorítmica, por outro lado, pode ser ainda menor que 1%. Então, como podemos saber se uma mudança é para melhor? Só é preciso um tratamento de dados adequado e algumas estatísticas bastante básicas.
Os Dados
Vamos começar com o tratamento de dados. Com a enorme quantidade de dados que tratamos no Avance Network, você pode ter certeza de que vimos muitos fenômenos interessantes que nos fizeram coçar a cabeça. Por exemplo, dê uma olhada nos dados da tabela abaixo, que mostram o desempenho de duas variantes em um período de quatro dias. Se você observar com atenção, verá que em cada um dos 4 dias, a variante de teste possui valores de RPM mais altos que a variante padrão. No entanto, ao agregar resultados de todos os quatro dias, a variante padrão de repente tem uma RPM mais alta. Isso traz duas perguntas:
- Como isso é possível?
- A variante de teste está ganhando ou perdendo?
variante padrão | variante de teste | |||||
encontro | RPM | contagem | receita | RPM | contagem | receita |
2020-05-01 | 1.358 | 123,651,344 | 167,896 | 1.399 | 41,385,732 | 57,888 |
2020-05-02 | 1.190 | 157,182,560 | 186,992 | 1.200 | 77,811,946 | 93,370 |
2020-05-03 | 1.068 | 151,712,429 | 161,976 | 1.075 | 74,929,584 | 80,538 |
2020-05-04 | 0.988 | 141,997,417 | 140,288 | 0.995 | 70,248,390 | 69,864 |
Grand Total | 1.144 | 574,543,750 | 657,152 | 1.141 | 264,375,652 | 301,661 |
Tabela 1: Estatísticas diárias para duas variantes ao longo de 4 dias
Primeiro, isso não é apenas possível, mas pode realmente acontecer com bastante frequência. Esse fenômeno é chamado de “paradoxo de dados”, onde a combinação de vários grupos cancela uma tendência que aparece individualmente em cada grupo. A resposta para a segunda pergunta está oculta no primeiro dia - observe atentamente a segunda tabela abaixo, que apresenta as contagens de tráfego para cada variante e a proporção entre elas:
encontro | contagem padrão | contagem de teste | relação de contagem |
2020-05-01 | 123,651,344 | 41,385,732 | 0.33 |
2020-05-02 | 157,182,560 | 77,811,946 | 0.50 |
2020-05-03 | 151,712,429 | 74,929,584 | 0.49 |
2020-05-04 | 141,997,417 | 70,248,390 | 0.49 |
Grand Total | 574,543,750 | 264,375,652 | 0.46 |
Tabela 2: Comparando o número de recomendações que cada variante tinha
Pode-se observar que, no primeiro dia do experimento, a proporção está muito baixa (0,33 comparado a 0,49-0,5 em outros dias). Examinando atentamente o assunto, descobrimos que incluímos o dia da configuração da variante no experimento, portanto era um dia inteiro para a variante padrão e um dia parcial para a variante de teste. Como o primeiro dia foi de longe o mais lucrativo (confira as colunas RPM na primeira tabela) e como a variante de teste recebeu um pedaço menor, sua medida geral foi mais baixa, apesar de ter melhores medidas em todos 4 dias. O que aprendemos com este exemplo é que é importante dar uma olhada na divisão de tráfego entre as variantes e garantir que seja consistente, se desejarmos evitar distorções nos dados. Nosso procedimento de teste para esses casos e outros,
É hora do T
E como exatamente ganhamos essa confiança? Isso nos leva à parte estatística deste post, ou mais especificamente, a um teste t de amostra emparelhado.
O teste t de amostra pareada é usado quando podemos corresponder cada observação de uma amostra a uma observação da outra. Para o nosso caso, usamos a receita média diária como um único ponto de dados, e o emparelhamento é realizado ao longo de dias. Isso significa que, para cada variante, temos uma sequência de números e, como um teste t normal, tentamos rejeitar a hipótese nula:
: As médias da variante de teste RPM e da variante padrão RPM são iguais
Mas enquanto um teste t normal é assim:
( e
são os estimadores imparciais da média e variância da amostra, respectivamente)
Um teste t de amostra emparelhada é assim:
A grande vantagem do teste t de amostra emparelhada em relação ao teste t normal é que ele permite cancelar o ruído relacionado ao tempo e focar na diferença entre as duas variantes. Por exemplo, dê uma olhada nos resultados fornecidos na figura a seguir:
Figura 1: Esquerda: receita média (por recomendação) de duas variantes ao longo de 21 dias Direita: a diferença na receita média nos mesmos 21 dias
Usando o teste t normal para comparar as duas variantes, obtemos um valor p de ~ 0,7, o que significa que temos cerca de 30% de confiança em rejeitar a hipótese nula de que as duas variantes têm médias igualmente distribuídas. Isso acontece porque a diferença entre dias é muito maior que a diferença média entre teste e padrão. No entanto, o uso do teste t de amostra pareada produz um valor p de ~ 0,001, ou 99,9% de confiança em rejeitar nossa hipótese nula (não vou mergulhar nas sutilezas do termo de confiança, vamos simplificar). Se você precisar de mais intuição sobre o motivo pelo qual o teste t de amostra emparelhada aumenta a confiança a tal ponto, compare a figura acima com a abaixo - que mostra uma permutação dos dias para testes e dados padrão, para que não possamos mais emparelhar por dias. Num sentido,
Figura 2: As mesmas variantes de teste e padrão, mas desta vez os dias são permutados aleatoriamente para que o emparelhamento não seja conhecido
Sempre que usar um teste estatístico, é importante nos perguntar se é o correto. No nosso caso, garantimos que nossos dados atendam a esses três requisitos para o uso do teste t:
- Os meios amostrais para ambas as populações são normalmente distribuídos. Para amostras grandes, essa suposição é atendida devido ao teorema do limite central, mas para amostras menores isso precisa ser testado. Usamos dados agregados diários para que nossa amostra tenha o tamanho da quantidade de dias no experimento, que normalmente não é muito grande. Para testar esse requisito, usamos o teste de normalidade Shapiro-Wilk e obtivemos bons resultados.
- As duas amostras têm a mesma variação. Isso é necessário apenas quando as amostras não são do mesmo tamanho. Temos amostras de tamanho igual e o teste t é muito robusto para casos com variação desigual, portanto não se preocupe.
- A amostragem deve ser totalmente independente ou totalmente emparelhada. Nossos dados diários são vinculados pelo comportamento geral de cada dia, o que significa que precisamos executar um teste emparelhado, e foi exatamente isso que fizemos.
Final Words
Quando estamos testando novas variantes de nosso sistema, enfrentamos interesses contraditórios. Por um lado, queremos tomar decisões rapidamente - remover variantes perdedoras rapidamente e desviar mais tráfego para as vencedoras gera maior valor. Por outro lado, quanto mais tempo dedicamos às nossas variantes, mais certeza temos em seu desempenho, reduzindo a chance de tomar decisões erradas. Este post dá uma olhada em como usamos alguns princípios estatísticos básicos e os combinamos com “conhecimentos gerais” de manipulação de dados, a fim de equilibrar esses interesses e garantir que obtemos o máximo de informações possível a partir do momento em que fornecemos a nossos variantes. Tem alguma ideia? Nos informe!