潜在クラス分析(LCA)|観測指標から“見えないクラス”を推定(混合モデル)
観測されたカテゴリ/順序指標の背後にある“見えない集団(クラス)”を推定します。各クラスに属する確率もあわせて得られます。
まずはここだけ(やさしい導入)
- 何をする?: 似た回答パターンの人たちを“見えないクラス”として推定する
- いつ使う?: アンケートのタイプ分け、リスク層抽出、パーソナライズの基盤作り
- どう読む?: クラス別の回答確率とクラスサイズ、BIC でクラス数の妥当性を確認
用語ミニ辞典(1 行で)
- 潜在クラス: 観測できないが、回答パターンの違いから推定されるグループ
- EM アルゴリズム: 潜在変数のあるモデルを繰り返しで推定する方法
- BIC/AIC: モデル選択の指標。小さいほど良い(過学習を抑える)
ポイント
ミニ例題とコード(BIC でクラス数を選ぶ)
import numpy as np
import pandas as pd
from sklearn.mixture import GaussianMixture
# 簡易: 連続に近似して GMM でクラス数比較(概念的デモ)
df = pd.DataFrame({
'q1':[0,1,1,0,1,0,1,1,0,0], # 0/1 の順序近似
'q2':[1,1,0,0,1,0,1,0,0,1],
'q3':[0,1,0,0,1,0,1,1,0,1]
})
X = df.values.astype(float)
bics = []
for k in range(1,5):
gmm = GaussianMixture(n_components=k, random_state=42).fit(X)
bics.append((k, gmm.bic(X)))
print('BIC list:', bics)
注: 実務は poLCA(R)や専用実装を推奨(カテゴリ分布を直接モデル化)。
実務ケーススタディ(タイプ分け → 施策設計)
目的: サービスの利用態度(好み/頻度/不満)から顧客タイプを推定し、施策を分岐。
- 設計と収集
- 順序/カテゴリ設問を 6–10 個。重複/極端項目は避ける
- 推定と選択
- クラス数を BIC で比較しつつ、解釈可能性(施策に落とせるか)で最終決定
- 活用
- クラス別の施策テンプレ(価格訴求/機能訴求/サポート強化 など)に落とす
練習問題(理解を定着)
- BIC が k=3 で最小だが、k=2 の方が解釈しやすい。どうする?
- ヒント: 実務は解釈と運用性を重視。BIC とトレードオフで決める
- 1 つのクラスが 5% 未満。何を疑う?
- ヒント: 過学習や外れ回答の影響。設問の見直しや k の再検討
- クラス割当が期間で不安定。どう検証?
- ヒント: 別期間/再学習で一致度を確認(Jaccard 等)
- EM アルゴリズムで混合比とクラス別確率を推定
- クラス数は BIC/AIC で選択、解釈可能性も重視
ミニコード(概念)
# 実務は専用パッケージ(poLCA, mclust 等)推奨
活用
- 顧客タイプの推定、リスク層の抽出、施策のパーソナライズ
潜在クラス分析についてのご相談はこちら