今回のテーマ
今回(第4回目)の投稿では、ID-POSデータを使った「商品視点」の分析として「バスケット分析」を解説していきたいと思います。
実際のサンプルデータを用いた分析は次回以降に行うこととし、今回は「バスケット分析」の概要を解説した後、簡単なデータを用いて分析の流れを見ていくことにします。
バスケット分析とは
「もし○○だったら(if)、△△になる(then)」という関係性を導き出す分析手法を「アソシエーション分析」と呼びますが、「バスケット分析」はその「アソシエーション分析」の一種です。
商品やサービスの購買データを分析することで、「○○という商品が買われると、△△という商品が一緒に買われやすい」といった関係性を明らかにしていく分析手法です。
ビジネスにおけるバスケット分析の活用例
例えば、あるお店の購買データを分析した結果、「○○を買ったお客さんは、△△も一緒に買う」というパターンを見つけ出すことができたとすると、以下のような施策へ応用することができます。
応用例1:クロスセル
「○○を買ったお客さんは、△△も良く買っています」というように、ある商品を買った人に、関連する商品をお勧めすることができます。
これにより、クロスセル(併売)を促すことが出来、客単価を上げることが可能になります。
応用例2:レイアウト最適化
バスケット分析で一緒によく購入される商品の組み合わせが明らかになれば、その組み合わせを売り場で表現することで、併売が促され、客単価を上げることが可能になります。
バスケット分析における代表的な指標
バスケット分析では、以下の指標を使って商品の関連性を測ります。
支持度(Support)
全体の購買データの中で、ある商品Aとある商品Bが同時に購入された割合を表します。
信頼度(Confidence)
ある商品Aが購入された中で、ある商品Aとある商品Bが同時に購入された割合を表します。
リフト値(Lift)
『全体の購買データの中で、ある商品Bが購入された割合』と『ある商品Aが購入された中で、ある商品Aとある商品Bが同時に購入された割合』を比で表します。
リフト値が「1」よりも大きくなるということは、『全体の購買データの中で、ある商品Bが購入された割合』(分母)よりも『ある商品Aが購入された中で、ある商品Aとある商品Bが同時に購入された割合』(分子)の方が大きいという事を意味しますので、『商品Aの購入により、商品Bの購入が促された』と読み取ることができます。
これら3つの指標を使い、一緒に購入されやすい商品の組み合わせを探していく分析手法が「バスケット分析」になります。
バスケット分析の事例
バスケット分析の有名な事例として、1990年代初めにアメリカの『オスコドラッグ』というドラッグストアで行われたバスケット分析の事例があります。
この事例では、「赤ちゃん用紙おむつとビールの併売が多い」という分析結果が得られ、実際に、これら商品を近くに陳列し、併売促進を仕掛けたところ、売上が上昇したということが報告されています。
赤ちゃん用紙おむつとビールの併売が多くなる理由としては、次の3つのプロセスを経るためとする仮説が有力です。
【プロセス1】
赤ちゃんを持つ母親は、ベビー用紙おむつがかさばるため、紙おむつを買う際には父親と車で来たり、父親に代わりに買ってきてもらうことが多くなる。
【プロセス2】
紙おむつを買いに来た父親は、ついでに自分が飲むビールも同時に購入する。
【プロセス3】
その結果、赤ちゃん用紙おむつとビールの併売が増える。
こうして書いてしまうと単純な話に見えてしまいますが、「紙おむつとビール」という組み合わせは、なかなか人間では考えつかない組み合わせだと思いますので、こうした示唆が得られるのがデータ活用の醍醐味だと言えます。
Rでの実装
Rでは、arulesパッケージを使用してバスケット分析を行います。
今回は簡単なデータを用いて、一緒に購入される商品の組み合わせを見つける方法を実装していきます。
まずはarulesパッケージをインストールし、読み込みます。
#パッケージのインストール
install.packages("arules")
#パッケージの読み込み
library(arules)
次に分析に用いるデータを用意します。
リストを使い、簡単な購買データを用意していきます。
#簡単な購買データの準備
data <- list(
c("milk", "bread", "butter"),
c("beer", "bread"),
c("milk", "diaper", "beer", "bread"),
c("bread", "butter"),
c("milk", "diaper", "beer"),
c("milk", "bread", "butter", "beer")
)
データ型を確認します。
#データ型の確認
class(data)
#データ型の確認
class(data)
[1] "list"
list形式のデータであることが分かりました。
Rでバスケット分析を行う際は、データは「トランザクション型」である必要があります。
したがって、データを「トランザクション型」に変換します。
#リスト形式なので、トランザクション型に変換する
transactions <- as(data, "transactions")
念のため、データ型を確認します。
#データ型の確認
class(transactions)
#データ型の確認
class(transactions)
[1] "transactions"
無事に、「トランザクション型」に変換できましたので、バスケット分析を実行していきます。
apriori関数を使用して、アソシエーションルール(関係性のルール)を抽出していきます。
apriori関数は、arulesパッケージの一部で、トランザクションデータから商品の購入パターンを抽出する際に使われる関数です。
#aprioriアルゴリズムでルールを抽出
rules <- apriori(transactions, parameter = list(supp = 0.2, conf = 0.6))
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[5 item(s), 6 transaction(s)] done [0.00s].
sorting and recoding items ... [5 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [23 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
5つの商品を含む6つのトランザクションデータから、23のルールが抽出されました。
次に、抽出されたルールを確認していきます。
#抽出されたルールを確認
inspect(rules)
Rの出力結果のキャプチャを貼り付けます。
23個のルールが抽出されましたが、その中でもリフト値が高い(1.5~2.0)組み合わせに赤線を引いてみました。
ルール[4]の{diaper} ⇒ {beer}の組み合わせを例に表の読み方を解説していきます。
まずSupport(支持度)が0.33…ですので、全購買データの中で、diaper(紙おむつ)とbeerの両方が同時に購入される割合は33.3%であることが分かります。
次に、Confidence(信頼度)が1.00ですので、diaper(紙おむつ)が購入された購入データの中で、diaper(紙おむつ)とbeerの両方が同時に購入された割合は100%であることが分かります。
最後にLift(リフト値)です。
全購入データの中で、beerが購入された割合と、diaper(紙おむつ)が購入された購入データの中で、diaper(紙おむつ)とbeerの両方が同時に購入された割合を比べると、後者の方が、1.5倍購入が促進されたことが分かります。
分かりづらいので、分数で表すと下記のようになります。
まとめ
以上のように、バスケット分析を行い、支持度、信頼度、リフト値という指標を用いて検討をすることで、「○○を買ったお客さんは、△△も一緒に買う」というパターンを見つけ出すことができます。
こうして得られた示唆に基づくことで、効果的なマーケティング施策を行うことが可能になります。
今回はバスケット分析の概要と、データ分析の流れを確認していきました。
次回は、ID-POSのサンプルデータを使ってバスケット分析を実装していきたいと思います。