コンジョイント分析|属性 × 水準で“選ばれる理由”を可視化(実務設計ガイド)
ユーザーが製品を選ぶとき、複数の要素(属性)を同時に評価しています。コンジョイント分析は、それぞれの属性水準が選好に与える寄与(部分効用)を推定する手法です。
まずはここだけ(やさしい導入)
- 何をする?: 属性(価格・デザイン…)の“効き目”を数値化し、どれを上げ下げすると選ばれるかを把握
- いつ使う?: 新商品の仕様決定、価格改定、プラン設計、競合比較
- どう読む?: 部分効用の符号と大きさ、属性重要度、WTP(支払意思額)
用語ミニ辞典(1 行で)
- 属性/水準: 比較する軸と、その具体的な値(例: 価格=¥9,800/12,800/15,800)
- 部分効用(Part-worth): その水準が選好に与える寄与の量
- 重要度: 属性ごとの寄与割合(max−min の差を合計で割るのが一般的)
- CBC(Choice-Based Conjoint): 選択型の設計(最も実務で一般的)
- WTP: 部分効用を価格軸で割って換算した“価格に置き換えた価値”
設計の基本
- 属性例: 価格、デザイン、配送速度、保証
- 水準例: 価格(¥9,800 / ¥12,800 / ¥15,800)など
- 直交/最適設計で組合せ数を圧縮
推定と読み方
- 推定: OLS/Logit、個人差を捉えるなら HB(階層ベイズ)
- 部分効用と重要度(各属性の寄与割合)を算出
- 価格の換算: 部分効用の差分を価格に換算し、WTP を推定
ミニコード(超簡略・疑似)
# 擬似的な OLS 推定例(実務は専用パッケージ推奨)
import pandas as pd
import statsmodels.api as sm
df = pd.DataFrame({
'choice':[1,0,0, 0,1,0, 0,0,1], # 各タスクで選ばれたプロファイルに1
'price':[9800,12800,15800, 9800,12800,15800, 9800,12800,15800],
'design_modern':[1,0,0, 0,1,0, 0,0,1],
})
X = sm.add_constant(df[['price','design_modern']])
model = sm.OLS(df['choice'], X).fit()
print(model.params)
実務ケーススタディ(CBC→ 部分効用 → シェアシミュレーション)
目的: 価格 × デザイン × 配送で新商品の仕様を決めたい。
- 設計
- CBC で 8–12 課題、各課題 3–4 選択肢+「選ばない」
- 非現実な組合せに制約。価格は現実的レンジで水準設定
- 推定
- ロジット(個人差は HB で)。部分効用と属性重要度を算出
- シミュレーション
- 各候補の効用合計をロジットで確率化し、シェアを予測
- 価格変更や水準入替で“何割伸びるか”を比較
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
# 各課題で 3 商品 + 無回答(0)
df = pd.DataFrame({
'choice':[1,0,0, 0,1,0, 0,0,1], # 選ばれた=1
'price':[9800,12800,15800, 9800,12800,15800, 9800,12800,15800],
'design_modern':[1,0,0, 0,1,0, 0,0,1]
})
X = df[['price','design_modern']]
y = df['choice']
logit = LogisticRegression(max_iter=1000).fit(X, y)
coef = np.r_[logit.intercept_, logit.coef_.ravel()]
print('coef=', coef)
# 簡易シミュレーション(3 候補の効用→確率化)
cand = pd.DataFrame({
'price':[10800,12800,14800],
'design_modern':[1,0,1]
})
u = logit.decision_function(cand)
prob = 1/(1+np.exp(-u)) # 二項の簡略。実務は多項ロジット
print('prob ~ share:', prob/prob.sum())
練習問題(理解を定着)
- 属性が 6、各 4 水準。課題数はどの程度が目安?
- ヒント: 1 人あたり 8–12 課題、選択肢 3–4 + 選ばない
- 価格の係数が大きく負。何が言える?
- ヒント: 価格感度が高い。WTP で換算して意思決定
- シミュレーションで“どれも選ばない”確率が高い。どう解釈?
- ヒント: 競合/実現性/水準設定が現実と乖離。設計の見直し
注意点
- 課題数・回答負荷の設計、理解しやすい刺激の提示
- 非現実的な組合せを避ける制約設計
- 推定後は現実のシェア/収益に落とす検証が必要
関連と次の一歩
判断の土台として押さえておくこと
- 部分効用・重要度・WTPを押さえる:属性水準の選好への寄与(部分効用)、属性ごとの寄与割合(重要度)、価格軸で換算した支払意思額(WTP)。競合・コストと併せて判断する。
- 設計で負荷を抑える:属性が多すぎる場合は最適設計で候補を圧縮し、パイロットで課題数を調整。CBC(選択型)が実務で一般的。
- 目的→設計→推定→解釈の順:何を判断するか(価格・仕様・プラン)を決めてから、属性・水準と設計を決める。
よくある質問(FAQ)
- Q: 属性が多すぎて負荷が高い
- A: 最適設計で候補を圧縮、パイロットで課題数を調整
- Q: 価格感度はどう読む?
- A: 価格係数から WTP を算出し、競合・コストと併せて判断
コンジョイント分析についてのご相談はこちら