背景・目的
近年、Customer Data Platform (CDP)が整備され、お客様の購買データを収集しやすくなっています。一方で、お客様の購買データを活かすには、多少の手間をかけた分析が必要になります。例えば、お客様の購買データから抱き合わせ販売や商品の品揃えの戦略を立てる際に非常に有用なのが、アソシエーション分析です。アソシエーション分析とは、膨大なデータの中から特定の事柄が起きた場合、その事柄に関連して別の事柄が起きやすいというパターンを見つけ出す手法です。特にマーケティング分野では、購買履歴から関連性を見つけて販売戦略に役立てる際に利用されます。
本記事では、既存のオープンソースデータセットを用いてアソシエーション分析について解説します。他のサイトでは、分析手法やコードのみが公開されているのに対して、本記事では理論的な部分や学術的な内容についても触れながら解説していきます。
使用するデータセット
まず、使用するデータセットについてです。使用するデータセットは、UC Irvine Machine Learning Repositoryに公開されているOnline Retailというデータセットです(Chen, 2015)。データは、xlsx形式(Excel形式)でダウンロードできます。データセットの作者は、Daqing ChenでSchool of Engineering, London South Bank University所属のようです。ライセンスはCreative Commons Attribution 4.0 International (CC BY 4.0) licenseとなっています。そのため、従うべき条件を満たせば商用利用も含めて再配布や改変が可能です。データセットへのリンクは下記になります。
このデータセットは、RFM分析を用いた顧客のセグメンテーションに関するケーススタディの論文で使用されています(Chen et al., 2012)。データセットの作者とこの論文の筆者が同じ方なので、この研究のために作られたデータセットであると考えられます。なお、RFM分析とは顧客分析手法の1つでRecency(最終購入日)、購入回数(Frequency)、購入金額(Monetary)の3つの軸で顧客をランク分けする手法です。RFM分析については、別記事で解説予定です。
コード(プログラム)
下記は、データの前処理とアソシエーション分析を含めたコードです。
データの前処理
アソシエーション分析をする前にまずはデータの前処理をしていきます。データを読み込むとカラムは、InvoiceNo、StockCode、Description、Quantity、InvoiceDate、UnitPrice、CustomerID、Countryとなっています。日本語で解説している他の方の記事(makaishi2(赤石 雅典), 2020)もありますのでカラムが英語名だとちょっと...という方は、そちらをご覧ください。
データセットの説明では、CustomerIDの欠損値(Missing Values)はないとなっていますが、データ数が他の項目に比べて少ないため、欠損値除去の処理をしました。その後、UnitPrice(単価)とQuantity(数量)から合計金額を算出しています。そして、InvoiceDate(決済日)を横軸に売上金額を描画してみました。

Fig.1は、キャンセル注文も含んだ結果となっています。これでは、正確な分析ができません。他の方の記事では、キャンセル注文を除かず、注文履歴を整形し、分析対象のデータを用意した例もあります(Mika A, 2022.)。しかし、分析対象のデータ内にキャンセルした商品のデータが含まれているため、これも正確な分析はできていないことになります。そこで、今回は実際に購入された商品のみを抽出することで正確な分析をしていきたいと思います。
実際に購入された商品を対象に、InvoiceDate(決済日)を横軸に売上金額を描画してみます。2011年5月と2011年7月の間に1本突出した部分がありますが、Fig. 1のようにマイナスの部分やはなくなりました。一方で、突出した部分があるのが気になります。

そこで、突出している部分のデータを見てみました。突出している部分のデータは、商品のキャンセルをManual操作でやっていたもののようです。そこで、Discount(D)とManual(M)も用いてフィルタを設計しました。このフィルタにより突出した部分がなくなったので、このフィルタを適用したデータを整形してアソシエーション分析をやっていきます。厳密には、適切なフィルターでない可能性が高いですが、今回はキャンセル注文を除いた実際に購入された商品(このデータの期間内)として処理していきます。なお、実際に購入された商品のみを抽出したファイルは下記になります。
Online Retailデータセットから実際に購入された商品を抽出したデータ

データは、発注番号に対してどの商品が買われたのか?が分かる形式に整形して使用します。
アソシエーション分析
では、ようやくアソシエーション分析に入っていきます。繰り返しになりますが、アソシエーション分析は膨大なデータの中から特定の事柄が起きた場合、その事柄に関連して別の事柄が起きやすいというパターンを見つけ出す手法です。アソシエーションルール(規則性)は、{A⇒B}の形式で表現され、Aを条件部、Bを結論部と呼称します。通常は、ルールの重要性を表す評価指標に基づいて、閾値などの形で指標の条件をユーザが指定することによって条件を満たすルールを抽出します。その際に、用いられる指標がsupport、confidence、liftです。supportは、全ユーザの中で商品Aと商品Bを同時に購入したユーザの割合、confidenceは商品Aを購入したユーザが商品Bを購入する割合、liftは商品Aと一緒に商品Bも購入した人の割合confidence{A⇒B}が全データの中で商品Bを購入した人の割合よりどれだけ多いかを示す倍率値です。
$$ support = \frac{N(A \cap B)}{N_r} $$
$$ confidence = \frac{N(A \cap B)}{N(A)} $$
$$ lift = \frac{confidence}{P(B)} $$
今回の分析ではsupportの下限値を0.02に設定しています。他の記事では、supportの下限値を0.06に設定していました。恐らく、他の記事で扱っているデータはキャンセル注文を削除していないので下限値を大きく設定できているのだと考えられます。一方で、研究ではsupportの下限値を0.03に設定していました(伊藤ら, 2010)。supportの下限値を低く設定しないといけないということは、全ユーザの中で商品Aと商品Bを同時に購入したユーザの割合が少ないことを示します。つまり、販売戦略立案という点では、商品の同時購入促進などの施策が必要な可能性を示唆しています。なお今回、supportの下限値を0.02と設定したのは、ネットワークの可視化までできたのが0.01刻みで0.02だったためです。
supportが低くても、confidenceが高い場合は、商品Aを買うと商品Bも購入されることを表します。しかし、商品Bを買う人が多い場合は、confidenceもsupportも値が大きくなり、多くの人が商品Aも商品Bも購入することを表し、一見、販路拡大の施策立案などは必要ないように思われます。一方で、商品Bを買う人が少ない場合はconfidenceが低下するため、商品Aとの併売といったプロモーション施策の立案が必要である可能性があります。このようにconfidenceは、商品間の関連性を調べるうえで重要な指標ですが、商品単体の特性を考慮できないために扱いには注意が必要です。このような問題点を解決する指標としてliftがあります。
liftが低ければ商品Bが単独で売れており、confidenceが高い場合でも商品Aとの関連性は低いと判断されます。一般的には、liftが1以上の場合に有効なルールとされるようです。
このようにアソシエーションルールは4つの指標を確認しながら、有益なルールであるかを判断します。しかし、ルールのもとになる事象(商品)の組み合わせは膨大になり、全ての組合せに対して評価していると相当の時間がかかってしまいます。そこで、膨大な組み合わせの中から意味のある組合せかどうかを判断するためのAprioriアルゴリズムが提案されています。このアルゴリズムは、supportが一定値以下のアイテムを含む組み合わせは、confidenceを計算しないというものです。
ここまでに解説した流れでいくつかのアソシエーションルールを採用することになります。
最後に、得られたアソシエーション分析の結果を元に商品間のつながりを可視化するとFig. 4のようになります。Fig. 4からは、同じ商品の色違いが同時に購入されやすい傾向があることが分かります。

まとめ
本記事では、既存のオープンソースデータセット(UC Irvine Machine Learning Repositoryに公開されているOnline Retail)を用いてアソシエーション分析について解説しました。特に、本記事では理論的な部分や学術的な内容についても触れながら解説しました。使用したデータセットではキャンセル注文を考慮するかによって分析結果が大きく変わることが分かりました。また、前処理の重要性も合わせて再認識できる良いタスクだったと思います。長文となりましたが、最後まで読んでいただきありがとうございました。
参考文献やサイトなど
- Chen, D. 2015. Online Retail (UC Irvine Machine Learning Repository). https://doi.org/10.24432/C5BW33
- Chen, D., Sain, S.L., Guo, K. 2012. Data mining for the online retail industry: A case study of RFM model-based customer segmentation using data mining. Journal of Database Marketing & Customer Strategy Management. 19. https://doi.org/10.1057/DBM.2012.17
- makaishi2(赤石 雅典). 2020. Pythonでアソシエーション分析. https://qiita.com/makaishi2/items/c5f06f844cdb8454b6c3, accessed on 3 Apr. 2024.
- Mika A. 2022. アソシエーション分析をやってみた. https://note.com/mk_a993/n/n159b63352e2d, accessed on 3 Apr. 2024.
- 伊藤晃, 吉川大弘, 古橋武, 池田龍二, 加藤孝浩. 2010. アソシエーション分析における可視化を用いた興味深いルールの探索. 日本知能情報ファジィ学会ファジィ システムシンポジウム講演論文集. 26. TD2-1. https://doi.org/10.14864/fss.26.0.157.0
- ゼッタテクノロジー株式会社. 第7回アソシエーション分析1 アソシエーション分析とは. https://www.zetta.co.jp/bigdata/l_07.shtml, accessed on 3 Apr. 2024.

