マーケットバスケット分析
マーケットバスケット分析(Market Basket Analysis)は、顧客が一緒に購入しやすい商品の組み合わせを見つけるためのデータ分析手法です。代表的な用途として、スーパーマーケットやECサイトにおける商品の配置、セット販売、レコメンド、クーポン配布などがあります。
たとえば、「パンを買う人はバターも買いやすい」「おむつを買う人はおしりふきも一緒に買いやすい」といった関係を、購買データから見つけ出します。このような商品の関連性を分析することで、販売戦略やおすすめ商品の表示に活用できます。
マーケットバスケット分析の仕組みを図で理解する

マーケットバスケット分析とは?
マーケットバスケット分析では、顧客ごとの購入履歴をもとに、複数の商品が同時に購入される傾向を調べます。
ここでいう「バスケット」とは、買い物かごのことです。つまり、1回の買い物で同時に購入された商品群を分析対象とします。
分析の結果として、次のようなルールを発見できます。
- パンを購入した人は、バターも購入しやすい
- コーヒーを購入した人は、砂糖やミルクも購入しやすい
- スマートフォンを購入した人は、ケースや保護フィルムも購入しやすい
このような関係は、アソシエーションルールと呼ばれます。
アソシエーションルールとは?
アソシエーションルールとは、「ある商品が購入されたとき、別の商品も購入されやすい」という関係を表したものです。
たとえば、次のような形で表現されます。
パン → バター
これは、「パンを購入した顧客は、バターも購入しやすい」という意味です。
ただし、単に一緒に買われることがあるというだけでは不十分です。その関係がどの程度強いのかを判断するために、サポート、信頼度、リフトといった指標を使います。
マーケットバスケット分析で使う主な指標
マーケットバスケット分析では、主に次の3つの指標が使われます。
| 指標 | 意味 |
|---|---|
| サポート | 特定の商品や商品セットが、全体の取引の中でどれくらい出現するかを示す指標です。 |
| 信頼度 | ある商品を購入した人が、別の商品も購入する割合を示す指標です。 |
| リフト | 2つの商品が偶然ではなく、どの程度関連して購入されているかを示す指標です。 |
サポート
サポート(Support)は、ある商品や商品セットが全取引の中でどのくらい登場するかを表します。
たとえば、100件の購入履歴のうち、パンとバターが一緒に購入された取引が20件ある場合、パンとバターのサポートは20%です。
サポート = 対象の商品セットを含む取引数 ÷ 全取引数
サポートが高いほど、その商品セットは多くの取引で登場していることになります。ただし、サポートが高いだけでは、商品の関連性が強いとは限りません。
信頼度
信頼度(Confidence)は、ある商品を購入した人のうち、別の商品も購入した人の割合を示します。
たとえば、「パンを購入した人がバターも購入する割合」を調べる場合、次のように計算します。
信頼度 = パンとバターを両方購入した取引数 ÷ パンを購入した取引数
信頼度が高いほど、「パンを買った人はバターも買いやすい」といえます。
リフト
リフト(Lift)は、2つの商品が偶然一緒に買われているだけなのか、それとも関連性があるのかを判断するための指標です。
リフト = 信頼度 ÷ 対象商品の購入割合
リフトの見方は次の通りです。
- リフトが1より大きい:商品同士に正の関連がある
- リフトが1に近い:商品同士の関連はあまりない
- リフトが1より小さい:一緒に購入されにくい傾向がある
マーケットバスケット分析では、信頼度だけでなくリフトも確認することが重要です。信頼度が高く見えても、単に片方の商品が非常によく売れているだけという場合があるためです。
マーケットバスケット分析の流れ
マーケットバスケット分析は、一般的に次のような流れで行います。
- 購入履歴などのトランザクションデータを用意する
- 商品ごとに購入の有無を表す形式に変換する
- 頻繁に一緒に購入される商品セットを見つける
- アソシエーションルールを生成する
- サポート、信頼度、リフトを使ってルールを評価する
- 商品配置やレコメンドなどの施策に活用する
代表的なアルゴリズムとしては、Aprioriアルゴリズムがあります。Aprioriアルゴリズムは、一定以上の頻度で出現する商品セットを効率よく見つけるための手法です。
Pythonでマーケットバスケット分析を行う
Pythonでは、mlxtendライブラリを使うことで、マーケットバスケット分析を比較的簡単に実装できます。
以下は、サンプルの購買データを使って、頻出項目セットとアソシエーションルールを求める例です。
import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules
# サンプルのトランザクションデータ
data = {
'ミルク': [1, 0, 1, 1, 0],
'パン': [1, 1, 0, 1, 1],
'バター': [0, 1, 1, 0, 1],
'チーズ': [0, 0, 1, 1, 0],
'卵': [1, 1, 0, 0, 1]
}
df = pd.DataFrame(data)
# Aprioriアルゴリズムで頻出項目セットを抽出
frequent_itemsets = apriori(
df,
min_support=0.5,
use_colnames=True
)
# アソシエーションルールを生成
rules = association_rules(
frequent_itemsets,
metric='confidence',
min_threshold=0.7
)
# 結果を表示
print(frequent_itemsets)
print(rules)
コードのポイント
トランザクションデータの作成
この例では、商品ごとに購入の有無を1と0で表しています。
- 1:その商品を購入した
- 0:その商品を購入していない
マーケットバスケット分析では、このように各取引を商品ごとの購入有無として表す形式がよく使われます。
apriori関数
apriori()関数は、一定以上の頻度で出現する商品セットを抽出します。
このコードでは、min_support=0.5としているため、全取引の50%以上に登場する商品セットだけが抽出されます。
association_rules関数
association_rules()関数は、抽出された頻出項目セットからアソシエーションルールを生成します。
このコードでは、metric='confidence'、min_threshold=0.7としているため、信頼度が70%以上のルールだけを抽出します。
マーケットバスケット分析の応用例
マーケットバスケット分析は、小売業やECサイトを中心に、さまざまな場面で活用されています。
| 活用場面 | 具体例 |
|---|---|
| 商品配置 | 一緒に買われやすい商品を近くに配置する |
| セット販売 | 関連性の高い商品をまとめて販売する |
| レコメンド | 購入商品に関連する商品をおすすめとして表示する |
| クーポン配布 | 購入傾向に合わせて関連商品のクーポンを配布する |
| キャンペーン設計 | よく一緒に購入される商品を対象に販促を行う |
スーパーマーケットでの例
スーパーマーケットでは、パンとバター、パスタとソース、ビールとおつまみなど、一緒に購入されやすい商品の組み合わせを分析できます。
その結果をもとに、関連商品を近くに配置したり、セット割引を行ったりすることで、顧客の追加購入を促すことができます。
ECサイトでの例
ECサイトでは、購入履歴やカート情報をもとに、関連商品を表示できます。
たとえば、ノートパソコンを購入した顧客に対して、マウス、キーボード、保護ケース、外付けストレージなどをおすすめするような使い方です。
分析結果を使うときの注意点
マーケットバスケット分析は便利な手法ですが、結果をそのまま施策に使えば必ず成果が出るわけではありません。
相関関係と因果関係は違う
マーケットバスケット分析で分かるのは、あくまで「一緒に購入されやすい」という関係です。
「パンを買うからバターを買う」といえる場合もありますが、必ずしも一方が他方の購入原因になっているとは限りません。
売れ筋商品だけに引っ張られない
非常によく売れている商品は、さまざまな商品と一緒に購入されやすくなります。そのため、信頼度だけを見ると、関連性が強いように見える場合があります。
このような場合は、リフトも確認して、偶然ではない関連性があるかどうかを判断することが重要です。
データの期間や季節性を考慮する
購買傾向は、季節、曜日、キャンペーン、天候、イベントなどによって変化します。
たとえば、クリスマス前の購買データや大型セール期間中の購買データだけを使うと、通常時とは異なる結果になる可能性があります。
まとめ
マーケットバスケット分析は、顧客の購買データから「一緒に購入されやすい商品」を見つけるための分析手法です。
- 購買履歴から商品の組み合わせを分析できる
- アソシエーションルールによって商品同士の関係を表せる
- サポート、信頼度、リフトを使ってルールを評価する
- 商品配置、セット販売、レコメンド、クーポン配布などに活用できる
- 相関関係と因果関係の違いや、季節性には注意が必要
Pythonでは、mlxtendライブラリを使うことで、Aprioriアルゴリズムによる頻出項目セットの抽出や、アソシエーションルールの生成を簡単に行えます。マーケットバスケット分析を理解すると、購買データを活用した販売戦略やレコメンドの考え方をより深く理解できるようになります。