コンジョイント分析とは、顧客が商品やサービスの持つ複数の属性について、どの点を重要視しているかを探る調査手法だ。例えば、あなたがパソコンを購入する場合を考えてみて欲しい。スペックだけで購入を決定しているだろうか。また、デザインだけで購入を決定しているだろうか。おそらくそうでないはずだ。パソコンは非常に多種多様な製品が市場に出回っているため、何点かに購入候補を絞ってその中から選んでいると思う。この何点かに購入候補を絞り購入まで至る際に、スペック、デザイン、アフターサービス、初期ソフトの充実、価格などの属性を考慮しているはずだ。この各属性の重要性を数値化して把握するのがコンジョイント分析という手法である。

なぜ商品やサービスの持つ各属性の重要性を数値化して把握することが必要なのだろうか。それは商品やサービスの供給者側となって考えてみれば明らかだ。あなたがパソコンの供給者側になったときを想像して欲しい。最先端のスペックで洗練されたデザインを持ち長期間のアフターサービスで、ソフトが充実しており、なおかつ一般的な普及帯価格で顧客に提供できたら、かなりの市場シェアを取ることができるだろう。しかし、これは非常に困難であることは明白だ。最先端のスペックと一般的な普及帯価格の両立は困難であるし、その他も同様だ。つまり、供給者側として、どこに一番ニーズがあるか、言い換えればどこの市場が有望であるかを把握することが非常に重要であるということだ。

ここではR言語のconjointパッケージを用いて実際のコンジョイント分析について説明する。データはconjointパッケージに付属するサンプルデータteaを用いた。

Conjointパッケージのインストールと読み込み

まず、R言語でコンジョイント分析を行うための準備を行う。Rを立ち上げ以下のコマンドを実行する。


> #conjointパッケージのインストール
> install.packages("conjoint")
> #conjointパッケージの読み込み
> library("conjoint")
> #teaデータの読み込み
> data(tea)

商品を属性・水準に分解する

あなたがお茶専門店の経営者で品揃えに悩んでいたとしよう。どのような商品が顧客に支持されるか顧客アンケートをとり、評価点を10点満点で採点してもらうことにしたとしよう。そこで、お茶を以下の属性および水準に分解したとする。

  • price:low、medium、highの3水準
  • variety:black、green、redの3水準
  • kind:bags、granulated、leafyの3水準
  • aroma:yes、noの2水準

具体的には、price、variety、king、aromaがそれぞれlow、black、bags、yesの商品の評価点は何点か。price、variety、king、aromaがそれぞれmedium、green、granulated、noの商品の評価点は何点かという具合である。つまり、アンケート項目としては3×3×3×2=54項目となるが、アンケートの質問数としては多いと感じるのではないだろうか。そこで、直交表というものを用いる。これを用いれば、質問数を減らして、なおかつ評価されていない残りの商品も評価できるのである。

補足として、なぜこのように質問するのか答えよう。例えば、priceからlow、medium、highを一つ選んで、varietyからblack、green、redを一つ選んで・・・といった方法の場合は、おそらく質問が「あなたが今すぐ飲みたいお茶はどのようなものですか」といったものになりアンケート回答者から得られるデータが一つとなってしまう。果たしてそれは正しいデータだろうか。アンケートを取った時点では正しいものかもしれないが、一週間後同じ人に同様のアンケートを取った場合、同じ結果が得られるであろうか。おそらく違うものになっていると思う。つまり、このようなデータを集めても活用するときにはあまり意味のないものになっている可能性がある。それよりもどの項目を重要視するか、つまり購買行動を知るほうがより有意義に活用できるのである。

直交表を作成する

直交表を作成する場合は、自力で作成することは大変煩雑なためプログラムの力を使う必要がある。R言語で直交表を作る手順は以下のようになる。


> #因子の組み合わせを作成
> experiment<-expand.grid(
+     price=c("low","medium","high"),
+     variety=c("black","green","red"),
+     kind=c("bags","granulated","leafy"),
+     aroma=c("yes","no"))
> #因子の直交表を作成
> design<-caFactorialDesign(data=experiment,type="orthogonal")
> #因子の直交表を表示
> print(design)
    price variety       kind aroma
7     low     red       bags   yes
11 medium   black granulated   yes
24   high   green      leafy   yes
30   high   black       bags    no
32 medium   green       bags    no
40    low   green granulated    no
45   high     red granulated    no
46    low   black      leafy    no
53 medium     red      leafy    no
> #因子の直交表をコード化
> code<-caEncodedDesign(design)
> #コード化された直交表の表示
> print(code)
   price variety kind aroma
7      1       3    1     1
11     2       1    2     1
24     3       2    3     1
30     3       1    1     2
32     2       2    1     2
40     1       2    2     2
45     3       3    2     2
46     1       1    3     2
53     2       3    3     2
> #相関係数の表示
> print(cor(code))
        price variety kind aroma
price       1       0    0     0
variety     0       1    0     0
kind        0       0    1     0
aroma       0       0    0     1

因子の直交表で表示されている(low,red,bags,yes)、・・・(medium,red,lefy,no)までの9通りの商品をアンケートに載せれば良い。全体の54通りからみればずいぶんと減った数である。なぜこのようなことができるのかというと、最後の相関係数の表示を見ると、異なる要素間での相関係数が0となっているためである。つまり、9通りの商品から4つの要素がそれぞれ独立して取り出せることを意味している。

ここではサンプルデータteaの中にすでにあるものを用いる。


> #商品プロファイル-アンケートに記載する13個の商品
> print(tprof)
   price variety kind aroma
1      3       1    1     1
2      1       2    1     1
3      2       2    2     1
4      2       1    3     1
5      3       3    3     1
6      2       1    1     2
7      3       2    1     2
8      2       3    1     2
9      3       1    2     2
10     1       3    2     2
11     1       1    3     2
12     2       2    3     2
13     3       2    3     2
> #各水準のラベル
> print(tlevn)
       levels
1         low
2      medium
3        high
4       black
5       green
6         red
7        bags
8  granulated
9       leafy
10        yes
11         no

アンケート分析

100人にアンケートを行い13個の商品をそれぞれ10点満点で評価してもらったとしよう。その結果が以下のようになったとする。各行はアンケート回答者一人ひとりの回答であり、各列は商品に該当する。


> #最初のデータのみ表示
> head(tprefm)
  profil1 profil2 profil3 profil4 profil5 profil6 profil7 profil8 profil9 profil10 profil11 profil12 profil13
1       8       1       1       3       9       2       7       2       2        2        2        3        4
2       0      10       3       5       1       4       8       6       2        9        7        5        2
3       4      10       3       5       4       1       2       0       0        1        8        9        7
4       6       7       4       9       6       3       7       4       8        5        2       10        9
5       5       1       7       8       6      10       7      10       6        6        6       10        7
6      10       1       1       5       1       0       0       0       0        0        0        1        1

これをもとにR言語でコンジョイント分析を行うと以下のようになる。ここでは、Conjoint関数を実行した際に出力されるデータの読み方については省略させていただき、同時に出力されるグラフを元に説明していく。


> Conjoint(tprefm, tprof, tlevn)

Call:
lm(formula = frml)

Residuals:
    Min      1Q  Median      3Q     Max
-5,1888 -2,3761 -0,7512  2,2128  7,5134 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)
(Intercept)         3,55336    0,09068  39,184  < 2e-16 ***
factor(x$price)1    0,24023    0,13245   1,814    0,070 .
factor(x$price)2   -0,14311    0,11485  -1,246    0,213
factor(x$variety)1  0,61489    0,11485   5,354 1,02e-07 ***
factor(x$variety)2  0,03489    0,11485   0,304    0,761
factor(x$kind)1     0,13689    0,11485   1,192    0,234
factor(x$kind)2    -0,88977    0,13245  -6,718 2,76e-11 ***
factor(x$aroma)1    0,41078    0,08492   4,837 1,48e-06 ***
---
Signif. codes:  0 ‘***’ 0,001 ‘**’ 0,01 ‘*’ 0,05 ‘.’ 0,1 ‘ ’ 1

Residual standard error: 2,967 on 1292 degrees of freedom
Multiple R-squared:  0.09003,   Adjusted R-squared:  0.0851
F-statistic: 18.26 on 7 and 1292 DF,  p-value: < 2,2e-16

[1] "Part worths (utilities) of levels (model parameters for whole sample):"
       levnms    utls
1   intercept  3,5534
2         low  0,2402
3      medium -0,1431
4        high -0,0971
5       black  0,6149
6       green  0,0349
7         red -0,6498
8        bags  0,1369
9  granulated -0,8898
10      leafy  0,7529
11        yes  0,4108
12         no -0,4108
[1] "Average importance of factors (attributes):"
[1] 24,76 32,22 27,15 15,88
[1] Sum of average importance:  100,01
[1] "Chart of average factors importance"

以下の「price-utility」のグラフからpriceに対してlowの商品が最も高評価となっており、反対にpriceに対してmediumの商品が最も低評価となっていることが分かる。conjoint-price
以下の「variety-utility」のグラフからvarietyに対してblackの商品が最も高評価となっており、反対にvarietyに対してredの商品が最も低評価となっていることが分かる。

conjoint-variety

以下の「kind-utility」のグラフからkingに対してleadyの商品が最も高評価となっており、反対にgranulatedの商品が最も低評価となっていることが分かる。

conjoint-kind

以下の「aroma-utility」のグラフからaromaがyesの商品は高評価で、noの商品は低評価となっていることが分かる。

conjoint-aroma

以下の「Factors-Average importance」のグラフからvariety、kind、price、aromaの順で全体的な評価に影響を与えることが分かる。

conjoint-factors

以上をまとめると、priceがlow、varietyがblackまたはgreen、kindがbagsまたはleafy、aromaがyesの商品が評価が比較的評価が高い商品であることが分かる。また、priceが全体的に与える影響が低いことと、priceのhighが比較的影響が少ないことから、priceがhighの商品も魅力あるものとしてみることができる。

クラスター分析

R言語のconjointパッケージを用いると簡単にクラスター分析ができるので簡単に見ておこう。クラスター分析を行えば、アンケート回答が似通った回答者で分類することができる。以下は5つで分類したものである。Clustering vectorをみると回答者順にどのクラスターに属するのかが分かる。


> #5つのクラスターに分類
> caSegmentation(tprefm,tprof,5)
K-means clustering with 5 clusters of sizes 23, 12, 8, 37, 20

Cluster means:
      [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]      [,8]     [,9]     [,10]    [,11]     [,12]     [,13]
1 3.493217 4.425000 3.103261 3.632348 5.346739 1.476000 4.380348 2.1383043 1.338304 1.0801739 2.799174 4.5194783 5.5716522
2 3.098333 6.501167 3.834500 3.098333 2.717833 5.776750 4.160083 7.1300000 2.930000 7.5690000 5.596667 4.1600833 2.4267500
3 5.442000 4.105000 7.030000 7.042000 6.005000 6.646500 6.996500 5.9345000 6.909500 4.1855000 5.584500 8.5965000 8.2715000
4 5.464919 2.646784 1.257595 4.659514 1.781919 3.988622 1.177811 0.9651081 3.029973 0.1449459 3.613757 0.3724054 0.5183514
5 4.930900 6.352900 3.822900 8.470900 6.372900 3.554900 3.574900 1.5366000 2.186600 1.4904500 8.256600 7.1149000 7.0349000

Clustering vector:
  [1] 1 2 5 3 3 4 1 2 5 5 5 5 4 4 4 4 2 4 1 4 1 5 4 1 1 1 2 1 3 3 4 1 2 5 5 5 5 4 4 4 4 2 4 1 4 1 5 4 4 4 1 4 4 4 5 5 4 3 1
 [60] 1 4 4 1 1 2 1 4 4 4 5 5 4 1 2 5 3 3 4 1 1 2 1 3 5 4 4 4 4 2 4 2 4 1 4 1 5 4 2 5 5

Within cluster sum of squares by cluster:
[1] 1243.8157  396.4692  278.5669 1399.7583  721.3690
 (between_SS / total_SS =  56.4 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"

まとめ

ここまで、コンジョイント分析について一通りみてきた。コンジョイント分析を行えば、商品やサービスの持つ各属性がどの程度影響を与えているのかが数値としてはっきりと示されることが分かったと思う。つまり、より具体的に顧客に対して訴求すべきポイントがどこあるのかを知ることができるのである。今まで、経験や勘で商品やサービスの設計・提供を行っていたら、一度コンジョイント分析を活用して商品やサービスの設計を行ってみてはどうだろうか。

関連する記事

  • アンケートの自由記述からニーズを抽出する方法アンケートの自由記述からニーズを抽出する方法 アンケートは様々な場面で有効活用されていると思うが、特に、「年齢」などの数量回答や、「男性・女性」、「満足度の5段階評価」などの単一回答、「購入動機を3つまで回答してください」などの複数回答は、集計や分析がしやすいため、重点的に活用していることだろう。 回答者の立場で考えると、数量回答・単一回答・複数回答は、設問者からの問いかけに対し、返答があらかじめ用意されていること […]
  • 顧客満足度調査から重要な改善点を導く方法顧客満足度調査から重要な改善点を導く方法 顧客満足度調査とは、顧客に対して提供している商品やサービスに対して、顧客がどれだけ満足しているか、または不満を持っているか、満足している点はどこか、不満を持っている点はどこかなどをアンケートなどにより調査することだ。 顧客満足度調査の結果は、各項目ごとに平均値を出したり、棒グラフやレーダーチャートにすることが多い。 もし、あなたが顧客満足度調査の結果を見て、「ある […]
  • 適切な回答を得るためのアンケートの作り方適切な回答を得るためのアンケートの作り方 アンケートは正しく質問をしないと、適切な回答が得られずにアンケートが持つ情報の価値が半減すると言っても過言ではない。 アンケートを回答しているときの気持ちを思い出して欲しい。おそらく、さっさと終わらせようと思いながら回答用紙に記入しているのではないだろうか。 あなたが質問者の側になったときは、この気持ちを常に念頭に置いて質問を考えよう。 ここでは、質問を作成 […]
  • 決定木 – 回帰木決定木 – 回帰木 ここでは、決定木の目的変数が連続値である場合の回帰木について、R言語の「rpart」パッケージを用いて簡単に見ていく。 まずは必要となるパッケージのインストールとロードを行う。「rpart」パッケージは決定木を行うためのものだが、「rpart.plot」と「partykit」パッケージは結果を視覚的に表示するために使うので、あらかじめインストールとロードをしておく。 […]
  • Googleアナリティクスとコレスポンデンス分析を用いた年齢別のユーザー像の捉え方Googleアナリティクスとコレスポンデンス分析を用いた年齢別のユーザー像の捉え方 ページビュー数やコンバージョン率を上げるためには、良質なコンテンツが大切であるとよく言われる。そして、良質なコンテンツを作成するためには、ユーザー像を具体的に思い描き、そのユーザーに向けてコンテンツを作成しなくてはならない。 ここでは、ページビュー数から年齢とページの関係性を視覚的に確認し、年齢別にユーザーがどのコンテンツに興味を抱くか、その傾向を探っていく。この傾向が […]
商品開発に役立つコンジョイント分析の仕方

One thought on “商品開発に役立つコンジョイント分析の仕方

Comments are closed.