ほくそ笑む

R言語と統計解析について

施策効果測定におけるメタアナリシスの応用

はじめに

マーケティング施策を行うときに、その施策効果を測定するために、コントロールグループ(施策を適用しないユーザ)を作る場合がある。 例えば、販促メールを送るという施策を行うときに、一部のユーザには送らないようにする。 仮にメールを送らなかったユーザの平均売上が1000円であり、メールを送ったユーザは平均1100円だとすると、その差である100円が1人あたりの施策効果となる。

しかし、施策を適用しないユーザの数を増やすと、全体の売上効果はそれだけ減少してしまう。 つまり、全体のユーザ数を1万人とすると、全員にメールを送れば100万円の売上効果があるが、半分の5千人をコントロールとすると売上効果も半分の50万円となる。 したがって、コントロールグループに割り当てる人数はなるべく小さくしたいという要求がある。

ただし、コントロールグループの人数を少なくすると、効果測定の精度が落ちるという問題がある。 今、1万人のユーザがいるECサイトで、メール施策を行うことを考えよう。 このとき、コントロールグループは全体の 1% である 100人しか取れないとする。 ユーザの作り出す売上がポアソン分布に従うとして、

  • メールを送らないユーザは平均 1000 円の売上
  • メールを送ると平均 1100 の売上

すなわちメール施策の真の効果は 100円としてシミュレーションしてみる。

set.seed(17744)
# 施策未実施ユーザ 100人の個々人の売上
control_group   <- rpois( 100, 1.0) * 1000
# 施策実施ユーザの 9900人の個々人の売上
treatment_group <- rpois(9900, 1.1) * 1000

# それぞれのグループに対して10人の売上を表示
head(control_group, 10)
#> [1] 1000 2000 2000 2000 1000 1000    0    0    0 4000
head(treatment_group, 10)
#> [1] 4000 1000 3000 1000    0 1000 2000 1000 1000 1000

こうして得られた各ユーザの売上を使って、施策効果を推定する。 各グループの平均売上の差が施策効果である。

effect <- mean(treatment_group) - mean(control_group)
effect
#> [1] 47.3

施策効果は 47 円と算出され、真の効果である 100円から大きくずれてしまった。

また、施策に本当に効果があったかは統計的仮説検定を用いて判断することが多い。 ここでは Welch t-test を使ってみよう。

t.test(treatment_group, control_group)
 Welch Two Sample t-test

data:  treatment_group and control_group
t = 0.41425, df = 100.68, p-value = 0.6796
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -179.1100  273.6555
sample estimates:
mean of x mean of y 
 1087.273  1040.000 

検定の結果より、p-value = 0.68 なのでこの施策には有意な効果はないと判断されてしまう。

つまり、コントロールグループの人数が少ないことが原因で

  • 施策効果の推定値が真の値から大きくずれてしまう
  • 検定を行なっても有意な効果がないと判断されてしまう

という問題が起こる。

ただし、このようなマーケティング施策は繰り返し行われることが多い。 例えば、販促メールを毎週水曜日に送るなどである。 この場合、メタアナリシスを用いて上記の問題を解決できる。

今、上記のメール施策を毎週水曜日に5回繰り返したとする。 このときのメタアナリシスの結果を下図に示す。

f:id:hoxo_m:20180809192359p:plain

各週のメール施策において算出された効果は Effect 列に記載されている。 これはばらつきが大きく、マイナスになることもあることがわかる(2018-08-08)。 右側のグラフは、四角が Effect であり、そこから左右に伸びる線が信頼区間を表している。縦線は 0円であり、2018-08-22を除いて各施策は 0 をまたいでいるため、検定結果は有意でない。

メタアナリシスによってこれらの結果を統合することで、推定精度を向上させることができる。 メタアナリシスによる推定結果は上図の Summary に記されている。 これによると、効果の推定値は 114 円であり、真の効果 100円に近い。 また、信頼区間は 26円から 202円となり、0円をまたがないので検定は有意になる。

本記事ではRでこれを行う方法を説明する。

メタアナリシスの実践

次のように、5回の施策に対して、その効果と信頼区間を求める。

# 8/1(水) から 8/29(水) までの水曜日の日付を取得
begin <- as.Date("2018-08-01")
end   <- as.Date("2018-08-29")
dates <- seq(begin, end, by = "weeks")

result <- data.frame()
for (i in seq_along(dates)) {
  date <- dates[i]
  
  # 売上のシミュレーション
  set.seed(as.integer(date))
  control_group   <- rpois( 100, 1.0) * 1000
  treatment_group <- rpois(9900, 1.1) * 1000
  
  # 売上効果の算出
  effect <- mean(treatment_group) - mean(control_group)
  
  # Welch t-test による信頼区間の推定
  t <- t.test(treatment_group, control_group, conf.level = 0.95)
  lower <- t$conf.int[1]
  upper <- t$conf.int[2]

  # # ブートストラップ法による信頼区間の推定
  # library(simpleboot)
  # boot <- two.boot(treatment_group, control_group, mean, R = 1000)
  # ci <- boot.ci(boot, conf = 0.95, type = "perc")
  # lower <- ci$perc[4]
  # upper <- ci$perc[5]

  res <- data.frame(date, effect, lower, upper)
  
  result <- result %>% bind_rows(res)
}

print(result)
        date     effect     lower    upper
1 2018-08-01  47.272727 -171.8910 268.2418
2 2018-08-08  -4.545455 -224.9838 181.0983
3 2018-08-15  18.181818 -171.9945 194.4213
4 2018-08-22 306.969697  150.0565 465.5196
5 2018-08-29  92.323232 -129.1142 297.0604

それぞれの施策実施日について、効果と信頼区間が算出された。 ここでは信頼区間の推定にt検定を用いたが、売上が正規分布に従わないことが不安ならブートストラップ法を使うと良い。 ただし以下では信頼区間は平均について対称であることを仮定している。

この結果に対して『Rで楽しむ統計』(p.108) を参考にメタアナリシスを行う。

Rで楽しむ統計 (Wonderful R 1)

Rで楽しむ統計 (Wonderful R 1)

library(dplyr)

summary <- result %>%
  mutate(weight = 1/(upper - lower)^2, 
         effect = effect * weight / sum(weight)) %>%
  summarise(effect = sum(effect), sd = sqrt(1/sum(weight))/2) %>%
  mutate(lower = effect - sd, upper = effect + sd) %>%
  select(-sd) %>%
  mutate(date = "Summary") %>%
  select(date, everything())

print(summary)
     date   effect    lower    upper
1 Summary 114.2419 26.44446 202.0394

それぞれの施策に対して信頼区間の幅を2乗して逆数を取ったものを重みとする。 それぞれの施策効果に対して重み付けを行い、全てを足し合わせたものが統合された施策効果となる。 また、信頼区間は重みの総和の逆数の平方根によって算出される。 メタアナリシスによって算出された施策効果は 114円であり、真の効果100円と近い値が算出された。 また、信頼区間は 26円から202円であり、0円をまたがないため、統計的に有意な結果であることが言える。 ここではメタアナリシスのモデルとして固定効果モデルを用いたが、一般的には施策効果にはぶれが生じるため、それを考慮したい場合はランダム効果モデルを用いる。

メタアナリシスの可視化にはフォレストプロットというものが使われる。 これは次のように作成できる。

library(forestplot)

nrow <- nrow(result) # 施策の回数

# 施策結果とメタアナリシスの結果を統合
df <- result %>% 
  mutate(date = as.character(date)) %>% 
  bind_rows(summary)

# フォレストプロットの左側に表示される表データの作成(日付と効果)
labeltext <- list(c("Date", as.character(df$date)),
                  c("Effect", round(df$effect)))

# フォレストプロットの描画
forestplot(labeltext, mean = c(NA, df$effect), 
           lower = c(NA, df$lower), upper = c(NA, df$upper),
           is.summary = c(TRUE, rep(FALSE, nrow), TRUE),
           hrzl_lines = gpar(col="#444444"))

f:id:hoxo_m:20180809192359p:plain

それぞれの施策における効果と信頼区間、そして統合された結果が可視化された。

まとめ

マーケティング施策効果の測定において、

  • 施策を実施しないコントロールグループが作られる
  • コントロールグループの人数が少なく効果測定の精度が低い
  • 同じ施策が繰り返される

という場合において、メタアナリシスを用いて推定精度を向上させる方法を説明した。

参考文献

Rで楽しむ統計 (Wonderful R 1)

Rで楽しむ統計 (Wonderful R 1)

犬は「さよなら」を言わない

インタラクティブな分析とプログラミングの間には常に葛藤がある

インタラクティブな分析とプログラミングの間には常に葛藤がある。 インタラクティブに作業している場合には、R に期待通りの処理をしてもらい、R が間違った場合は自分で直ちに修正を行いたい。 一方、プログラミングの場合、微妙あるいは不可解な問題が生じたら、すぐにエラーを返す関数が望ましい。 関数を作成する場合も、この葛藤を忘れないようにしよう。 インタラクティブなデータ分析のための関数を書いている場合は、分析者の期待を推測し、多少想定外の処理が行われても自動的に補正するようにしよう。 これに対してプログラミングとしての関数の場合は、より厳格になり、関数を呼び出したユーザが期待する処理を推測して対応するのは間違いである。

Hadley Wickham『R言語徹底解説』(p.148)

R言語徹底解説

R言語徹底解説

useR! 2018 メモ (2) 前半

rollmatch: An R Package for Rolling Entry Matching

傾向スコアマッチングは時系列共変量を持つ場合に対応していない。 時系列共変量に対応するには Rolling Entry Matching を使う。 rollmatch は Rolling Entry Matching 用のパッケージ。

varameta': Meta-analysis of medians

中央値や IQR で報告された研究結果のメタアナリシスを行うためのパッケージ varameta の紹介。

Does normalizing your data affect outlier detection?

データ正規化の方法は外れ値検出に影響を与えるか? 答えは YES. 4つの正規化手法に対して様々なデータセットを試した。

oddstream and stray: Anomaly Detection in Streaming Temporal Data with R

ストリーミングデータの異常検知用の2つのパッケージ oddstream と stray について。 oddstream は訓練データが必要だが stray は訓練データ不要。

The workflowr R package: a framework for reproducible and collaborative data science

聞いてないけどチェック。

The Grammar of Animation

gganimate パッケージ

New Features in the car and effects Packages

回帰分析の定番パッケージ car の新機能について。 ブートストラップ回帰ができるようになったなど。

この本の著者

An R Companion to Applied Regression

An R Companion to Applied Regression

mvord: An R Package for Fitting Multivariate Ordinal Regression Models

多変量ロジスティック順序回帰、多変量プロビット順序回帰を行う mvord パッケージの紹介。

Partial Least Squares with formative constructs and a binary target variable

目的変数がカテゴリカルな場合、構造方程式モデリングの代わりに PLS-PM (Partial Least Squares Path Modeling) を使う。plspm は PLS-PM のためのパッケージ。

Exceeding the designer's expectation

Glue strings to data in R

useR! 2018 メモ (1) Tutorial

Applications with R and Docker

Deep learning with TensorFlow and Keras

  • Kevin Kuo (@kevinykuo)
  • Slide: http://kevinykuo.com/talk/2018/07/user-tutorial/
  • 内容: Deep Learning と Keras の入門
  • 感想: ネットワーク組むのはできるんだけど、問題に合わせてネットワークをどういじるのかが知りたかった。

xgboost and MXNet

  • Tong He (@hetong007)
  • Slide: https://github.com/hetong007/user2018tutorial
  • 内容: XGBoost と MXNet の入門
  • 感想:パラメータをいじってどうなるか遊んでみよう!と言われて放置される。他の人は質問バンバンしてたけど英語力の問題で無理だった・・

Missing values imputation

こっち行けばよかった・・

A Survey Of Methods For Explaining Black Box Models メモ (3)

機械学習の解釈可能性についてのサーベイ

  • Guidotti+ (2018) "A Survey Of Methods For Explaining Black Box Models"

のメモ

注:ここから各手法の紹介になるが、手法の具体的な内容をこの論文から正確に読み取ることは難しいので内容については言及しない

6 Solving the Black Box Model Explanation Problem

  • このセクションではブラックボックスのモデル説明問題に対する手法をレビューする
    • すなわちグローバルな説明を得る問題

6.1 Explanation via Single Tree Approximation

  • グローバルに理解可能な説明として単一の決定木を使用する手法
  • ブラックボックスが Neural Network
    • Craven et al. [20], 1996, Trepan
    • Krishnan et al. [50]
    • Boz [9], DecText
    • Johansson et al. [39] (遺伝的プログラミングを使用)
    • これらはすべて NN の性質を使わないため agnostic
  • ブラックボックスが Tree Ensemble
    • Chipman et al. [14]
    • [23], CMM (Combined Multiple Model)
      • [29]
      • [114], STA (Single Tree Approximation)
    • Schetinin et al. [87], CDT (Confident Decision Tree)
    • Hara et al. [32], ATM (Additive Tree Model)
    • [94], TSP (Tree Space Prototype)
      • ランダムフォレストの近接性 (proximity) を定義
    • これらの手法において、データを拡張するかどうか、どのように拡張するかは重要そうである

6.2 Explanation via Rule Extraction

  • グローバルに理解可能な説明として決定則を使用する手法
  • ブラックボックスが Neural Network
    • ここについてはすでにサーベイ [5] がある
      • サーベイ [5] はこの領域に強く特化しているため他の問題に使えない
    • Craven et al. [19]
    • Johansson et al. [40], ルール抽出のアルゴリズム G-REX [37] を使用
    • [38], REFNE
      • Augava et al. [8], RxREN
  • ブラックボックスが SVM
    • [70], SVM+P (SVM+Prototypes), if-then 規則に変換
    • Fung et al. [28], 線形SVMのみ
    • [65]
  • ブラックボックスが Tree Ensemble
    • Deng [22], inTrees
      • STEL (Simplified Tree Ensemble Learner) とも呼ばれる

6.3 Agnostic Explanator

  • ブラックボックスに関する制約のない手法
  • Lou et al. [60], 一般化加法モデル (GAM) を利用して、回帰スプラインとツリーアンサンブルを解釈する
    • 改良したものが同じ著者により [61] で提案されている
  • [33] GoldenEye
  • [51] PALM (Partition Aware Local Model)

6.4 Explanation via Other Approaches

  • その他特殊なアプローチとして [97] がある

7 Solving the Black Box Outcome Explanation Problem

  • このセクションではブラックボックスの出力説明問題に対する手法をレビューする
    • すなわちローカルな説明を得る手法

7.1 Explanation of Deep Neural Network via Saliency Masks

  • DNN に対して説明として Salient Mask を求める手法
    • Salient Mask は、画像またはテキストに対して、予測に寄与する部分のこと
  • [108] CNN と RNN の組み合わせにより画像キャプションを生成するブラックボックスに対して、予測の説明はキャプション内の各単語のアテンションとして得られるか
    • Fong et al. [25] も同様の結果を得ている。
  • [113] CAM (Class Activation Mapping)
    • [89] relaxed generalization Grad-CAM
  • [56] テキストに対して rationale (フレーズの部分集合) を組み込んだアプローチ

7.2 Agnostic Explanator

  • ブラックボックスに関する制約のない手法
  • [84] LIME (Local Interpretable Model-agnostic Explanations)
    • [82][83] は LIME の拡張
  • [98] MES (Model Explanation System)
    • Monte Carlo アルゴリズムを使用

A Survey Of Methods For Explaining Black Box Models メモ (2)

機械学習の解釈可能性についてのサーベイ

  • Guidotti+ (2018) "A Survey Of Methods For Explaining Black Box Models"

のメモ

4 Open The Black Box Problems

  • このセクションではブラックボックス問題を4つに分類する
  • まず「リバースエンジニアリング」と「設計」の問題に分かれる
  • 前者は次の3つに分かれる
    • ブラックボックスのモデル説明問題 (=グローバル)
    • ブラックボックスの出力説明問題 (=ローカル)
    • ブラックボックスの検査問題
  • 後者は「ブラックボックスの設計問題」
  • これらの問題の共通の課題は「解釈可能で正確な予測モデルを提供すること」
  • これは機械学習における分類問題の特殊ケースである

4.1 Problem Formulation

  • 問題の定式化を行う
  • 予測器とは特徴空間からターゲット空間への写像である
  • 学習器関数とは、(特徴空間 x ターゲット空間) -> (特徴空間 -> ターゲット空間) の写像である
  • 教師あり学習ではデータセットは訓練とテストに分けられる
  • 解釈不能なモデル b
    • b がブラックボックスとは、関数の背後にある推論が人間には理解できず、返された結果はその選択の手がかりを与えないことである。
  • 理解可能なモデル c
    • c はグローバルまたはローカルな説明が可能
  • 予測器の性能評価は、精度と忠実度で行われる
    • これらは同じ方法で計算できる

Black Box Model Explanation

  • ブラックボックスのモデル説明問題とは、ブラックボックスの動作を模倣することができ、人間が理解できる解釈可能で透明なモデルを提供することである
    • ブラックボックスを近似する解釈可能なモデルはグローバルに解釈可能でなければならない

Black Box Outcome Explanation

  • ブラックボックスの出力説明問題とは、解釈可能な出力を与えることである。これはブラックボックスの出力に対して説明を与える方法である
    • ブラックボックスの背後にあるロジック全体を説明する必要はないが、特定のインスタンスの選択に対する理由を説明する必要がある

Black Box Inspection Problem

  • ブラックボックスの検査問題とは、ブラックボックスモデルがどう動くか、またはブラックボックスが他の予測でなくこの予測を返したのはなぜかを理解するための表現(視覚的またはテキスト的)を提供することにある
  • 例えば、ブラックボックスモデルの入力を変化させたときの予測の変化を観測するような視覚化を与える

Transparent Box Design Problem

  • 透過ボックスの設計問題とは、局所的または大域的に解釈可能なモデルを与えることである
  • 例えば決定木のような解釈可能なモデルを設計する

  • このサーベイで「ブラックボックスを開く」というとき、上記の4つのどれかを指している

5 Problem And Explanator Based Classification

  • このセクションでは、既存研究を分類するための特徴を説明する
  • 主な特徴は次の4つ
    • 問題のタイプ (セクション4で述べた)
    • 説明のタイプ
    • ブラックボックスモデルのタイプ
    • データのタイプ
  • セクション6以降の構成
    • セクション6: ブラックボックスのモデル説明問題を解く手法を提示した論文
    • セクション7: ブラックボックスの出力説明問題を解く手法を提案する論文について
    • セクション8: ブラックボックスを検査するための手法を提案する論文について
    • セクション9: ブラックボックスの「不透明な obscure」制限を克服するための透過的な予測器を設計する論文について
  • さらにそれぞれのセクションは説明のタイプによってサブセクションに分かれる
    • Decision Tree (DT)
    • Decison Rules (DR)
    • Feature Importance (FI)
    • Salient Mask (SM): 画像やテキストデータに対して、特定の出力を引き起こす原因となる部分を視覚的に強調する
    • Sensitivity Analysis (SA): 入力の不確定性のさまざまな原因に関するブラックボックスの出力の不確定性を評価する (?)
    • Partial Dependence Plot (PDP)
    • Prototype Selection (PS): 出力と一緒に、分類されたレコードに非常によく似た例を返して、予測がどの基準で返されたかを明確にする
    • Neurons Activation (NA): 特定の入力レコードに関して活性化されるニューロンの観察
  • 開かれるブラックボックスモデルのタイプ
    • Neural Network (NN)
    • Tree Ensemble (TE)
    • Support Vector Machine (SVM)
    • Deep Neural Network (DNN)
    • AGN (Agnostic Explanator): 特定のタイプのブラックボックス、説明、データタイプに関連付けられていない、理解可能な予測器
  • データのタイプ
    • Tabular (TAB): 表形式のデータ
    • Image (IMG): 画像
    • Text (TXT): テキスト
  • p20 表1 は既存研究を網羅的に示し、それぞれの特徴を記したもの

Reverse Engineering: A Common Approach For Understanding The Black Box

  • ブラックボックスの「モデル」「出力」「検査」問題を解く一般的なアプローチはリバースエンジニアリングである
    • 特定のデータに対するブラックボックスの出力をオラクルとし、理解可能な予測器を訓練する
  • オラクルを生成するための入力データを作成する方法は2つある
    • 制御された方法で入力を生成
    • 入力のランダム摂動 (random perturbations) を使う
  • リバースエンジニアリングは一般化可能かどうかで分類できる
    • 一般化可能とは、オラクルを得るためにブラックボックスへ渡すのは入力データのみである場合
    • 一般化可能なアプローチは任意のモデルに適用可能 (agnostic)
    • 一般化可能でないとは、入力データの他に特定のブラックボックスモデルの特性を渡す場合
    • 例えば、ランダムフォレストを開く場合に、ツリー間の距離を使用するなど
  • p20の表1 では、General 欄で一般化可能かどうか、Rondom 欄でランダム摂動を使うかどうかを示す

A Survey Of Methods For Explaining Black Box Models メモ (3) - ほくそ笑む