アトリビューション分析:事後確率を用いた貢献度の計算

1.はじめに

アトリビューション分析には線形モデルや起点モデルなどいろいろなモデルがありますが,確率推論という考えを利用したモデルを考えてみたいと思います.具体的なモデルを説明するには,まずどのような数学的な考えをバックボーンにしているかを説明する必要があり,それにはけっこう時間が必要です.ですが,絶対的な正解があるというわけではないアトリビューション分析の一つのモデルのためにそのような時間を費やすのは,日頃の業務に追われている方にはなかなか難しいと思います.こちらとしても出来るだけ簡単に説明となるとこれもまた難しいですし,私の説明よりもより良いものはネットにあふれています.ですから,ここではあえて「スパムメール(迷惑メール)を自動的に判別してくれるシステムで使われている考え方」だという説明にしておきます.気になる方は,「ベイズ統計」などでググってみてください.

 

2.既存のモデル

具体的にどのような計算をするモデルなのかを具体的な例を使って説明していきたいと思いますが,まずはよく知られているモデルから話を進めたいと思います.コンバージョン経路として「アフィリエイト > 有料検索」という場合を考えることにします.このとき,コンバージョン経路でCV(コンバージョン)が10件あったとします.まとめると,表1のようになります(コンバージョン経路の表記は,Google Analyticsなどで取得できるデータの表記に準じています.つまりこ場合は,コンバージョン経路に2つの接点「アフィリエイト」と「有料検索」があり,アフィリエイトの流入をしたあと有料検索で流入してコンバージョンに至った場合が10件あったということを意味します).

 

表1.コンバージョン経路とコンバージョン

コンバージョン経路CV
アフィリエイト> 有料検索10

 

表1の場合,終点モデルでは有料検索に貢献度(コンバージョンスコア)が「10」,起点モデルではアフィリエイトに貢献度が「10」と与えられます.そして線形モデルを適応した場合は,アフィリエイトと有料検索にそれぞれ貢献度は「5」と与えられます.まとめると表2のようになります.これらモデルの説明は記事「「アトリビューション」について考えてみる・その3」などを参照してください.

 

表2.各モデルにおける各チャネルの貢献度

アトリビューションモデルアフィリエイトの貢献度有料検索の貢献度
終点モデル010
起点モデル100
線形モデル55

 

3.事後確率を用いたモデル

ここで,コンバージョン経路のデータと同時期の集客データに注目してみます.このときアフィリエイトと有料検索経由でのセッションがそれぞれ「200」と「300」だったとします(CVは最後のチャネルに付くことにします).すると,表3のような値が求まります.有料検索のコンバージョン率(CVR)は3.33…%,全体のCVRは2%となります.

 

表3.各チャネルのセッションとコンバージョンの関係

チャネルセッションセッション ÷

トータルセッション

CVCV ÷

セッション

アフィリエイト2000.400.0
有料検索3000.6100.0333…
トータル5001.0100.02

 

表1のコンバージョン経路とはコンバージョンに至った場合のみの経路です.つまり,10回のコンバージョンを獲得するにあたり,アフィリエイトでは300セッション中の10セッションが関係し,有料検索は200セッション中の10セッションが関係していたことになります.

線形モデルは,コンバージョン経路での情報のみで均等に貢献度を分け与えいますが,チャネル毎にそもそものセッションの数が異なります.そう考えると,アトリビューション分析の線形モデルを単純に均等と考えてしまっていいのだろうかという疑問を感じました.元々の流入数が異なるのですから,コンバージョン経路の情報だけで均等に分ける方法では実はかなり齟齬が生じていそうです.チャネルのセッションの情報をいれたモデルのほうがよりよい判断が出来そうです.そこで,大元のセッションの大きさを考慮したモデルを考えてみました

アフィリエイトのセッションでコンバージョン経路に関係する場合を「X = 1」,それ以外の場合を「X = 0」とします.有料検索のセッションでCVに至る場合を「Y = 1」,至らない場合を「Y = 0」とします.例えば,アフィリエイトの全セッション「200」のうちコンバージョン経路の接点となるアフィリエイトのセッションは「10」なのでその確率は,

P(X = 1) = 10 / 200 = 1 / 20,

となります.同様に

P(X = 0) = 190 / 200 = 19 / 20,

P(Y = 1) = 10 / 300 = 1 / 30,

P(Y = 0) = 290 / 300 = 29 / 30

と求まります.次に,X = 1でありY = 1の場合(つまり,コンバージョン経路のアフィリエイトのセッションに関係し,有料検索でCVにまで至ったのセッションの場合)の確率は,

P(X = 1, Y = 1) = (10 / 200) × (10 / 300) = 1 / 600 = 0.0016666…,

となります.同様に,

P(X = 1, Y = 0) = (10 / 200) × (290 / 300) = 29 / 600 = 0.048333…,

P(X = 0, Y = 1) = (190 / 200) × (10 / 300) = 19 / 600 = 0.031666…,

P(X = 0, Y = 0) = (190 / 200) × (290 / 300) = 551 / 600 = 0.918333…,

となります.ちなみに,

P(X = 1, Y = 1) + P(X = 1, Y = 0) + P(X = 0, Y = 1) + P(X = 0, Y = 0) = 1

が成り立ちます.数学の言葉を使うと「P(X = 1), P(X = 0), P(Y = 1), P(Y = 0)」を周辺分布,「P(X = 1, Y = 1), P(X = 1, Y = 0), P(X = 0, Y = 1), P(X = 0, Y = 0)」を同時分布と呼びます.上記の関係をまとめたものが表4です.

 

表4.同時分布と周辺分布

P(X, Y)Y = 1Y = 0P(X)
X = 11 / 600 = 0.0016666…29 / 600 = 0.048333…1 / 20
X = 019 / 600 = 0.031666…551 / 600 = 0.918333…19 / 20
P(Y)1 /3029 / 301

 

表4の値を利用して,Y = 1の条件でのX = 1の確率,つまり有料検索のセッションからコンバージョンに至った条件のもとでアフィリエイトからその有料検索に移る確率は,

P( X = 1 | Y = 1) = P(X = 1, Y = 1) / P(Y = 1) = (1 / 600) / (1 / 30) = 1 / 20 = 0.05

と求まります.このような確率を,事後確率(条件付き確率)と言います.次に,X = 1の条件でのY = 1の確率,つまりアフィリエイトから有料検索に移る条件のもとで有料検索のセッションからコンバージョンに移る確率は,

P( Y = 1 | X = 1) = P(X = 1, Y = 1) / P(X = 1) = (1 / 600) / (1 / 20) = 1 / 30 = 0.0333…

となります.上記の計算はこれは数学的に言うと,連鎖公式というものを使っています.

最後に値を正規化して,各チャネルの貢献度を求めます(表1のコンバージョン経路はCVが「10」なので,正規化すると各チャネルの貢献度の合計値が「10」となります).

有料検索の貢献度: (1 / 30) / ( (1 / 30 ) + (1 / 20) ) × 10 = (12 / 30) × 10 = 4

アフィリエイトの貢献度: (1 / 20) / ( (1 / 30 ) + (1 / 20) ) × 10 = (12 / 20) × 10 = 6

表5は,この結果を含めた各モデルの各チャネルの貢献度をまとめたものです.セッションの情報を含めた事後確率のモデルでは線形モデルよりも高くアフィリエイトの貢献度を評価する結果となりました.

 

表5.各モデルにおける各チャネルの貢献度

アトリビューションモデルアフィリエイトの貢献度有料検索の貢献度
終点モデル010
起点モデル100
線形モデル55
事後確率のモデル64

 

4.おわりに

上記の方法は,同時分布から事後確率を求めそれを利用して貢献度を求めました.このような考え方のが線形モデルよりもデータに則した貢献度を求められると思っています.

ただ,上記の例はコンバージョン経路が1つでさらに経路上の接点は2つのチャネルのみでした.実は,コンバージョン経路の数やチャネルの数が増えるほど上記のような計算は非常に困難になります.その解決方法として,ベイジアンネットワークを用いる方法もありますが,それを計算できる既存のソフト(数理ソフトの「BAYONET」等)を使うにしても費用対効果でいろいろとハードルが高い気がします(大手で無い限り).とくにGoogle Analyticsのデフォルトの設定で得られるデータを使うことを前提にするとなると,高価なソフトを導入してまで貢献度を求めるようにする価値が本当にあなるか(使いこなせるかも含め)を,まずは十分に検討する必要があると思います.

上記のようなセッションの情報を入れた事後確率的な考え方をベースとしたモデルを作り,Google AnalyticsやAdWordsのコンバージョン経路のデータを利用して貢献度を求めるRのプログラムを作ってみました.実際にそれを使ってみると,当初予想していなかった問題なども出てきます.それらをどう回避するかなども考えることが結構重要だったりします.

 

<この記事は「デジマのあれこれ」にて2017年に公開された記事を一部改良して移植したものです>