Relação A / B de somas


7

 Contexto

Considere o cenário a seguir para uma empresa que vende mercadorias on-line. Um usuário pode comprar vários itens (por exemplo, cesta de itens), alguns dos quais são de particular importância e são rastreados especificamente (vamos chamá-los de itens em estrela).

Desejamos testar uma alteração em um algoritmo (por exemplo, recomendação, avaliação de risco, adicionar segmentação, qualquer que seja ...) que possa influenciar o número de itens em estrela vendidos e o total de vendas .

  • Esta é uma configuração de teste A / B padrão - a unidade de randomização está no nível do usuário .
  • O objetivo do teste A / B é comparar o impacto da alteração do algoritmo: o grupo de controle possui o algoritmo original e a variante possui o novo algoritmo
  • Uma métrica chave de interesse é definida como a proporção de vendas de itens em estrela sobre o total de vendas . É uma soma de todas as transações de todos os usuários no escopo de cada grupo A ou B.
  • Isso significa que a unidade de análise está no nível da transação, que é diferente da unidade de randomização
  • As métricas são calculadas durante toda a duração do teste (por exemplo, 2 semanas)

Detalhe da métrica usada

Dado o grupo A e um conjunto de usuários UA={u1,u2,...,uNA}, cada usuário está envolvido em um númerotunde transações. O conjunto de todas as transações de todos os usuários do grupo A durante o teste é .TATA={tu11,tu12,...tunm}

A métrica de interesse para o grupo A é definida em todas as transações no escopo do grupo A. As somas estão no nível da transação, não no nível do usuário.

MetricA=tiTAsales star items $tiTAsales $

Obviamente, poderíamos modificar a definição para calcular a média do nível do usuário e isso simplificaria tudo, mas essa não é a métrica que está sendo usada.

Questões

Que teste estatístico poderia ser usado para essa métrica? Uma consideração adicional é que, embora possamos assumir com segurança que os usuários são iid, é mais provável que seja errado supor que cestas de compra individuais sejam iid para o mesmo usuário.

Aqui estão algumas idéias que me deparei. Algum profissional de testes A / B encontrou métricas semelhantes no passado?

  • teste z de proporções
  • Bootstrapping e Jacknife
  • Método Delta
  • Alterar a métrica (último recurso)

https://en.wikipedia.org/wiki/Ratio_estimator

Editar - Alguns esclarecimentos

A razão por trás dessa pergunta é que muitas vezes vi o teste z de proporção sendo usado nessa situação. As ferramentas populares usadas para o teste A / B geralmente são padronizadas no teste de proporção e os usuários corporativos raramente verificam as premissas subjacentes necessárias para que o teste seja válido. A resposta do @ dnqxt abaixo é um bom exemplo: "Basta usar o teste z de proporção!" - mas eu gostaria de ver uma justificativa estatística rigorosa sobre por que (ou por que não) esse teste pode ser usado nesse caso.

Pessoalmente, não acho que o uso de um teste z de proporções funcionaria aqui, pois as vendas de um evento de compra não são testes de Bernoulli. Argumento que não podemos dizer que cada dólar vendido no denominador pode ser visto como um teste de Bernoulli, resultando em 0 ou 1 dólar de item estrela vendido no numerador. Além disso, como a unidade de randomização está no nível do usuário, os eventos de compra do mesmo usuário não são independentes (mas eu diria que esse é um problema secundário). Eu posso estar errado aqui, então fique à vontade para provar isso de outra forma!

Também podemos alterar a métrica para torná-la um Bernoulli / Binomial que converge para Normal usando contagens, mas essa seria uma solução de último recurso

#sales with star items#sales


Se a métrica seguir uma distribuição normal, talvez você possa usar uma regressão linear ou o UniANOVA. Se a métrica não seguir uma distribuição normal, você poderá tentar uma transformação semelhante à usada na regressão logística: , embora possa ter problemas, quando a métrica for ou . x=log(metric/(1metric))01
Ertxiem - reinstala Monica em 20/03/19

11
Apenas a nota algo: As vendas são normalmente muito non-Normal. Você definitivamente precisaria levar isso em consideração ao apresentar seus dados. Dito isto, por que não usar uma regressão Beta nos dados agregados no nível do usuário? A análise pode ser estratificada diretamente com as informações demográficas disponíveis e / ou no caso de usuários existentes com informações adicionais sobre o comportamento pré-existente do usuário. (por exemplo, sabemos com boa certeza de onde o usuário reside, pois temos informações de entrega e / ou informações de faturamento.)
usεr11852

De fato, não há razão para acreditar que as vendas sejam normalmente distribuídas ... dividir as vendas por número de usuários (ou seja, vendas médias por usuário) daria uma estatística normalmente distribuída, considerando o número de usuários no escopo. Talvez pegue o log e faça um teste no espaço transformado do log?
Xavier Bourret Sicotte

11
Nesse caso, esta é uma excelente pergunta. (+1)
usεr11852

11
Por que você analisa uma estatística derivada (unidimensional e agregada), em vez de tentar analisar mais diretamente os dados e as observações brutas (e depois tira conclusões sobre a estatística derivada com base nessa análise)? (Essa proporção de duas somas tem aproximadamente uma distribuição Cauchy incômoda: ou seja, a proporção de duas somas de muitas pequenas compras em que ambas as somas são aproximadamente uma variável distribuída normal multivariada) O que você deseja prever? Qual é o objetivo? Quais são os dados brutos que você possui?
Sextus Empiricus

Respostas:


3
  • teste z de proporções

    Isso se aplica a um caso diferente quando você tem resultados binários. O teste z de proporções compara as proporções desses resultados binários.

    (Abaixo é apresentado algum argumento de que você poderá fazer um teste t, que para números grandes é aproximadamente o mesmo que o teste z. Com proporções, você pode fazer um teste z porque a distribuição binomial tem um parâmetro que determina a variância e média, diferentemente de uma distribuição normal)

  • Bootstrapping

    Isso será possível, mas não realmente necessário, devido ao método Delta, que fornece o erro da sua estatística observada mais diretamente.

  • Método Delta

    Você está interessado na proporção de duas variáveis ​​possivelmente correlatas: 1. o total de vendas e 2. as vendas em itens em estrela.

    É provável que essas variáveis ​​sejam distribuídas assintoticamente normais, pois são somas das vendas de muitos indivíduos (o procedimento de teste pode ser considerado um processo como escolher uma amostra de vendas de usuários individuais de uma distribuição de vendas de usuários individuais). Assim, você pode usar o método Delta.

    O uso do método Delta para a estimativa de razões é descrito aqui . O resultado dessa aplicação do método Delta na verdade coincide com uma aproximação do resultado de Hinkley , uma expressão exata para a razão de duas variáveis ​​distribuídas normais correlacionadas (Hinkley DV, 1969, Sobre a razão entre duas variáveis ​​aleatórias normais correlacionadas, Biometrica vol. 56 n ° 3).

    Para Z=XY com

    [XY]N([μxμy],[σx2ρσxσyρσxσyσy2])
    O resultado exato é:
    f(z)=b(z)d(z)a(z)312πσXσY[Φ(b(z)1ρ2a(z))Φ(b(z)1ρ2a(z))]+1ρ2πσXσYa(z)2exp(c2(1ρ2))
    com
    uma(z)=(z2σX2-2ρzσXσY+1 1σY2)1 12b(z)=μXzσX2-ρ(μX+μYz)σXσY+μYσY2c=μX2σY2-2ρμXμY+σXσY+μY2σY2d(z)=exp(b(z)2-cuma(z)22(1 1-ρ2)uma(z)2)
    E uma aproximação baseada em um comportamento assintótico é: (por θY/σY):
    F(z)Φ(z-μX/μYσXσYuma(z)/μY)
    Você acaba com o resultado do método Delta ao inserir a aproximação uma(z)=uma(μX/μY)
    uma(z)σXσY/μYuma(μX/μY)σXσY/μY=(μX2σY2μY4-2μXσXσYμY3+σX2μY2)1 12

    Os valores para μX,μY,σX,σY,ρ pode ser estimado a partir de suas observações, que permitem estimar a variação e a média da distribuição para usuários únicos e, relacionado a isso, a variação e a média para a distribuição amostral da soma de vários usuários.

  • Alterar a métrica

    Eu acredito que é interessante fazer pelo menos um gráfico inicial da distribuição das vendas (e não dos índices) dos usuários únicos. Eventualmente, você pode acabar com uma situação que não é uma diferença entre os usuários do grupo A e B, mas só acontece de ser não significativa quando se considera a única variável da razão (isto é um pouco semelhante ao MANOVA ser mais poderoso testes ANOVA únicos).

    Enquanto o conhecimento de uma diferença entre os grupos, sem diferença significativa na métrica que você está interrested em, pode não ajudar muito na tomada de decisões, que faz ajuda-lo a compreender a teoria subjacente e, possivelmente, projetar melhores Alterações / experimentos próxima vez.


Ilustração

Abaixo está uma ilustração simples:

Que a distribuição hipotética de vendas dos usuários seja distribuída como frações uma,b,c,d que indicam quantos usuários são de um caso específico (na realidade, essa distribuição será mais complexa):

                           star item sales
                         0$              40$ 

other item sales  0$      a               b
                 10$      c               d

Em seguida, a distribuição de amostra para totais de grupos com 10000 usuários, com um algoritmo

uma=0,190,b=0,001,c=0,800,d=0,009
e o outro algoritmo
uma=0,170,b=0,001,c=0.820,d=0,009
vai parecer:

exemplo

O que mostra 10000 execuções atraindo novos usuários e calculando as vendas e os índices. O histograma é para a distribuição das proporções. As linhas são cálculos usando a função de Hinkley.

  • Você pode ver que a distribuição dos dois números totais de vendas é aproximadamente um normal multivariado. As isolinhas da razão mostram que você pode estimar muito bem a razão como uma soma linear (como no método Delta linearizado mencionado / vinculado anteriormente) e que uma aproximação por uma distribuição gaussiana deve funcionar bem (e então você pode usar um t- teste que, para grandes números, será como um teste z).
  • Você também pode ver que um gráfico de dispersão como esse pode fornecer mais informações e insights em comparação ao uso apenas do histograma.

Código R para calcular o gráfico:

set.seed(1)
#
# 
# function to sampling hypothetic n users 
# which will buy star items and/or regular items
#
#                                star item sales
#                             0$              40$ 
#  
#  regular item sales  0$      a               b
#                     10$      c               d
#
#
sample_users <- function(n,a,b,c,d) {
  # sampling 
  q <- sample(1:4, n, replace=TRUE, prob=c(a,b,c,d))
  # total dolar value of items
  dri = (sum(q==3)+sum(q==4))*10
  dsi = (sum(q==2)+sum(q==4))*40
  # output
  list(dri=dri,dsi=dsi,dti=dri+dsi, q=q)
}


# 
# function for drawing those blocks for the tilted histogram
#
block <- function(phi=0.045+0.001/2, r=100, col=1) {
  if (col == 1) {
    bgs <- rgb(0,0,1,1/4)
    cols <- rgb(0,0,1,1/4)
  } else {
    bgs <- rgb(1,0,0,1/4)
    cols <- rgb(1,0,0,1/4)
  }
  angle <- c(atan(phi+0.001/2),atan(phi+0.001/2),atan(phi-0.001/2),atan(phi-0.001/2))
  rr <- c(90000,90000+r,90000+r,90000)
  x <- cos(angle)*rr
  y <- sin(angle)*rr
  polygon(x,y,col=cols,bg=bgs)
}
block <- Vectorize(block)


#
# function to compute Hinkley's density formula
#
fw <- function(w,mu1,mu2,sig1,sig2,rho) {
  #several parameters
  aw <- sqrt(w^2/sig1^2 - 2*rho*w/(sig1*sig2) + 1/sig2^2)
  bw <- w*mu1/sig1^2 - rho*(mu1+mu2*w)/(sig1*sig2)+ mu2/sig2^2
  c <- mu1^2/sig1^2 - 2 * rho * mu1 * mu2 / (sig1*sig2) + mu2^2/sig2^2
  dw <- exp((bw^2 - c*aw^2)/(2*(1-rho^2)*aw^2))

  # output from Hinkley's density formula
  out <- (bw*dw / ( sqrt(2*pi) * sig1 * sig2 * aw^3)) * (pnorm(bw/aw/sqrt(1-rho^2),0,1) - pnorm(-bw/aw/sqrt(1-rho^2),0,1)) + 
    sqrt(1-rho^2)/(pi*sig1*sig2*aw^2) * exp(-c/(2*(1-rho^2)))

  out
}
fw <- Vectorize(fw)

#
# function to compute
# theoretic distribution for sample with parameters (a,b,c,d)
# lazy way to compute the mean and variance of the theoretic distribution
fwusers <- function(na,nb,nc,nd,n=10000) {
  users <- c(rep(1,na),rep(2,nb),rep(3,nc),rep(4,nd))
  dsi <- c(0,40,0,40)[users]
  dri <- c(0,0,10,10)[users]
  dti <- dsi+dri

  sig1 <- sqrt(var(dsi))*sqrt(n)
  sig2 <- sqrt(var(dti))*sqrt(n)
  cor <- cor(dti,dsi)
  mu1 <- mean(dsi)*n
  mu2 <- mean(dti)*n

  w <- seq(0,1,0.001)
  f <- fw(w,mu1,mu2,sig1,sig2,cor)
  list(w=w,f=f,sig1 = sig1, sig2=sig2, cor = cor, mu1= mu1, mu2 = mu2)
}


# sample many ntr time to display sample distribution of experiment outcome
ntr <- 10^4

# sample A
dsi1 <- rep(0,ntr)
dti1 <- rep(0,ntr)
for (i in 1:ntr) {
  users <- sample_users(10000,0.19,0.001,0.8,0.009)
  dsi1[i] <- users$dsi
  dti1[i] <- users$dti
}

# sample B
dsi2 <- rep(0,ntr)
dti2 <- rep(0,ntr)
for (i in 1:ntr) {
  users <- sample_users(10000,0.19-0.02,0.001,0.8+0.02,0.009)
  dsi2[i] <- users$dsi
  dti2[i] <- users$dti
}


# hiostograms for ratio
ratio1 <- dsi1/dti1
ratio2 <- dsi2/dti2
h1<-hist(ratio1, breaks = seq(0, round(max(ratio2+0.04),2), 0.001))
h2<-hist(ratio2, breaks = seq(0, round(max(ratio2+0.04),2), 0.001))

# plotting

plot(0, 0, 
     xlab = "sum of total sales", ylab = "sum of star item sales",
     xlim = c(82000,92000),
     ylim = c(2500,6000), 
     pch=21, col = rgb(0,0,1,1/10), bg = rgb(0,0,1,1/10))
title("sample distribution for sum of 10 000 users")

# isolines
brks <- seq(0, round(max(ratio2+0.02),2), 0.001)
for (ls in 1:length(brks)) {
  col=rgb(0,0,0,0.25+0.25*(ls%%5==1))
  lines(c(0,10000000),c(0,10000000)*brks[ls],lty=2,col=col)
}

# scatter points
points(dti1, dsi1,
       pch=21, col = rgb(0,0,1,1/10), bg = rgb(0,0,1,1/10))
points(dti2, dsi2,
       pch=21, col = rgb(1,0,0,1/10), bg = rgb(1,0,0,1/10))

# diagonal axis
phi <- atan(h1$breaks)
r <- 90000
lines(cos(phi)*r,sin(phi)*r,col=1)

# histograms
phi <- h1$mids
r <- h1$density*10
block(phi,r,col=1)

phi <- h2$mids
r <- h2$density*10
block(phi,r,col=2)

# labels for histogram axis
phi <- atan(h1$breaks)[1+10*c(1:7)]
r <- 90000
text(cos(phi)*r-130,sin(phi)*r,h1$breaks[1+10*c(1:7)],srt=-87.5,cex=0.9)
text(cos(atan(0.045))*r-400,sin(atan(0.045))*r,"ratio of sum of star items and sum of total items", srt=-87.5,cex=0.9)

# plotting functions for Hinkley densities using variance and means estimated from theoretic samples distribution
wf1 <- fwusers(190,1,800,9,10000)
wf2 <- fwusers(170,1,820,9,10000)
rf1 <- 90000+10*wf1$f
phi1 <- atan(wf1$w)
lines(cos(phi1)*rf1,sin(phi1)*rf1,col=4)
rf2 <- 90000+10*wf2$f
phi2 <- atan(wf2$w)
lines(cos(phi2)*rf2,sin(phi2)*rf2,col=2)

Resposta fantástica Martijn, como sempre. Então, para recapitular, depois de usar a aproximação do método Delta ou o resultado mais preciso de Hinkley, que inclui correlação, obtenho um novo rv que é assintoticamente normal. Posso então executar um teste z padrão de diferença de médias neste novo rv para controle e variante? ou seja, H0 seja o controle e a variante tenham a mesma média ou média = 0? Na verdade, nunca vi um exemplo de uso do método delta para um teste de diferença de médias ... você tem um exemplo?
Xavier Bourret Sicotte

O método Delta também inclui correlação. Hinkley é apenas mais preciso, mas a diferença não é tão importante quando a variação de suas variáveis ​​é pequena. Você poderia dizer isso
x/y-μx/μy(x-μx)1 1μy+(y-μy)μxμy2
isto é, você aproxima o erro de proporção por uma soma linear para a qual a variação pode ser facilmente calculada (também com correlação). Quando a distribuição se espalha por uma área maior, essas iso-linhas não são mais aproximadamente equidistantes e paralelas, então a diferença entre o método Delta e a fórmula de Hinkley se torna maior.
Sextus Empiricus

Vamos continuar essa discussão no chat? chat.stackexchange.com/rooms/91683/ab-test-ratio-of-sums obrigado!
Xavier Bourret Sicotte

(+1) Apenas um comentário: você verificou o que acontece se a distribuição subjacente da métrica não for normal, mas for de cauda gorda (por exemplo, log-normal)? Nesse sentido, vendo rapidamente isso, a distribuição da relação nunca tem valores de1 1(ou quase), embora seja "certo" que algumas pessoas comprem apenas um (ou dois) itens com estrela como um todo. Para citar Hole (2007): " O método delta é o mais preciso quando os dados estão bem condicionados, enquanto o bootstrap é mais robusto para dados ruidosos e erros de especificação do modelo ".
usεr11852

2
@ usεr11852 A distribuição das vendas de usuários únicos não precisa ser normal. Como no exemplo, é uma espécie de distribuição multivariada de Bernoulli. O que você precisa é que a distribuição da amostra da soma das vendas dos usuários precise ser (aproximadamente) normal. Este será o caso quando a distribuição para usuários únicos tiver momentos finitos (eles desaparecerão pela soma). Eles desaparecerão mais rapidamente quando você não tiver uma inclinação muito alta ou caudas gordas, e você precisará de um tamanho de amostra suficiente (mas o mesmo se aplica ao bootstrapping).
Sextus Empiricus

5

O que é descrito é um caso clássico de um experimento A / B em que temos dependência entre usuários e itens (compras aqui); precisamos levar isso em consideração, pois, caso contrário, teremos uma estimativa tendenciosa da variação associada. Para combater isso, nós inicializamos levando em conta os clusters de usuário / item ou tornamo-nos totalmente paramétricos usando um modelo misto. O artigo de Bakshy & Eckles (2013) Incerteza em Experimentos Online com Dados Dependentes: Uma Avaliação de Métodos de Bootstrap é uma referência inestimável sobre o assunto que se concentra nos testes A / B online.

Analisando as coisas com mais detalhes, de certa forma, o artigo em preto e branco é um caso de uso estendido do artigo de Owen (2007) The bootstrap . Da mesma forma, a abordagem de efeito misto é baseada no artigo super-clássico de Bayeen et al. (2009) Modelagem de efeitos mistos com efeitos aleatórios cruzados para sujeitos e itens .

Para comentar brevemente os métodos mencionados: ao identificar corretamente o z- o teste de proporção é simplista demais; assumirá a DID e, como o documento da B&E apresenta, essa suposição pode ser seriamente enganosa. A mesma limitação se estende ao bootstrap, se ignorarmos a estrutura dos dados. Em relação ao método Delta: desvios da normalidade e / ou dados ruidosos geralmente tornam o método Delta abaixo do ideal em comparação às abordagens de autoinicialização (por exemplo, Hole 2007 Uma comparação de abordagens para estimar intervalos de confiança para disposição de pagar medidas ), mas vi alguns trabalhos recentes ( Por exemplo, Deng et al. 2017 Análise confiável de testes A / B on-line: armadilhas, desafios e soluções e Deng et al. 2018 Aplicação do método Delta no Metric Analytics: um guia prático com idéias inovadoras) que parecem promissores; observe que existe a suposição implícita de que o efeito médio do tratamento será normal. Por fim, a mudança de métrica também é uma excelente idéia quando razoável. Não devemos ter medo de pressionar por mudanças matematicamente mais coerentes apenas porque uma métrica já está em vigor.

Conclusão: se existe um esquema abrangente em todos os artigos que citei acima, precisamos garantir que nossa unidade de análise e nossa unidade de randomização estejam alinhadas com nossas perguntas de pesquisa.


+1 resposta fantástica muito obrigado - você argumentaria que, se as premissas do IID fossem mantidas, o teste de proporção z funcionaria nesse caso? Como você demonstraria que isso é uma soma dos VRs de Bernoulli?
Xavier Bourret Sicotte

Estou feliz por poder ajudar. Eu não usariaz-proporções em uma configuração de teste A / B, porque eu acho que as suposições da IID são realisticamente impossíveis. A pesquisa está crescendo (como você pode ver), por isso são várias alternativas melhores!
usεr11852

Estou acompanhando sua resposta - na verdade, as premissas de IDI para eventos de compra do mesmo usuário são fortes. Mas, mais fundamentalmente - como poderíamos justificar o uso do teste de proporção em uma métrica desse tipo - isso não exigiria que cada evento fosse um teste de Bernoulli 0-1? Isso exigiria considerar cada dólar de vendas como um evento independente?
Xavier Bourret Sicotte

Sim, mas isso claramente é uma suposição muito forte / simplificação incômoda. Dito isto, os testes A / B costumam examinar resultados binários (por exemplo, agitado / não agitado), portanto o uso de testes de proporções pode ser apropriado. Por uma questão de conveniência, às vezes é possível usar um teste para obter resultados contínuos em dados discretos (ou vice-versa) e os resultados podem não ser totalmente enganosos. Como você nota corretamente, isso não os faz soar.
usεr11852

2

Uma abordagem muito simples seria usar um teste de permutação. Este é um teste sem distribuição, para que você não precise se preocupar com distribuições.

A ideia é simples. Você aleatoriamente embaralha os rótulos e conta quantas vezes a diferença medida de sua métrica de interesse é maior que a diferença obtida dos dados reais. A proporção que você obtém é o seu valor-p.

Por que isso funciona? Bem, se a hipótese nula for Verdadeira, a reprodução aleatória dos rótulos (ou seja, pertencer ao grupo A ou B) frequentemente produziria valores melhores que o que você mediu. No entanto, se o seu algoritmo de recomendação funcionar, o embaralhamento aleatório raramente produziria um resultado melhor do que o obtido.

Você também pode usar a inicialização para obter intervalos de confiança em sua métrica do seu grupo A e B. Isso, dois, é permitido sem suposições sobre sua distribuição. Isso não é equivalente a um teste estatístico (mesmo que os intervalos de IC não se cruzem), mas o aspecto visual das barras "barras + erro" pode ser interessante para sua equipe.

Eu respondi a uma pergunta muito semelhante (onde você realmente me encontrou). Como testar a diferença em duas proporções quando os resultados não são binários? . Eu acho que o código que sugeri lá se aplica aqui também.

p1 <- sum(sales_data[target_control==1,"final_value"])/sum(sales_data[target_control==1,"initial_value"])
p2 <- sum(sales_data[target_control==0,"final_value"])/sum(sales_data[target_control==0,"initial_value"])
yourGap<-abs(p1-p2)
L<-sales_data["target_control"]==1
LfilterOnlyBuyers<-sales_data["sale_success"]==1

count=0
for ( i in 1:10000) {
  Lperm=sample(L)
  p1_perm <- sum(sales_data[Lperm,"final_value"])/sum(sales_data[Lperm & LfilterOnlyBuyers,"initial_value"])
  p2_perm <- sum(sales_data[!Lperm,"final_value"])/sum(sales_data[!Lperm & LfilterOnlyBuyers,"initial_value"])
  if (abs(p1_perm-p2_perm)>=yourGap) {
    count=count+1
  }
}
pvalue=count/10000

Eu acho que o uso de uma abordagem direta de teste de permutação como a que você descreve exigirá medições de IDI. Pelo meu entendimento do problema, isso não se aplica e, portanto, um teste de permutação (de baunilha) levará a testes anti- conservadores. Como existe um agrupamento relacionado ao usuário (e provavelmente item), a suposição de IID pode levar a uma subestimação de variação, pois a variação do efeito do tratamento individual é grande. Consulte algumas das referências (B&E 2013 ou D et al. 2017) na minha resposta para obter mais detalhes. (Eles lidam com inicialização pelas ideias gerais transferir para testes de permutação.)
usεr11852

Obrigado por este comentário. Não tenho certeza absoluta sobre esse problema de identificação. A menos que eu tenha entendido errado, com a métrica que ele sugeriu, o problema pode ser resumido em um único valor pelo usuário, o que dissolve o problema do iid.
Brumar

Infelizmente, este não é o caso. O OP menciona pelo menos duas vezes: uma vez " ... podemos modificar a definição para calcular a média do nível do usuário ... " (ou seja, este não é o nível do usuário) e, posteriormente, ao dizer: " comprar eventos do mesmo usuário não são independentes ". A permissão dos rótulos dos eventos de compra será, portanto, incoerente, pois eles não são IID. (Qual é o ponto dos papéis que cito :).)
usεr11852

Eu vejo. Isso torna essa resposta bastante irrelevante e, a menos que eu encontre alguma rotação útil, penso em excluí-la. Eu me distanciei das estatísticas durante os dois últimos anos, mas esses documentos que você menciona parecem interessantes. Definitivamente na minha lista de leitura, caso eu encontre interesse novamente no campo.
Brumar # 24/19

11
Obrigado por suas respostas - que tal iniciar ou permutar no nível do usuário - ou seja, garantir que, para cada permutação, todas ou nenhuma das vendas de um determinado usuário sejam incluídas. Isso poderia ajudar a reduzir os problemas de independência abaixo do nível do usuário. Isso funcionaria melhor?
Xavier Bourret Sicotte,

1

Intervalos de confiança de bootstrap seria minha escolha de técnica para esse cenário. Gostaria de descrever uma abordagem com alguns exemplos de números de opções que você pode usar e o raciocínio por trás da abordagem:

  1. Você tem dois potes / sacolas e cada sacola contém pessoas do grupo de controle e do grupo de variantes: vocêctr e vocêvumar com os respectivos tamanhos Nctr e Nvumar. Mudei sua notação levemente, espero que esteja tudo bem.
  2. Você seleciona uma amostra aleatória de kpessoas de ambos os grupos com substituição. Se as duas populações forem "suficientemente grandes" (digamos, pelo menos, 2.000 usuários, por exemplo), você poderá escolherkNctr e kNvumar. Regra geral: eu costumo selecionark=mEun(Nctr,Nvumar)5para resultados mais flexíveis, mas na maioria dos algoritmos de empacotamento (agregação de bootstrap), a opção padrão é amostrar toda a população. Se sua população for menor, você ainda poderá fazer isso, mas certifique-se de selecionar uma opção "suficientemente grande"k(digamos, pelo menos, 400 usuários), novamente amostrando com substituição. Digamos anotá-losSvocêctr e Svocêvumar ambos de tamanho k
  3. Você calcula sua métrica obtendo todas as transações que cada pessoa de cada grupo faz, observando o original T conjunto de dados de transações para cada usuário em Svocêctr e Svocêvumar. Você vai acabar comMetrEucctr1 1 e MetrEucctr2. Armazene esses valores. Aviso importante: você deve calcular esses valores somando o total de vendas de itens em estrela e dividindo pelo total de vendas. Não calcule a média da cesta de vendas individual de cada pessoa. Isso é muito importante, pois é a métrica que você está visualizando.
  4. Volte ao ponto 2 e itere. O número ideal de amostras de bootstrap,B, que você pode escolher depende de muitos fatores, mas, novamente, uma boa regra geral seria em torno de 1000 vezes.
  5. Agora você tem um B quantidade de MetrEucctr e o mesmo para MetrEucvumar. Agora você pode optar por comparar seus meios usando muitas das técnicas usuais. Eu pessoalmente escolheria construir intervalos de confiança e ver se eles se sobrepõem ou um teste t de amostra independente E concluir a análise com alguns histogramas / gráficos de densidade e boxplots.

Opinião pessoal fora do tópico: sempre escolha visualizar coisas como distribuições sempre que possível, temos o poder de fazer isso hoje em dia. Os testes acima são totalmente bons, mas há casos em que eles podem dar errado. Por exemplo, se você escolherB por ser extremamente alto, digamos 1000000, mesmo a menor diferença entre as médias provavelmente será sinalizada como significativa.

O exposto acima é robusto, porque, independentemente da distribuição subjacente, o teorema do limite central garante que, se Bfor suficientemente grande, ambos os meios deMetrEucvumar e MetrEucctras amostras serão normalmente distribuídas e os testes serão válidos. Você também testemunhará isso pelo visual. Quaisquer preocupações sobre distribuições subjacentes de diferentes gastos de usuários etc. serão tratadas pela CLT.

Há muitas referências e boas leituras pelos usuários antes de mim. Além disso, há muita pesquisa realizada sobre os números ótimos de exemplo que mencionei acima, para os quais você pode pesquisar. Eu só queria fornecer a você um esboço de abordagem mais empírico e fácil de entender que seja robusto. Você pode começar com isso e ver se as coisas mudam alterando os números de exemplo acima.


Excelente! Era exatamente isso que eu procurava, muito obrigado! Usando uma abordagem diferente, alguma idéia de como alguém também poderia aplicar o método Delta a esse problema? stats.stackexchange.com/questions/291594/…
Xavier Bourret Sicotte

Além disso - você teria alguns recursos nas opções apropriadas para B e SU? Neste exemplo (fictícia), poderíamos imaginar que existem usuários 1M em controle e dizer 100k usuários ij variante
Xavier Bourret Sicotte

Referências gerais: A Bíblia do Bootstrap é amazon.co.uk/…, mas há um excelente resumo aqui: galton.uchicago.edu/~eichler/stat24600/Handouts/bootstrap.pdf
Vasilis Vasileiou

Com relação ao SU: Na ensacadeira (agregação de bootstrap), o estado da arte (e a opção padrão para muitos algoritmos de ensacamento) é amostrar de ambas as populações, mantendo os tamanhos originais intocados. Existe um teorema que afirma que esperamos 63,2% de usuários únicos e duplicados, portanto, sinta-se à vontade para selecionar os tamanhos N_ctr e N_var apenas uma amostra a partir daí. Eu seleciono 1/5, pois geralmente quero estimativas mais flexíveis do que estáveis. É uma questão de troca de viés e variação novamente!
Vasilis Vasileiou

Em relação ao B: Aqui as coisas são ainda mais incertas. Na página da wikipedia, eles vão para um exemplo de B = 1000, no elem. de stat. learn web.stanford.edu/~hastie/Papers/ESLII.pdf eles tentam 100, 200 em 2000 observações. Neste caso modelagem conjunto onlinelibrary.wiley.com/doi/full/10.1111/coin.12198 eles tentam 500 e 1000. e aqui abaixo de 100 statistics.berkeley.edu/sites/default/files/tech-reports/... eu tinha diga que esse número depende dos recursos da sua máquina. Na prática, números acima de 1000 não fazem muita diferença, mas qualquer escolha acima de 500 eu diria que é justo.
Vasilis Vasileiou
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.