STEP 28:バスケット分析(アソシエーション分析)

🛒 STEP 28: バスケット分析(アソシエーション分析)

一緒に購入される商品の組み合わせを発見しよう

📋 このステップで学ぶこと

  • バスケット分析とは何か
  • サポート・信頼度・リフト値の計算
  • Aprioriアルゴリズム
  • クロスセル施策への応用
  • PythonとExcelでの実装

学習時間の目安:3.5時間

🔍 1. バスケット分析とは

基本概念

📌 バスケット分析(Market Basket Analysis)

顧客の買い物カゴ(バスケット)を分析し、一緒に購入されやすい商品の組み合わせを発見する手法

有名な例:「おむつとビール」
・アメリカのスーパーでの発見
・金曜夕方、おむつを買う人はビールも買う傾向
・理由:父親がおむつを買いに来て、ついでにビールを購入
・結果:おむつとビールを近くに配置して売上アップ!

ビジネスでの活用:
1. クロスセル:「この商品を買った人は〜も買っています」
2. 商品配置:一緒に買われる商品を近くに配置
3. セット販売:同時購入が多い商品をバンドル
4. レコメンデーション:購買履歴から次の購入を予測
5. 在庫管理:関連商品の在庫を連動させる

3つの重要指標

💡 サポート・信頼度・リフト値

商品の組み合わせを評価する3つの指標

1. サポート(Support)= 全体での出現頻度
・その組み合わせが全取引の何%で発生するか
・サポート = (AとBを同時購入した取引数) / (全取引数)

例:
・全取引:1,000回
・パンと牛乳を同時購入:100回
・サポート = 100 / 1,000 = 10%
→ 10%の取引で「パンと牛乳」が一緒に購入されている

2. 信頼度(Confidence)= 条件付き確率
・Aを買った人がBも買う確率
・信頼度 = (AとBを同時購入) / (Aを購入した取引数)

例:
・パンを購入:200回
・パンと牛乳を同時購入:100回
・信頼度 = 100 / 200 = 50%
→ パンを買った人の50%が牛乳も買う

3. リフト値(Lift)= 関連性の強さ
・Aを買った場合、Bを買う確率がどれだけ上がるか
・リフト値 = 信頼度 / (Bの購入確率)

例:
・牛乳の購入確率(全体):30%
・パンを買った時の牛乳購入確率:50%
・リフト値 = 50% / 30% = 1.67

リフト値の解釈:
・リフト > 1:正の関連(一緒に買われやすい)
・リフト = 1:関連なし(独立)
・リフト < 1:負の関連(一緒には買われにくい)

指標の比較

指標 計算式 意味 目安
サポート (A∩B) / 全取引 出現頻度 ≧ 1〜5%
信頼度 (A∩B) / A 条件付き確率 ≧ 30〜40%
リフト値 信頼度 / P(B) 関連性の強さ ≧ 1.2(最重要)

📊 2. バスケット分析の実践

Pythonでの実装

# ============================================ # バスケット分析の実装 # ============================================ # バスケット分析(マーケットバスケット分析)とは? # → 「一緒に買われやすい商品の組み合わせ」を発見 # → レコメンド、クロスセル、売り場配置に活用 import pandas as pd import numpy as np from itertools import combinations # ============================================ # itertools.combinations とは? # ============================================ # combinations(リスト, r): リストからr個を選ぶ全組み合わせを生成 # # 例: combinations([‘A’, ‘B’, ‘C’], 2) # → (‘A’, ‘B’), (‘A’, ‘C’), (‘B’, ‘C’) # # バスケット分析では、購入された商品の「ペア」を調べるため、 # r=2 で全ての2商品の組み合わせを生成 # サンプルデータ作成(トランザクションデータ) np.random.seed(42) # 商品リスト products = [‘パン’, ‘牛乳’, ‘バター’, ‘チーズ’, ‘ヨーグルト’, ‘ハム’, ‘卵’, ‘コーヒー’, ‘ジュース’, ‘シリアル’] # ============================================ # トランザクションデータの生成 # ============================================ # トランザクション = 1回の買い物で購入された商品リスト # 実務では、POSデータから作成 transactions = [] for _ in range(1000): # 1000件の取引を生成 basket = [] # 関連性のあるパターンを設定 # → パンを買った人は牛乳・バターも買いやすい if np.random.random() < 0.3: # 30%の確率でパンを購入 basket.append('パン') if np.random.random() < 0.6: # パン購入者の60%が牛乳も basket.append('牛乳') if np.random.random() < 0.4: # パン購入者の40%がバターも basket.append('バター') # コーヒーを買った人はミルク系も if np.random.random() < 0.25: # 25%がコーヒー購入 basket.append('コーヒー') if np.random.random() < 0.5: # コーヒー購入者の50%が牛乳 if '牛乳' not in basket: basket.append('牛乳') # ランダムな商品も追加(現実的なデータに) n_random = np.random.randint(1, 4) # 1〜3品 available = [p for p in products if p not in basket] random_items = np.random.choice(available, size=min(n_random, len(available)), replace=False) # replace=False: 重複なし basket.extend(random_items) transactions.append(basket) print("【サンプルトランザクション】") for i, basket in enumerate(transactions[:5], 1): print(f"取引{i}: {basket}") # ============================================ # 各商品の購入回数を集計 # ============================================ # サポート(支持度)の計算に使用 print("\n【商品別購入回数】") product_counts = {} for trans in transactions: for item in trans: # .get(key, default): キーがなければdefaultを返す product_counts[item] = product_counts.get(item, 0) + 1 for product, count in sorted(product_counts.items(), key=lambda x: x[1], reverse=True): print(f"{product}: {count}回 ({count/len(transactions)*100:.1f}%)")
# 出力例 【サンプルトランザクション】 取引1: [‘パン’, ‘牛乳’, ‘バター’, ‘シリアル’, ‘ハム’] 取引2: [‘コーヒー’, ‘牛乳’, ‘チーズ’, ‘ヨーグルト’] 取引3: [‘パン’, ‘牛乳’, ‘ジュース’, ‘卵’] 取引4: [‘ハム’, ‘シリアル’, ‘チーズ’] 取引5: [‘パン’, ‘バター’, ‘コーヒー’, ‘牛乳’] 【商品別購入回数】 牛乳: 412回 (41.2%) パン: 298回 (29.8%) コーヒー: 253回 (25.3%) バター: 189回 (18.9%) チーズ: 187回 (18.7%) …

アソシエーションルールの計算

# ============================================ # アソシエーションルールの計算 # ============================================ # アソシエーションルールとは? # 「Aを買った人は、Bも買う」という法則 # # 3つの重要指標: # 1. サポート(支持度): AとBが一緒に買われる割合 # 2. 信頼度: Aを買った人のうち、Bも買う割合 # 3. リフト: 偶然より何倍買われやすいか(最重要!) def calculate_association_rules(transactions, min_support=0.05, min_confidence=0.3): “”” アソシエーションルールを計算 Parameters: ———– transactions : list of list – トランザクションデータ min_support : float – 最小サポート(これ以下は無視) min_confidence : float – 最小信頼度(これ以下は無視) Returns: ——– rules : list of dict – ルールのリスト(リフト値でソート済み) “”” n_trans = len(transactions) # 総取引数 # ============================================ # ステップ1: 各商品の出現回数をカウント # ============================================ item_counts = {} for trans in transactions: for item in trans: item_counts[item] = item_counts.get(item, 0) + 1 # ============================================ # ステップ2: 商品ペアの出現回数をカウント # ============================================ # combinations(set(trans), 2): 各取引内の2商品の全組み合わせ # tuple(sorted(pair)): 順序を統一((‘A’,’B’)と(‘B’,’A’)を同じに) pair_counts = {} for trans in transactions: for pair in combinations(set(trans), 2): pair = tuple(sorted(pair)) # アルファベット順に統一 pair_counts[pair] = pair_counts.get(pair, 0) + 1 # ============================================ # ステップ3: 各指標を計算してルール生成 # ============================================ rules = [] for (item_a, item_b), count in pair_counts.items(): # サポート = (AとBが一緒に出現する回数) / 総取引数 support = count / n_trans # 最小サポートを満たさなければスキップ if support < min_support: continue # A → B のルール(Aを買った人がBも買う) # 信頼度 = (AとBが一緒の回数) / (Aの回数) confidence_ab = count / item_counts[item_a] # リフト = 信頼度 / Bの出現率 # → 1より大きい: Aを買うと、Bが通常より買われやすい # → 1: 関係なし(偶然) # → 1未満: Aを買うと、Bが買われにくい lift_ab = confidence_ab / (item_counts[item_b] / n_trans) if confidence_ab >= min_confidence: rules.append({ ‘antecedent’: item_a, # 条件部(買ったもの) ‘consequent’: item_b, # 結論部(一緒に買うもの) ‘support’: support, ‘confidence’: confidence_ab, ‘lift’: lift_ab }) # B → A のルール(逆方向も計算) confidence_ba = count / item_counts[item_b] lift_ba = confidence_ba / (item_counts[item_a] / n_trans) if confidence_ba >= min_confidence: rules.append({ ‘antecedent’: item_b, ‘consequent’: item_a, ‘support’: support, ‘confidence’: confidence_ba, ‘lift’: lift_ba }) # リフト値の高い順にソート(実務で重要なルールが上に) return sorted(rules, key=lambda x: x[‘lift’], reverse=True) # ルールの計算実行 rules = calculate_association_rules(transactions, min_support=0.05, # 5%以上の取引で発生 min_confidence=0.3) # 30%以上の確率 print(“【アソシエーションルール(リフト値順)】”) print(f”{‘ルール’:<20} {'サポート':>10} {‘信頼度’:>10} {‘リフト’:>10}”) print(“-” * 55) for rule in rules[:10]: rule_str = f”{rule[‘antecedent’]} → {rule[‘consequent’]}” print(f”{rule_str:<20} {rule['support']*100:>9.1f}% ” f”{rule[‘confidence’]*100:>9.1f}% {rule[‘lift’]:>9.2f}”) print(“\n【結果の読み方】”) print(“・リフト > 1.0: その組み合わせは偶然より買われやすい”) print(“・信頼度: 条件商品を買った人のうち、結論商品も買う割合”) print(“・サポート: その組み合わせが全取引に占める割合”)
# 出力例 【アソシエーションルール(リフト値順)】 ルール サポート 信頼度 リフト ——————————————————- バター → パン 11.2% 59.3% 1.99 パン → バター 11.2% 37.6% 1.99 パン → 牛乳 17.8% 59.7% 1.45 牛乳 → パン 17.8% 43.2% 1.45 コーヒー → 牛乳 10.5% 41.5% 1.01 牛乳 → コーヒー 10.5% 25.5% 1.01 …

実用的なルールの抽出

# 実用的なルールの抽出とレポート def generate_recommendation_report(rules, min_lift=1.2): “””実務で使えるルールをレポート””” practical_rules = [r for r in rules if r[‘lift’] >= min_lift] print(“=” * 60) print(“バスケット分析レポート”) print(“=” * 60) print(f”分析対象ルール数: {len(rules)}”) print(f”実用的なルール数: {len(practical_rules)} (リフト値 >= {min_lift})”) print(“-” * 60) print(“\n【実務で使えるルール TOP5】\n”) for i, rule in enumerate(practical_rules[:5], 1): print(f”#{i} {rule[‘antecedent’]} を購入した顧客”) print(f” → {rule[‘consequent’]} も購入する確率: {rule[‘confidence’]*100:.1f}%”) print(f” → 通常より {rule[‘lift’]:.2f}倍 買われやすい”) print(f” → 全取引の {rule[‘support’]*100:.1f}% で発生”) print() print(“-” * 60) print(“【推奨アクション】”) print() for rule in practical_rules[:3]: print(f”◆ {rule[‘antecedent’]} ページで「{rule[‘consequent’]}」をレコメンド”) print(f” 期待効果: クリック率 {rule[‘confidence’]*100:.0f}% 以上”) print() print(“=” * 60) # レポート出力 generate_recommendation_report(rules)
# 出力例 ============================================================ バスケット分析レポート ============================================================ 分析対象ルール数: 18 実用的なルール数: 4 (リフト値 >= 1.2) ———————————————————— 【実務で使えるルール TOP5】 #1 バター を購入した顧客 → パン も購入する確率: 59.3% → 通常より 1.99倍 買われやすい → 全取引の 11.2% で発生 #2 パン を購入した顧客 → バター も購入する確率: 37.6% → 通常より 1.99倍 買われやすい → 全取引の 11.2% で発生 #3 パン を購入した顧客 → 牛乳 も購入する確率: 59.7% → 通常より 1.45倍 買われやすい → 全取引の 17.8% で発生 ———————————————————— 【推奨アクション】 ◆ バター ページで「パン」をレコメンド 期待効果: クリック率 59% 以上 ◆ パン ページで「バター」をレコメンド 期待効果: クリック率 38% 以上 ◆ パン ページで「牛乳」をレコメンド 期待効果: クリック率 60% 以上 ============================================================

💡 3. Aprioriアルゴリズム

アルゴリズムの仕組み

💡 Apriori原理

「頻出アイテムセットの部分集合も頻出である」という性質を利用

ステップ1:1個の商品で頻出パターンを見つける
・サポート >= 閾値(例:5%)の商品を抽出
・例:パン(30%), 牛乳(25%), バター(15%)…

ステップ2:2個の組み合わせを生成
・ステップ1の商品同士を組み合わせる
・サポート >= 閾値の組み合わせを抽出
・例:{パン, 牛乳}(10%), {パン, バター}(8%)…

ステップ3:3個、4個…と拡張
・前のステップの結果から組み合わせを増やす
・サポートが閾値未満になるまで繰り返す

効率化のポイント:
・{パン, 牛乳}が頻出でない場合
・{パン, 牛乳, バター}も頻出ではない(枝刈り)
・計算量を大幅に削減!

mlxtendライブラリを使った実装

# mlxtendライブラリを使った実装 # pip install mlxtend from mlxtend.frequent_patterns import apriori, association_rules from mlxtend.preprocessing import TransactionEncoder # トランザクションデータをワンホットエンコーディング te = TransactionEncoder() te_array = te.fit(transactions).transform(transactions) df = pd.DataFrame(te_array, columns=te.columns_) print(“【ワンホットエンコーディング後のデータ】”) print(df.head()) # Aprioriで頻出アイテムセットを抽出 frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True) frequent_itemsets[‘length’] = frequent_itemsets[‘itemsets’].apply(len) print(“\n【頻出アイテムセット(サポート >= 5%)】”) print(frequent_itemsets.sort_values(‘support’, ascending=False).head(10)) # アソシエーションルールの抽出 rules_df = association_rules(frequent_itemsets, metric=”confidence”, min_threshold=0.3) rules_df = rules_df.sort_values(‘lift’, ascending=False) print(“\n【アソシエーションルール(上位10件)】”) print(rules_df[[‘antecedents’, ‘consequents’, ‘support’, ‘confidence’, ‘lift’]].head(10))

🚀 4. 実務での活用

活用シーン

🛍️ ECサイト

レコメンデーション:
「この商品を買った人はこんな商品も買っています」

効果:
・カート追加率UP
・客単価向上

🏪 店舗レイアウト

商品配置の最適化:
関連商品を近くに配置

効果:
・ついで買い促進
・買い忘れ防止

🎁 セット販売

バンドル商品企画:
同時購入が多い商品をセット化

効果:
・購入障壁の低下
・売上増加

📧 メールマーケティング

パーソナライズ配信:
購入履歴に基づく関連商品の案内

効果:
・開封率UP
・コンバージョン向上

Excelでの簡易分析

【Excelでのバスケット分析】 === データ準備 === 取引ID | 商品A | 商品B | 商品C | … 1 | 1 | 1 | 0 | … 2 | 1 | 0 | 1 | … 3 | 0 | 1 | 1 | … (1=購入、0=未購入) === サポート計算 === AとBの同時購入率: =COUNTIFS(商品A列,1,商品B列,1)/COUNTA(取引ID列) === 信頼度計算 === A→Bの信頼度: =COUNTIFS(商品A列,1,商品B列,1)/COUNTIF(商品A列,1) === リフト値計算 === =信頼度/(COUNTIF(商品B列,1)/COUNTA(取引ID列)) === ピボットテーブルで集計 === 1. 取引データを用意 2. ピボットテーブル作成 3. 行:商品A、列:商品B 4. 値:取引数(カウント) 5. 条件付き書式で可視化 【注意】 Excelでは大規模データや複雑な 組み合わせの分析は困難。 Pythonの使用を推奨!

📝 STEP 28 のまとめ

✅ このステップで学んだこと

1. バスケット分析の基本

  • 同時購入パターンの発見
  • 「おむつとビール」の有名な例

2. 3つの重要指標

  • サポート:全体での出現頻度
  • 信頼度:条件付き購入確率
  • リフト値:関連性の強さ(最重要)

3. Aprioriアルゴリズム

  • 効率的なパターン抽出
  • 枝刈りによる計算量削減

4. 実務活用

  • レコメンデーション、セット販売
  • 店舗レイアウト、クーポン戦略
💡 最も大切なポイント

バスケット分析は、隠れた購買パターンを発見する強力なツールです!

成功のコツ:
リフト値を最重視(1.2以上が目安)
・サポートが低すぎるルールは実用性が低い
・ビジネス的に意味のあるルールを選ぶ

よくある間違い:
・信頼度だけで判断(リフト値を見ない)
・サポートが極端に低いルールを採用
・因果関係と勘違い(相関があるだけ)

次のSTEP 29では、クラスター分析で顧客をグループ化します!

🎯 次のステップの予告

STEP 29では、「クラスター分析の実践」を学びます。似た特徴を持つ顧客をグループ化し、セグメント別のマーケティング戦略を立てましょう!

📝 練習問題

問題 1 基礎

バスケット分析の3つの指標(サポート、信頼度、リフト値)をそれぞれ簡潔に説明してください。

【解答】

1. サポート(Support)
その組み合わせが全取引の何%で発生するかを示す出現頻度
計算式:(AとBを同時購入) / 全取引数

2. 信頼度(Confidence)
Aを買った人がBも買う条件付き確率
計算式:(AとBを同時購入) / (Aを購入した取引数)

3. リフト値(Lift)
Aを買った場合にBを買う確率がどれだけ上がるかを示す関連性の強さ
計算式:信頼度 / (Bの購入確率)
・リフト > 1:正の関連(一緒に買われやすい)
・リフト = 1:関連なし
・リフト < 1:負の関連

問題 2 基礎

以下のデータから、「パン → 牛乳」のルールを評価してください。

・全取引数:1,000回
・パンを購入:300回
・牛乳を購入:400回
・パンと牛乳を同時購入:150回

サポート、信頼度、リフト値を計算してください。

【解答】

計算手順:

1. サポート(Support)
サポート = (パンと牛乳を同時購入) / (全取引数)
= 150 / 1,000
= 0.15(15%)

2. 信頼度(Confidence)
信頼度 = (パンと牛乳を同時購入) / (パンを購入)
= 150 / 300
= 0.50(50%)

3. リフト値(Lift)
牛乳の購入確率 = 400 / 1,000 = 0.40(40%)
リフト値 = 信頼度 / 牛乳の購入確率
= 0.50 / 0.40
= 1.25

解釈:

・リフト値1.25 > 1なので、正の関連がある
・パンを買うと、通常より1.25倍牛乳を買いやすい
・パンのページに牛乳をレコメンドすると効果的!

問題 3 応用

2つのアソシエーションルールを比較してください。

ルールA:「コーヒー → 砂糖」
・サポート:20%、信頼度:80%、リフト値:1.1

ルールB:「高級ワイン → チーズ」
・サポート:2%、信頼度:60%、リフト値:3.0

どちらのルールをどのような施策に活用すべきですか?

【解答】目的によって使い分ける

分析:

ルールA「コーヒー → 砂糖」
・サポート20% → 頻繁に発生(インパクト大)
・信頼度80% → 非常に高い確率
・リフト値1.1 → 関連性は弱い(当たり前のパターン)

ルールB「高級ワイン → チーズ」
・サポート2% → 頻度は低い(ニッチ)
・信頼度60% → 高い確率
・リフト値3.0 → 非常に強い関連!(発見価値高い)

推奨する活用法:

ルールA:大衆向け施策
・店舗レイアウト(コーヒーと砂糖を近くに)
・大量に売れるセット販売
・売上インパクト重視

ルールB:VIP向け施策
・高級ワインページでのチーズレコメンド
・「ワインとチーズのペアリングセット」企画
・利益率・差別化重視

結論:両方を組み合わせた戦略が理想!

問題 4 応用

ECサイトでバスケット分析を実施したところ、以下のルールが見つかりました。

「ノートPC → マウス」
・サポート:8%、信頼度:45%、リフト値:2.5

このルールをどのように活用しますか?具体的な施策を3つ提案してください。

【解答】

ルールの評価:

・サポート8% → 十分な頻度
・信頼度45% → 約半数が同時購入
・リフト値2.5 → 非常に強い関連!
活用価値の高いルール

具体的な施策:

施策1:商品ページでのレコメンド
・ノートPCの商品ページに「一緒に購入されています:マウス」を表示
・期待効果:マウス追加率45%以上

施策2:カート画面でのアップセル
・ノートPCをカートに入れた時に「マウスも一緒にいかがですか?」を表示
・10%OFFクーポンをセットで提示
・期待効果:客単価向上

施策3:セット販売の企画
・「ノートPC + マウス + マウスパッド」のスターターセットを作成
・セット割引で購入障壁を下げる
・期待効果:新規PC購入者の獲得増

問題 5 実践

あなたはスーパーマーケットのデータ分析担当です。バスケット分析の結果、以下のルールが見つかりました。

・ルール1:「卵 → パン」リフト値1.8、サポート12%
・ルール2:「ビール → おつまみ」リフト値2.2、サポート5%
・ルール3:「牛乳 → シリアル」リフト値0.9、サポート8%

どのルールを優先的に活用し、どのようなアクションを取るべきですか?

【解答】

ルールの優先順位:

1位:ルール1「卵 → パン」
・リフト値1.8 → 強い正の関連
・サポート12% → 高頻度で発生
最優先で活用!

2位:ルール2「ビール → おつまみ」
・リフト値2.2 → 非常に強い関連
・サポート5% → 頻度は中程度
ニッチだが高効果が期待

3位(非推奨):ルール3「牛乳 → シリアル」
・リフト値0.9 < 1 → 負の関連!
・一緒には買われにくいパターン
活用しない

具体的なアクション:

ルール1への対応:
・卵売り場の近くにパンを配置
・「卵料理にはパンもどうぞ」POP設置
・朝食セット(卵+パン+牛乳)の企画

ルール2への対応:
・ビール売り場の横におつまみコーナー設置
・「ビールと一緒に!おつまみ特集」の販促
・金曜夕方のタイムセール企画

ルール3について:
・リフト値0.9は「独立」に近い
・施策効果は期待できない
・無理に近くに配置する必要なし

❓ よくある質問

Q1: サポート、信頼度、リフト値のどれを重視すべきですか?
リフト値を最重視し、サポートと信頼度でフィルタリングします。

優先順位:
1. リフト値(最重要):関連性の強さ
 ・リフト > 1.2を目安に
 ・高いほど「発見」の価値がある

2. サポート:実用性のフィルタ
 ・サポート >= 1〜5%が目安
 ・低すぎると活用が難しい

3. 信頼度:予測精度
 ・信頼度 >= 30〜40%が目安
 ・レコメンドの成功率に関係

実務的な基準:
・リフト >= 1.2
・サポート >= 2%
・信頼度 >= 30%
の3つを満たすルールを採用!
Q2: バスケット分析で因果関係は分かりますか?
いいえ、バスケット分析は「相関」を見つけるだけで、「因果」は分かりません。

相関(バスケット分析で分かること):
・AとBが一緒に起こる傾向がある
・例:「パンと牛乳」が一緒に買われる

因果(バスケット分析では分からない):
・Aが原因でBが起こる
・例:パンを買うことが、牛乳購入の原因?

安全な解釈:
・「これらは一緒に買われやすい」
・だから、一緒に提案・配置すると良い
・因果関係の主張は避ける
Q3: どのくらいのデータ量が必要ですか?
最低でも数千トランザクション、理想は数万以上です。

データ量の目安:

最低ライン:
・1,000〜3,000トランザクション
・基本的なパターンは発見できる

推奨:
・10,000〜100,000トランザクション
・信頼性の高いルールが見つかる

商品数の影響:
・商品数が多いほど、より多くのデータが必要
・10商品:数千で十分
・100商品:数万必要
・1,000商品:数十万必要
Q4: オンラインとオフラインで分析結果は異なりますか?
はい、購買行動が異なるため、結果も異なります。

オンライン(ECサイト)の特徴:
・検索やレコメンドの影響を受ける
・比較検討が容易
・衝動買いは少なめ

オフライン(実店舗)の特徴:
・店舗レイアウトの影響大
・衝動買いが多い
・時間帯や曜日の影響

推奨:
・オンライン、オフラインは別々に分析
・それぞれの特性に合った施策を設計
・両方のデータを統合した分析も有効
Q5: 季節性は考慮すべきですか?
はい、季節によって購買パターンは大きく変わります。

季節性の例:
・夏:「ビール → 枝豆」が強まる
・冬:「鍋つゆ → 野菜」が強まる
・クリスマス:「ケーキ → シャンパン」

対処法:
1. 季節別に分析
 ・春夏秋冬で別々にルールを抽出
 ・季節に応じた施策を実施

2. 直近データを重視
 ・過去3ヶ月のデータで分析
 ・古いデータは重みを下げる

3. 定期的な更新
 ・月1回などでルールを再計算
 ・変化を継続的にモニタリング
Q6: 結果が「当たり前」のルールばかりの場合は?
分析の粒度を変えるか、より詳細なセグメントで分析します。

当たり前のルールの例:
・「歯ブラシ → 歯磨き粉」
・「パン → 牛乳」
→ これらは発見ではなく、既知のパターン

対処法:

1. カテゴリを跨いだ分析
 ・食品 × 日用品
 ・意外な組み合わせを発見

2. セグメント別分析
 ・年代別、性別、地域別
 ・特定セグメントだけのパターン

3. 時間帯・曜日別分析
 ・平日朝 vs 週末夜
 ・シーン別のパターン

4. リフト値の閾値を上げる
 ・リフト > 2.0以上に絞る
 ・より強い関連だけを抽出
📝

学習メモ

ビジネスデータ分析・意思決定 - Step 28

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE