STEP 29:クラスター分析の実践

🎯 STEP 29: クラスター分析の実践

似た特徴を持つ顧客をグループ化しよう

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

  • クラスター分析とは何か
  • k-means法の仕組み
  • 階層的クラスタリング
  • 適切なクラスター数の決定
  • 実務での顧客セグメント化

学習時間の目安:4時間

🔍 1. クラスター分析とは

基本概念

📌 クラスター分析(Cluster Analysis)

似た特徴を持つデータをグループ(クラスター)にまとめる分析手法

RFM分析との違い:

RFM分析:
・あらかじめ決めた基準(R・F・M)でセグメント化
・分類ルールが明確
・例:R=5, F=5, M=5 → Champions

クラスター分析:
・データから自動的にグループを発見
・予想外のパターンが見つかることも
・多次元の特徴を同時に考慮可能

ビジネスでの活用:
1. 顧客セグメンテーション:似た顧客をグループ化
2. 商品分類:似た売れ方をする商品を発見
3. 地域分析:似た特性の店舗・エリアを発見
4. 異常検知:どのグループにも属さない異常データを発見

クラスター分析の種類

手法 特徴 データ量 用途
k-means法 クラスター数を事前指定、高速 大規模OK 最も一般的
階層的クラスタリング デンドログラムで可視化 〜数千件 探索的分析
DBSCAN 密度ベース、形状自由 中規模 異常検知
GMM 確率的、ソフト分類 中規模 曖昧な境界

2つの主要アプローチ

🎯 k-means法

特徴:
・クラスター数を事前に指定
・計算が速い
・大規模データに向いている
・最もポピュラー

メリット:シンプル、高速
デメリット:k数の事前決定が必要

🌳 階層的クラスタリング

特徴:
・クラスター数を指定しない
・樹形図(デンドログラム)で可視化
・小〜中規模データ向け

メリット:k数を後から決定可能
デメリット:計算コストが高い

📊 2. k-means法の実践

アルゴリズムの仕組み

📌 k-means法のステップ

ステップ1:初期化
・クラスター数k個を決める(例:k=3)
・ランダムにk個の中心点を配置

ステップ2:割り当て
・各データを最も近い中心点のクラスターに割り当て
・距離はユークリッド距離を使用

ステップ3:中心の更新
・各クラスターの新しい中心を計算
・中心 = そのクラスター内の全データの平均

ステップ4:繰り返し
・ステップ2と3を繰り返す
・中心が変わらなくなったら終了

Pythonでの実装

# ============================================ # クラスター分析の実装(k-means法) # ============================================ import pandas as pd import numpy as np from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score # ============================================ # サンプルデータ作成(顧客データ) # ============================================ # np.random.seed(42): 乱数のシードを固定 # → 毎回同じデータが生成される(再現性の確保) np.random.seed(42) # 3つの顧客セグメントを想定してデータ作成 # セグメント1: 高頻度・低単価(若年層) seg1 = pd.DataFrame({ ‘recency’: np.random.randint(1, 30, 150), # 最終購入からの日数 ‘frequency’: np.random.randint(15, 30, 150), # 購入回数 ‘monetary’: np.random.randint(10000, 30000, 150), # 合計購入金額 ‘age’: np.random.randint(20, 35, 150) # 年齢 }) # セグメント2: 低頻度・高単価(富裕層) seg2 = pd.DataFrame({ ‘recency’: np.random.randint(1, 90, 100), ‘frequency’: np.random.randint(2, 8, 100), ‘monetary’: np.random.randint(100000, 500000, 100), ‘age’: np.random.randint(40, 65, 100) }) # セグメント3: 中頻度・中単価(一般層) seg3 = pd.DataFrame({ ‘recency’: np.random.randint(1, 60, 250), ‘frequency’: np.random.randint(5, 15, 250), ‘monetary’: np.random.randint(30000, 100000, 250), ‘age’: np.random.randint(30, 55, 250) }) # データ結合 df = pd.concat([seg1, seg2, seg3], ignore_index=True) df[‘customer_id’] = range(1, len(df) + 1) print(“【顧客データのサンプル】”) print(df.head()) print(f”\n全顧客数: {len(df)}人”) # クラスタリングに使う特徴量を選択 features = [‘recency’, ‘frequency’, ‘monetary’, ‘age’] # ============================================ # データの標準化(クラスター分析では必須!) # ============================================ # StandardScaler(): 各変数を「平均0、標準偏差1」に変換 # # なぜ標準化が必要か? # → 変数のスケール(単位)が違うと、大きい数値の変数が # クラスタリング結果を支配してしまう # # 具体例: # 購入頻度: 0〜30回(小さな数値) # 購入金額: 0〜500,000円(大きな数値) # → 標準化しないと金額の差だけでグループ分けされ、 # 頻度の違いが無視されてしまう # # 標準化後: # 全ての変数が同じスケール(平均0、標準偏差1)になり、 # 公平に距離が計算される scaler = StandardScaler() # ============================================ # fit_transform()の意味 # ============================================ # fit(): データから平均と標準偏差を計算(学習) # transform(): その値を使ってデータを変換 # fit_transform(): 両方を一度に実行 # # 変換式: (x – 平均) / 標準偏差 df_scaled = scaler.fit_transform(df[features]) print(“\n【標準化後のデータ(最初の5行)】”) print(pd.DataFrame(df_scaled, columns=features).head()) print(“\n→ 全ての値が大体-3〜+3の範囲に収まる”) print(“→ 平均=0、標準偏差=1になっている”)
# 出力例 【顧客データのサンプル】 recency frequency monetary age customer_id 0 23 22 18754 27 1 1 7 26 26951 31 2 2 14 17 14356 32 3 3 23 27 24853 21 4 4 20 15 18573 28 5 全顧客数: 500人 【標準化後のデータ(最初の5行)】 recency frequency monetary age 0 -0.23 0.87 -0.72 -0.98 1 -0.88 1.24 -0.48 -0.68 2 -0.59 0.41 -0.85 -0.61 3 -0.23 1.33 -0.54 -1.42 4 -0.35 0.22 -0.72 -0.91

クラスター数の決定

# ============================================ # エルボー法とシルエット分析でクラスター数を決定 # ============================================ # k-meansの課題: # → クラスター数kを事前に決める必要がある # → 最適なkを見つける方法が必要 # # 2つの主要な方法: # 1. エルボー法: 慣性(Inertia)の減少を見る # 2. シルエット分析: クラスターの分離度を見る # 各クラスター数での指標を計算 K_range = range(2, 11) # k=2から10まで試す inertias = [] # 慣性(クラスター内の散らばり) silhouette_scores = [] # シルエットスコア for k in K_range: # ============================================ # KMeans(): k-meansクラスタリングを実行 # ============================================ # パラメータ: # n_clusters=k: クラスター数 # random_state=42: 乱数シード(再現性のため) # n_init=10: 初期化を10回試して最良を採用 # → k-meansは初期値によって結果が変わる # → 複数回試して最も良い結果を使う kmeans = KMeans(n_clusters=k, random_state=42, n_init=10) # .fit(): クラスタリングを実行 kmeans.fit(df_scaled) # ============================================ # 評価指標の計算 # ============================================ # kmeans.inertia_: 慣性(Inertia) # → 各点から所属クラスターの中心までの距離の2乗和 # → 小さいほどクラスター内がまとまっている # → kを増やすと必ず減少する inertias.append(kmeans.inertia_) # silhouette_score(): シルエットスコア # → クラスターがどれだけ良く分離されているか # → -1〜1の値、1に近いほど良い # → 自分のクラスター内は近く、他のクラスターとは遠いのが理想 silhouette_scores.append(silhouette_score(df_scaled, kmeans.labels_)) # 結果表示 print(“【クラスター数別の評価指標】”) print(f”{‘k’:>3} {‘慣性(Inertia)’:>15} {‘シルエットスコア’:>18}”) print(“-” * 40) for k, inertia, sil in zip(K_range, inertias, silhouette_scores): print(f”{k:>3} {inertia:>15.1f} {sil:>18.3f}”) # 最適なクラスター数(シルエットスコアが最大のk) best_k = K_range[np.argmax(silhouette_scores)] print(f”\n【推奨クラスター数】k = {best_k}(シルエットスコア最大)”) print(“\n【判断のポイント】”) print(“・エルボー法: 慣性の減少が緩やかになる点(肘)”) print(“・シルエット分析: スコアが最大になる点”) print(“・ビジネス的な解釈: グループ分けの意味が説明できるか”)
# 出力例 【クラスター数別の評価指標】 k 慣性(Inertia) シルエットスコア —————————————- 2 1245.3 0.312 3 892.4 0.385 4 715.2 0.341 5 598.7 0.318 6 512.3 0.295 7 448.1 0.278 8 395.6 0.261 9 352.8 0.248 10 318.4 0.235 【推奨クラスター数】k = 3(シルエットスコア最大)

クラスタリングの実行と解釈

# ============================================ # k-meansクラスタリング実行 # ============================================ # 決定したクラスター数でクラスタリングを実行 optimal_k = 3 # 上の分析で決定したクラスター数 kmeans = KMeans(n_clusters=optimal_k, random_state=42, n_init=10) # ============================================ # fit_predict(): クラスタリング実行+ラベル取得 # ============================================ # fit(): クラスタリングを実行(中心点を計算) # predict(): 各データの所属クラスターを返す # fit_predict(): 両方を一度に実行 # # 戻り値: 各データのクラスター番号(0, 1, 2, …) df[‘cluster’] = kmeans.fit_predict(df_scaled) # ============================================ # クラスター別の統計を計算 # ============================================ # 各クラスターの特徴を把握するために、 # 各特徴量の平均値を計算 print(“【クラスター別統計】”) cluster_summary = df.groupby(‘cluster’)[features].agg([‘mean’, ‘std’]) print(df.groupby(‘cluster’)[features].mean().round(0)) # クラスター別顧客数 print(“\n【クラスター別顧客数】”) cluster_counts = df[‘cluster’].value_counts().sort_index() for cluster_id, count in cluster_counts.items(): pct = count / len(df) * 100 print(f”クラスター {cluster_id}: {count}人 ({pct:.1f}%)”) # ============================================ # クラスターの解釈と命名 # ============================================ # 重要:数字だけでなく、ビジネス的な意味を付与 # → 「クラスター0」より「若年アクティブ層」の方が分かりやすい print(“\n【クラスターの特徴と命名】”) cluster_means = df.groupby(‘cluster’)[features].mean() for cluster_id in range(optimal_k): data = cluster_means.loc[cluster_id] print(f”\n◆ クラスター {cluster_id}:”) print(f” Recency: {data[‘recency’]:.0f}日(最終購入からの日数)”) print(f” Frequency: {data[‘frequency’]:.0f}回(購入回数)”) print(f” Monetary: ¥{data[‘monetary’]:,.0f}(合計購入金額)”) print(f” Age: {data[‘age’]:.0f}歳”) # 特徴に基づいて命名(ビジネス的な解釈) if data[‘frequency’] > 15 and data[‘monetary’] < 40000: print(" → 【若年アクティブ層】高頻度・低単価") elif data['frequency'] < 10 and data['monetary'] > 100000: print(” → 【富裕シニア層】低頻度・高単価”) else: print(” → 【一般ミドル層】中頻度・中単価”)
# 出力例 【クラスター別統計】 recency frequency monetary age cluster 0 15 21 21456 28 1 43 5 247832 52 2 32 10 63542 43 【クラスター別顧客数】 クラスター 0: 150人 (30.0%) クラスター 1: 100人 (20.0%) クラスター 2: 250人 (50.0%) 【クラスターの特徴と命名】 ◆ クラスター 0: Recency: 15日 Frequency: 21回 Monetary: ¥21,456 Age: 28歳 → 【若年アクティブ層】高頻度・低単価 ◆ クラスター 1: Recency: 43日 Frequency: 5回 Monetary: ¥247,832 Age: 52歳 → 【富裕シニア層】低頻度・高単価 ◆ クラスター 2: Recency: 32日 Frequency: 10回 Monetary: ¥63,542 Age: 43歳 → 【一般ミドル層】中頻度・中単価

🌳 3. 階層的クラスタリング

デンドログラム(樹形図)の作成

# 階層的クラスタリングの実装 from scipy.cluster.hierarchy import dendrogram, linkage, fcluster # サンプル数を減らして実行(階層的は計算コスト高) df_sample = df.sample(n=100, random_state=42) sample_scaled = scaler.transform(df_sample[features]) # 階層的クラスタリング(Ward法) linkage_matrix = linkage(sample_scaled, method=’ward’) print(“【階層的クラスタリングの読み方】”) print(“・縦軸:クラスター間の距離”) print(“・横に大きく離れて結合 = 異なるグループ”) print(“・距離が大きいところで切ると、クラスター数が決まる”) # デンドログラムから3クラスターに分割 clusters = fcluster(linkage_matrix, t=3, criterion=’maxclust’) df_sample[‘h_cluster’] = clusters print(“\n【階層的クラスタリング結果】”) print(df_sample.groupby(‘h_cluster’)[features].mean().round(0))

クラスター数を決める方法

💡 クラスター数を決める3つの方法

1. エルボー法(Elbow Method)
・慣性(クラスター内の距離の総和)をプロット
・「肘」のように曲がるポイントを探す
・そこがクラスター数の目安

2. シルエット分析(Silhouette Analysis)
・各データがどれだけ適切にクラスターに属しているか
・スコアが高いほど良い分類
・-1〜1の範囲(1に近いほど良い)

3. ビジネス判断
・実務で扱えるセグメント数
・通常3〜7個が適切
・多すぎると施策が複雑になる

🚀 4. 実務での活用

セグメント別施策の設計

# セグメント別施策レポートの生成 def generate_segment_report(df, cluster_col=’cluster’): “””セグメント別の施策レポートを生成””” print(“=” * 60) print(“顧客セグメント分析レポート”) print(“=” * 60) segment_names = { 0: ‘若年アクティブ層’, 1: ‘富裕シニア層’, 2: ‘一般ミドル層’ } strategies = { 0: { ‘特徴’: ‘高頻度購入、低単価、20代中心’, ‘課題’: ‘LTVが低い’, ‘施策’: [ ‘アップセル(上位商品の提案)’, ‘ポイントプログラムで定着促進’, ‘SNS連携キャンペーン’ ], ‘KPI’: ‘客単価20%向上’ }, 1: { ‘特徴’: ‘低頻度購入、高単価、50代中心’, ‘課題’: ‘購入頻度が低い’, ‘施策’: [ ‘VIP待遇(専用コンシェルジュ)’, ‘パーソナライズドサービス’, ‘限定商品・先行販売’ ], ‘KPI’: ‘購入頻度1.5倍’ }, 2: { ‘特徴’: ‘バランスの取れた優良顧客’, ‘課題’: ‘差別化が難しい’, ‘施策’: [ ‘ロイヤリティプログラム’, ‘クロスセル促進’, ‘定期購入の提案’ ], ‘KPI’: ‘リピート率10%向上’ } } for cluster_id in df[cluster_col].unique(): name = segment_names.get(cluster_id, f’セグメント{cluster_id}’) strategy = strategies.get(cluster_id, {}) count = len(df[df[cluster_col] == cluster_id]) pct = count / len(df) * 100 print(f”\n{‘=’*60}”) print(f”◆ {name}(クラスター{cluster_id})”) print(f” 顧客数: {count}人({pct:.1f}%)”) print(f”{‘=’*60}”) if strategy: print(f”【特徴】{strategy[‘特徴’]}”) print(f”【課題】{strategy[‘課題’]}”) print(f”【推奨施策】”) for i, s in enumerate(strategy[‘施策’], 1): print(f” {i}. {s}”) print(f”【目標KPI】{strategy[‘KPI’]}”) print(f”\n{‘=’*60}”) # レポート生成 generate_segment_report(df)
# 出力例 ============================================================ 顧客セグメント分析レポート ============================================================ ============================================================ ◆ 若年アクティブ層(クラスター0) 顧客数: 150人(30.0%) ============================================================ 【特徴】高頻度購入、低単価、20代中心 【課題】LTVが低い 【推奨施策】 1. アップセル(上位商品の提案) 2. ポイントプログラムで定着促進 3. SNS連携キャンペーン 【目標KPI】客単価20%向上 ============================================================ ◆ 富裕シニア層(クラスター1) 顧客数: 100人(20.0%) ============================================================ 【特徴】低頻度購入、高単価、50代中心 【課題】購入頻度が低い 【推奨施策】 1. VIP待遇(専用コンシェルジュ) 2. パーソナライズドサービス 3. 限定商品・先行販売 【目標KPI】購入頻度1.5倍 ============================================================ ◆ 一般ミドル層(クラスター2) 顧客数: 250人(50.0%) ============================================================ 【特徴】バランスの取れた優良顧客 【課題】差別化が難しい 【推奨施策】 1. ロイヤリティプログラム 2. クロスセル促進 3. 定期購入の提案 【目標KPI】リピート率10%向上 ============================================================

⚠️ 5. 注意点とベストプラクティス

必ず守るべきこと

⚠️ 標準化は必須!

標準化しないとどうなるか:

例:購買頻度(0〜30回)と金額(0〜500,000円)
・金額のスケールが大きすぎる
・距離計算で金額が支配的になる
・頻度の情報が無視される

標準化の方法:
・StandardScaler:平均0、標準偏差1に変換
・MinMaxScaler:0〜1の範囲に変換
・scikit-learnのStandardScalerが標準的

RFM分析との使い分け

観点 RFM分析 クラスター分析
シンプルさ ◎ 簡単 △ やや複雑
説明しやすさ ◎ 明確 ○ 解釈が必要
変数の数 3変数(R,F,M) 多変数OK
発見可能性 △ 既知のパターン ◎ 新発見あり
推奨場面 まずはこちらから RFMで不十分な時

📝 STEP 29 のまとめ

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

1. クラスター分析の基本

  • 似た特徴でグループ化
  • データから自動的にパターンを発見

2. k-means法

  • 最も一般的な手法
  • クラスター数を事前に指定

3. クラスター数の決定

  • エルボー法・シルエット分析
  • ビジネス的な扱いやすさも考慮

4. 重要ポイント

  • データの標準化は必須
  • 結果をビジネス的に解釈する
💡 最も大切なポイント

クラスター分析は、データから自動的にパターンを発見する強力な手法です!

成功のコツ:
・データを必ず標準化する(超重要!)
・適切なクラスター数を選ぶ
・結果をビジネス的に解釈する
・各クラスターに分かりやすい名前をつける

RFM vs クラスター分析:
・RFM:シンプル、説明しやすい、実装が簡単
・クラスター:多次元、予想外の発見、高度
→ まずはRFM、必要に応じてクラスター!

次のSTEP 30では、セグメンテーション戦略を学びます!

🎯 次のステップの予告

STEP 30では、「セグメンテーション戦略」を学びます。分析結果を実際のマーケティング施策に落とし込む方法を習得しましょう!

📝 練習問題

問題 1 基礎

クラスター分析とRFM分析の違いを説明してください。どのような場面でクラスター分析を選ぶべきですか?

【解答】

RFM分析:
・あらかじめ決めた基準(R・F・M)でセグメント化
・ルールが明確で説明しやすい
・3変数に限定

クラスター分析:
・データから自動的にグループを発見
・多次元の特徴を同時に考慮可能
・予想外のパターンが見つかることも

クラスター分析を選ぶ場面:
・R・F・M以外の変数も使いたい(年齢、地域など)
・RFMでは見えないパターンを発見したい
・より詳細なセグメント分けが必要
・データ駆動のアプローチをしたい

問題 2 基礎

なぜクラスター分析の前にデータの標準化が必要ですか?標準化しないとどのような問題が起こりますか?

【解答】

標準化が必要な理由:

k-means法は距離を使ってクラスターを決めるため、変数のスケールが異なると問題が起こる。

標準化しない場合の問題:

例:
・購買頻度:0〜30回
・購買金額:0〜500,000円

金額のスケールが圧倒的に大きいため:
・距離計算で金額が支配的になる
・頻度の情報がほぼ無視される
・意味のあるクラスタリングができない

標準化の効果:

・各変数を平均0、標準偏差1に変換
・すべての変数が同じスケールになる
・各変数の情報が適切に反映される

問題 3 応用

k-means法でクラスター数を3、4、5で試したところ、以下の結果になりました。

k=3:慣性=1000、シルエットスコア=0.55
k=4:慣性=800、シルエットスコア=0.48
k=5:慣性=650、シルエットスコア=0.42

どのクラスター数を選ぶべきですか?

【解答】k=3を推奨

分析:

慣性(Inertia):
・kを増やせば必ず減少する
・この指標だけでは判断できない

シルエットスコア:
・k=3が最も高い(0.55)
・kを増やすと品質が下がっている

判断:

k=3を選ぶ理由:
1. シルエットスコアが最も高い(0.55)
2. 3セグメントは実務で扱いやすい
3. 施策を集中できる
4. 組織的に管理しやすい

問題 4 応用

クラスター分析の結果、以下の3つのセグメントが見つかりました。

クラスター0:Recency=10日、Frequency=25回、Monetary=¥15,000、Age=25歳
クラスター1:Recency=60日、Frequency=3回、Monetary=¥200,000、Age=55歳
クラスター2:Recency=30日、Frequency=10回、Monetary=¥50,000、Age=40歳

各クラスターに名前をつけ、それぞれに適した施策を1つずつ提案してください。

【解答】

セグメント命名と施策:

クラスター0:「若年アクティブ層」
・特徴:高頻度・低単価、20代
・施策:アップセル戦略
 → 上位商品の提案で客単価向上
 → 「あと¥1,000で送料無料」など

クラスター1:「富裕シニア層」
・特徴:低頻度・高単価、50代
・施策:VIP待遇
 → 専用コンシェルジュサービス
 → 限定商品の先行案内

クラスター2:「一般ミドル層」
・特徴:バランス型、40代
・施策:ロイヤリティプログラム
 → ポイント制度でリピート促進
 → クロスセルでカテゴリ拡大

問題 5 実践

あなたはECサイトのデータ分析担当です。顧客データ(購買頻度、購買金額、サイト訪問回数、会員期間)を使ってクラスター分析を行う計画です。

分析の手順を5ステップで説明し、各ステップで注意すべきポイントを述べてください。

【解答】

5ステップの分析手順:

ステップ1:データの準備と前処理
・欠損値の処理(削除or補完)
・外れ値の確認と対処
・変数の選択(4変数:頻度、金額、訪問、期間)
注意:外れ値がクラスタリングを歪める可能性

ステップ2:データの標準化
・StandardScalerで各変数を標準化
・平均0、標準偏差1に変換
注意:標準化しないと金額が支配的になる

ステップ3:クラスター数の決定
・エルボー法で慣性をプロット
・シルエットスコアを計算
・2〜10程度の範囲で比較
注意:統計指標とビジネス実用性のバランス

ステップ4:クラスタリングの実行
・k-meansを実行(random_state固定)
・各顧客にクラスターを割り当て
・クラスター別の統計を算出
注意:n_init=10以上で安定した結果を得る

ステップ5:結果の解釈と施策立案
・各クラスターの特徴を分析
・分かりやすい名前をつける
・セグメント別の施策を設計
注意:施策の実行可能性を考慮、ステークホルダーと合意

❓ よくある質問

Q1: k-means法と階層的クラスタリング、どちらを使うべきですか?
データ量とクラスター数の明確さで判断します。

k-means法を推奨:
・データ数が多い(数千〜数十万件)
・クラスター数の目安がある
・高速処理が必要
・定期的に分析を更新する

階層的クラスタリングを推奨:
・データ数が少ない(〜数百件)
・クラスター数が不明
・階層構造を見たい
・探索的分析

実務では:
迷ったらk-meansから始める!
Q2: クラスタリング結果が実行ごとに変わるのはなぜですか?
k-means法は初期値によって結果が変わることがあります。

理由:
・k-meansは初期の中心点をランダムに配置
・初期値が悪いと、局所最適解に陥る

対策:
1. random_state指定:乱数を固定して再現性を確保
2. 複数回実行:n_init=10で最良の結果を採用
3. k-means++:scikit-learnのデフォルト、安定した結果

実務では:
random_stateを指定すればOK!
Q3: カテゴリカルデータ(性別など)はクラスタリングできますか?
工夫が必要ですが、可能です。

方法1:ダミー変数化
・性別(男/女)→ 男ダミー(0/1)
・地域(東京/大阪)→ 東京ダミー、大阪ダミー…

方法2:専用アルゴリズム
・k-modes:カテゴリカルデータ専用
・k-prototypes:数値+カテゴリカル混在

実務での推奨:
・少数ならダミー変数化
・または、数値データのみで分析
Q4: クラスター数はどのくらいが適切ですか?
統計指標とビジネス要件のバランスで決めます。

統計的な基準:
・エルボー法:慣性が急に下がらなくなる点
・シルエットスコア:最も高いk

ビジネス的な基準:
・3〜7個が扱いやすい
・各セグメントに十分な人数が必要
・施策を立てられる粒度

推奨アプローチ:
1. 統計指標で候補を2〜3個に絞る
2. 実際のクラスター結果を確認
3. ビジネス的に意味があるか評価
4. ステークホルダーと合意
Q5: クラスター分析の結果はどのくらいの頻度で更新すべきですか?
ビジネスの変化スピードに応じて決めます。

更新頻度の目安:
・ECサイト:月1回〜四半期
・B2Bサービス:四半期〜半年
・安定したビジネス:年1回

更新のトリガー:
・大きなキャンペーン後
・商品ラインナップの変更後
・顧客数が大幅に増減した時
・施策の効果が低下した時

推奨:
・まずは四半期ごとに更新
・変化が少なければ頻度を下げる
Q6: クラスター分析の結果を社内に説明するコツは?
分かりやすい名前と具体的な施策がポイントです。

説明のコツ:

1. 分かりやすい名前をつける
 ・「クラスター0」→「若年アクティブ層」
 ・特徴を一言で表す名前

2. 代表的な顧客像を描く
 ・「20代女性、月2回購入、SNSでシェア」
 ・ペルソナとして具体化

3. 施策に紐づける
 ・「このセグメントにはこの施策」
 ・アクションに直結させる

4. ビジュアルで見せる
 ・散布図、レーダーチャート
 ・各セグメントの特徴を可視化

避けるべきこと:
・技術的な説明(k-means、慣性など)
・統計用語の多用
📝

学習メモ

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

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