A/Bテストの数理 - 第4回:実分野における9個のテストパターンについて その1 -

スケジュール

  • 第1回 [読み物]:『人間の感覚のみでテスト結果を判定する事の難しさについて』:人間の感覚のみでは正しくテストの判定を行うのは困難である事を説明し,テストになぜ統計的手法が必要かを感じてもらう。
  • 第2回 [読み物]:『「何をテストすべきか」意義のある仮説を立てるためのヒント』:何をテストするか,つまり改善可能性のある効果的な仮説を見いだす事は,テストの実施方法うんぬんより本質的な問題である(かつ非常に難しい)。意義のある仮説を立てるためのヒントをいくつか考える。
  • 第3回 [数学]:『テストの基本的概念と結果の解釈方法について』:テストの基本的な数学的概念を説明し,またテスト結果をどのように解釈するのかを説明する。
  • 第3回補足 [数学]:『仮説検定の概念を改めて考える』:テストの概念をもう少し丁寧に説明する
  • 第4回 [数学]:『実分野における9個のテストパターンについて』その1その2:オンラインゲーム解析とキャンペーン事例に見る,テストにおける統計量の計算について説明する。
  • 第5回 [数学]:『実際にテストを体感する』:いくつかのテスト事例に対し,サンプルデータを提供し実際に統計量の算出を行ってもらう。新シリーズ:「Treasure Data Analytics」の枠組み内で紹介することになりました。

(※ [読み物] は数学知識を前提としない内容で [数学] は数学知識をある程度前提としたおはなし。)

 

はじめに 

様々なテストパターンを,オンラインゲーム解析とキャンペーンの事例で説明する。また前者におけるテストを "Data-Driven"な,後者を"Hypothesis-Driven"なテストと位置づけて,特に前者のテストは日々のデータ解析において「傾向検知」「異常検知」自動アラートの役割を果たしてくれる可能性がある事を説明する。

(ところで,日常のデータ解析にテストを常時活用することを僕は「TDD: Test Driven Data Mining」と呼んでいる。)

 

全ての問題で共通においている前提

※ 検定方向ついて

以下で紹介するテストは全て両側検定としている。両側検定についてはこちらを参照されたい。両側検定にする理由は,(1) 片側より棄却されにくいこと,(2) 信頼区間を同時に求める際に,棄却域と信頼区間が交わるような矛盾を極力避けるため。(ただし信頼区間についてはここでは取り上げない。)

※ 有意水準について

有意水準は全て 0.05  としている。

※ サンプルサイズについて

計算する統計量とそれの従う分布(特に標準正規分布か t 分布かで)はサンプルサイズによって異なってくる。ここでは「大標本」を n > 100 または n_1 + n_2 > 100 ,それ以外を「小標本」とみなす。ただし,母比率の検定は n > 30 を大標本とする。

 

結果の解釈方法について

第3回の最後にも紹介したが,テストの思考フレームワークは以下に統一される:

  1. 棄却を目的として,帰無仮説をこしらえる。
  2. 帰無仮説の下,標本からある分布(正規分布・t分布・F分布・χ^2分布など)に従う統計量 T を求める。
  3. 統計量 T がその分布の元で稀なケースかどうかをチェックする。
  4. 稀なケースであり,帰無仮説を疑う方が妥当であると判断できる場合は帰無仮説を棄却し、対立仮説を採択する。そうでないなら何もわからないと判断する。

この「稀なケース」と判断する手段について,p-値 の役割と共に説明したい。

p-値 とは「帰無仮説の下で実際にデータから計算された統計量よりも極端な(大きな)統計量が観測される確率」で表される。これは例えば p-値が 0.05 の時,「あなたが計算した計算量 T が(仮定する)分布から得られる確率は 0.05 である 」と述べていることになる。テストのスタンスは帰無仮説を棄却する事であった。つまり p-値 が小さければ小さいほど,T がこの分布に従っているという帰無仮説をより強く疑うことができる。

ここでは「稀なケース」と判断する場合には,両側検定では p-値 が 0.025 より小さいときとする。(有意水準 0.05 の両側検定。)

f:id:doryokujin:20120525103858p:plain

統計量Tにおける p-値 は x>T なる区間の面積。この区間から値が得られるのは「非常に稀」考えられる。標準正規分布においては T=1.96 の時,p-値は 0.025 となるので,T が1.96 より大きければ(あるいは反対側,T が -1.96 より小さければ)この分布において「稀なケース」と判断する。

 

Hypothesis-Driven Testing と Data-Driven Testing について

テストにはその実施方法において大きく2つに分類できる。「Hypothesis-Driven Testing」と「Data-Driven Testing」である。 

Hypothesis-Driven Testing

A/Bテストや実験計画法に代表されるこの方法は, 

(1) 仮説を立て,(2) 実験計画を立て,(3) 実験を実施,(4) 結果からテストを行う

というアプローチを取る。このアプローチのメリットは,始めに検証したい仮説がはっきりしているために厳密なテストを行いやすいことである。ブロック化や完全無作為化,あるいは複数の因子があるならばその交互作用も考慮に入れた上での計画が設定でき,系統的な誤差などの影響を受けにくくできる。一方デメリットは,まず何より仮説ありきであること,毎回の実験コストがそれなりにかかることなどによってそれほど気軽に行えないというところである。

Data Driven Testing

一方データ解析からスタートするテストがある。それは, 

(1) 解析によって通常とは異なる傾向(異常)を発見する

(2) データに対してテストを行い,有意な違いがあるのかを統計的に確かめる

(3) 有意な違いが見られる場合は,解析によってその原因や要因を追求する

(4) 結論を出す,または解析不十分で仮説レベルにとどまるなら Hypothesis-Driven Testing を実施する

というアプローチである。例えばオンラインゲームの文脈で言えば,今日の課金分布やセグメント間の分布の傾向,過去のそれと異なるか否かをテストによって見つけ,その原因を分析し,結論を導いていく。

この場合のメリットは既に実験結果と見なせるデータが揃っているために,データを得るための実験ステップが無いことが挙げられる。デメリットは正確なテスト(標本のランダム性や独立性が不十分など)が行えない事である。

 

1. Data-Driven Testing 〜 オンラインゲーム解析を事例に 〜

ユーザー数百万人を誇るあるオンラインゲームがある。このサイトの全ユーザーの中から 1/1000 程度のユーザーの属性情報を独立かつランダムに取得できるとする。また,データベース上の課金テーブルにも自由にアクセスでき,これらサンプルユーザーの課金情報がいつでも参照できる状況にあるとする。

 

事例1. (母分散未知の母平均テスト)

問:『サンプルユーザー1000人の平均年齢を計算してみると,36.4歳,標本不偏分散は 15.0 であった。日本のゲーム全体でのユーザーの平均年齢が 34歳 であるとするなら,このゲームの全ユーザーの平均年齢は,全ゲーム平均に比べて異なると言えるか。』

解:サンプルユーザーにおける平均を  \bar{X}標準偏差s_d とする。また,全ゲームでの平均を μ とする。

帰無仮説:「 \bar{X}-\mu=0 」,対立仮説:「 \bar{X}-\mu\neq0

統計量:帰無仮説の下で,

T=\frac{\bar{X}-\mu}{s_d/\sqrt{n}} は 標準正規分布 に従う。

T=\frac{36.4-34}{15/\sqrt{1000}}=5.06

よって p-値は,pnorm(5.06)=2.10e-07 < 0.025。

∴ 帰無仮説は棄却され,全ゲーム平均とは異なると言える。

 

事例2. (適合度検定)

問:『今度はサンプルユーザーの年齢を,10歳ごとの年代に分けて集計してみると以下のテーブルが得られた(有効数 832人)。こうして眺めて見ると,10代, 20代, 30代, 40代, 50代の人数比が 3 : 3 : 9 : 1 (メンデルの法則)のようになっているように見える。年代によるこの人数比の仮説が妥当かどうか確かめよ。』

カテゴリ10代20代30代40代合計
観測個数 146 163 479 44 832

解:以下の様なテーブルを作る。

カテゴリ観測個数 n_i理論個数 m_in_i-m_i(n_i-m_i)^2(n_i-m_i)^2/m_i
10代 146 156 -10 100 0.6410
20代 163 156 7 49 0.3141
30代 479 468 11 121 0.2585
40代 44 52 -8 64 1.2308
832 832 0 - 2.4444

帰無仮説の下でカテゴリ数を a とする。

帰無仮説:「ユーザー数の年代分布の比率は 3 : 3 : 9 : 1 である」

統計量:T=\Sigma_{i}\frac{(n_i-m_i)^2}{m_i} は自由度 a-1 のχ^2 分布に従う。テーブルより T=2.444 。

よって p-値は,pchisq(2.444,3)=0.485 > 0.05。

∴ 帰無仮説は棄却されず,年代ごとの人数比率は 3 : 3: 9 : 1 に従っているとは言えない。

  

事例3. (独立性の検定)

問:『年代による分類に加えて,今度はゲームプレイ時間を「1時間以内」「1〜3時間」「3時間以上」と分類し,年代と併せてテーブルを作ってみた(有効数360)。さてさて,年代とプレイ時間に関係があると言えるだろうか』 

観測値テーブル n_ij

カテゴリ10代20代30以上
1時間以下 25 103 52 180
1~3時間 16 39 17 72
3時間以上 19 38 51 108
60 180 120

360

解:

帰無仮説:「年代とプレイ時間は無関係である」

統計量:帰無仮説の下で,以下の期待値(最尤推定値)テーブル m_ij を作る。

カテゴリ10代20代30以上
1時間以下 30 90 60 180
1~3時間 12 36 24 72
3時間以上 18 54 36 108
60 180 120 360

帰無仮説の下で,カテゴリ数を a×b として

T=\Sigma_{i,j}\frac{(n_{ij}-m_{ij})^2}{m_{ij}} は自由度 (a-1)(b-1) のχ^2 分布に従う。

T=\frac{(25-30)^2}{30}+...+\frac{(51-36)^2}{36}=18.349

よって p-値は,pchisq(18.349, 4) = 0.001 < 0.05 。

∴ 帰無仮説は棄却され,年代とプレイ時間は関係があると言える。

 

事例4.  (A/Bテスト:2つの比率の差のテスト)

問:『5月は積極的な招待キャンペーンを行っており,特にそれによる招待成功率の向上が期待されていた。結果は 5月が 530人/2000人 = 26.5%で 4月の 230人/1000人 = 23.0%で効果があったように思われる。さて実際,このキャンペーンは成功だったといえるだろうか。つまり4月に比べて5月の招待成功率は高くなったといえだろうか。』

解:(統計量の導出方法は第3回参照)

n_1=2000,\qquad n_2=1000,\qquad\bar{p}_1=0.265,\qquad\bar{p}_2=0.230,\qquad\bar{p}=(530+230)/(2000+1000)=0.253 として,

帰無仮説:「p_1 = p_2 (= p)」,対立仮説:「p_1 ≠ p_2」

統計量:帰無仮説の下で,

T=\frac{(\bar{p}_1-\bar{p}_2)}{\sqrt{\bar{p}(1-\bar{p})\left(\frac{1}{n_1}+\frac{1}{n_2}\right)}} は 標準正規分布 に従う。

T=\frac{0.265-0.230}{\sqrt{0.253*(1-0.253)*(1/2000+1/1000)}}=2.078

よって p-値は,pnorm(2.078) = 0.019 < 0.025 。

∴ 帰無仮説は棄却され,前月よりも招待成功率は高くなったと言える。

 

 事例5.  (等分散検定)

問:『アイテムA とアイテムB の分布を見ると,平均売上額は同じであるようだが,アイテムAの分布は平均を中心に山を形成しており,逆にアイテムB は平均を中心に凹んだ谷を形成しているようである。今,標本分布の可視化が行えような状況で,アイテムA とアイテムB の違いを導き出すとするならば,どのような仮説のもとでテストを行えば良いだろうか。』

解:平均が同じだからといって,分布の形まで同じとは限らない。ここでのテストはアイテムA の アイテムB の分散が同じであるかどうかのテストを行うのが好ましい。例えばこの問題において,

- 課金者数平均課金額標準偏差
アイテムA 300 1503 235
アイテムB 400 1492 193

であったとする。アイテムA の分散を σ_a,標本不偏分散 を U_a,アイテムBの分散を σ_b,標本不偏分散を U_b とおく。

帰無仮説:「σ_a = σ_b 」,対立仮説:「σ_a ≠ σ_2」

統計量:帰無仮説の下で,

T=\frac{U_a^2}{U_b^2}F(n_a,\qquad n_b) に従う。

T=\frac{(300*235^2)/(300-1)}{(400*193^2)/(400-1)}=1.48383

よって p-値は, pf(1.48383, 299, 399) = 0.0008 < 0.025 。

∴ 帰無仮説は棄却され,両者の分散には差があると言える。

 

Data-Driven Testingの神髄

データ解析者は日々たくさんのデータを眺め,その中から傾向を見いだし解析につなげるといった事が求められる。しかしながら,多くの種類またはカテゴリを持つあらゆるデータに対してそれを実行するのは極めて困難で有り,また人間の勘によって発見された傾向は,真実における偶然である事も多い。

データ解析の枠組みの中にシステム化され組み込まれたテストは,そういった解析の入り口である「傾向検知」アラートという役割を担う事ができる。

過去のデータの統計値を保存しておけば,本日/本期間の売上・ログイン・イベント参加率などのあらゆるデータに対してテストを自動実行できる。これによって検知された傾向の違いの原因を探り,真実を導くことは,今度は解析者の腕の見せ所である。

また,それは単に平均という1次元の値だけでは無く,適合度検定や独立性検定に見られるようにセグメント間の分布の違いをもテストしてくれる。その結果を持って解析者はまた,数理モデル化という手法を持って事象を記述する。

このように実社会において,テストの持つポテンシャルは多くの人が思っているより大きく,そして革新的である。「Treasure Data Analytics」シリーズのどこかで,この「Test Driven Data Mining」の魅力を,Fluentd と Hive への実装を持って紹介する予定である。

(続く)