廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

A/Bテスト、多変量テストのための「効果量」入門

本エントリの主張

A/Bテスト、多変量テストの施策判断のためには、

  1. まず第一に棒グラフ
  2. 二番目にその信頼区間
  3. 必要に応じて、大まかな目安として「効果量」

を出すべきだ。

あとこの文章は数学的な予備知識のない方にも読んで頂けるよう努力して書いてます。

中学校で習う因数分解と文字式と平方根(√)や 2 乗くらいしか使いませんので、「うわー… 数式だー…」と思わず、目を通して頂けますと幸甚です。

モチベーション

こんな文章を書こうと思い立ってからずいぶん長い時間がたちました。

ぼくのブログを引用して、こんな感想を述べてくれた人がいました。

統計的仮設検定の基本がよくわからないですし、調べていくと検定力(検出力?)とか効果量とか新しい単語が出てきて難しいです……

統計的仮説検定がよくわからない - 唯物是真 @Scaled_Wurm

ここでは効果量の説明をします。

効果量というのは非常に包括的な術語です。

相関係数も(r 族の)効果量だし、平均の差を標準化した量も(d 族の)効果量なのです。

非常に広い意味を持つ言葉がとつぜん出てきたわけで、わからないのはある意味当然といえます。

ちなみに、

機械学習とのアナロジーで、統計的検定を二値分類器の一種と解釈するアプローチはすごくおもしろい着眼点だと思います。

ぼくは機械学習ぜんぜん不勉強なんでなんとも言えないですが、腕に覚えのある方はもうちょっと深堀りしてみてはいかがでしょうか。

あと検出力と検定力は同義です。"power" という言葉の訳の違いです。心理学など統計を応用した分野では「検定力」と訳すことが多いようですが、統計屋的には「検出力」と訳すのが一般的です。
(power は「検定」の力というより、帰無仮説が変だ! ということを「検出」する力なので)

その辺については、


A/Bテスト、多変量テストの図示 - 廿TT

にちらっと書きました。

これで伝わるかなあ。たぶんネット上にいろいろもっといい解説があるのでググって見てください。google:検出力

はじめに:用語の混乱について

A/Bテスト、多変量テスト

A/Bテストとは単に「AとB、2つのものどうしをくらべます」という意味です。仮説検定(hypothesis testing)という意味ではありません。

また、多変量テストという語も単に「2種類より多いものどうしをくらべます」という意味しかありません。多変量解析などでいう多変量(multivariate)とは関係ありません。

この語法はWeb業界での慣例にしたがっています。

また本エントリ内ではA/Bテスト、多変量テストを「Web広告のクリックされやすさのテスト」として言葉を選んでいます。

Webサイト内でのA/Bテストや、クリックじゃなくて別のコンバージョン(商品購入や資料請求など)に適用したい場合は、単語を読み替えて頂ければと思います。

効果量

今回説明する効果量(effect size)は r 族(r family)の効果量と呼ばれるものの一種です。

効果量とは効果の大きさを表す統計的指標の総称なので、様々な種類があります。

『伝えるための心理統計』では(Rosenthal r. (1994). "parametric measures of effect size", The Handbook of Research Synthesis, pp231-244 に習って)、効果量を r 族と d 族に大別しています。

伝えるための心理統計: 効果量・信頼区間・検定力

伝えるための心理統計: 効果量・信頼区間・検定力

The Handbook of Research Synthesis

The Handbook of Research Synthesis

  • d 族の効果量は群間差についての指標
    • 例:男女の平均身長の差などを表せる
  • r 族の効果量は変数間の関連性の強さの指標
    • 例:理科と数学の成績の関連性などを表せる

です。

ぼく的には効果量よりも連関係数(coefficient of association または association coefficients ?)という語のほうがなじみ深いのですが、「効果量」が注目されているようなので、流行に乗ることにします。

φ 係数とカイ二乗値の関係

f:id:abrahamcow:20141205200330j:plain

Web上で広告Aと広告Bをランダムに出し分けて、どっちのほうがよりクリックされやすいか調べた結果、下表のようなデータが取れたとします。

クリックした人 クリックしなかった人
A a b a+b
B c d c+d
a+c b+c n=a+b+c+d

このとき、φ 係数は、
\displaystyle  \phi =\frac{|ad-bc|}{\sqrt{(a+b)(c+d)(a+c)(b+d)}} \tag{1}
で与えられます。

φ 係数は 0 以上 1 以下の値を取り、値が大きいほど広告の違いとクリック率の違いの関連性が強いと解釈できます。


2行2列の行列と行列式だけでできること。A/Bテスト&市場価格の予測 - 廿TT では、2×2分割表の行(横)方向の比率の差と、列(縦)方向の比率の差との相乗平均という形で φ 係数を説明しました。

(本エントリは上の記事を読まずとも理解できるように書いているつもりですが、 2行2列の行列と行列式だけでできること。A/Bテスト&市場価格の予測 - 廿TT のA/Bテストの項目にざっと目を通して頂けると読みやすさが若干増すと思われます。)

φ 係数は、カイ二乗\chi ^2 )と呼ばれる値を使い、

\displaystyle \phi =\sqrt{ \frac{\chi ^2}{n}} \tag{2}

と表すこともできます(ここで n = a+b+c+d)。

(1) 式と (2) は同じものの別の表現です。

カイ二乗値は、
(((観測度数-理論度数)の2乗)÷ 理論度数)の総和
と定義されます。

3. カイ2乗検定 では、カイ二乗値について非常にていねいに説明されています。適宜参照してください。)

すなわち、理論上のクリックする確率、クリックしない確率を、

クリックする確率 クリックしない確率
A p_{11} p_{12} 1
B p_{21} p_{22} 1

としたとき、例えば広告Aがクリックされる回数の理論度数 p_{11} \times n ですから、カイ二乗値は

\displaystyle \chi^2 = \frac{( a- p_{11} \times n )^2}{p_{11} \times n} +\frac{(b- p_{12} \times n)^2}{p_{12} \times n} \\
\displaystyle + \frac{(c- p_{21} \times n)^2}{p_{21} \times n} +\frac{(d- p_{22} \times n)^2}{p_{22} \times n} \tag{3}

となります。

abrahamcow.hatenablog.com

(このφ係数を用いてサンプルサイズを決めるやり方を 検定いらずの AB テスト:φ係数を用いたサンプルサイズ設計 - 廿TT に書きました。)

クラメールの V 係数の大雑把な導出

広告がA/Bの2種類だけでなくもっとたくさん(k 通り)の場合、分割表は下のようになります。

クリックした人 クリックしなかった人
C _1  n_{11} n_{12} T_{x1}
C _2  n_{21} n_{22} T_{x2}
: : : :
C _k  n_{k1} n_{k2} T_{xk}
T_{y1} T_{y2} n

広告A, B, ... , Z みたいにラベリングしていくとややこしいので、カテゴリ(category)の C を取って、C _1, C_2, \ldots, C_k で k 通りの広告を表すことにしました。

また、行(横)方向の和を T_{x1}, \ldots, T_{xk} 、列(縦)方向の和を T_{y1}, T_{y2} で表すことにしました。

この場合も、φ 係数の (2) 式をそのまま流用して広告の違いとクリック数の違いの関連性を
\displaystyle V =\sqrt{\frac{\chi ^2}{n}} \tag{2'}
で測ることができます。

この V をクラメールの V 係数(Cramér's V - Wikipedia)と呼びます。

クラメールの V 係数が今回求めたい「A/Bテスト、多変量テストのための効果量」です。

φ 係数はクラメールの V 係数の中に含まれることに注意してください。

A/Bテストの場合も、多変量テストの場合も、この式一個でオッケーということです。

V 係数も、φ 係数と同じく 0 以上 1 以下の値を取り、値が大きいほど広告の違いとクリックされる数の違いの関連性が強いと解釈できます。

理論度数の算出

理論度数の算出方法

以上では理論上のクリックする確率、クリックしない確率が与えらればカイ二乗値から効果量が算出できることを述べました。ですので、次に理論度数について説明します。

理論度数は、(横合計×縦合計)÷ 総合計で求められます。

すなわち下の理論度数表を埋める穴埋め問題は、

クリックした人 クリックしなかった人
C _1  m_{11} m_{12} T_{x1}
C _2  m_{21} m_{22} T_{x2}
: : : :
C _k  m_{k1} m_{k2} T_{xk}
T_{y1} T_{y2} n

\displaystyle m_{11} = \frac{T_{x1} \times T_{y_1}}{n} ,

\displaystyle m_{12} = \frac{T_{x1} \times T_{y_2}}{n} ,

\displaystyle m_{21} = \frac{T_{x2} \times T_{y_1}}{n} ,

……以下同様、となります。

以上で、必要な式は出そろいました。とりあえずブラックボックス的に効果量の計算をしてみたい、という方は読み飛ばしてケーススタディのほうに進んでください。以下しばらく理論的な(といっても難解な数学とかは使いません。中学数学の文字式と因数分解くらいです)補強を行います。

なぜ理論度数がこんな式になっているのか

理論度数がなぜ、(横合計×縦合計)÷ 総合計で求まるか説明します。

理論度数とは、「広告ごとのクリックされやすさには特に差がないときは、このような度数になるはずだ」という値です。

下記の表をもとに説明します。

クリックした人 クリックしなかった人
A 10 6 16
B 2 8 10
12 14 26

2行2列の行列と行列式だけでできること。A/Bテスト&市場価格の予測 - 廿TT より再掲)

このデータについて、「広告Aであっても広告Bであっても、クリックされやすさに差はない」とします。

「広告Aであっても広告Bであっても、クリックされやすさに差はない」とは、「どちらの広告であってもクリックした人、しなかった人の出方は同じ」ということです。

クリックした人 クリックしなかった人
広告A/Bに関わらず 12/26 14/26

そして、Aをクリックした人の数は、Aを見せられらた人の総数16に上記の比率を掛けたものになります。
クリックしなかった人についても、広告Bについても同様です。

下表が理論度数です。

クリックした人 クリックしなかった人
A (16×12)/26 (16×14)/26
B (10×12)/26 (10×14)/26

これは、(横合計×縦合計)÷ 総合計にほかなりません。(元の表と見比べてみてください)

証明:φ 係数とカイ二乗値の関係について

「 φ 係数とカイ二乗値の関係」のところで、(1) 式と (2) 式は同じものだと述べました。

このこと、つまり

\displaystyle \phi =\frac{|ad-bc|}{\sqrt{(a+b)(c+d)(a+c)(b+d)}} = \sqrt{ \frac{\chi ^2}{n} }

という関係が成立することを証明しておきます。

クリックした人 クリックしなかった人
A a b  T_{x1}=a+b
B c d T_{x2}=c+d
T_{y1}=a+c T_{y2}=b+d n=a+b+c+d

上の表で考えます。

カイ二乗値の定義は、

\displaystyle \chi^2 = \frac{( a- p_{11} \times n )^2}{p_{11} \times n} +\frac{(b- p_{12} \times n)^2}{p_{12} \times n} +\\ \displaystyle~~~~\frac{(c- p_{21} \times n)^2}{p_{21} \times n} +\frac{(d- p_{22} \times n)^2}{p_{22} \times n} \tag{3}

でした。

ここで  p_{11} \times n は広告Aがクリックされる回数の理論度数だったことを思い出してください。

「理論度数は(横合計×縦合計)÷ 総合計」の関係を使い、(3) 式をこう書き換えることができます。

\displaystyle \chi^2 = \frac{( a- (T_{x1} \times T_{y1})/n )^2}{(T_{x1} \times T_{y1})/n} +\frac{(b-   (T_{x1} \times T_{y2})/n )^2}{ (T_{x1} \times T_{y2})/n} \\
\displaystyle~~~~+ \frac{(c-  (T_{x2} \times T_{y1})/n)^2}{ (T_{x2} \times T_{y1})/n} +\frac{(d-  (T_{x2} \times T_{y2})/n)^2}{ (T_{x2} \times T_{y2})/n}

式変形して、

\displaystyle \chi^2  = \frac{1}{n T_{x1} T_{x2} T_{y1} T_{y2}} \\
\displaystyle~~~~\times \left\{ T_{x2}T_{y2}(an - T_{x1}T_{y1})^2+ T_{x2}T_{y1}(bn - T_{x2}T_{y2})^2 \\
\displaystyle~~~~+ T_{x1}T_{y2}(cn - T_{x2}T_{y2})^2 + T_{x1} T_{y1}(dn - T_{x2}T_{y2})^2 \right\}

次に中括弧{}の中を考えます。

第一項:
\displaystyle T_{x2}T_{y2}(an - T_{x1}T_{y1})^2   \\
\displaystyle =T_{x2} T_{y2}(a(a+b+c+d) - (a+b)(a+c) )^2 \\
\displaystyle =T_{x2} T_{y2}(ad-bc)^2

第二項:
\displaystyle T_{x2}T_{y1}(bn - T_{x2}T_{y1})^2  \\
\displaystyle =T_{x2} T_{y1}(b(a+b+c+d) - (a+b)(a+c) )^2 \\
\displaystyle =T_{x2} T_{y2}(bc-ad)^2

第三項:
\displaystyle T_{x1}T_{y2}(cn - T_{x2}T_{y1})^2  \\
\displaystyle =T_{x1} T_{y2}(c(a+b+c+d) - (c+d)(a+c) )^2 \\
\displaystyle =T_{x1} T_{y2}(bc-ad)^2

第四項:
\displaystyle T_{x1}T_{y1}(bn - T_{x1}T_{y1})^2  \\
\displaystyle =T_{x1}T_{x1} (d(a+b+c+d) - (c+d)(b+d) )^2 \\
\displaystyle =T_{x1} T_{y1}(ad-bc)^2

これをまた中括弧{}の中に戻します。

\displaystyle \chi ^2 = \frac{1}{n T_{x1} T_{x2} T_{y1} T_{y2} } \left\{ T_{x2} T_{y1} (ad+bc)^2+ T_{x1}{x2} (bc-ad)^2   \\
\displaystyle~~~~+ T_{x1} T_{y2} (bc -ad)^2 + T_{x1}T_{x1}(ad-bc)^2 \right\}

(bc-ad)^2 = \{- (bc +ad) \}^2 =(ad -bc)^2 なので、

\displaystyle \chi ^2 = \frac{(ad-bc)^2}{n T_{x1} T_{x2} T_{y1} T_{y2} }\\
\displaystyle~~~~ \left\{T_{x2} T_{y1} + T_{x1}{x2}+ T_{x1} T_{y2} + T_{x1}T_{x1} \right\} \\
\displaystyle =\frac{(ad-bc)^2}{n T_{x1} T_{x2} T_{y1} T_{y2} } \left\{T_{x2} (T_{y2}+T_{x1}) + T_{x1} (T_{y2}+T_{y1})\right\} \\
\displaystyle =\frac{(ad-bc)^2}{n T_{x1} T_{x2} T_{y1} T_{y2} } \left\{(T_{x1}+ T_{x2}) (T_{y1}+T_{y2}) \right\}

ここで T_{y1} + T_{y2} = n = T_{x1} + T_{x2} だったことを思い出してください。

\displaystyle \chi ^2 =\frac{(ad-bc)^2}{n T_{x1} T_{x2} T_{y1} T_{y2} } n^2 = \frac{(ad-bc)^2}{T_{x1} T_{x2} T_{y1} T_{y2} } n

両辺を n で割り、 T_{x1}, T_{x2}, T_{y1}, T_{y2} をもとの形に戻して、ルートにいれ、

\displaystyle  \sqrt{ \frac{\chi ^2}{n} }  =\frac{|ad-bc|}{\sqrt{(a+b)(c+d)(a+c)(b+d)}} =\phi

が示されました。証明おわり。

ケーススタディ

R による計算

下表に示したようなデータが得られたとして、効果量クラメールの V 係数を求めてみます。

クリックした人 しなかった人
A 30 20
B 35 30

R では lsr パッケージの cramersV 関数でかんたんにこの計算が可能です。

A <- c(30, 20) 
B <- c(35, 30)
mat <- rbind(A, B)
colnames(mat) <- c("クリックした人", "しなかった人")
mat
#  クリックした人 しなかった人
#A             30           20
#B             35           30
library(lsr)
cramersV(mat)
#[1] 0.04384615

結果、V 係数は約 0.044 でした。

Excel でも上に述べた数式を地道に打ち込めば計算できますし、便利な関数もあります。

クロス集計表の作成と分析─エクセル統計による解析事例 | ブログ | 統計WEB を参考にしてください。

効果量の目安

効果量がどれくらいの値をとれば、「広告によってクリックを増やす(または減らす)ことができた」と思っていいのか、一つの判断の基準としてまとめておきます。

  • 0 以上 0.1 未満:無視していいくらいの関連性
  • 0.1 以上 0.3 未満:小さいがまあ意味のある関連性
  • 0.3 以上 0.5 未満:中くらいの関連性
  • 0.5以上:大きな関連性

さきほどの V 係数 = 約 0.044 という値は「無視していい」と解釈できます。

ただし、これは数学的な知見に基づくものではなく、経験則による目安ですので注意してください。
(Cohen (1988)が提示したものらしいですが 施策の効果をどうやって測るか(2) - 検出力と効果量 - About connecting the dots. からの孫引きです。)

Statistical Power Analysis for the Behavioral Sciences

Statistical Power Analysis for the Behavioral Sciences

標準化得点

標準化得点の計算方法

※標準化得点という用語の使い方が正しいかちょっと不安です。突っ込み求む(request for comment)

V 係数の値が大きいとき、次に調べたいのは、どの広告がその効果に寄与したかです。

そこで、標準化得点を求めてみます。

多変量テストの分割表と、

クリックした人 クリックしなかった人
C _1  n_{11} n_{12} T_{x1}
C _2  n_{21} n_{22} T_{x2}
: : : :
C _k  n_{k1} n_{k2} T_{xk}
T_{y1} T_{y2} n

理論度数表、

クリックした人 クリックしなかった人
C _1  m_{11} m_{12} T_{x1}
C _2  m_{21} m_{22} T_{x2}
: : : :
C _k  m_{k1} m_{k2} T_{xk}
T_{y1} T_{y2} n

を再度参照してください。

標準化得点は、

\displaystyle e_{ij} = \frac{n_{ij} - m_{ij}}{\sqrt{m_ij}}

で計算できます。

計算例

実際に適当な数字で計算してみます。

「多変量テスト」をやった結果、以下のようなデータが得られたとします。

クリックした人 しなかった人
広告A 30 35
広告B 20 30
広告C 50 35

これに対して「効果量」(V 係数)を求めたら、約 0.16 でした。

小さいですが、ちょっと気になる程度の関連性がでています。

#R による計算方法
tmp1 <- c(30, 20, 50)
tmp2 <- c(35, 30, 35)
mat2 <- cbind(tmp1,tmp2)
colnames(mat2) <- c("クリックした人", "しなかった人")
rownames(mat2) <- c("A", "B", "C")
# mat2
#  クリックした人 しなかった人
#A             30           35
#B             20           30
#C             50           35
cramersV(mat2)
#[1] 0.1586139

これに対して標準化得点を求めると、

クリックした人 しなかった人
広告A -0.438529009653515 0.438529009653515
広告B -1 1
広告C 1.15044748327106 -1.15044748327106

です。

これの絶対値が大きいほど、効果量(V 係数)に与えた影響が強い、ということです。

この場合、広告Cの効果がいちばん大きかったようです。

標準化得点を計算する関数を R で書いておきます。

e_score <- function(ob){
  Tx <- apply(ob,1,sum) #行(横)合計
  Ty <- apply(ob,2,sum) #列(縦)合計
  n <- sum(ob) #総合計
  dim1 <- length(Tx) #行(横)の長さ
  dim2 <- length(Ty) #列(縦)の長さ
  theo_mat <- matrix(,dim1,dim2) #理論度数表
  #理論度数表を一マスずつ埋める
  for(j in 1:dim2){
  for(i in 1:dim1){
    theo_mat[i,j] = Tx[i] * Ty[j]
  }
  }
  theo_mat= theo_mat/n
  (ob - theo_mat)/sqrt(theo_mat)
}
#たぶんこのコードは上手な人が書けばもっとうまく、
#もっとはやく動くように書けます。
#そういう「最適化」っていうのは職人芸で、
#ぼくのコードは素人芸です。
#職人芸はマネするのがむずかしいけど、
#素人芸はマネするのがかんたんなので、
#まあ、わりと読みやすいコードになってるんじゃないかと、
#自分では思ってます。

(e_mat <- e_score(mat2))
#  クリックした人 しなかった人
#A      -0.438529     0.438529
#B      -1.000000     1.000000
#C       1.150447    -1.150447
図示

これを色付きテーブル(ヒートマップ)にすると、どの広告の影響が大きいか、視覚的に把握できます。

f:id:abrahamcow:20141218071147p:plain

#R による視覚化
#ライブラリの読み込み
library(ggplot2)
library(reshape2)
#基本設定
#日本語のフォントを指定、文字サイズは15(大きめに)
#背景は白に固定
theme_set(theme_bw(15,"HiraKakuPro-W3")) 
#基本設定終わり
#以下、データの再整形
df1 <- as.data.frame(e_mat)
df1 <-cbind(id=rownames(e_mat),df1)
df2 <- melt(df1, id.vars="id")
#描画
p1 <-ggplot(df2,aes(x=variable,y=id)) #グラフの「素」を生成
#以下 "+" でグラフの「型」 を指定
p1 +  geom_tile(aes(fill = value))+ #色の濃淡
  geom_text(aes(fill = round(value,digits=2), label = round(value,digits=2)), col="white")+ #数字を入れる
  labs(x="", y="広告種別", title="標準化得点表") #x軸、y軸、タイトル

エクセルでは、「条件付き書式設定」でこのような表をかんたんに作成できます。
ただし、その際デフォルトの赤から緑のカラースケールは使わないようにしてください。

赤緑色弱の方は人口の中に無視できない割合で存在します。

赤から緑のカラースケールを用いると、せっかく作ったグラフが伝わらなくなるリスクが上がります。
青やオレンジのカラースケールを使うことをおすすめします。


Google アナリティクスの Page Depth を可視化 + KPI 割り算主義への懐疑 - 廿TT


……と書きましたが、列数を 2 に限定してるので、ふつうに棒グラフのほうがいいですよね。すみません。(2014年1月3日)

f:id:abrahamcow:20150103064742p:plain

barplot(e_mat[,1],col="cornflowerblue",ylim=c(min(e_mat),max(e_mat)))
barplot(e_mat[,2],col="tomato",add=TRUE)
#nihongo() #マックユーザーは日本語のフォントを指定
legend(locator(1),legend=c("クリックした人","しなかった人"), 
       pch=15,col=c("cornflowerblue","tomato"))
#凡例の位置をプロットエリアをクリックして指定
標準化得点の目安

標準化得点  e_{ij} = (n_{ij} - m_{ij})/(\sqrt{m_{ij}}) カイ二乗値を求めた式の各項(足し算の部分を足す前のところ)の平方根になっています。

これは標準正規分布という確率分布に従います。

(理論的には本当は逆で、正規分布からカイ二乗分布というものが導出され、カイ二乗分布からカイ二乗値が導出されるのですが、このエントリは確率論の予備知識がない方にも読んで頂きたいため、あえてこのような説明にしています。)

標準正規分布から確率を計算すると、以下のようになります。

  • 標準化得点の絶対値が 1
    • 約31.73%
  • 標準化得点の絶対値が 2
    • 約4.55%
  • 標準化得点の絶対値が 3
    • 約0.26%

確率が低いというのはつまり、「広告の差が偶然起こった差とは考えにくい」ということですから、これを基準に広告の選択をすることもできます。

たとえば「標準化得点の絶対値が 2 以上だったらもうその広告を採用しちゃおう。」というな基準を設けて、自動化、マニュアル化するようなことも可能、ということです。

#統計ソフト R で標準正規分布から確率を計算する方法
1-(pnorm(1) - pnorm(-1))
[1] 0.3173105
1-(pnorm(2) - pnorm(-2))
[1] 0.04550026
1-(pnorm(3) - pnorm(-3))
[1] 0.002699796

そもそも効果量を算出すべきか

これまでながながと書いてきてここでやっとこんなことを述べるのはちょっと気が引けますが、ぼくはこういうそもそも論が大事だと思っているのです。

効果量(の多く)は標準化された量です。標準化というのはつまり、元の単位に依存しない数字にしている、ということです。クラメールの V 係数は 0 から 1 の値を取るようになっています。

効果量は100点満点で何点、というような感覚で捉えることも可能なのでわかりやすいと言えばわかりやすいのですが、ふつうに元の単位で見たほうが容易に理解できる場合もあります。

Web担当者や実務マーケターのかたは、CTR(クリックスルーレート、クリック率)の数パーセントの上昇が、どの程度インパクトがあるか、経験的に把握されていることでしょう。

標準化される前の量で効果を比べる有益なツールを、あなたはすでにご存知のはずです。

棒グラフです。

実際、統計学において「効果」effect)とは、

(比較対象の平均 - 基準となるものの平均)

という引き算で定義されます。

ふだんからわれわれが棒グラフを見るときは、ひとつひとつの棒の長さを読むのではなく、一連の棒をながめ、そのなかでどの棒がどの棒より小さいか、大きいかという統計的な見方をしているのです。

CTR(クリックスルーレート)の棒グラフを描くことで、広告の効果を比べることが可能です。

伝えるための心理統計: 効果量・信頼区間・検定力

伝えるための心理統計: 効果量・信頼区間・検定力

(同様、『そもそも標準化すべきか』という議論は『伝えるための心理統計』(pp.104-105)等にも表れますが、「棒グラフ描け」という主張はぼくのオリジナルです。このメッセージがまちがっていた場合それはぼくのまちがいであり、大久保、岡田に咎はありません。)

仮説検定をおすすめしない理由(効果量とKPI設計の観点から)

CTR(クリックスルーレート)のような割り算値の場合、分母が違うと単純に数値比較することはできません。

例えば、1/2 の 50% と 500/1000 の 50% では 500/1000 のほうがより信憑性の高い 50% だと考えられます。

一般に統計的仮説検定で用いる「検定統計量」というものは、分母(=サンプルサイズ、標本の大きさ)に依存する量と、効果(割り算値の大きさ)でバランスをとるように作られています。

そして、統計的仮説検定ではこの情報を、

  • 有意差あり
  • 有意差なし

の2値に落とし込んでいます。

ただし、「検定統計量」というのは確率変数の一種です。確率なので、サイコロを振り直すように何回も行えば、いつかは「有意」になります。

また、サンプルサイズ、分母の大きさを増やしていけばいつかは「有意」になります。

「A/Bテスト」でわれわれが本来探したかったのは効果のある広告のはずです。

そこで「有意」な広告を作ることを目標(KPI)にして、なんとか「有意」になるように努力してしまうと、結果的には、

  • サイコロを振り直すように何回も行って「有意」にする
  • サンプルサイズを増やして「有意」にする

というような意味のない「有意」を招くことになります。

これは KPI 設計の観点からまちがっています。

そこで、分母(=サンプルサイズ、標本の大きさ)に依存する量と、効果(割り算値の大きさ)でバランスをとり、かつそれを直感的に把握できるように考えた上で、ぼくがおすすめしたいのが、棒グラフ+信頼区間のエラーバーです。

f:id:abrahamcow:20141218091717p:plain

このような図を描けば、広告Cにどの程度「効果」があるかを棒グラフで、その効果がどの程度信頼できるか、エラーバーで目で見て把握することができます。

#R で、
#信頼区間を出す関数を定義
CIset<-function(k, n, group=NULL, conf=0.95){
  rate = k/n
  len <-length(k)
  CI =sapply(1:len ,function(i){
    ans <- binom.test(k[i], n[i], conf.level =conf)
    ans$conf.int[1:2]})
  data.frame(group =if(is.null(group)){LETTERS[1:len]}else{group},
             rate=rate,
             upper = CI[1,],
             lower = CI[2,])
}

#さきほどの表 mat2 の95%信頼区間を算出
mat3 <- CIset(k=mat2[,1], n= apply(mat2, 1, sum))
#k にクリックした人の数、nに行(横)合計を入れている
#行(横)合計はすなわちCTRの分母の数

mat3 #出力結果
#  group      rate     upper     lower
#A     A 0.4615385 0.3370209 0.5896749
#B     B 0.4000000 0.2640784 0.5482060
#C     C 0.5882353 0.4762095 0.6939302

p2 <- ggplot(mat3, aes(x=group,y=rate)) #グラフの「素」
#以下 "+" でグラフの「型」を指定 
p2 + geom_bar(stat="identity", alpha=0.8) + #alphaは透明度
  geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=2) +
  labs(x="広告",y="CTR(クリックスルーレート)",
       title="CTRの棒グラフ+95%信頼区間のエラーバー") +
  scale_y_continuous(labels = percent) #y軸を%表示に

この考えは、


A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT

を書いたころから変わっていません。

図示というのはあいまいな感じがしていやかもしれませんが、統計的仮説検定というのは、施策の判断を「有意」「有意でない」で丸投げするためにあるものではありません。

A/B テストの自動化、マニュアル化にあたっては、棒の高さという効果(ベネフィット)、信頼区間の幅というリスク、両者を考えて、あなた自信に基準を策定してほしいのです。

信頼区間の幅も、棒の高さも具体的な数字で決まるものですから、いったん基準を設ければ、この手法でも自動化、マニュアル化が可能です。

エクセルでこのような図を描くには、


A/Bテスト、多変量テストの図示(Excel 版) - 廿TT

を参照してください。

また、R については、


A/Bテスト、多変量テストの図示 - 廿TT

という記事も書いています。必要に応じて参照してください。
※ただし、この記事に関しては ggplot2 パッケージのバージョンが上がったこと、またぼく自身の作図スキルが上がったことにより、いま見ると直したい点もあります。作図については本記事を参考にし、こちらは事例集としてご覧頂ければと思います。

関連エントリ

abrahamcow.hatenablog.com

免責事項、言い訳など

おそらく統計に詳しい方からみると本記事には気になる点が多々あるでしょう。

たとえば、クラメールの V 係数は k 行 2 列の場合だけでなく、一般の kl 列の場合について定義されたものです。

ぼくは「自由度」という初学者のつっかえそうなところを回避するために、あえて問題をアドホックに限定しています。

また、母平均も母平均の推定量も母平均の推定値もまとめて「平均」と呼んでいますし、「理論度数」という言葉を使って理論確率構造と、確率の推定値を一緒くたにしています。

これも、パラメーターとその推定量と推定値、という初学者のつっかえそうなところを回避するためです。

ぼくは確率論や微分積分などの予備知識のない方でも、がんばってちゃんと読めば理解できるように、それもたとえ話で終わらせずに、実務レベルで計算ができるように、かつ公式丸暗記に終わらせずにちゃんと式の導出ができるように、自分なりにバランスをとった結果、この書き方を選んでいます。

いろいろご指摘頂けるのはうれしいのですが、その点ご理解の上、ご指摘くださいますとさらにうれしいです。

というか、その点を無視したご意見を頂いた場合、たぶん「あ、それわざとやってるんで、そういうこと気にする方は自分で記事書いてください」という、木で鼻をくくったような対応しかできませんので、意見する側の方はかえってむかつくと思います。

ちなみに、本記事はクリエイティブコモンズライセンスで公開されていますので、無断転載して改変して書き直して頂いてぜんぜんオッケーです。

開き直りみたいに思われるかもしれませんが、自分ではそう思っていません。

「A/Bテスト大事」「データヴィジュアライゼーション大事」「KPI 設計してちゃんと目標を立てて PDCA サイクル回していくの大事」と言われてるわりに、それについて統計的な観点から書かれた文章はまだまだ少ないので、もっと増えて欲しいと本気で思ってこう言っています。

ついでに言わせてくれ。君たち「効果量」とか意味わかって言ってる?

はてなブックマークとかツイッターとか見てると「効果量大事」みたいな記述けっこうある。

大丈夫? 「効果量」とかちゃんと意味わかって言ってる? ぼくはちょっと心配だぞ。

いま効果量が注目されてるのって p 値だけが唯一絶対の基準になってた状況に対するカウンターだ。

それで今度は効果量だけが唯一絶対の基準になっちゃったりしたら、おんなじことの繰り返しじゃない?

みんながそもそも仮説検定とかの統計手法を勉強しはじめた理由ってなにかっていったら、それは科学が好きで楽しいと思ったからでしょう、自然科学にしろ、人文科学にしろ、マーケティングみたいな社会科学にしろ。

その楽しさを忘れたらもったいないよ。


こんにちは検定、ハロー統計的有意性/読書猿くるぶしさんの書き方は誤解を招く - 廿TT

実際問題、人生のステップとして公式暗記したり、統計ソフトにデータつっこんで、とにかく数字だしたりしなきゃいけない場面もあるだろう、なんとか急いで期日までに報告書やレポート書かないと、とか。

それは確かに必要なんだけど、たまには「そもそもこの式ってどうしてこうなってるんだっけ?」って立ち止まってゆっくりデータサイエンスを楽しもうよ。

あと企業の経営者の人も、そういうことをやる時間、社員に少しくらいあげてよ。

ソフトウェアの使い方なんて数年たてば変わるけど、その背後にある考えかたはおそらく半永久的に不変なんです。

あせって残業残業で現場の担当者しめあげたり、高いお金払って外部のコンサルタントに依頼したりするよりも、そうやってゆっくりやっていったほうが十年くらいのスパンでみたら結局はお得だと思うよ、ぼくは。

参考文献

参考文献について

本エントリを書くにあたって参照した文献です。こういうのは引用した順、または50音順とかで並べるのがふつうですが、ここでは理解の助けになりそうな順に並べます。

初学者向け

品質管理のための統計手法 (日経文庫)

品質管理のための統計手法 (日経文庫)

微分積分線形代数、確率論等の数学的知識がなくても読め、かなり高度なレベルまでコンパクトに説明されています。「統計学についてなんかわかりやすい本とかない?」と聞かれたら、まずこれを挙げます。
本エントリのクラメールの V 係数および標準化得点についての説明は、本書にかなり依存しています。

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

これも数学的知識がなくても読め、かなり高度なレベルまでコンパクトに説明されているユニークな本です。
本エントリでは、棒グラフについての説明でこの本を参照しましたが、記述統計に留まらずさらっと回帰分析まで理解できます。

R ユーザー向け

  • クロス表の分析
    • クロス表の分析について、シンプルにまとまっています。R のコード付き。

「効果量」について

  • 効果量,Cohen's d,検出力,検出限界
    • 効果量とか検出力が近年重視される理由と、その具体的な内容について。基本的にはこれ読めばオッケーな気がします。(というのは、コーエンの d とかについては、そのものずばり効果を標準化したということで効果量と呼ぶのがわかりやすいと思うけど、r 族の効果量については総称的な「効果量」という語でなく「連関係数」とかの、古典的な用語で学ぶほうが誤解が少ないんじゃないかという感覚があるせいです。)
  • 施策の効果をどうやって測るか(2) - 検出力と効果量 - About connecting the dots.
    • 種々の効果量について、簡潔なまとめ。

伝えるための心理統計: 効果量・信頼区間・検定力

伝えるための心理統計: 効果量・信頼区間・検定力

数学的な証明等は少なめです。効果量や信頼区間がなぜ重視されるようになったか、文脈的、歴史的な整理の点で優れています。仮説検定について、ある程度の予備知識は要求されます。

ちょっと数学がんばってみようかなという人向け

  • 統計学の資料
    • 滋賀大学の熊澤先生のページ。講義資料なのかな? 個人的にはわかりやすかったです。

入門・演習 数理統計

入門・演習 数理統計

要本気計算。重積分、広義積分くらいはやる必要があります。ぼくはこの本をずっと辞書みたいな感じで使っていて、一番なじみ深い統計学の本です。多変量解析とか回帰分析についての記述は少なめです。

自然科学の統計学 (基礎統計学)

自然科学の統計学 (基礎統計学)

『入門・演習 数理統計』のネクストステップ的な本として活用しています。

読んでません

The Handbook of Research Synthesis

The Handbook of Research Synthesis

Statistical Power Analysis for the Behavioral Sciences

Statistical Power Analysis for the Behavioral Sciences

上記2冊は一応確認しとこうと思って Google ブック検索で数ページざっとながめただけです。

The Handbook of Research Synthesis - Google ブックス
Statistical Power Analysis for the Behavioral Sciences - Jacob Cohen - Google ブックス

あとづけで追加


※本エントリはオッズ比の方はノーチェックでした。
※奥村先生が「信頼区間とともに報告」せよとおしゃってるのは、「効果量の」信頼区間です。ぼくが主張してるのは「比率の」信頼区間です。この記事への反論等は奥村先生や他の参考文献の著者でなく私へどうぞ。