ひとことで言うと#
購買データから「AとBは一緒に買われやすい」というルール(アソシエーションルール)を自動発見する分析手法。「ビールとおむつ」の有名な逸話に代表される、予想外の組み合わせの発見が最大の強み。
押さえておきたい用語#
- 支持度(Support)
- ある商品の組み合わせが全トランザクションの何%で出現するかを示す指標。値が低すぎるルールはたまたまの可能性が高い。
- 信頼度(Confidence)
- 商品Aを買った人のうち商品Bも買った割合のこと。「パンを買った人の60%が牛乳も買う」なら信頼度60%。
- リフト値(Lift)
- その組み合わせが偶然以上に一緒に買われているかを示す指標。1より大きければ偶然以上、1なら偶然と同程度。最も重視すべき指標。
- Aprioriアルゴリズム
- 大量のトランザクションデータから効率的にアソシエーションルールを抽出するアルゴリズム。最小支持度でフィルタリングし計算量を削減する。
- トランザクション
- 1回の買い物(1回の会計)で購入された商品の集合のこと。マーケットバスケット分析の基本単位。
マーケットバスケット分析の全体像#
こんな悩みに効く#
- レコメンド機能を作りたいが、何をおすすめすればいいかわからない
- クロスセルを強化したいが、どの商品の組み合わせが効果的か不明
- 店舗の商品配置を最適化したいが、根拠となるデータがない
基本の使い方#
分析に必要なデータをトランザクション単位で整理する。
必要なデータ形式:
- 1行 = 1回の買い物(トランザクション)
- 各行に購入した商品のリスト
例:
| トランザクションID | 購入商品 |
|---|---|
| T001 | パン、牛乳、卵 |
| T002 | パン、バター、ジャム |
| T003 | 牛乳、卵、チーズ |
ポイント: 最低でも1,000件以上のトランザクションがあると信頼できる結果が出やすい。商品数が多すぎる場合はカテゴリレベルでまとめることも有効。
マーケットバスケット分析の結果を読み解くための3つの指標を押さえる。
- 支持度(Support): その組み合わせが全トランザクションの何%で出現するか
- 例: パンと牛乳が一緒に買われた割合 = 30%
- 信頼度(Confidence): Aを買った人のうち、Bも買った割合
- 例: パンを買った人の60%が牛乳も買っている
- リフト値(Lift): その組み合わせが偶然以上に一緒に買われているか
- リフト値 > 1: 偶然以上に一緒に買われている
- リフト値 = 1: 偶然と同程度
- リフト値 < 1: 一緒に買われにくい
ポイント: リフト値が最も重要。信頼度が高くても、リフト値が1に近ければそれは単に人気商品同士が出現しているだけ。
Aprioriアルゴリズムを使ってアソシエーションルールを自動抽出する。
パラメータ設定:
- 最小支持度: 0.5%〜5%(小さすぎると無意味なルール、大きすぎると発見が少ない)
- 最小信頼度: 30%〜70%(ビジネスの文脈で調整)
- 最小リフト値: 1.5以上(偶然を超える組み合わせに絞る)
ツール: Python(mlxtend ライブラリ)、R(arules パッケージ)、Excel(小規模なら手計算可能)。
ポイント: ルールが大量に出る場合は、リフト値の高い順にソートして上位から確認する。
発見したルールを具体的な施策に落とし込む。
活用方法:
- レコメンド: 「この商品を買った人はこれも買っています」
- クロスセル: カート画面で関連商品を提案
- セット販売: リフト値の高い組み合わせをセット商品として企画
- 店舗レイアウト: 一緒に買われる商品を近くに配置
- メール施策: 商品Aの購入者に商品Bのクーポンを送る
ポイント: ルールの因果関係を考える。「パンを買う→牛乳も買う」と「牛乳を買う→パンも買う」は意味が異なる。
具体例#
状況: オンライン書店で、現在は「同じジャンルの人気書籍」を単純におすすめしている。もっと精度の高いレコメンドにしたい。
マーケットバスケット分析の結果(上位ルール):
| ルール | 支持度 | 信頼度 | リフト値 |
|---|---|---|---|
| Python入門書 → データ分析の教科書 | 3.2% | 45% | 4.8 |
| ビジネス英語 → TOEIC問題集 | 2.8% | 52% | 3.2 |
| 育児書 → 時短レシピ本 | 1.5% | 38% | 5.1 |
| Excel入門 → PowerPoint入門 | 2.1% | 41% | 3.8 |
発見: 「育児書→時短レシピ本」はジャンルが異なるため、従来のジャンルベースレコメンドでは表示されなかった組み合わせ。リフト値5.1と最も高い。
施策: マーケットバスケット分析に基づくレコメンドを商品ページに追加。「育児書×時短レシピ」のセット割引キャンペーンを実施。
結果: レコメンド経由の購入率が2.3%→5.8%に改善。1注文あたりの平均冊数が1.4冊→1.7冊に増加。月間売上が12%向上。
状況: 地域スーパー(1日来店客数800人)。客単価が伸び悩んでおり、売場レイアウトの最適化を検討。
分析: 3ヶ月分のPOSデータ(72,000トランザクション)でマーケットバスケット分析を実施。
発見された意外なルール:
| ルール | リフト値 |
|---|---|
| ベビーフード → ビール | 3.8 |
| サラダチキン → プロテインバー | 4.2 |
| パスタソース → サラダ用ドレッシング | 2.9 |
施策: サラダチキンとプロテインバーを隣接陳列。パスタソースコーナーにドレッシングのサテライト棚を設置。
結果: 対象商品カテゴリの併売率が22%向上。全体の客単価が1,850円→2,000円(8%向上)。
状況: プロジェクト管理SaaS。無料プランから有料プランへのアップグレード率を改善したい。
応用: 購買データの代わりに「機能利用データ」でマーケットバスケット分析を実施。1トランザクション=1ユーザーの月間利用機能セット。
発見:
| ルール | 信頼度 | リフト値 |
|---|---|---|
| ガントチャート利用 → 有料化 | 62% | 4.5 |
| API連携 + レポート機能 → 有料化 | 78% | 5.8 |
| タスク管理のみ → 無料継続 | 85% | 1.2 |
施策: ガントチャートやAPI連携を試用した無料ユーザーに、有料プランの価値を訴求するターゲットメールを配信。
結果: ターゲット配信の有料化率が通常の3.2倍。月間のアップグレード数が45件→120件に増加。
やりがちな失敗パターン#
- 人気商品同士の組み合わせに騙される — 信頼度が高くても、両方とも売れ筋商品なだけかもしれない。必ずリフト値を確認し、偶然以上の関連性があるかを判断する
- データ期間を考慮しない — 季節商品(サンダルとサングラスなど)は時期限定で一緒に買われる。季節効果を排除するか、季節別に分析することが必要
- 発見したルールを検証せずに施策に使う — 過去のデータから見つけたルールが未来も成り立つとは限らない。A/Bテストで効果を検証してから本格展開する
- 商品粒度が粗すぎる — 「食品→飲料」のような大カテゴリのルールは当たり前すぎて使えない。**施策に落とし込める粒度(ブランド・SKUレベル)**で分析する
まとめ#
マーケットバスケット分析は、購買データから「一緒に買われやすい商品の組み合わせ」を発見する手法。レコメンド、クロスセル、店舗レイアウトの最適化に直結する強力なツール。まずは自社の購買データでリフト値の高い組み合わせを探し、レコメンドに活用するところから始めよう。