合計のA / Bテスト比率


7

 環境

オンラインで商品を販売する会社について、次のシナリオを考えます。ユーザーは複数のアイテム(つまり、アイテムのバスケット)を購入できます。そのうちのいくつかは特に重要で、特に追跡されます(スターアイテムと呼びましょう)。

販売されたスターアイテム総売上の両方に影響を与える可能性のあるアルゴリズムの変更(推奨、リスク評価、ターゲティングの追加など)をテストしたいと考えています。

  • これは標準のA / Bテストセットアップですランダム化ユニットユーザーレベルにあります
  • A / Bテストの目的は、アルゴリズム変更の影響を比較することです。コントロールグループには元のアルゴリズムがあり、バリアントには新しいアルゴリズムがあります。
  • 重要な指標の1つは、総売上に対するスターアイテムの売上の比率として定義されます。これは、各AまたはBグループのスコープ内のすべてのユーザーのすべてのトランザクションにわたる合計です。
  • つまり、分析単位はトランザクションレベルにあり、ランダム化単位とは異なります。
  • メトリックは、テストの全期間(2週間など)にわたって計算されます。

使用されるメトリックの詳細

グループAと一連のユーザー与えられた場合、各ユーザーは多数のトランザクションに関与しています。テスト期間中のグループAのすべてのユーザーのすべてのトランザクションのセットは、。UA={u1,u2,...,uNA}tunTATA={tu11,tu12,...tunm}

グループAの対象メトリックは、グループAのスコープ内のすべてのトランザクションに対して定義されます。合計は、ユーザーレベルではなくトランザクションレベルです。

MetricA=tiTAsales star items $tiTAsales $

もちろん、ユーザーレベルの平均を計算するように定義を変更することもできます。これによりすべてが簡略化されますが、これは使用されているメトリックではありません。

ご質問

そのようなメトリックに使用できる統計的検定は何ですか?追加の考慮事項は、ユーザーがiidであると安全に想定できるが、個々の購入バスケットが同じユーザーのiidであると想定することはおそらく間違っているということです。

ここに私が出会ったいくつかのアイデアがあります、過去にA / Bテストの専門家が同様の指標に出会ったことがありますか?

  • 比率のz検定
  • ブートストラップとジャックナイフ
  • デルタ法
  • メトリックを変更する(最後の手段)

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

編集-いくつかの説明

この質問の背後にある理由は、この状況で使用されている比率のz検定をよく見たことがあるからです。A / Bテストに使用される一般的なツールは、多くの場合、比率テストにデフォルトで設定され、ビジネスユーザーは、テストが有効であるために必要な基本的な前提条件をチェックすることはほとんどありません。以下の@dnqxtの答えは良い例です:「比例のz検定を使用してください!」-しかし、このような場合にこの検定を使用できる理由(または理由でない)について、厳密な統計的正当化が必要です。

私は個人的に、購入イベントからの売り上げはベルヌーイ試験ではないので、比率のz検定を使用するとうまくいくとは思いません。私は、分母で販売された各ドルが、分子で販売された0または1つ星のアイテムドルをもたらすベルヌーイ裁判と見なすことができるとは言えないと主張します。さらに、ランダム化ユニットはユーザーレベルにあるため、同じユーザーの購入イベントは独立していません(ただし、これは2番目の問題です)。私はここで間違っている可能性があるので、それ以外の場合はこれを証明してください!

メトリックを変更して、カウントを使用してそれを標準に収束するベルヌーイ/二項式にすることもできますが、これは最後の手段です。

#sales with star items#sales


メトリックが正規分布に従う場合、おそらく、線形回帰またはUniANOVAを使用できます。指標が正規分布に従わない場合は、ロジスティック回帰で使用されるものと同様の変換を試すことができます:、指標がまたは。x=log(metric/(1metric))01
Ertxiem-モニカ

1
ただ注意してください:通常、売上高は非常に通常ではありません。データを提示するときは、必ずそれを考慮する必要があります。とはいえ、ユーザーレベルの集計データにベータ回帰を使用してみませんか?分析は、利用可能な人口統計情報で直接層別化できます。また、既存のユーザーの場合は、既存のユーザーの行動に関する追加情報があります。(たとえば、配送情報や請求情報があるため、ユーザーがどこにいるかを確実に把握しています。)
usεr11852Mar

確かに、売上が正規分布であると信じる理由はありません...売上をユーザー数(つまり、ユーザーあたりの平均売上)で除算すると、スコープ内のユーザー数が与えられれば、正規分布の統計が得られます。おそらく、ログを取得してから、ログ変換された空間でテストを実行しますか?
Xavier Bourret Sicotte

1
その場合、これは素晴らしい質問です。(+1)
usεr11852

1
データと生の観測をより直接的に分析するのではなく、派生(1次元および集約)統計を分析する(そしてその分析に基づいて派生統計について結論を出す)のはなぜですか?(2つの合計のこの比率は、おかしなコーシー分布になります。つまり、両方の合計がほぼ多変量正規分布変数である多くの小さな購入の2つの合計の比率)何を予測しますか?目標は何ですか?あなたが持っている生データは何ですか?
Sextus Empiricus

回答:


3
  • 比率のz検定

    これは、バイナリの結果がある場合の別のケースに適用されます。比率のz検定は、これらのバイナリ結果の比率を比較します。

    (以下では、t検定を実行できるといういくつかの議論が行われます。これは、大きな数の場合、z検定とほぼ同じです。比率を使用すると、2項分布が1つのパラメーターを決定するため、z検定を実行できます。正規分布とは異なり、分散と平均)

  • ブートストラップ

    これは可能ですが、観測された統計のエラーをより簡単に提供するDeltaメソッドのため、実際には必要ではありません。

  • デルタ法

    2つの、おそらく相関する変数の比率、1。総売上高と2.スターアイテムの売上高に関心があります。

    これらの変数は、多くの個人からの売上の合計であるため、漸近的に正規分布している可能性があります(テスト手順は、個々のユーザーからの売上の分布から個々のユーザーからの売上のサンプルを選ぶようなプロセスと見なすことができます)。したがって、Deltaメソッドを使用できます。

    ここでは、比率の推定にデルタ法を使用する方法について説明します。デルタ方法のこの適用の結果は、実際の近似値と一致ヒンクリーの結果、両者の比の正確な表現は、2つの相関正規確率変数の比で正常に分布変数(ヒンクリーDV、1969、相関Biometricaの体積56 3番)。

    ために Z=XY

    [XY]N([μxμy],[σx2ρσxσyρσxσyσy2])
    正確な結果は次のとおりです。
    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))
    a(z)=(z2σX22ρzσXσY+1σY2)12b(z)=μXzσX2ρ(μX+μYz)σXσY+μYσY2c=μX2σY22ρμXμY+σXσY+μY2σY2d(z)=exp(b(z)2ca(z)22(1ρ2)a(z)2)
    そして、漸近的な振る舞いに基づく近似は: θY/σY):
    F(z)Φ(zμX/μYσXσYa(z)/μY)
    近似を挿入すると、デルタ法の結果になります a(z)=a(μX/μY)
    a(z)σXσY/μYa(μX/μY)σXσY/μY=(μX2σY2μY42μXσXσYμY3+σX2μY2)12

    の値 μX,μY,σX,σY,ρ 単一のユーザーの分散の分散と平均を推定できる観測値から推定でき、これに関連して、複数のユーザーの合計の標本分布の分散と平均を推定できます。

  • 指標を変更する

    私は、単一のユーザーからの売上高の分布(比率ではなく)の最初のプロットを行うことは興味深いと思います。最終的にあなたがそこにいることを状況に終わるかもしれないですグループAとBのユーザーとの違いは、それはちょうどあなたが比率の単一の変数を考える際に重要ではないことを起こる(これは、MANOVAはと少し似ているがより強力であること単一の分散分析テストより)。

    あなたがでinterrestedされていることをメトリックに有意差なしのグループ、との差の知識が意思決定を行う際に多くのお手伝いをしていないかもしれないが、それはありませんあなたの基本的な理論を理解する上で、おそらくより良い変更/実験次回の設計を支援します。


以下は簡単な図です。

ユーザーからの売上の架空の分布を分数として分布させる a,b,c,d 特定のケースのユーザー数を示します(実際には、この分布はより複雑になります)。

                           star item sales
                         0$              40$ 

other item sales  0$      a               b
                 10$      c               d

次に、1つのアルゴリズムで、10000ユーザーのグループの合計の標本分布

a=0.190,b=0.001,c=0.800,d=0.009
そして他のアルゴリズム
a=0.170,b=0.001,c=0.820,d=0.009
次のようになります。

例

これは、10000回の実行が新しいユーザーを引き、売上と比率を計算していることを示しています。ヒストグラムは比率の分布です。線は、Hinkleyの関数を使用した計算です。

  • 2つの合計販売数の分布は、ほぼ多変量正規であることがわかります。比率の等値線は、比率を線形合計として非常に適切に推定できること(前述の/リンクされた線形化デルタ法のように)、およびガウス分布による近似が適切に機能することを示します(その後、t-多数の場合はz検定のようになります。
  • このような散布図は、ヒストグラムのみを使用する場合と比較して、より多くの情報と洞察を提供することもわかります。

グラフを計算するためのRコード:

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)

いつものように、素晴らしい回答Martijn。要約すると、Deltaメソッドの近似、または相関を含むより正確なHinkleyの結果を使用すると、漸近的に正常な新しいrvが得られます。次に、コントロールとバリアントのこの新しいrvで平均の差の標準z検定を実行できますか?つまり、H0はコントロールとバリアントの両方が同じ平均を持っているか、または平均= 0ですか?平均の差の検定にデルタ法を使用した例を見たことがありません...例はありますか?
Xavier Bourret Sicotte

Deltaメソッドは相関含まれます。ヒンクリーはより正確ですが、変数の分散が小さい場合、その違いはそれほど重要ではありません。あなたはそれを言うことができます
x/yμx/μy(xμx)1μy+(yμy)μxμy2
つまり、分散を簡単に計算できる線形相関(相関も含む)によって比率エラーを近似します。分布がより広い領域に広がる場合、これらの等値線はほぼ等距離で平行ではなくなり、デルタ法とヒンクリーの公式の差が大きくなります。
Sextus Empiricus

この議論をチャットで続けましょうか?chat.stackexchange.com/rooms/91683/ab-test-ratio-of-sumsありがとうございます!
Xavier Bourret Sicotte

(+1)ただのコメント:メトリックの根本的な分布が正規ではなく、太っている(たとえば、対数正規)場合、どうなるかを確認しましたか?その範囲で、これをすぐに見ると、比率の分布は決して1(またはそれに近い)一部の人々は、全体として1つ(または2つ)のスター付きアイテムのみを購入することが「確実」です。ホール(2007)を引用すると、データが十分条件付けされている場合、デルタ法が最も正確ですが、ブートストラップはノイズの多いデータやモデルの誤指定に対してより堅牢です。
usεr11852

2
@usεr11852 シングルユーザーから売上の分布は正常である必要はありません。ある種の多変量ベルヌーイ分布である例のように。必要なのは、ユーザーの売上の合計の標本分布が(ほぼ)正常である必要があることです。これは、シングルユーザーの分布が有限のモーメントを持っている場合に当てはまります(その場合、それらは合計のために消えます)。実際には、スキューまたはファットテールが非常に少なく、十分なサンプルサイズが必要な場合に、より速く消失します(ただし、ブートストラップについても同じことが言えます)。
Sextus Empiricus

5

説明されているのは、ユーザーとアイテム(ここで購入)の間に依存関係があるA / B実験の古典的なケースです。これを考慮に入れる必要があります。そうしないと、関連する分散の推定に偏りが生じます。これに対処するには、ユーザー/アイテムのクラスターを考慮してブートストラップするか、混合モデルを使用して完全にパラメトリックにします。Bakshy&Ecklesによる論文(2013)依存データを使用したオンライン実験の不確実性:ブートストラップ手法の評価は、オンラインA / Bテストに焦点を当てたその問題に関する非常に貴重なリファレンスです。

物事をより詳細に検討すると、ある意味では、B&Eペーパーはオーエン(2007)のペーパーピジョンホールブートストラップの拡張ユースケースです。同様に、混合効果アプローチは、Bayeen et al。による超古典的な論文に基づいています。(2009)主題と項目の交差ランダム効果を伴う混合効果モデリング

あなたが言及するメソッドで簡単にコメントするには: z-比率のテストは単純化しすぎています。それはIIDを想定し、B&E論文が提示するように、その想定は非常に誤解を招く可能性があります。データの構造を無視すると、同じ制限がブートストラップにも適用されます。デルタ法について:正常性やノイズの多いデータからの逸脱は通常、ブートストラップアプローチと比較してデルタ法を次善のものにします(たとえば、Hole 2007 喜んで支払う意欲の信頼区間を推定するアプローチの比較)が、最近のいくつかの論文(例:Deng et al.2017オンラインA / Bテストの信頼できる分析:落とし穴、課題、解決策、Deng et al.2018メトリック分析でのデルタ法の適用:新しいアイデアを含む実用的なガイド)有望に思われる; 平均的な治療効果は正常であるという暗黙の仮定があることに注意してください。最後に、メトリックの変更も妥当な場合には優れたアイデアです。メトリックがすでに存在しているという理由だけで、数学的に一貫性のある変更を推進することを恐れるべきではありません。

結論:上記で引用したすべての論文に包括的な体系がある場合、分析の単位と無作為化の単位を研究の質問と一致させる必要があります。


+1素晴らしい答えは本当に感謝します-IIDの仮定が保持されている場合、この場合z比率検定が機能することを主張しますか?これがベルヌーイRVの合計であることをどのように証明しますか?
Xavier Bourret Sicotte

お役に立ててよかったです。私は使用しませんz-IIDの仮定は現実的に不可能であると思うので、A / Bテスト設定での比率テスト。研究は(ご覧のとおり)急成長しているため、複数のより良い代替手段です!
usεr11852

私はあなたの答えをフォローアップしています-実際、同じユーザーの購入イベントのiidの仮定は強力です。しかし、より根本的に-どのようにしてそのようなメトリックの比率テストを使用して正当化できるのか-これには、各イベントが0-1ベルヌーイ試行であることが必要ではないでしょうか?それは、売上の各ドルを独立したイベントと見なす必要がありますか?
Xavier Bourret Sicotte

はい、そうですが、それは明らかに非常に強力な仮定/厄介な単純化です。そうは言っても、A / Bテストはしばしばバイナリの結果(たとえば、チャーンされた/チャーンされなかった)を検査するため、比率テストの使用が適切な場合があります。便宜上、離散データの継続的な結果のテストを使用する場合があり(またはその逆)、結果が完全に誤解を招く可能性がない場合があります。あなたが正しく注意するように、それはそれらを聞こえさせません。
usεr11852

2

非常に単純なアプローチは、置換テストを使用することです。これは配布フリーのテストなので、配布について心配する必要はありません。

アイデアは簡単です。ラベルをランダムにシャッフルし、関心のあるメトリックの測定された差が実際のデータから得られた差よりも大きい回数を数えます。あなたが得る比率はあなたのp値です。

なぜ機能するのですか?まあ、帰無仮説がTrueの場合、ラベルをランダムにシャッフルすると(つまり、グループAまたはBにあると)、測定した値よりも優れた値が得られることがよくあります。ただし、推奨アルゴリズムが機能する場合、ランダムにシャッフルしても、得られた結果よりも良い結果が得られることはめったにありません。

ブートストラップを使用して、AグループとBグループの両方のメトリックの信頼区間を取得することもできます。この2つは、ディストリビューションでの仮定なしに許可されます。これは、(CI間隔が交差しなくても)統計テストと同等ではありませんが、「バー+エラー」バーの視覚的な側面は、チームにとって興味深いものになります。

私は非常によく似た質問に答えました(あなたが本当に私を見つけた場所です)。結果がバイナリでない場合、2つの比率の違いをテストする方法は?。私が提案したコードはここにも当てはまると思います。

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

あなたが説明するものとして単純な順列テストのアプローチを使用するには、IIDの測定が必要になると思います。問題についての私の理解から、これは成り立たないため、(バニラ)置換テストは保守的なテストにつながります。ユーザーに関連する(そしておそらくアイテムである)クラスターがあると、個々の治療効果のばらつきが大きいため、IIDの仮定が分散の過小評価につながる可能性があります。詳細については、私の回答にある参考文献(B&E 2013またはD et al。2017)を参照してください。(彼らは一般的な考えを順列テストに移すことによってブートストラップを扱います。)
usεr1185219年

このコメントをありがとう。このiidの問題については完全にはわかりません。私が誤解しない限り、彼が提案したメトリックを使用すると、問題はユーザーが単一の値に要約できるため、iidの問題を解決できます。
ブルマー

残念ながらそうではありません。OPはそれを少なくとも2回言及します:1回 " ...ユーザーレベルの平均を計算するために定義を変更できます... "(つまり、これはユーザーレベルではありません)と後で言うとき: " 同じユーザーの購入イベント独立していない」購入イベントラベルの並べ替えは、IIDではないため、一貫性がありません。(これが私が引用する論文の要点です。))
usεr1185219年

そうですか。これにより、この回答はまったく無関係になり、有用なスピンが見つからない限り、それを削除することを考えます。過去2年間の統計とはかけ離れていましたが、あなたが参照しているこれらの論文は興味深いと思います。私がこの分野に再び興味がある場合に備えて、間違いなく私の読書リストに載っています。
ブルマー

1
回答ありがとうございます。ユーザーレベルでのブートストラップまたは置換についてはどうですか。つまり、各置換について、特定のユーザーの売り上げのすべてまたはすべてが含まれないようにしてください。これにより、独立性の問題をユーザーレベル以下に抑えることができます。それはうまくいきますか?
Xavier Bourret Sicotte

1

このシナリオでは、ブートストラップ信頼区間が私のテクニックの選択になります。私が使用できるいくつかの例の選択番号とアプローチの背後にある理由を使用してアプローチを概説したいと思います:

  1. 2つのポット/バッグがあり、各バッグにはコントロールグループとバリアントグループの人々が含まれています。 Uctr そして Uvar それぞれのサイズで Nctr そして Nvar。表記を少し変更しましたが、大丈夫です。
  2. ランダムなサンプルを選択します k両方のグループの人が交代で。両方の人口が「十分に大きい」(たとえば、少なくとも2000人のユーザー)場合は、次を選択できます。kNctr そして kNvar。経験則:私は通常、k=min(Nctr,Nvar)5より柔軟な結果を得るには、ほとんどのバギング(ブートストラップ集約)アルゴリズムで、デフォルトのオプションは母集団全体からサンプリングします。人口が少ない場合でもそれは可能ですが、「十分に大きい」を選択してください。k(少なくとも400ユーザーと言います)。それらに注意するとしましょうSUctr そして SUvar サイズの両方 k
  3. 各グループの各ユーザーが元のトランザクションを見て行ったすべてのトランザクションを取得することにより、メトリックを計算します T の各ユーザーのトランザクションデータセット SUctr そして SUvar。あなたはそれから終わりますMetricctr1 そして Metricctr2。これらの値を保存します。重要なお知らせ:これらの値は、スターアイテムの総売上を合計し、総売上で除算して計算する必要があります。一人一人の個々の販売バスケットの平均をとらないでください。これはあなたが見ているメトリックであるため、これは非常に重要です。
  4. ポイント2に戻り、繰り返します。ブートストラップサンプルの最適な数B、選択できるかどうかは多くの要因に依存しますが、経験則としては約1000倍になります。
  5. あなたは今持っています B 数の Metricctr そして同じ Metricvar。通常の手法の多くを使用して、平均を比較することができます。私は個人的に信頼区間を構築し、それらが重複するか、独立したサンプルのt検定かを確認し、いくつかのヒストグラム/密度プロットとボックスプロットで分析を完了します。

主題外の個人的意見:可能な場合は常に、ディストリビューションなどのことを常に選択するようにしてください。今日、私たちはそうする力を持っています。上記のテストはまったく問題ありませんが、うまくいかない場合があります。例えばあなたが選ぶならB 1000000などの非常に高い値である場合、平均間の最小の差でさえ、有意としてフラグが立てられる可能性が高くなります。

根本的な分布がどのようなものであっても、中心極限定理は、 B両方とも、十分に大きい手段のは、Metricvar そして Metricctrサンプル全体が正規分布し、テストが有効になります。あなたはビジュアルからもそれを目撃します。さまざまなユーザーの支出などの根本的な分布に関する懸念は、CLTによって対処されます。

私の前にはたくさんの参考文献とユーザーによる良い読み物があります。さらに、あなたがそれを調べることができる上記の最適な例の数について行われた多くの研究があります。ロバストなアプローチの概要を、より経験的で理解しやすいものにしたかっただけです。まず、上記の例の番号を変更して、状況が変化するかどうかを確認します。


優秀な !これはまさに私が探していたもので、本当にありがとう!別のアプローチを使用して、デルタ問題をこの問題にどのように適用できるかについての考えはありますか?stats.stackexchange.com/questions/291594/...
ザビエル・ブーレSicotte

また、BとSUの適切な選択に関するリソースはありますか?この(架空の)例では、100万人のユーザーが制御していると想像でき、10万人のユーザーがijバリアントと言うことができます
Xavier Bourret Sicotte

一般的な参照:ブートストラップの聖書はamazon.co.uk/…ですが、ここに優れた要約があります:galton.uchicago.edu/~eichler/stat24600/Handouts/bootstrap.pdf
Vasilis Vasileiou

SUについて:バギング(ブートストラップ集計)では、最新の技術(および多くのバギングアルゴリズムのデフォルトオプション)では、両方の母集団からサンプリングして、元のサイズをそのままにします。63.2%が一意で残りが重複するユーザーを想定しているという定理があるので、そこからサンプリングするだけでN_ctrおよびN_varサイズを自由に選択できます。私は通常、安定したものよりも柔軟な推定値を求めているため、1/5を選択します。これは、バイアス変動のトレードオフ問題です。
Vasilis Vasileiou 2019年

Bについて:状況はさらに不明確です。ウィキペディアのページでは、elemでB = 1000の例を示しています。統計の。学ぶweb.stanford.edu/~hastie/Papers/ESLII.pdf 2000の観測で100、200を試みます。このアンサンブルモデリング場合onlinelibrary.wiley.com/doi/full/10.1111/coin.12198彼らは500と1000を試してみて、ここでは100以下statistics.berkeley.edu/sites/default/files/tech-reports/... 私は思いますこの数はマシンの能力に依存すると言います。実際には、1000を超える数は大きな違いはありませんが、500を超える数の選択は公平だと思います。
Vasilis Vasileiou 2019年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.