メインコンテンツへスキップ
ブログ一覧に戻る
data

アソシエーション分析(バスケット分析)|頻出アイテムとルールを見つける(実務ガイド)

2025年11月5日
4分で読めます
アソシエーション分析(バスケット分析)|頻出アイテムとルールを見つける(実務ガイド)

アソシエーション分析(バスケット分析)|頻出アイテムとルールを見つける(実務ガイド)

カゴ内で一緒に買われやすい組合せや、購買の“つながり”をルールとして抽出します。サポート(出現頻度)、信頼度(条件付き確率)、リフト(期待比)を使って有用な知見に絞り込みます。

この記事が想定する読者:POS/ECで「一緒に買われやすい組合せ」を施策(クロスセル・棚割り・セット販促)に活かしたい担当者。

判断を誤るとどうなるか:リフトだけ見て高すぎる小規模ルールを採用すると誤検知になり、施策が効かない。先にサポート・信頼度・リフトの意味を押さえ、前処理→頻出アイテム→ルール→スクリーニングの順で絞り込むと失敗しにくい。

TL;DR

  • 目的: 「A を買う人は B も買う」タイプのルールを抽出
  • 指標: サポート(頻度)/信頼度(P(B|A))/リフト(独立からのずれ)
  • 手順: 前処理(ワンホット化)→ Apriori で頻出アイテム → ルール生成 → リフト等で選別

まずはここだけ(やさしい導入)

  • 何をする?: 「一緒に現れる」アイテムの組を見つけ、施策(クロスセル/陳列)に活かす
  • いつ使う?: POS/EC のレコメンド、棚割り、セット販促
  • どう読む?: リフト>1 は“期待より一緒に出る”。高すぎる小規模ルールは要注意(誤検知)

用語ミニ辞典(1 行で)

  • アイテムセット: 同時に観測されたアイテムの集合
  • サポート: そのアイテムセットの出現割合
  • 信頼度: ルール A→B の条件付き確率 P(B|A)
  • リフト: A と B が独立なら 1、1 より大きいほど関係が強い
  • 前件/後件: ルールの左側/右側(A→B の A/B)

ミニ例題と Python コード(Apriori + ルール抽出)

# pip install mlxtend
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules

transactions = [
  ['milk','bread','butter'],
  ['bread','eggs'],
  ['milk','bread'],
  ['beer','chips'],
  ['milk','eggs','bread'],
]

te = TransactionEncoder()
ohe = te.fit(transactions).transform(transactions)
df = pd.DataFrame(ohe, columns=te.columns_)

# 頻出アイテムセット
freq = apriori(df, min_support=0.3, use_colnames=True)

# ルール生成
rules = association_rules(freq, metric='confidence', min_threshold=0.6)
rules = rules.sort_values('lift', ascending=False)
print(rules[['antecedents','consequents','support','confidence','lift']].head())

読み方のコツ:

  • サポートが低すぎるルールは安定しない。最低サンプルの下限を設ける
  • 信頼度が高くても後件が極端に多い/少ないと偏る。リフトと一緒に確認
  • 前件や後件のアイテム数(1→1 か 2→1 か)で実装のしやすさが変わる

実務ケーススタディ(グロサリーのクロスセル)

目的: 食品カテゴリで「一緒に買われる」組合せから、棚割りと推薦を改善。

  1. 前処理

  • アイテム定義の粒度を揃える(例: “牛乳 1L”を“牛乳”に集約)
  • 季節性やキャンペーン期間を分けて集計

  1. 抽出と選別

  • min_support を段階的に上げて冗長ルールを除去
  • lift、confidence、conviction、chi-square などで多角的に評価

  1. 運用

  • 陳列の近接/セット割引/レコメンドに反映。週次で見直し

よくある落とし穴(チェックリスト)

  • リフトが高いがサポートが極小(偶然)
  • 後件が超頻出で何でもヒット(意味が薄い)
  • アイテム粒度が細かすぎ/粗すぎ(設計の見直し)

練習問題(理解を定着)

  1. confidence は高いが lift≈1。どう解釈?

  • ヒント: 後件が元々頻出。ルールの価値は限定的

  1. 有望な 2→1 ルールが多すぎる。どう絞る?

  • ヒント: support 下限、前件の長さ上限、後件の多様性でスクリーニング

  1. 季節性の影響をどう見る?

  • ヒント: 期間を分割し、共通ルールと季節限定ルールを比較

判断の土台として押さえておくこと

  • サポート・信頼度・リフトの役割を分ける:サポートは出現頻度、信頼度はP(B|A)、リフト>1は「期待より一緒に出る」。高信頼でもリフト≈1なら後件が元々頻出で価値は限定的。
  • 前処理(ワンホット化)→頻出アイテム→ルール→スクリーニングの順:min_supportで頻出を出し、confidenceでルール生成、リフト等で選別。有望ルールが多すぎる場合はsupport下限・前件長・後件の多様性で絞る。
  • リフトが高すぎる小規模ルールは誤検知に注意:季節性の影響は期間分割で共通ルールと季節限定を比較する。

次の一手RFM分析ABC分析統計の判断ハブ

関連記事と次の一歩


アソシエーション分析についてのご相談はこちら

次の一手

状況に合わせて、選んでください。