階層ロジットモデルを用いた選択型コンジョイントデータの分析
はじめに
マーケティングにおけるベイズ統計の活用事例について学びたいと思い、Bayesian statistics and marketingという書籍を読みました。本記事では10章のCase Study 1: Analysis of Choice-Based Conjoint Data Using A Hierarchical Logit Modelの内容を整理して紹介します。(より詳しく知りたいという方はこの書籍を購入して読んでください。)
この章ではマーケティングリサーチの重要な手法である「コンジョイント分析」に焦点を当てます。中でも、消費者の実際の「選択行動」を分析する選択型コンジョイント(Choice-Based Conjoint, CBC)について、階層ベイズ多項ロジットモデルを用いた分析例を解説します。
通常のコンジョイント分析では、製品プロファイルに対する「好みの度合い」を数値で評価する手法が一般的だと思います。一方、選択型コンジョイントでは、複数の選択肢の中から「最も好ましいもの」を1つ選択してもらいます。この方法は実際の購買行動により近い形式であるため、市場シェアの予測などにより適しているみたいです。
コンジョイント調査の基礎
コンジョイント調査は、回答者が複数の製品プロファイル(選択肢)の中から選択を行う過程を通して、各製品の属性が回答者の意思決定にどのように影響するかを明らかにする手法です。製品プロファイルは、ブランド、価格、機能など複数の属性と、その各属性の水準で構成され、実際の市場に存在しない新製品や改良製品の需要予測にも活用されます。
回答者に複数の代替製品やサービスのプロファイルを提示し、その中から最も好ましいものを選んでもらう一連の設問やシナリオを選択タスクといい、選択型コンジョイント(CBC)調査では、各回答者は通常8~16回の選択タスクを行います。
たとえば、デジタルカメラの調査では、各タスクで4つのカメラプロファイルが提示されます。各プロファイルは異なるブランド、機能、価格などの組み合わせを持ちます。回答者はその中から1台を選ぶか、「これらのいずれでもない」という外部オプションを選ぶことができます。
このような選択タスクを通じて、以下のような回答者の選好を把握することができます:
- どのような属性の組み合わせに魅力を感じるか
- 価格に対する感度がどの程度あるか
- 各属性間のトレードオフをどのように判断するか
調査デザインとデータ構造
-
設計方法
コンジョイント調査では、すべての属性と水準の組み合わせを網羅すると数が膨大になるため、統計的実験計画法を用いて効率的に組み合わせを抽出します。これにより、必要な情報を十分に得られながら、回答者への負担を抑えられます。-
効率的な組み合わせ抽出
全組み合わせを提示せず、統計的実験計画法を利用して、最小限のデザインで効果を推定できるようにします。 -
属性間の相関抑制
属性同士が互いに独立して現れるようにデザインすることで、どの属性が消費者の選好に影響しているのかを明確にし、パラメータ推定の精度を向上させます。 -
回答者負担と推定精度のバランス
過剰なタスクは回答者の疲労を招くため、通常は8~16タスク程度に絞り、十分な情報量と回答の質を両立させるデザインを行います。
-
-
パネルデータ構造
各回答者は複数回の選択タスクに参加するため、データはパネル形式となります。データは以下の2つの要素で構成されます:-
y: 各選択タスクでの選択結果を示す整数値のベクトル
例:[1, 2, 2, 4, ...] (選択タスクの回数分の選択結果) -
X: 各選択タスクで提示された選択肢の属性値を格納した行列
例:
canon sony nikon panasonic pixels zoom video swivel wifi price 1 0 1 0 0 10 1 1 0 1 0.79 2 0 0 0 1 16 0 0 1 1 1.79 3 0 1 0 0 18 1 0 0 0 2.29 4 0 0 1 0 19 0 1 1 1 1.29 5 0 0 0 0 0 0 0 0 0 0.00
-
-
変数のスケーリング
ダミー変数として扱われる属性は基本的にスケーリング不要ですが、価格などの連続変数は、パートワースのスケールを一定に保つため、適切な標準化が推奨されます。
階層的ロジットモデルとベイズ推論の概要
1. 個人レベルの選択モデル
各回答者iの選択タスクtにおける効用関数は以下のように定式化されます:
ここで、
-
は回答者iの選択肢jに対する効用U_{ijt} -
は選択肢jの属性ベクトル(例:ブランド、機能、価格など)a_{jt} -
は回答者iの属性ウェイト(パートワース)\beta_i -
は第一種極値分布(Gumbel分布)に従う誤差項\epsilon_{ijt}
この定式化により、選択肢jが選ばれる確率は以下のロジット形式で表現されます:
外部選択肢(「どれも選ばない」オプション)がある場合は、以下のように修正されます:
2. 回答者の異質性のモデル化
各回答者の選好パラメータ
ここで、
-
は母集団の平均パートワース(全回答者の平均的な選好)\mu_\beta -
は母集団での分散共分散行列(選好の個人差を表現)V_\beta
3. 事前分布の設定と符号制約
ベイズ推論のため、以下の事前分布を設定します:
母集団パラメータに対して:
デフォルトの設定値:
-
(無情報事前分布)\bar{\mu} = 0 -
(弱情報事前分布)a_\mu = 0.01 -
(変数の数に3を加えた値)\nu = nvar + 3 -
(V = \nu I に単位行列を掛けた行列)\nu
価格係数については、経済理論との整合性を保つため、負の制約を課します:
この再パラメータ化により:
- 価格上昇が必ず効用の低下をもたらすことが保証される
- 価格感応度の個人差を適切にモデル化できる
- 支払意思額(WTP)の計算が容易になる
ただし、制約は慎重に適用する必要があるようです:
- 無制約モデルでの推定結果の事前確認
- 制約による暗黙の事前分布の適切性検討
- 属性変数の適切なスケーリング
例:デジタルカメラデータの分析
このケーススタディでは、実際にbayesmパッケージに含まれているデジタルカメラ調査データを用いて、階層的ロジットモデルによるコンジョイント分析の具体的な流れと手法を説明します。
1. 調査設計とデータ概要
調査の基本設計
この調査は、デジタルカメラに関する回答者選好を分析することを主な目的としています。特に、スイベルスクリーン機能の経済的価値を評価することに焦点を当てています。調査対象者は、コンパクトデジタルカメラを所有し、かつ購入時の意思決定に主要な役割を果たした回答者に限定しています。
調査実施概要
調査は2013年8月に、Sampling Surveys Internationalのインターネットパネルを通じて実施されました。回答方式には、デュアルレスポンスモード方式を採用しました。この方式では、まず回答者に4つの仮想製品プロファイルから最も好ましいものを選択してもらい、次にその選択したプロファイルについて実際の購入意向を確認します。購入意向がない場合は「外部オプション」として記録する形式を取りました。
製品属性設計
製品属性は以下の4つのカテゴリー(ブランド、技術的特徴、機能性、価格)から設計されました:
属性カテゴリー | 属性 | 水準 |
---|---|---|
ブランド | メーカー | Canon Sony Nikon Panasonic |
技術的特徴 | 画素数 | 10メガピクセル 16メガピクセル |
光学ズーム | 4x 10x |
|
ビデオ機能 | HD Full HD |
|
機能性 | スイベルスクリーン | あり なし |
WiFi | あり なし |
|
価格 | 販売価格 | $79〜$279の範囲 |
データの前処理
回答の品質を確保するため、詳細な時間分析と回答パターンの検証を行いました。回答時間の分析では、中央値が220秒(1タスクあたり約14秒)、第25パーセンタイルが151秒、第75パーセンタイルが333秒という結果が得られました。
データの信頼性を高めるため、以下のような基準で回答者の除外を行いました。まず、ストレートライン回答者(2名)を除外しました。ストレートライン回答者とは、16回の選択タスクにおいて、例えば常に左から1番目、または2番目など、同じ位置の選択肢を機械的に選び続ける回答者を指します。このような回答パターンは、回答者が製品の内容を真剣に検討せずに回答している可能性が高いと判断されます。その他、特定ブランドのみを選択し続けた回答者(6名)、高価格ブランドにのみ固執した回答者(2名)、常に外部オプションを選択した回答者(23名)を除外しました。さらに、回答の対数尤度が理論的なランダム回答の値(約-26)に近い回答者も除外対象としました。
これらのデータ処理の結果、当初の501名の回答者から約34%が除外され、最終的な分析対象者は332名となりました。このような20-30%程度の回答者除外は、近年のインターネットパネル調査では一般的な水準とされているらしいです。
2. Rでの実装
書籍通りに実行したものを一応解説します(必要ないと思いますが)
# ライブラリのインストールとデータの読み込み
library("bayesm")
data("camera")
# データ
camera[[2]]$X[1:5,]
# canon sony nikon panasonic pixels zoom video swivel wifi price
# 81 1 0 0 0 1 1 1 0 1 0.79
# 82 0 0 0 1 1 0 0 1 1 1.79
# 83 0 1 0 0 1 1 0 0 0 2.29
# 84 0 0 1 0 1 0 1 1 1 1.29
# 85 0 0 0 0 0 0 0 0 0 0.00
-
camera[[2]]$X[1:5,]
は、bayesmパッケージに含まれているデジタルカメラのサンプルデータの構造を表示しています。
上記のプログラムでは
- camera はリスト形式のデータセットで、各回答者のデータが格納されています
- [[2]] は2番目の回答者のデータを指定しています
- $Xはその回答者の選択タスクで提示された製品プロファイルの属性データを含む行列を指します
- [1:5,] は、その行列の最初の5行を表示することを意味します
# モデルの設定
# 混合正規分布の成分数を1に設定(単一の正規分布を仮定)
# おそらくすべての消費者の選好が単一の正規分布から生成されていると仮定してるっぽい
n_comp = 1
# 変数(属性)の数を10に設定
nvar = 10
# 事前分布の設定
# ncomp=1: 混合成分数1
# SignRes: 最初の9つの係数は符号制約なし(0)、価格係数は負(−1)に制約
Prior1 = list(ncomp=1, SignRes=c(rep(0,9),-1))
# MCMCの反復回数を50000に設定
R = 50000
# MCMCの設定
# R: 反復回数
# keep=10: 10回に1回サンプルを保存
Mcmc1 = list(R=R,keep=10)
# データの設定
# p=5: 各選択タスクでの選択肢数
# lgtdata: カメラデータを指定
Data1 = list(p=5,lgtdata=camera)
# 階層ベイズ多項ロジットモデルの推定実行
out = rhierMnlRwMixture(Data = Data1, Prior = Prior1, Mcmc=Mcmc1)
# 推定結果の構造を表示(最初の4要素まで)
str(out,list.len=4)
# List of 4
# $ betadraw: 'bayesm.hcoef' num [1:332, 1:10, 1:5000] 2.77 -4 4.31 4.73 -1.8 ...
# $ nmix :List of 3
# ..$ probdraw: num [1:5000, 1] 1 1 1 1 1 1 1 1 1 1 ...
# ..$ zdraw : NULL
# ..$ compdraw:List of 5000
# .. ..$ :List of 1
# .. .. ..$ :List of 2
# .. .. .. ..$ mu : num [1:10] 0.4969 0.1789 0.205 -0.0553 1.0612 ...
# .. .. .. ..$ rooti: num [1:10, 1:10] 0.36 0 0 0 0 ...
# .. ..$ :List of 1
# .. .. ..$ :List of 2
# .. .. .. ..$ mu : num [1:10] 0.769 0.439 0.492 0.184 0.812 ...
# .. .. .. ..$ rooti: num [1:10, 1:10] 0.336 0 0 0 0 ...
# .. ..$ :List of 1
# .. .. ..$ :List of 2
# .. .. .. ..$ mu : num [1:10] 0.811 0.524 0.477 0.256 0.952 ...
# .. .. .. ..$ rooti: num [1:10, 1:10] 0.36 0 0 0 0 ...
# .. ..$ :List of 1
# .. .. ..$ :List of 2
# .. .. .. ..$ mu : num [1:10] 0.741 0.438 0.348 0.15 1.094 ...
# .. .. .. ..$ rooti: num [1:10, 1:10] 0.345 0 0 0 0 ...
# .. .. [list output truncated]
# ..- attr(*, "class")= chr "bayesm.nmix"
# $ loglike : num [1:5000, 1] -2640 -2980 -3126 -3214 -3260 ...
# $ SignRes : num [1:10, 1] 0 0 0 0 0 0 0 0 0 -1
-
betadrawの解説
出力オブジェクト
out
の中核となるのは、各回答者ごとにMCMCで得られたパートワースのドロー(betadraw
)です。これは3次元配列となっており、- 第1次元:回答者のインデックス
- 第2次元:属性の数(例:10)
- 第3次元:MCMCの各反復(保存されたドローの数、例:5000)を示しています。各回答者のパートワースの事後分布に基づいた推論や、後続のpWTP(疑似支払意思額)の計算に利用される。
-
混合成分のパラメータ(nmix)の解釈
nmix
オブジェクトには、混合正規分布のパラメータに関するMCMCのドローが格納されています。具体的には:-
probdraw
: 各成分の混合確率 -
zdraw
: 各回答者の所属成分を示す潜在変数(この例ではNULL) -
compdraw
: 各成分の平均ベクトル(mu)と分散共分散行列の逆行列(rooti)
この例では単一成分の正規分布となっているため、probdrawは常に1、zdrawはNULLとなっています。compdrawには各反復での母集団平均(mu)と分散(rooti)が格納され、回答者全体の平均的な選好パターンを把握するために利用されます。
-
# バーンイン期間を1000に設定
BurnIn=1000
# 属性名のベクトルを定義
# カメラのブランド、スペック、価格の各変数名を指定
drawsnames = c("canon", "Sony", "Nikon", "Panasonic", "pixels", "zoom", "video", "swivel", "wifi", "price")
# パラメータの事後分布をプロット
# out$betadrawの各パラメータについて、バーンイン期間後のサンプルをプロット
plot(out$betadraw,names,burnin=BurnIn)
回答者ごとのパートワースの事後分布の箱ひげ図 |
---|
![]() |
上の図では、ランダムに抽出された各回答者に対して推定されたスイベルスクリーン属性と価格のパートワースの事後分布を示しています。箱ひげ図から、ある回答者はこスイベルスクリーンに高い価値を感じる一方で、別の回答者はそれほど重視していないことがわかります。価格の箱ひげ図を見ると、ある回答者は価格に対してかなり鈍感である一方、大多数は非常に敏感です。
パートワースの事後平均のヒストグラム |
---|
![]() |
この図は、選択された各パートワースの事後平均の分布をヒストグラムとして示しています。各属性(例:価格、スイベルスクリーンなど)のパートワースの平均値がどの程度の範囲に分布しているか、中心値や広がりがわかるかと思います。
3. パートワースと支払意思額の推定
-
疑似支払意思額(pWTP)の予測事後分布
パートワースを価格係数で割ることで、金銭的な尺度に変換できます。例えば、スイベルスクリーン機能に対する疑似支払意思額は以下のように定義されます:
pWTP_{SS,i} = \frac{\beta_{SS,i}}{-\beta_{p,i}} ここで、
は回答者\beta_{SS,i} のスイベルスクリーン機能に対するパートワース、i は価格係数(負の値)を表します。価格係数で割ることで、効用を金銭的価値に変換することができます。\beta_{p,i} この計算は、単なる点推定ではなく、予測事後分布として扱われます。具体的には:
E[pWTP_{SS}|\mu_\beta, V_\beta] = \int \frac{\beta_{SS}}{-\beta_p} \phi(\beta|\mu_\beta, V_\beta) d\beta ここで
は多変量正規分布の確率密度関数、\phi と\mu_\beta は母集団分布のパラメータを表します。V_\beta この予測事後分布の計算には、以下の重要な特徴があります:
- 価格係数は常に負の値となるよう、指数変換(-exp)を使用
- 価格が$100単位で記録されているため、計算結果に100を乗じて調整
- 各MCMCイテレーションで4000個のドローを生成し、母集団分布からのサンプリングにより、パラメータの不確実性を考慮
# 混合成分の総数を取得
# MCMCで保存されたドローの数を計算
NIter = length(out$nmix$compdraw)
# 疑似支払意思額(pWTP)の計算
pWTP = matrix(double((NIter-BurnIn)*nvar),ncol=nvar)
beta=matrix(double((NIter-BurnIn)*nvar),ncol=nvar)
pWTP=double(NIter-BurnIn)
for(iter in (BurnIn+1):NIter){
betastar = rmixture(n=4000, pvec=out$nmix$probdraw[iter], comps=out$nmix$compdraw[[iter]])$x
beta = cbind(betastar[,1:9],-exp(betastar[,10]))
pWTP[iter-BurnIn] = mean(100*beta[,8]/-beta[,10])
}
quantile(pWTP,probs=c(.025,.05,.50,.75,.95,.975))
# 2.5% 5% 50% 75% 95% 97.5%
# 28.46349 31.00487 44.49000 50.79850 60.92968 64.50669
mean(pWTP)
# [1] 45.2267
分析結果では、シミュレーションによりこの積分を計算し、平均pWTPが約45ドル、95%事後予測区間が約28~65ドルと推定されています。
4. ビジネスへのインパクト
-
新製品開発と属性設計への示唆
分析結果から得られる各属性の効用ウェイトやpWTPは、企業が新製品の設計や改良を行う上で非常に有用です。
- たとえば、スイベルスクリーン機能に対するpWTPの平均値が45ドル前後であるとすれば、製品にこの機能を追加する際、企業はこの付加価値分の価格を上乗せできる可能性があると判断できます。
- また、回答者ごとの異質性が明らかになれば、ターゲットセグメントごとの属性重視度の違いが理解でき、マーケティングメッセージや製品ラインアップの差別化戦略を策定する際の参考になります。
-
価格戦略の最適化
価格係数の推定結果は、回答者の価格感応度を反映しており、企業はこれを基に価格設定戦略を見直すことが可能です。
- もし大多数の回答者が価格に非常に敏感であれば、低価格戦略や価格競争力を高めるためのコスト削減策が必要とされる一方、価格に鈍感なセグメントが存在する場合、プレミアム製品ラインの開発も検討できます。
-
属性組み合わせのシミュレーションによる最適な製品設計
推定されたパートワースを基に、さまざまな属性の組み合わせに対する全体効用を定量的に算出することが可能となります。これにより、どの属性の組み合わせが市場において高い支持を受けやすいかを予測でき、新製品のコンセプト検討や製品ラインナップの最適化に大いに役立ちます。
まとめ
本記事では、選択型コンジョイント分析における階層ベイズロジットモデルの活用について解説しました。ポイントは以下の通りかと思います:
- 選択型コンジョイント分析は、実際の購買行動に近い形で消費者の選好を把握できる手法です
- 階層ベイズモデルを用いることで、個人レベルの選好の異質性を考慮した分析が可能になります
- 支払意思額(WTP)の推定により、新機能や属性の経済的価値を定量化できます
- 分析結果は、新製品開発、価格戦略、マーケティング施策の最適化など、様々なビジネス判断に活用できます
これらの分析手法は製造業のマーケティングだけでなく、Webサービスの設計にも応用できる可能性がありそうだと思いました。例えば、サブスクプランの設計において、以下のような活用が考えられるかなと思います:
- プランに含める機能の組み合わせの最適化
- 各機能の価値に基づく適切な価格設定
- ユーザーセグメント別の選好分析による差別化戦略
- 新機能追加時の価格改定の判断材料
Discussion