Slide 1

Slide 1 text

Rでコンジョイント分析
 (2024年版)
 Tokyo.R #114 2024/07/13 @bob3bob3

Slide 2

Slide 2 text

余談:モザイクプロット

Slide 3

Slide 3 text

モザイクプロットはクロス集計の可視化手法 投票率が考慮されて いないので、これは これで改善の余地が ありますが。

Slide 4

Slide 4 text

mosaicplot() penguins |> mosaicplot( ~ species + island, data = _, color = TRUE, main = "mosaicplot()" )

Slide 5

Slide 5 text

ggmosaic::geom_mosaic() library(ggplot2) library(ggmosaic) penguins |> ggplot() + geom_mosaic( aes( x = product(species, island), fill = species ) ) + labs( x="island", y="species", title = "ggmosaic::geom_mosaic()" ) + coord_equal() + coord_flip()

Slide 6

Slide 6 text

本題

Slide 7

Slide 7 text

Tokyo.R #30 (2013年4月) https://speakerdeck.com/bob3bob3/tokyor-number-30-konziyointofen-xi Togetterも残ってます。https://togetter.com/li/491135

Slide 8

Slide 8 text

コンジョイント分析とは? ● マーケティングリサーチで使われる手法の一つ。
 ● 消費者が商品やサービスのどんな要素を重視しているのかを探るための方法。
 ● 商品やサービスを要素に分解し、それを様々に組み合わせたものを消費者に評価 させ、どんな組み合わせにするとどんな評価が得られるのかを推定する。
 ● A/Bテストの派生である多変量テストと基本的な考え方は同じ。


Slide 9

Slide 9 text

なぜコンジョイント分析を使うのか?
 ● 消費者自身は、自分がどんな要素がどれくらい重視しているのかに自覚的ではな いことが多い。 ● だから、個別の要素についての直接的に重要度を尋ねることはあまり有効とは言 えない。 ● また個々の要素同士がトレードオフの関係にあることもしばしば。 ● だから、組み合わせを全体として評価を測定し、分析をする。

Slide 10

Slide 10 text

商品やサービスを要素に分解とは? ● 本格デジカメの構成要素、8属性、各2水準。 ○ レンズ 〔交換式/固定〕 ○ ミラーの有無〔一眼レフ/ミラーレス〕 ○ 本体の色 〔黒/黄色〕 ○ センサーサイズ 〔フルサイズ/APS-C〕 ○ HDR機能 〔有り/無し〕 ○ 電子水準器 〔有り/無し〕 ○ 動画撮影 〔有り/無し〕 ○ WiFi 〔有/無〕 ● 弁当[主食/主菜の量/主菜/副菜/価格] ● パソコン[OS/CPU/メモリ/ストレージ/メーカー/価格] ● 賃貸住宅[駐車場/駅距離/収納/風呂/セキュリティ/間取り/家賃]

Slide 11

Slide 11 text

要素の組み合わせを考えると? ● 要素の組み合わせをコンジョイント分析ではプロファイルと呼びます。 ● 8属性、各2水準の全プロファイルは、2^8 = 256組。 ● 全組み合わせについて評価してもらえば、最も購買意欲を高める組み合わせは自 ずとわかるが、現実的ではない。

Slide 12

Slide 12 text

そこで直交計画 ● 実験計画法の世界で生まれた実験の回 数を少なくするテクニック。
 ○ 直交表と呼ばれる「どの属性でも全ての要 素が同じ数だけ出現する、すべて異なる組 み合わせの表」を使う。
 ○ 直交表は各列間の相関係数がゼロにな る。
 ○ L8直交表なら全組み合わせで128通りの実 験が必要なところが8通りの実験で済む (交互作用を考えない場合)。 
 ○ それでも実験数が減らせない場合、直交性 を妥協して実験数を減らす場合もある。 
 ● 面倒臭いからここはRに任せたい。
 詳しくは第22回Tokyo.Rでの @itoyan さん の発表 資料を参照してください。 「Rで実験計画法(後編)」 http://www.slideshare.net/itoyan110/r14261638

Slide 13

Slide 13 text

アンケートでの質問形式 ● 評定型 ○ 順位付け「1位からn位まで順位を付けてください」 ○ 評点評価「10点満点で点数を付けてください」 ○ 分析には回帰分析を使う。 ● 選択型 ○ 「(2つのプロファイルを呈示して) 1つ選んでください」 ○ 分析には条件付きロジット分析(多項ロジット)を使う。

Slide 14

Slide 14 text

結果の解釈と使い方 ● 効用値は各水準が、重要度は各属性が全体評価に対してどの程度影響するかを 示す。
 ○ これにより、どんな組み合わせがどんな評価を得るか推定することができる。 
 ○ また、回答者の属性(性別、年齢など)別に分析することで、ターゲットごとにどんな商品が高い評 価を得そうかを推定できる。 
 ○ さらに、個人別に分析を行い、その結果に基づいてクラスタリングを行い、重視する属性の違いに 基づくセグメンテーションなども可能(ベネフィットセグメンテーション)。 


Slide 15

Slide 15 text

Rでコンジョイント分析 評定型はconjointパッケージ、選択型はcbcToolsパッケージを使うのが便利。

Slide 16

Slide 16 text

conjointパッケージで評定型コンジョイント分析

Slide 17

Slide 17 text

conjointパッケージで評定型コンジョイント分析 library(conjoint) # 属性と水準の指定 full_set <- expand.grid( レンズ = c("交換式", "固定"), ミラー = c("一眼レフ", "ミラーレス"), 本体の色 = c("黒", "黄色"), センサーサイズ = c("APS-C", "マイクロフォーサーズ "), HDR機能 = c("無し", "有り"), 電子水準器 = c("無し", "有り"), 動画撮影 = c("無し", "有り"), WiFi = c("無し", "有り") ) # 直交計画によるプロファイル生成 design <- caFactorialDesign(full_set, type="orthogonal")

Slide 18

Slide 18 text

conjointパッケージで評定型コンジョイント分析 ● conjoinパッケージに入っているお茶の調査データを分析 ○ 属性と水準と組み合わせ ■ price:3水準(low, medium, high) ■ variety:3水準(black, green, red) ■ kind:3水準(bags, granulated, leafy) ■ aroma:2水準(yes, no) ○ 100名に13通りの組み合わせを 10点満点で評価させたデータ。

Slide 19

Slide 19 text

conjointパッケージで評定型コンジョイント分析 # Conjoint(評価のマトリクス , コード化されたプロファイル , 各水準のラベル ) Conjoint(tprefm, tprof, tlevn) # [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" 効用値 重要度

Slide 20

Slide 20 text

cbcToolsパッケージで選択型コンジョイント分析

Slide 21

Slide 21 text

cbcToolsパッケージで選択型コンジョイント分析

Slide 22

Slide 22 text

cbcToolsパッケージで選択型コンジョイント分析 # remotes::install_github("jhelvy/cbcTools") library(cbcTools) #選択型コンジョイント分析 # 属性と水準の指定 profiles <- cbc_profiles( レンズ = c("交換式", "固定"), ミラー = c("一眼レフ", "ミラーレス"), 本体の色 = c("黒", "黄色"), センサーサイズ = c("APS-C", "マイクロフォーサーズ "), HDR機能 = c("無し", "有り"), 電子水準器 = c("無し", "有り"), 動画撮影 = c("無し", "有り"), WiFi = c("無し", "有り") ) #プロファイルの生成 set.seed(123) design <- cbc_design( profiles = profiles, # 調査対象者数 n_resp = 100, # 1問あたりの選択肢数。「どれも選ばない」は除く n_alts = 2, # 調査対象者あたり質問数 n_q = 6, # 「どれも選ばない」を含める no_choice = FALSE, # 実験計画の生成方法 method = "orthogonal" )

Slide 23

Slide 23 text

cbcToolsパッケージで選択型コンジョイント分析

Slide 24

Slide 24 text

cbcToolsパッケージで選択型コンジョイント分析 回答者 質問番号 選択肢番号 観測番号

Slide 25

Slide 25 text

cbcToolsパッケージで選択型コンジョイント分析 1人分

Slide 26

Slide 26 text

cbcToolsパッケージで選択型コンジョイント分析 1問分

Slide 27

Slide 27 text

cbcToolsパッケージで選択型コンジョイント分析 # ダミーデータ生成 data <- cbc_choices(design = design, obsID = "obsID") 回答結果

Slide 28

Slide 28 text

cbcToolsパッケージで選択型コンジョイント分析 # 効用値の推定 power <- cbc_power( data = data, pars = c( "レンズ", "ミラー", "本体の色", "センサーサイズ", "HDR機能", "電子水準器", "動画撮影", "WiFi" ), outcome = "choice", #回答カラム名 obsID = "obsID", #通し質問ID名 nbreaks = 1, #全体なら1 n_q = 6 #調査対象者1名あたりの質問数 ) # ダミー変数化でdropされた水準の効用値を計算 res <- power |> bind_rows( data.frame( samplesize = rep(100, 8), coef = str_replace_all( power$coef, pattern="1", replacement="2"), est = 0 - power$est, se = power$se ) ) |> mutate( pars = str_remove_all(coef, pattern="1|2") )

Slide 29

Slide 29 text

cbcToolsパッケージで選択型コンジョイント分析 # 効用値の可視化 library(tidyverse) res |> ggplot(aes( x = est, y = coef, group = pars, fill = pars )) + geom_col() + labs( x = "効用値", y = "水準", fill = "属性" )

Slide 30

Slide 30 text

Enjoy!