アソシエーション分析入門 #01

向きのある相関関係。

アソシエーション分析(Association Analysis)は、事象Xと事象Yの事象間の相関性を分析する手法で、データマイニング(Data Mining)1)再考するデータマイニングの中核をなす分析手法のひとつですが、もともとはバスケット分析のために考案されたものです。

バスケット分析(Basket Analysis)は「商品Xを購買した顧客は商品Yも購買している」といった向きのある相関関係を抽出するもので、併売やマーチャンダイジングの戦略設計を目的に行われます。ちなみに、買い物かご(バスケット)に同時に入っている商品を分析するところから命名されました。その始まりは有名な「おむつとビール」の話で、1992年に大手スーパーマーケットチェーンのOsco DrugsがPOSデータを分析したところ、おむつとビールが併買されることが多いことがわかったというものです。現在ではAmazon.comのようなECサイトのレコメンデーションにも応用されています。

アソシエーション分析は、事象間の相関性を発見的アプローチ(Discovering Approach)で分析する手法ですが、この発見的であるという点がとても重要です。「データエスノグラフィ入門 #03」でも触れたとおり、事象間の相関性の分析には、検証的アプローチと発見的アプローチの二つがありますが、検証的アプローチ(Verifying Approach)は、相関の存在が仮説として想定されるものについて事実を検証していくアプローチであり、想定していない相関を見つけることはできません。分析対象データの変数が少ない場合は検証的アプローチで十分ですが、変数が多い場合は経験からは想定できない相関が潜在している可能性を否定できません。現に、おむつとビールの購買に相関があることを、熟練のマーケターたちは見抜けていなかったわけです。

アソシエーション分析によって得られる発見は、あくまで向きのある相関関係であり、因果関係を証明するものではありません。しかしながら、これをきっかけに因果推論(Causal Inference)2)いまさら聞けない因果推論ベイズ推定(Bayesian Inference)3)いまさら聞けないベイズ推定などを行うことで因果関係を明らかにする可能性が高まります。

そこで今回は、このアソシエーション分析の実践にむけた入門編をご紹介します。なお、分析ツールはGoogle BigQueryとGoogle Cloud Datalabを用いて進めます。BigQueryついては「BigQueryではじめるSQL」を参照してください。Cloud Datalabについては選択する理由と合わせて次回に解説します。

共起性に基づく分析手法。

実践に入る前に、分析の基本的な考え方についてまとめておきます。まずアソシエーション分析は事象間の相関性を分析する手法の総称であり、特定の分析手法をさすものではありません。共起性に基づく分析手法が一般的ですが、他にもニューラルネットワーク(Neural Network)4)いまさら聞けない機械学習などを用いたアプローチもあります。ここでは共起性に基づく分析手法を用います。

共起(Co-occurrence)は、自然言語処理分野で使われる概念で、複数の単語熟語が同一のにおいて生起することをいいます。たとえば「しとしと」は「雨」とは共起しますが「雪」とは共起しません。そして共起性の強い単語や熟語は相関性が強いと言えます。この考え方を応用し、買い物かごを文に、商品を単語にそれぞれ見立てて、その共起性により相関性を分析する手法がバスケット分析です。

共起性の基本指標となるのが共起頻度です。共起頻度(Co-occurrence Frequency)は、事象Xと事象Yのどちらも発生した頻度のことで、バスケット分析では商品Xと商品Yを同時購買した履歴の頻度、もしくは両方の購買経験をもつ顧客の数をさします。数式で表すとこのようになります。

$$共起頻度:\mid X\cap Y \mid\\$$

参考までに、集合Xと集合Yの集合間の類似性の指標としてよく用いられるものに、Jaccaard係数・Dice係数・Simpson係数があります。いずれも0以上1以下の値で、1に近いほど類似性が高いということになります。これらを事象間の相関性に置き換えて説明すると以下のようになります。

Jaccard係数は、事象Xと事象Yのいずれかが発生した頻度に対する共起頻度の割合です。ただしこの係数には、共起頻度が高くても、事象Xと事象Yのいずれかの発生頻度が高い場合に相関性が下がるという問題があります。

$$Jaccard係数:\frac{\mid X\cap Y \mid}{\mid X\cup Y \mid} \\$$

Dice係数は、事象Xと事象Yのそれぞれの発生頻度の平均に対する共起頻度の割合です。分母を和集合から平均に置き換えることで、Jaccard係数の問題を緩和しています。とはいえ事象Xと事象Yのいずれかの発生頻度が極端に高い場合は、相関性が下がる問題を解消できません。

$$Dice係数:\frac{\mid X\cap Y \mid}{\frac{\mid X\mid+\mid Y\mid}{2}} \\$$

Simpson係数は、事象Xと事象Yのそれぞれの発生頻度の最小値に対する共起頻度の割合です。分母を平均から最小値に置き換えることで、Dice係数でも解消できない頻度差の問題を解消します。ただ逆に、事象Xと事象Yのいずれかの発生頻度が極端に低い場合は、全体の頻度によらず相関性がほぼ1になってしまうという問題があります。

$$Simpson係数:\frac{\mid X\cap Y \mid}{min\{\mid X \mid,\mid Y \mid\}} \\$$

また、これらの指標はいずれも、事象Xと事象Yは対称で向きを持たないため、逆にしても意味は変わりません。

アソシエーションルールと指標。

続いて、アソシエーション分析における事象間の相関性の指標としてよく用いられるアソシエーションルールについて説明します。アソシエーションルール(Association Rule)とは「商品Xを購入した顧客は商品Yも購入している」といった規則性のことで、信頼度・支持度・リフトの三つの指標を使うのが一般的です。わかりやすくするために、バスケット分析で説明します。

信頼度(Confidence)は、商品Xを購買した顧客が商品Yも購買する確率のことで、併売戦略やレコメンデーションにむけた分析の基本指標であり、以下の数式で表現されます。

$$信頼度:\frac{\mid X\cap Y\mid}{\mid X\mid} =P(Y\mid X)\\$$

これは「いまさら聞けないベイズ推定」でも触れた、ある事象Xが起こるという条件のもとでの事象Yの確率である条件付き確率(Conditional Probability)と同じものです。それゆえ、事象Xと事象Yは非対称で向きを持つため、逆にすると意味が変わります。「おむつとビール」の話は、おむつとビールの向きには言及していませんが、おむつを買った(買おうとしている)顧客にビールをお薦めするのか、ビールを買った(買おうとしている)顧客におむつをお薦めするのかという向きには重要な意味があります。

支持度(Support)は、全体の購買の中で商品Xと商品Yのどちらも購買される確率のことで、全体の購買の集合を|A|として以下の数式で表現されます。

$$支持度:\frac{\mid X\cap Y \mid}{\mid A\mid} =P(X\cap Y)\\$$

仮に、商品Xを購買した顧客が商品Yも購買する確率(信頼度)が80%だったとしても、商品Xと商品Yのいずれも購買した顧客が全体の1%にも満たない場合、統計的な信頼性が低いだけでなく、それをもとに併売戦略を立てたところでビジネス的に意味はありません。そこで補足指標として支持度を用います。また分析の効率化のため、支持度が閾値(0.1〜0.5が一般的)を下回る組み合わせは、事前に分析対象から除外します。

リフト(Lift)は、全体の購買の中で商品Yが購買される確率に対する商品Xを購買した顧客が商品Yも購買する確率(信頼度)の割合のことで、以下の数式で表現されます。

$$リフト:\frac{\frac{\mid X\cap Y \mid}{\mid X \mid}}{\frac{\mid Y \mid}{\mid A \mid}} =\frac{P(Y\mid X)}{P(Y)}\\$$

仮に、商品Xを購買した顧客が商品Yも購買する確率(信頼度)が80%だったとしても、そもそも商品Yが購買される確率が80%であれば、商品Xの購買が商品Yの購買に与える影響力を説明することはできません。そこで補足指標としてリフトを用います。また分析の効率化のため、リフトが閾値(1が一般的)を下回る組み合わせは、事前に分析対象から除外します。

次回以降で、これらのアソシエーションルールを用いたアソシエーション分析の実践を進めて行きます。

脚注   [ + ]