ABテスト(5)_効果検証
前回、ABテストに必要なデータ数に触れました。
今回は、テストした後の効果検証について書きます。
結果については一般公開ブログということもありますので差し控えさせていただきますが、非常に興味深い結果が得られました。
効果検証の必要性
せっかく苦労してABテストしても、それが偶然の結果では?と思われては意味がありません。
また、偶然では今後の知見にもなりません。ですのでテストの結果が偶然ではなく、統計学的に有意であると周りに説得するためには
AとBの差を検定する必要があります。今回は「カイ2乗検定」で効果検証します。
カイ2乗検定とは
カイ2乗検定とは、「観察された事象の相対的頻度がある頻度分布に従う」という帰無仮説を検定するもの(WIKI)
*ピアソンのカイ二乗検定
はい、よくわかりませんね汗
いわゆる、わかる人にはわかる説明ですね汗
もう少し分かりやすく書きます。
「クロス集計をした際に、行と列の項目(2変数)に関係があったのか、それとも関係がなかったのか(独立)を検証すること」
偶然だったのか必然だったのかを検証する方法ですね。
厳密にいうと、カイ2乗検定は「独立性の検定」と「適合度の検定」の2種類あるのですが、今回の目的では前者の検定をします。
後者は、実測度数がある特定の分布に適合するかどうかを検定するときに使います。WIKIの説明は後者ですね。
検証方法
カイ2乗検定の数式はそれほど難しくないのですが、実務ではいかに早く結果を出せるかが重要です。
ですので、実務ではツールを使っても良いと思います。
変数を入力するだけで、結果を自動で出してくれるサイトもあります。
ただ、調べてみると2 X 2のクロス集計についての独立性の検定を自動で計算してくれるサイトはあっても、
要素がそれ以上あるm X n コのクロス集計には対応してるものがあまりありませんでした。
Excel
Excelは実測値と、独立と仮定したときの期待値の表を用意し、以下の関数を使えばP値が出せます。 P値とは、大ざっぱに言えば偶然の確率です。これが何%以下の時に独立でない(変数に関連がある)と判断するかは予め決めておく必要があります。
CHITEST(実測値の個別の値セル, 期待値の個別の値セル )
Python
Pythonでは、scipy.statsモジュールのchi2_contingency関数の引数に分割表を指定するだけで、独立性の検定をしてくれます。
stats.chi2_contingency(データフレーム)
Excelのように、期待度数の表を自分で作る必要がないのは楽でよいですね。
蛇足
Pythonはさすがというか、細かい補正もできるんですね。
「correction=False で、イエーツの補正を実施しない」とか設定もできます。
(デフォルトでは correction=True)
イエーツの補正は、「総度数n < 20」 または、 「n < 40 かつ 期待度数 5未満のセルがある」場合に使うのが一般的とされています。
ただ、これは統計の知識がないとさっぱり分かりませんし、そこまでの厳密性が求められているかは、状況で判断したほうが良さそうです。
以前にツールを使わずに数式を計算したことがあるのですが、何をやっているのかを理解するにはそれが良いですね。
内容を理解せずにツールで結果をパッと出してしまうと、結果が出ても何を言っているのか分からなくなります。
統計は奥が深いですね。
以上です。
薬について_ジェネリック
今回はプライベートの内容です。
ジェネリック薬品について思うことがありました。
ジェネリックとは
「後発医薬品、ジェネリック医薬品(英: generic drug, generic medicine[2])とは、先発医薬品(新薬)の独占的販売期間の終了後に発売される、先発医薬品と同じ有効成分で効能・効果、用法・用量が同一とされており、先発医薬品に比べて低価格な医薬品である。」(WIKI)
今まで、同じ効果なら安い方が良いと思って、ジェネリック薬品を選んでいました。
ただ、いくつか先発品と違いがあると知りました。 私は薬の専門家ではありませんが、下記のことは知っておくべきだと思いました。
添加物が違うことがある
これはテレビでも言われているので知っていました。 成分が同じであれば問題はないと思っていましたが、人によっては気になるかもしれません。
薬の作用する条件が違うことがある
これは初めて知りました。ある薬では、薬の作用する条件が、先発品と後発品で若干異なっていることがあると、自分で調べて知りました。
また、詳細は割愛しますが、ジェネリックについて何度かニュースにも取り上げられているようです。
感想
先発品と後発品で違いがあるとしても、その影響を理解して選ぶのであればよいと思っていました。 ただ、調べている中で、医療関係者と一般人の間の、情報の非対称性は埋められないと思いました。 自分の選択が正しいのか判断するには、人から与えられる情報だけでは不足だと感じます。
自分の選択に責任を持てるようにしたいと思います。
以上です。
ABテスト(4)_必要なデータ数
前回に引き続き、ABテストに触れます。 ABテストでクリック率の差を測りたい場合、どれだけのデータ数があれば良いのでしょうか?
「とりあえずやってみたけれど、データ数が十分でないため、統計的に有意な差はありませんでした」・・・
っていうのは困りますよね。
「何の成果も!!得られませんでした!!!!」とは言えませんし汗
分析前に必要データ数を把握する意味
比較したい目標クリック率によって、必要なデータ数が変わってきます。
ただ、データ数を増やしたくても、予算や時間など様々な問題で簡単には増やせないと思います。
国勢調査のようなものであれば、潤沢なリソースを基に大規模な調査ができるか思いますが、1企業では制約があります。
ですので、どこまでならデータ数を増やせるか、その制約下ではどこまでの精度で分析ができるかを、分析前に知っておく必要があります。
「何の成果も!!(以下略)」としないためです。
今は複雑な統計計算をしなくても、サイトで自動で計算してくれるサイトもありますので、それを活用すると良いでしょう。
必要データ数
例えば、通常のクリック率が1%だとします(リストA)。そして、比較対象のリストBでのクリック率目標が2%とします。 つまり、何らかの変更をリストBに施したことにより、クリック率が+1%増えることを目標とします。 その場合、統計的に有意といえるためにはどれくらいのデータ数が必要でしょうか?
専用サイトで計算してみました。 以下の場合、必要データ数は約1800でした。これくらいであれば、データを用意するのは難しくなさそうです。
ABのクリック率の差が1%
- リストA: クリック率1%(通常)
- リストB: クリック率2%(比較対象)
- 有意水準α: 5%
- ABの差が偶然生じる割合
→必要データ数:約1800
ABのクリック率の差が0.5%
上記のように明確なクリック率の差がなく、0.5%の場合は下記です。
- リストA: クリック率1%(通常)
- リストB: クリック率1.5%(比較対象)
- 有意水準α: 5%
- ABの差が偶然生じる割合
→必要データ数:約6200
これも、データ数は問題なさそうです。
次回はテスト結果の効果検証方法について触れます。
以上です。
ABテスト(3)_リストの精度
前回、ABテストのリストの分割方法に触れました。
今回は、リストの分割方法でどこまで精度を求めるかについて書きます。
どこまでの精度を求めるか
AとBの比だけで見ると数%の誤差は一見大きいように見えます。しかし、
これは「特定プロダクトの、特定の契約状況の、特定の業種」という細分化されたブロックでの話です。
リスト全体に対する比率でAとBの差(総計に対する比率のAB差)を調べると、単純ランダム化でも1%程度の誤差でした。
では、この1%はメール配信の場合は無視できる大きさでしょうか?
例えば、特定の細分化されたブロックの顧客は、クリック率が100%だったとします。(ないとは思いますが・・)
「有料顧客、かつ、最上位プラン、かつ、メールの内容に大きく関係する業界」というブロックの場合は確かにクリック率は高いです。
このとき、上記の顧客が、BよりAの方に1%多く振り分けられていたとします。
すると、クリック率はAのリストの方が1%高くなります。(他のリスト振り分け方が同じ場合)
このような場合は、単純ランダム化でのリスト分割はNGでしょう。
まとめます。
以下の場合であれば、単純ランダム化でも問題ないでしょう。
Y > a * X
Y : [ABのクリック率の差(目標想定値)]
a : [リスト全体に対する、細分化ブロックの比率のAB差]
X : [細分化ブロックのクリック率(想定値)]
例)2% > [1% * 100%]
ただし、上記の式でも分かるように、変数が想定値なんですよね。やってみて想定と違うこともありますし、その方が多いでしょう。 それに、特定の細分化ブロックについても、想定外の条件の組合せの場合は想定のしようがありません。
現実的な例だと以下の値になりそうです。
例)0.5% > [1% * 5%]
・今回のランダム化について調べていたところ、医療統計のサイトが複数ヒットしました。 医療のような、厳密な差が求められるような状況であれば、リストの分割で精度を追求するのも納得です。
次回は必要なデータ数の確認方法について触れます。
以上です。
ABテスト(2)_リストの分割
前回に引き続き、ABテストについて書きます。
リストの分割方法
前回、ABテストのリストをAとBで分割するときに、以下の2つでどちらが巧く分割できるか試すと書きました。
- 単純無作為
- 契約状況・契約プラン・業種などの項目を、AとBのグループで均等になるように調整してから分割
実際に2つの方法で、AとBで上記項目(属性)の比率が1:1にどれだけ近づけたか、検証してみました。
なお、以降は1の方法を単純ランダム化、2の方法を層化ランダム化と表現します。
この考え方は、統計学で母集団からの標本抽出をする際の「層化抽出法」に似ていますね。
分割結果
どのように分割し、どういった結果が出たか載せれば分かりやすいのですが、一般公開ブログということもありますので、 抜粋のみ載せようと思います。
各属性で細分化したブロックごとに、クロス集計で比率を確認しました。
注)属性:posの契約状況・posプラン・業種など
単純ランダム化
細分化ブロックのデータ数が1000以上
- AとBの比:50%:50%から1~2%、偏り
- 例)49%:51%
- 総計に対する比率のAB差:最大で1%程度偏り
- 例) 9%:10%
- AとBの比:50%:50%から1~2%、偏り
細分化ブロックのデータ数が100以上1000未満
- AとBの比:50%:50%から最大5%ほど偏り
- 総計に対する比率のAB差:最大で0.9%程度偏り
層化ランダム化
細分化ブロックのデータ数が100以上
- AとBの比:ほぼ1:1(50%:50%)に分割できていました。感動ですね!
- 総計に対する比率のAB差:最大で0.02%、ほぼ偏りなし
細分化ブロックのデータ数が100未満
- AとBの比:50%:50%から数%の偏りができていました。これは仕方ないですね。
- 総計に対する比率のAB差:最大で0.02%、ほぼ偏りなし
考察
概ね、やってみる前からの想像通りの結果となりました。以下の条件が揃っていれば、単純ランダム化でも問題なさそうです。
- データ数が十分
- 層化する属性が少ない
- 属性による結果の影響が少ないことが確実
ただし、今回はリストの分割方法による影響を極力除外したかったので、層化ランダム化を採用しています。
次回はどこまでの精度を求めるかについて触れます。
以上です。
ABテスト(1)_リストの準備
これからABテストについて書こうと思います。 今回はメール配信で使うメールアドレスリストの準備について触れます。
ABテストとは
「ABテスト(英: A/B testing)とは、主にインターネットマーケティングで行われる、施策判断のための試験の総称」 (出典: フリー百科事典『ウィキペディア』)
ABテストは正式名称は「A/Bテスト」でスラッシュが入るんですね。 ただ、Googleトレンドで確認すると「A/Bテスト」と「ABテスト」では後者の方が検索されているようなので、当ブログではとりあえず「ABテスト」 と表記します。
ABテストの目的
配信しているメールの件名をAとBで変えて、メールの開封率・クリック率などが変わるかどうかを検証すること
背景
私のチームで使用するメール配信用ツールでは、メールアドレスリストをAとBに2分割する際に、無作為に分割する仕様でした。
ただ、無作為といっても、契約状況やプランなどをAとBで差が出ないように分割できるか疑問でした。
例えば、40人の生徒がいるクラスで、1:1の比率で男女それぞれ20人ずついるとします。
それを単純無作為に2分割したとき、男女それぞれが分割前の比率1:1通りに分割されるものでしょうか?データ数が多ければ、大数の法則で1:1に近づくと思いますが、今回のデータ数では不安が残りました。
もし男女差が偏ったグループに分割した場合、それぞれのグループから得られる回答は、AとBのテスト内容による違いではなく男女差によるものかもしれず、原因の切り分けができません。それだとABテストになりません。
そこで、契約状況、契約プラン、業種などの項目をAとBのグループで均等になるように、予め分割してから試すことにしました。
完全無作為の場合と、今回試した方法で、どちらがうまく分割できているかは後日確認してみようと思います。
薬の副作用について
今回はプライベートの内容です。
しばらく体調を崩していました。(今も続いていますが副作用を抑える薬で一時的に治まっています)
あることで処方された薬の副作用が原因のようです。
医者が言うには、副作用の出る確率は2.5%だそうです。
処方する側からすれば、残りの97.5%にメリットがあれば、薬のメリットの方が上回るかもしれません。
ただ、今回残りの2.5%になってしまってから、その確率は2.5%の当事者にとっては意味ないなと感じました。
確率や統計を学んできましたが、考えさせられる経験になりました。
もちろん、100%副作用のない薬などありませんし、それを目指していたら薬は使えないでしょう。
ただ、万一副作用が出た時、それがどの程度の症状なのか、自分にとってそれがどれくらいの影響があるかは必ず確認しておこうと思いました。
たとえ副作用の出る確率が2.5%であっても、当事者になってしまった時の影響が大きい場合、その薬を使わないという選択をすべきかもしれません。
副作用について説明される機会は本当に少ないです。自分から聞かなければ、処方する側は答えませんし、事実、今まで副作用について説明されたことはほとんどありません。
以後、必ず副作用について確認しようと思います。
以上です。