Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rでコンジョイント分析 2024年版
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
bob3bob3
July 13, 2024
Business
2.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rでコンジョイント分析 2024年版
Rでコンジョイント分析 2024年版
bob3bob3
July 13, 2024
More Decks by bob3bob3
See All by bob3bob3
RとLLMで自然言語処理
bob3bob3
3
940
RでPSM分析
bob3bob3
1
450
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.5k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
660
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
600
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
670
qeMLパッケージの紹介
bob3bob3
0
2.8k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
670
パーマーステーションのペンギンたち#3 探索的データ分析(EDA)編
bob3bob3
1
860
Other Decks in Business
See All in Business
会社紹介資料
sbs5780
0
1.2k
株式会社うるる エンジニア向け採用資料
uluru_hr
3
130k
Corporate Story (GA technologies Co., Ltd.)
gatechnologies
0
970
Sotas Company Deck / 会社紹介資料
sotas
0
2.1k
【結果報告】Claude×Linearで会社のタスク管理をAIにまかせて1ヶ月。業務効率150%向上したが、AIネイティブカンパニーを目指すならもっと「加速への狂気」が必要
nagatsu
1
600
NOROSHI inc_COMPANY DECK
noroshi
0
410
CC採用候補者向けピッチ資料
crosscommunication
2
59k
روشهای افزایش ممبر ایتا
maronpocar12
1
230
スマートキャンプ株式会社 会社紹介資料 / companydeck
smartcamp
1
4.5k
株式会社ルクレ新卒向け採用ピッチ
lecre
0
490
Executive Strategy Management: FinOps X 2026 recap at Japan FinOps Meetup #6
shungoa
0
140
okr and devops -- Why OKRs Fail and DevOps as the Practice to Make Them Work
ikuodanaka
0
2.5k
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
260
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
160
Utilizing Notion as your number one productivity tool
mfonobong
4
330
Marketing to machines
jonoalderson
1
5.5k
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
How to build a perfect <img>
jonoalderson
1
5.7k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
240
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
Rでコンジョイント分析 (2024年版) Tokyo.R #114 2024/07/13 @bob3bob3
余談:モザイクプロット
モザイクプロットはクロス集計の可視化手法 投票率が考慮されて いないので、これは これで改善の余地が ありますが。
mosaicplot() penguins |> mosaicplot( ~ species + island, data =
_, color = TRUE, main = "mosaicplot()" )
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()
本題
Tokyo.R #30 (2013年4月) https://speakerdeck.com/bob3bob3/tokyor-number-30-konziyointofen-xi Togetterも残ってます。https://togetter.com/li/491135
コンジョイント分析とは? • マーケティングリサーチで使われる手法の一つ。 • 消費者が商品やサービスのどんな要素を重視しているのかを探るための方法。 • 商品やサービスを要素に分解し、それを様々に組み合わせたものを消費者に評価 させ、どんな組み合わせにするとどんな評価が得られるのかを推定する。 • A/Bテストの派生である多変量テストと基本的な考え方は同じ。
なぜコンジョイント分析を使うのか? • 消費者自身は、自分がどんな要素がどれくらい重視しているのかに自覚的ではな いことが多い。 • だから、個別の要素についての直接的に重要度を尋ねることはあまり有効とは言 えない。 • また個々の要素同士がトレードオフの関係にあることもしばしば。 •
だから、組み合わせを全体として評価を測定し、分析をする。
商品やサービスを要素に分解とは? • 本格デジカメの構成要素、8属性、各2水準。 ◦ レンズ 〔交換式/固定〕 ◦ ミラーの有無〔一眼レフ/ミラーレス〕 ◦ 本体の色
〔黒/黄色〕 ◦ センサーサイズ 〔フルサイズ/APS-C〕 ◦ HDR機能 〔有り/無し〕 ◦ 電子水準器 〔有り/無し〕 ◦ 動画撮影 〔有り/無し〕 ◦ WiFi 〔有/無〕 • 弁当[主食/主菜の量/主菜/副菜/価格] • パソコン[OS/CPU/メモリ/ストレージ/メーカー/価格] • 賃貸住宅[駐車場/駅距離/収納/風呂/セキュリティ/間取り/家賃]
要素の組み合わせを考えると? • 要素の組み合わせをコンジョイント分析ではプロファイルと呼びます。 • 8属性、各2水準の全プロファイルは、2^8 = 256組。 • 全組み合わせについて評価してもらえば、最も購買意欲を高める組み合わせは自 ずとわかるが、現実的ではない。
そこで直交計画 • 実験計画法の世界で生まれた実験の回 数を少なくするテクニック。 ◦ 直交表と呼ばれる「どの属性でも全ての要 素が同じ数だけ出現する、すべて異なる組 み合わせの表」を使う。 ◦ 直交表は各列間の相関係数がゼロにな
る。 ◦ L8直交表なら全組み合わせで128通りの実 験が必要なところが8通りの実験で済む (交互作用を考えない場合)。 ◦ それでも実験数が減らせない場合、直交性 を妥協して実験数を減らす場合もある。 • 面倒臭いからここはRに任せたい。 詳しくは第22回Tokyo.Rでの @itoyan さん の発表 資料を参照してください。 「Rで実験計画法(後編)」 http://www.slideshare.net/itoyan110/r14261638
アンケートでの質問形式 • 評定型 ◦ 順位付け「1位からn位まで順位を付けてください」 ◦ 評点評価「10点満点で点数を付けてください」 ◦ 分析には回帰分析を使う。 •
選択型 ◦ 「(2つのプロファイルを呈示して) 1つ選んでください」 ◦ 分析には条件付きロジット分析(多項ロジット)を使う。
結果の解釈と使い方 • 効用値は各水準が、重要度は各属性が全体評価に対してどの程度影響するかを 示す。 ◦ これにより、どんな組み合わせがどんな評価を得るか推定することができる。 ◦ また、回答者の属性(性別、年齢など)別に分析することで、ターゲットごとにどんな商品が高い評 価を得そうかを推定できる。
◦ さらに、個人別に分析を行い、その結果に基づいてクラスタリングを行い、重視する属性の違いに 基づくセグメンテーションなども可能(ベネフィットセグメンテーション)。
Rでコンジョイント分析 評定型はconjointパッケージ、選択型はcbcToolsパッケージを使うのが便利。
conjointパッケージで評定型コンジョイント分析
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")
conjointパッケージで評定型コンジョイント分析 • conjoinパッケージに入っているお茶の調査データを分析 ◦ 属性と水準と組み合わせ ▪ price:3水準(low, medium, high) ▪
variety:3水準(black, green, red) ▪ kind:3水準(bags, granulated, leafy) ▪ aroma:2水準(yes, no) ◦ 100名に13通りの組み合わせを 10点満点で評価させたデータ。
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" 効用値 重要度
cbcToolsパッケージで選択型コンジョイント分析
cbcToolsパッケージで選択型コンジョイント分析
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" )
cbcToolsパッケージで選択型コンジョイント分析
cbcToolsパッケージで選択型コンジョイント分析 回答者 質問番号 選択肢番号 観測番号
cbcToolsパッケージで選択型コンジョイント分析 1人分
cbcToolsパッケージで選択型コンジョイント分析 1問分
cbcToolsパッケージで選択型コンジョイント分析 # ダミーデータ生成 data <- cbc_choices(design = design, obsID =
"obsID") 回答結果
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") )
cbcToolsパッケージで選択型コンジョイント分析 # 効用値の可視化 library(tidyverse) res |> ggplot(aes( x = est,
y = coef, group = pars, fill = pars )) + geom_col() + labs( x = "効用値", y = "水準", fill = "属性" )
Enjoy!