Precisão de amostragem e cálculo

Vários colegas enfrentam o problema de que, para calcular algum tipo de métrica, por exemplo, taxa de conversão, é necessário validar todo o banco de dados. Ou você precisa realizar um estudo detalhado para cada cliente, onde existem milhões de clientes. Esse tipo de kerry pode funcionar por algum tempo, mesmo em repositórios feitos especialmente. Não é muito divertido esperar 5-15-40 minutos até que uma métrica simples seja considerada para descobrir que você precisa calcular outra coisa ou adicionar outra.


Uma solução para esse problema é a amostragem: não estamos tentando calcular nossa métrica em toda a matriz de dados, mas utilizamos um subconjunto que representa representativamente as métricas de que precisamos. Essa amostra pode ser 1000 vezes menor que nossa matriz de dados, mas é boa o suficiente para mostrar os números de que precisamos.


Neste artigo, decidi demonstrar como o tamanho da amostra afeta o erro métrico final.


O problema


A questão principal é: quão bem a amostra descreve a "população"? Como coletamos uma amostra de uma matriz comum, as métricas que recebemos acabam sendo variáveis ​​aleatórias. Amostras diferentes nos fornecerão diferentes resultados métricos. Diferente, não significa nenhum. A teoria da probabilidade nos diz que os valores das métricas obtidos por amostragem devem ser agrupados em torno do valor real da métrica (realizado em toda a amostra) com um certo nível de erro. Além disso, geralmente temos problemas em que um nível de erro diferente pode ser dispensado. Uma coisa é descobrir se obtemos uma conversão de 50% ou 10% e outra é obter um resultado com uma precisão de 50,01% vs 50,02%.


É interessante que, do ponto de vista da teoria, o coeficiente de conversão observado por nós em toda a amostra também seja uma variável aleatória, porque A taxa de conversão "teórica" ​​só pode ser calculada em uma amostra de tamanho infinito. Isso significa que mesmo todas as nossas observações no banco de dados fornecem uma estimativa de conversão com precisão, embora nos pareça que esses números calculados sejam absolutamente precisos. Também leva à conclusão de que, mesmo que hoje a taxa de conversão seja diferente de ontem, isso não significa que algo mudou, mas apenas significa que a amostra atual (todas as observações no banco de dados) é da população em geral (todas as possíveis observações para este dia, que ocorreram e não ocorreram) deram um resultado ligeiramente diferente do que ontem. De qualquer forma, para qualquer produto ou analista honesto, essa deve ser uma hipótese básica.


Declaração de tarefa


Digamos que temos 1.000.000 de registros em um banco de dados do tipo 0/1, que nos informa se ocorreu uma conversão em um evento. Então a taxa de conversão é simplesmente a soma de 1 dividido por 1 milhão.


Pergunta: se coletarmos uma amostra do tamanho N, qual e com qual probabilidade a taxa de conversão será diferente da calculada em toda a amostra?


Considerações teóricas


A tarefa é reduzida ao cálculo do intervalo de confiança do coeficiente de conversão para uma amostra de um determinado tamanho para uma distribuição binomial.


Da teoria, o desvio padrão para a distribuição binomial é:
S = sqrt (p * (1 - p) / N)


Onde
p - taxa de conversão
N - Tamanho da amostra
S - desvio padrão


Não considerarei o intervalo de confiança direto da teoria. Existe um matan bastante complicado e confuso, que finalmente relaciona o desvio padrão e a estimativa final do intervalo de confiança.


Vamos desenvolver uma "intuição" sobre a fórmula do desvio padrão:


  1. Quanto maior o tamanho da amostra, menor o erro. Nesse caso, o erro cai na dependência quadrática inversa, ou seja, aumentar a amostra em 4 vezes aumenta a precisão em apenas 2 vezes. Isso significa que, em algum momento, aumentar o tamanho da amostra não trará vantagens particulares e também significa que uma precisão bastante alta pode ser obtida com uma amostra relativamente pequena.


  1. Existe uma dependência do erro no valor da taxa de conversão. O erro relativo (ou seja, a razão do erro em relação ao valor da taxa de conversão) tem uma tendência "vil" de ser maior, menor a taxa de conversão:


  1. Como vemos, o erro "voa" para o céu com uma baixa taxa de conversão. Isso significa que, se você provar eventos raros, precisará de tamanhos de amostra grandes; caso contrário, obterá uma estimativa de conversão com um erro muito grande.

Modelagem


Podemos nos afastar completamente da solução teórica e resolver o problema "de frente". Graças à linguagem R, agora é muito fácil de fazer. Para responder à pergunta, qual é o erro que recebemos ao fazer a amostragem, basta fazer mil amostras e ver qual o erro que obtemos.


A abordagem é a seguinte:


  1. Adotamos diferentes taxas de conversão (de 0,01% a 50%).
  2. Coletamos 1000 amostras de 10, 100, 1000, 10000, 50.000, 100.000, 250.000, 500.000 elementos na amostra
  3. Calculamos a taxa de conversão para cada grupo de amostras (1000 coeficientes)
  4. Construímos um histograma para cada grupo de amostras e determinamos até que ponto 60%, 80% e 90% das taxas de conversão observadas se situam.

Código R que gera dados:


sample.size <- c(10, 100, 1000, 10000, 50000, 100000, 250000, 500000) bootstrap = 1000 Error <- NULL len = 1000000 for (prob in c(0.0001, 0.001, 0.01, 0.1, 0.5)){ CRsub <- data.table(sample_size = 0, CR = 0) v1 = seq(1,len) v2 = rbinom(len, 1, prob) set = data.table(index = v1, conv = v2) print(paste('probability is: ', prob)) for (j in 1:length(sample.size)){ for(i in 1:bootstrap){ ss <- sample.size[j] subset <- set[round(runif(ss, min = 1, max = len),0),] CRsample <- sum(subset$conv)/dim(subset)[1] CRsub <- rbind(CRsub, data.table(sample_size = ss, CR = CRsample)) } print(paste('sample size is:', sample.size[j])) q <- quantile(CRsub[sample_size == ss, CR], probs = c(0.05,0.1, 0.2, 0.8, 0.9, 0.95)) Error <- rbind(Error, cbind(prob,ss,t(q))) } 

Como resultado, obtemos a tabela a seguir (haverá gráficos posteriormente, mas os detalhes são mais visíveis na tabela).


Taxa de conversãoTamanho da amostra5%10%20%80%90%95%
0,0001100 00 00 00 00 00 0
0,00011000 00 00 00 00 00 0
0,000110000 00 00 00 00 00,001
0,000110.0000 00 00 00,00020,00020,0003
0,000150.0000,000040,000040,000060,000140,000160,00018
0,0001100.0000,000050,000060,000070,000130,000140,00016
0,00012500000,0000720,00007960,0000880,000120.0001280.000136
0,0001500.0000,000080,0000840,0000920.0001140.0001220.000128
0,001100 00 00 00 00 00 0
0,0011000 00 00 00 00 00,01
0,00110000 00 00 00,0020,0020,003
0,00110.0000,00050,00060,00070,00130,00140,0016
0,00150.0000,00080.0008580,000920,001160,001220,00126
0,001100.0000,000870,000910,000950,001120,001160,0012105
0,0012500000,000920.0009480.0009720,0010840,0011160,0011362
0,001500.0000.0009520.00096980.0009880,0010660,0010860,0011041
0,01100 00 00 00 00 00,1
0,011000 00 00 00,020,020,03
0,0110000,0060,0060,0080,0130,0140,015
0,0110.0000,00860,00890,00920,01090,01140,0118
0,0150.0000,00930,00950,00970,01040,01060,0108
0,01100.0000,00950,00960,00980,01030,01040,0106
0,012500000,00970,00980,00990,01020,01030,0104
0,01500.0000,00980,00990,00990,01020,01020,0103
0,1100 00 00 00,20,20,3
0,11000,050,060,070,130,140,15
0,110000,0860,08890,0930,1080,11210,111
0,110.0000,09540,09630,09790,10280,10410,1055
0,150.0000,0980,09860,09920,10140,10190,1024
0,1100.0000,09870,0990,09940,10110,10140,1018
0,12500000,09930,09950,09980.10080,10110,1013
0,1500.0000,09960,09980,10.10070.10090,101
0,5100,20,30,40,60,70,8
0,51000,420,440,460,540,560,58
0,510000,4730,4780,4860,5130,520,525
0,510.0000,49220,49390,49590,50440,50610,5078
0,550.0000,49620,49680,49780,50180,50280,5036
0,5100.0000,49740,49790,49860,50140,50210,5027
0,52500000,49840,49870,49920,50080,50130,5017
0,5500.0000,49880,49910,49940,50060,50090,5011

Vamos ver os casos com 10% de conversão e com uma baixa conversão de 0,01%, porque todos os recursos do trabalho com amostragem são claramente visíveis neles.


Com 10% de conversão, a imagem parece bem simples:



Os pontos são as arestas do intervalo de confiança de 5 a 95%, ou seja, Ao fazer uma amostra, em 90% dos casos, obteremos RC na amostra dentro desse intervalo. Escala vertical - tamanho da amostra (escala logarítmica), valor da taxa de conversão horizontal. A barra vertical é um CR "verdadeiro".


Vemos a mesma coisa que vimos no modelo teórico: a precisão aumenta à medida que o tamanho da amostra cresce, e uma converge rapidamente, e a amostra obtém um resultado próximo de "verdadeiro". No total, para 1000 amostras, temos 8,6% - 11,7%, o que será suficiente para várias tarefas. E em 10 mil já 9,5% - 10,55%.


As coisas pioram com eventos raros e isso é consistente com a teoria:



A uma baixa taxa de conversão de 0,01%, o problema está nas estatísticas de 1 milhão de observações e nas amostras a situação é ainda pior. O erro é apenas gigantesco. Em amostras de até 10.000, a métrica é, em princípio, inválida. Por exemplo, em uma amostra de 10 observações, meu gerador recebeu 0 conversão 1000 vezes, então há apenas 1 ponto. Em 100 mil, temos uma dispersão de 0,005% a 0,0016%, ou seja, podemos fazer quase metade do coeficiente com essa amostragem.


Também é importante notar que, quando você observa uma conversão de uma escala tão pequena em 1 milhão de tentativas, simplesmente tem um grande erro natural. A partir disso, conclui-se que conclusões sobre a dinâmica de tais eventos raros devem ser feitas em amostras realmente grandes; caso contrário, você simplesmente persegue fantasmas, flutuações aleatórias nos dados.


Conclusões:


  1. Amostragem de um método de trabalho para obter estimativas
  2. A precisão da amostra aumenta com o aumento do tamanho da amostra e diminui com a diminuição da taxa de conversão.
  3. A precisão das estimativas pode ser modelada para sua tarefa e, assim, escolha a amostra ideal para você.
  4. É importante lembrar que eventos raros não provam bem
  5. Em geral, eventos raros são difíceis de analisar, pois exigem grandes amostras de dados sem amostras.

Source: https://habr.com/ru/post/pt458890/


All Articles