Maior sensibilidade dos testes A / B com o Cuped. Relatório em Yandex

O CUPED (experimento controlado usando dados de pré-experimento) é uma técnica de experimento A / B que tem sido usada na produção há relativamente pouco tempo. Permite aumentar a sensibilidade das métricas através do uso de dados obtidos anteriormente. Quanto maior a sensibilidade, mais mudanças sutis podem ser percebidas e levadas em consideração no experimento. A primeira empresa a introduzir o CUPED foi a Microsoft. Agora, muitas empresas internacionais estão usando essa técnica. Em seu relatório, Valery Babushkinvenheads explicou qual é o significado do CUPED e quais resultados podem ser alcançados e, antes disso, examinou o método de estratificação, que também melhora a sensibilidade.


- Meu nome é Valery Babushkin, sou diretor de modelagem e análise de dados do X5 Retail Group e consultor da Yandex.Market. Nos meus tempos livres, ensino na Escola Superior de Economia e, muitas vezes, viajo para o Cazaquistão, ensino no Banco Nacional do Cazaquistão.

Além disso, eu costumava desfrutar de aprendizado de máquina competitivo. Na plataforma Kaggle, uma vez consegui o título de Grão-Mestre de Competições e 23 lugares no ranking mundial de 120 mil. O Kaggle é projetado de uma maneira muito simples: se você não executar, você cai no ranking. Então, eu tento não ir mais lá para não ver esses números.



Minha apresentação terá duas etapas: estratificação e Variáveis ​​de Controle. Provavelmente, você sabe o que são testes A / B e por que são necessários. Mas não vamos pular esta fórmula.



Nos testes A / B, há uma variedade de abordagens. Em princípio, essas são duas abordagens principais em estatística. Um deles é chamado de frequência, o segundo é bayesiano. Em alguns livros, por exemplo, em Efron, uma terceira abordagem, a de Fisher, é destacada, mas não falaremos sobre isso, nem sobre a abordagem bayesiana. Vamos falar sobre a abordagem de frequência.

Existe uma fórmula simples na abordagem de frequência. Existem dois deles, mas um considera o caso de uma distribuição discreta; o outro considera uma distribuição contínua; portanto, consideraremos isso como uma fórmula.

Esta fórmula nos diz quantas observações são necessárias. Se pudéssemos dar ao luxo de coletar uma quantidade infinita de dados, obteríamos o valor verdadeiro de cada uma das distribuições e, em seguida, simplesmente comparássemos suas estimativas pontuais. Embora possamos comparar estimativas pontuais de um número infinito de dados - essa é uma pergunta, mas mesmo assim. Teríamos uma distribuição verdadeira, compará-los e dizer qual é o melhor.

Infelizmente, não podemos fazer isso; sempre temos um limite na quantidade de dados que podem ser coletados. Isso é causado pelo número de nossos usuários ou pelo tempo durante o qual podemos coletar esses dados ou pelo fato de que eles simplesmente desejam obter o resultado conosco o mais rápido possível.

Vemos aqui uma fórmula muito simples para n, onde n é o número de observações necessárias em cada um dos grupos. No numerador ondez2 é o intervalo de confiança, o grau de confiabilidade com o qual queremos dar nosso resultado. Parece óbvio quez2

corrigimos uma vez e não podemos mudar mais. Obviamente, podemos dizer que damos o resultado com um grau zero de confiabilidade e, então, precisamos de zero observações. Isso seria muito conveniente, mas geralmente não. Além disso, no numerador, se olharmos para a fórmula discreta, éz

, que é igual à variação da distribuição binomial. No caso contínuo, a mesma coisa, σ2, ou seja, a variação. E parece lógico que quanto maior a variação, mais observações precisamos. O denominador contém m2ou margem de erro - é a diferença mínima que queremos capturar, e aqui a situação é o oposto. Quanto menor a diferença que queremos captar, mais observações precisamos. Ou seja, é algo como um erro.p^(1p^)



Se precisarmos de um erro de 0,01, precisaremos de 100 vezes mais observações do que se precisarmos de um erro de 0,1. Eles diferem em dez vezes, mas existe uma dependência quadrática, verifica-se que são necessárias 100 vezes mais observações.

Uma vez eu tive um relatório sobre linearização. Hoje direi como podemos reduzir a variância e, no devido tempo, disse como podemos aumentar m. Aumentar m parece ser uma estratégia melhor, porque aumentar m pela metade reduz em quatro a quantidade de dados necessários para os cálculos. Aumentar significa um erro que podemos cometer.

E se reduzirmos a variação pela metade, precisaremos apenas duas vezes mais observações. Portanto, reduzir algo quatro vezes no denominador é um ganho de 16 vezes e quatro vezes no numerador - apenas quatro.

No entanto, cada abordagem tem seus prós e contras. Posso então dizer com mais detalhes quais. Agora, passamos a reduzir a variação.

Estratificação. Aliás, terei resultados experimentais em cada seção no final, o que obtivemos em dados reais em um ambiente real.



Então, vamos falar sobre estratificação. O que nós sabemos? Sabemos que reduzir a variância reduz o número de observações. Suponha que nossa métrica desejada, pela qual analisamos, possa ser dividida em algumas regiões, por agrupamentos. Uma pergunta muito boa que já foi feita: como acabar com isso? Por país? Ou talvez nos navegadores? Talvez vá para sistemas operacionais? Talvez os usuários que efetuam login no Mac, Windows e Linux sejam três tipos diferentes de usuários.

Se encontrarmos uma quantidade ou um sinal pelo qual podemos dividir em grupos, faremos o seguinte: divida em K grupos, onde K é o número de quantidades únicas iguais ao número de grupos que temos. No caso de sistemas operacionais - três, com países - o número de países etc.

Além disso, a probabilidade de cair em cada um dos grupos é igual ao número de todas as observações no denominador e ao número de observações em cada um dos grupos no numerador. Ou seja, podemos estimar pesos aproximados com antecedência e, se houver um número total de usuários, tantos usuários vierem do Mac, tantos do Windows, tantos do Linux, podemos calcular imediatamente os pesos e a probabilidade de um novo usuário. este sistema operacional.

Em seguida, a média estratificada de nossa métrica será representada por uma fórmula muito simples. Esse é o valor da métrica no estrato, multiplicado pelo peso do estrato e, portanto, somamos todos os estratos. A fórmula é bastante óbvia, acho que não precisa ser analisada especificamente.



Além disso, pode ser um pouco mais complicado. Vamos gastar alguns minutos para analisar essas fórmulas, mas se você de repente não entender alguma coisa - não se preocupe, passei três horas de uma vez para analisá-las.

O que vemos aqui? O valor médio de uma métrica estratificada não é diferente do valor médio para amostragem aleatória. Não é difícil provar isso, é apenas uma balança ponderada, que no final é igual à ponderada em todo o grupo.

Mas a variação é um pouco mais interessante. Na verdade, também sabemos uma fórmula muito simples de que a soma das variações, a variação de duas quantidades, é a soma de suas variações, mais a covariável, se não forem independentes, com algum tipo de coeficiente. E as somas dessas variações também são coeficientes.

Na verdade, se você prestar atenção, é exatamente aqui que esses coeficientes são apresentados, eis a probabilidade de entrar em um estrato. Consequentemente, a variação do todo estratificado é a variação em cada um dos estratos com alguns pesos. E o peso é a probabilidade de entrar nesse estrato.

Até agora, tudo parece bastante razoável. E no final, a variação sobre o total estratificado será igual a esta fórmula. Não importa se você não entende o porquê agora. O principal é lembrar.



Agora vamos falar sobre média e variância para amostragem aleatória. SRS é uma amostragem aleatória simples, isto é, amostragem aleatória.

Como você pode imaginar, o valor médio da amostragem aleatória é igual à média. Aqui, especialmente, eu acho, não é necessário aprofundar-se em algo. Mas a variação da amostragem aleatória, se você observar a fórmula clássica, é muito clara. Isso é σ 2 vezes um dividido por n. Se recordarmos a fórmula do erro padrão, então isso é σ dividido pela raiz de n. Essa é a variação da média.

Mas eu quero dividi-lo em seus componentes.



Portanto, se a dividirmos em seus componentes, observando uma série simples dos cálculos a seguir, veremos (você tem que acreditar em mim, não passaremos por todas essas linhas, mas aqui elas não são muito complicadas) que consiste em dois membros.



Lembre-se deste. Essa é a variação em caso de estratificação, acredite em mim.



Se prestarmos atenção ao que a variância da amostragem aleatória é composta, ela consiste em dois membros: o primeiro, que é igual à variância do estratificado, e o segundo.

Qual é o ponto? Se você pensar brevemente, a variação da amostragem aleatória pode ser representada como a soma da variação no grupo estratificado e entre os grupos estratificados. Existem n grupos, há uma dispersão de a dentro do grupo, b é a dispersão entre os grupos. Se alguém se lembra, é aproximadamente o mesmo que análise. Há dispersão dentro do grupo e dispersão entre os grupos. É lógico.

Acontece que a dispersão da amostragem aleatória, na melhor das hipóteses, pode ser igual à variação da estratificação ou mais. Por quê? Porque se esse termo é igual a zero (e não pode ser menor que zero devido ao fato de haver um quadrado e que a probabilidade não pode ser negativa), então há claramente algo maior ou igual a zero. Aqui é igual ao que você viu na estratificação. Acontece que vencemos, reduzimos a variação, pelo menos para este membro.



É o mesmo que eu disse agora, então vamos pular. Mas você provavelmente terá interesse em entender o que eu falei. A propósito, na parte inferior de cada slide está o nome do artigo do qual essa fórmula é usada. Três artigos participaram desta apresentação, e você pode ler * .

Lemos algum artigo, conversamos alguma coisa, mas isso não é muito interessante. É interessante ver como algo funciona na vida real. Sobre isso - o próximo slide.



Peguei os dados e comecei a ver como eles funcionam na vida real. Na vida real, minha variação caiu em até um por cento.

Suspeita-se que o crescimento seja tão pequeno simplesmente porque temos muitos dados e geralmente não há uma dispersão muito grande entre os estratos. Eles já estão suavizados e bastante representativos. Mas parece que, se os dados não são suficientes, ou há algum tipo de violação na amostra, ou não são inteiramente aleatórios (o que, aliás, muitas vezes acontece), o aumento pode ser maior.

E esse método é muito simples de implementar. Preste atenção, nada complicado. Ou seja, você coleta em cada estrato uma quantidade proporcional à probabilidade de entrar nesse estrato em toda a amostra. Tudo é bastante razoável.

Vamos para a segunda parte. Cuped. Não sei exatamente como pronunciar corretamente; na verdade, essas são covariáveis, usamos dados experimentais.



O ponto também é muito simples. Tomamos uma variável aleatória X independente de Y no sentido de que não há efeito experimental na variável X.

Como conseguir isso? A maneira mais fácil é pegar a variável X, que foi obtida antes do início do experimento. Então podemos ter certeza de que o experimento não o afetou.

Mais. Podemos introduzir uma nova métrica que queremos calcular como a diferença entre Y e θX. Isso é apresentado na fórmula: a nova métrica, digamos Ycuped, é a métrica desejada menos θ vezes X.

É sobre isso que já falamos. Uma fórmula simples que nos permite calcular a variação da diferença entre duas quantidades. Essa é a variação da primeira magnitude. Como ele tem um coeficiente de unidade, 1 2 , nós o removemos. Mais o coeficiente da segunda quantidade θ2, a variância de X. Mas, como essa é uma subtração, menos 2θ, a covariância entre Y e X.

Se essas quantidades fossem independentes, qual seria o valor? Zero. A covariância entre quantidades independentes é zero. Parece que, se tomarmos um valor independente, ele definitivamente não ficará melhor conosco.



Então precisamos pegar uma quantidade dependente, e temos mais um hiperparâmetro, vamos chamá-lo de θ. Quando podemos minimizar a variação? Quando θ é igual à covariância entre Y e X dividida pela variação de X.



Agora não examinarei em detalhes por que isso é assim, mas se você observar esta equação simples, também poderá deduzi-la.



Se fizermos isso, obteremos uma transformação simples muito conveniente, e a variação resultante será representada como a variação Y, multiplicada por um menos a correlação ao quadrado entre a métrica Y e a métrica X. Parece ser bom.

Por que isso funciona? Supomos que temos a variação de nossa métrica Y devido a dois fatores ou duas razões. É devido a algum X covariável e tudo mais. Nós podemos fazer isso, certo? E dizemos: pessoal, o que temos devido ao X, removemos, deixamos apenas isso por todos os outros motivos.



No gráfico do próximo slide, ficará claro por que isso funciona. Alguma idéia de por que isso funciona? Além da fórmula que escrevi, antes disso, havia também fórmulas. Descobriu-se que não funciona. No final, não vimos os resultados finais, também acontece que não funciona.

O que nos interessa antes de tudo quando realizamos testes A / B? A diferença é média. Na grande maioria dos casos, não analisamos quantis. Embora, a propósito, o Uber goste muito de observar quartis, e às vezes é muito importante observá-los, as médias podem permanecer inalteradas, os quantis podem mudar drasticamente e os usuários que aumentaram algum tipo de quantil de 99% caem. O Uber tem esse tempo de espera. Esta é a nota da anfitriã.

Mas muitas vezes estamos interessados ​​na diferença de meios. E queremos usar métodos que não alterem essa diferença de médias. Porque se estamos falando de linearização, estamos passando para um novo espaço de atributo. Sim, está tudo bem. Podemos contar alguns testes A / B 64 vezes mais rápido. Sim, é proporcional, mas não podemos dizer o quanto essa diferença de meios é realmente assim.

Para calcular a diferença de médias e tirar uma conclusão sobre tudo, você precisa ter θ, que é uniforme para todos os grupos. Um grupo é A1, A2, B, C e assim por diante. Estas são células de teste ou variações do seu teste A / B.

Como escolher a métrica X? A escolha lógica para a métrica X é a mesma métrica Y, mas no período anterior ao período do experimento. Por exemplo, se essa é a duração média da sessão para o usuário, você pode calcular a duração média da sessão do usuário antes do experimento por um período, durante o experimento, subtrair um do outro e ver apenas os desvios entre eles. Provavelmente lhe interessa mais.

Aqui, a propósito, surge uma pergunta interessante - em que período devemos tomar a métrica X? Em um dia, em uma semana, em duas semanas? Não há resposta teórica, mas uma resposta prática mostra que duas semanas é uma ótima ou uma ótima. Em princípio, é possível coletar e plotar os dados experimentais sobre quanta dispersão diminui e quanto nosso teste converge dependendo de quanto tempo levamos X.



Por que funciona? Olha, este é um gráfico muito simples, uma imagem muito simples. Apresenta os valores de X e Y, os valores de nossas métricas para o usuário no período anterior ao experimento e depois.

O que estamos fazendo? Nós selecionamos θ. Da mesma forma, podemos selecioná-lo usando o método dos mínimos quadrados. Ou seja, essa é uma certa linha do meio, que fornece a quantidade mínima de saldos. O restante é a diferença entre o que é e o que está em jogo.

Portanto, de alguma forma, estamos tentando calcular a média e ainda obter o valor médio da métrica. O valor médio da métrica não muda. Parece-me que eu mesmo não entendi completamente o que disse agora, e você provavelmente teve que ficar ainda mais difícil porque eu já vi isso. Vamos tentar de novo. Temos o eixo X e o eixo Y. Podemos marcar os valores anteriores ao experimento no eixo X e os valores correspondentes durante o experimento no eixo Y. Ou seja, temos um certo ponto nas coordenadas XY. Podemos marcá-lo no gráfico.

Se nenhuma mudança ocorreu, esses pontos coincidirão conosco. Esta será a nossa bissetriz. Como X é igual a Y. Mas, na verdade, isso não vai acontecer, concorda? Em alguns casos, o valor da métrica Y será maior, em alguns casos menor.

Queremos entender e obter exatamente essa diferença. Porque todo o resto não é tão interessante para nós. Por exemplo, se não temos diferença, realizamos um experimento e X é igual a Y - o que significa que nosso experimento provavelmente não foi afetado. Se conduzimos nosso experimento e vemos que Y está simplesmente acima deste X em todos os lugares, é uma ocasião para pensar que podemos ter influenciado alguma coisa. Se temos Y estável abaixo de X, também não é muito bom. Muito provavelmente, tivemos um efeito negativo.

Acontece que estamos tentando traçar uma certa linha que descreve a relação entre X e Y, minimizando essa diferença. A regressão linear também é feita. Concorde que existe uma regressão linear, você considera uma variável independente e uma variável dependente. Você deseja descrever com a maior precisão possível.

Essa é a nossa linha, essa é a nossa nova métrica em concha e é exatamente por isso que o valor médio em concha não muda. O valor Ycuped não mudará do valor Y da média. Por quê? Porque. Era necessário explicar imediatamente isso. :) A propósito, o artigo original diz o seguinte: observe que há uma conexão muito interessante entre a busca por θ e a regressão. É isso.

Repito, estamos interessados ​​em ver como o experimento em si afetou o comportamento do usuário, o quanto ele mudou em relação ao básico. Suponha que sempre tenha sido realizado e haja dois usuários: um sempre teve uma sessão de dez minutos e o outro 100 minutos. Houve alguma alteração, e o primeiro usuário ainda gasta 100 minutos, e o segundo, 12 minutos. A diferença em um caso é zero, no outro - dois. Mas simplesmente comparar os números 12 e 100 entre si provavelmente não é muito razoável. Nós queremos outro. Chamamos isso de "normalizar". Obviamente, isso não está correto, mas mesmo assim.

Agora vamos ao experimento.



O que vemos? Esta é uma captura de tela de um laptop Jupyter que eu realmente não gosto (eu amo mais o PyCharm), mas ainda assim fiz. A variação da métrica em concha e a variação da métrica padrão já são apresentadas aqui. Veja o quanto eles diferem? Ycuped é muito menor e as médias não são diferentes.

Mais precisamente, eles não diferem. Em algum lugar na casa decimal de 15, eles provavelmente diferem, mas assumiremos que este é um erro associado ao arredondamento.

O que vemos aqui? A dispersão caiu 45%. São dados online. O que observamos em X5 é que a variação cai quatro vezes. No X5, temos algum tipo de comportamento dentro da loja, que pode ser médio para o dia da semana, para a hora, para a hora e o dia da semana. Veja, podemos pegar covariáveis ​​que estão cada vez mais correlacionadas. Parece que o número condicional de pessoas que vieram na segunda-feira deve se correlacionar com o número de pessoas que vieram na próxima segunda-feira. Se olharmos um pouco mais fundo, então segunda-feira, seis horas da noite, deve se correlacionar ainda mais fortemente com segunda-feira, seis horas da noite. E domingo, três da tarde, com outro domingo, três da tarde.

A queda máxima de variação que eu vi na vida real foi 19 vezes. Qual é a vantagem? Para fazer isso também é muito simples, você deve admitir que não precisa pensar. Covariável encontrado, encontrado θ. θ, a propósito, é encontrado de acordo com uma fórmula extremamente simples, tudo já foi feito.



Tomou, subtraiu, obteve a métrica convertida. Sua média não mudou, isso é muito bom. Explique aos negócios em um idioma normal, por que isso acontece, é possível. Você diz que estamos interessados ​​não apenas em como os usuários se comportam em média, mas em como o comportamento deles mudou em relação à média. E é isso.

Em alguns casos, pode haver dificuldades na escolha da covariável correta, mas geralmente isso não é um problema. Sempre é possível (muito raramente, quando não possível) obter o valor do período experimental anterior. Funciona. Uma redução de 19 vezes na variação significa que a quantidade de dados necessários para o teste A / B também diminui 19 vezes. Ou seja, você pode obter seu resultado mais rapidamente e isso aumenta a sensibilidade do teste.

Se você já possui um certo número de testes A / B, pode executá-lo da mesma maneira retrospectiva e calcular erros do primeiro e do segundo tipo. Você pode contar erros do primeiro tipo se realizar um teste de AA. Em copo, você o gastará da mesma maneira - e da mesma maneira você poderá avaliar quanto sua sensibilidade aumentou.


* :
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data
Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix
How Booking.com increases the power of online experiments with CUPED

All Articles