Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TokyoWebmining#03 市場細分化とクラスター分析
Search
bob3bob3
January 12, 2022
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TokyoWebmining#03 市場細分化とクラスター分析
市場細分化とクラスター分析。
2010年4月。
bob3bob3
January 12, 2022
More Decks by bob3bob3
See All by bob3bob3
RとLLMで自然言語処理
bob3bob3
3
1.1k
RでPSM分析
bob3bob3
1
490
Rでコンジョイント分析 2024年版
bob3bob3
0
2.8k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.5k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
670
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
620
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
680
qeMLパッケージの紹介
bob3bob3
0
3k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
680
Other Decks in Programming
See All in Programming
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
430
速習iPhone Duo対応
yuukiw00w
1
550
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
430
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
wkhtmltopdfの次どうするか問題2026
willnet
2
1.3k
setup-vp GitLab対応の裏側
naokihaba
0
110
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
290
スマート反転とウェブアクセシビリティ
camiha
0
210
Intent as Code
shoppingjaws
6
1k
Are APIs Still Relevant in the AI Era?
soyuka
0
250
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
How GitHub (no longer) Works
holman
316
150k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building the Perfect Custom Keyboard
takai
2
880
Leo the Paperboy
mayatellez
10
2.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
510
Transcript
2010/04/17 Tokyo.Webmining #3 Tokyo.Webmining #3 『市場細分化とクラスター分析』 『市場細分化とクラスター分析』 Bob#3 Bob#3
自己紹介 自己紹介 • 【はてな】 【はてな】 id:bob3 id:bob3 • 【 【
Twitter Twitter 】 】 @bob3bob3 @bob3bob3 • バリバリの文系です。 バリバリの文系です。 • 仕事はマーケティング・リサーチャー。 仕事はマーケティング・リサーチャー。 • 本日はマーケティングの中で「クラスター分析」が、どのよ 本日はマーケティングの中で「クラスター分析」が、どのよ うに使われているか、その一例をお話します。 うに使われているか、その一例をお話します。
STP戦略 STP戦略 • 市場が成熟し消費者の行動や価値観も多様化し 市場が成熟し消費者の行動や価値観も多様化し た今日にあって、ひとつの製品やサービスで市場 た今日にあって、ひとつの製品やサービスで市場 のすべてのニーズを満たすことはできない。 のすべてのニーズを満たすことはできない。 •
そこで必要になるのが「STP戦略」というフレーム そこで必要になるのが「STP戦略」というフレーム ワーク。 ワーク。 • Segmentation Segmentation – 市場(消費者)をいくつかのグループに細分化。 市場(消費者)をいくつかのグループに細分化。 • Targeting Targeting – ターゲットとなるグループを選択。 ターゲットとなるグループを選択。 • Positioning Positioning – どんな価値を提供するのかを明確にする。 どんな価値を提供するのかを明確にする。
市場細分化 市場細分化 Segmentation Segmentation 10 代 60 代 50 代
40 代 30 代 20 代 男 性 女 性 市 場 全 体 • セグメントごとに セグメントごとにマーケティング・ミックス マーケティング・ミックスを決定する。 を決定する。
マーケティング・ミックス マーケティング・ミックス • 製品( 製品( Product Product ) ) –
仕様、機能、性能、パッケージなど 仕様、機能、性能、パッケージなど • 価格( 価格( Price Price ) ) – 小売価格、値引き、特売など 小売価格、値引き、特売など • 流通( 流通( Place Place ) ) – 販売経路など 販売経路など • プロモーション( プロモーション( Promotion Promotion ) ) – 広告、PR、パブリシティ、イベント、キャンペーンなど 広告、PR、パブリシティ、イベント、キャンペーンなど
ダニエル・ヤンケロビッチ曰く ダニエル・ヤンケロビッチ曰く • 「年齢、性別、学歴、年収など、従来のデモグラ 「年齢、性別、学歴、年収など、従来のデモグラ フィックスは、すでにマーケティング戦略の拠りどこ フィックスは、すでにマーケティング戦略の拠りどこ ろとしては不十分である。」 ろとしては不十分である。」 •
「それよりも、 「それよりも、価値観や嗜好、選好といった特性 価値観や嗜好、選好といった特性の の ほうが、消費者の購買行動への影響が大きい。」 ほうが、消費者の購買行動への影響が大きい。」 • 「適切なマーケティング戦略を立案するには、まず 「適切なマーケティング戦略を立案するには、まず 特定のブランドや商品カテゴリーを受け入れそうな 特定のブランドや商品カテゴリーを受け入れそうな 市場セグメントを特定することである。」 市場セグメントを特定することである。」 • 社会心理学者。 社会心理学者。 • 1964年のお話。 1964年のお話。
市場細分化の基準 市場細分化の基準 • 客観的基準 客観的基準 • デモグラフィック(人口統計学的基準) デモグラフィック(人口統計学的基準) – 年齢、性別、所得、家族構成、職業、ライフステージなど
年齢、性別、所得、家族構成、職業、ライフステージなど • ジオグラフィック(地理的基準) ジオグラフィック(地理的基準) – 居住地、気候、文化など 居住地、気候、文化など • 主観的基準 主観的基準 • サイコグラフィック(心理的基準) サイコグラフィック(心理的基準) – 価値観、嗜好、性格、ライフスタイルなど 価値観、嗜好、性格、ライフスタイルなど • ビヘイビアル(行動的基準) ビヘイビアル(行動的基準) – 使用頻度、使用の仕方、求めるベネフィットなど 使用頻度、使用の仕方、求めるベネフィットなど
今回使うデータ 今回使うデータ • 『経済・経営のための統計学』 『経済・経営のための統計学』 • 有斐閣 有斐閣 • Rを使った分析例も一部載って
Rを使った分析例も一部載って ます。 ます。 • 第8章「マーケティング」で使わ 第8章「マーケティング」で使わ れているデータを使わせていた れているデータを使わせていた だきます。 だきます。
缶コーヒーに関するアンケート 缶コーヒーに関するアンケート • 調査票 調査票 • http://yuhikaku-nibu.txt-nifty.com/blog/files/COFFEE-survey.pdf http://yuhikaku-nibu.txt-nifty.com/blog/files/COFFEE-survey.pdf • データ
データ • http://yuhikaku-nibu.txt-nifty.com/blog/files/COFFEE.txt http://yuhikaku-nibu.txt-nifty.com/blog/files/COFFEE.txt • 今回使う質問。Q7“「缶コーヒー」について以下の考えがあります。それぞれにつ 今回使う質問。Q7“「缶コーヒー」について以下の考えがあります。それぞれにつ いて、あなたのお考えに近い番号に◦をつけてください。” いて、あなたのお考えに近い番号に◦をつけてください。” 非常に そうである そうである どちらとも いえない そう ではない まったく そうではない 味や、品質にこだわる 5 4 3 2 1 ときと場合により、飲みわける 5 4 3 2 1 気に入ったブランドはない 5 4 3 2 1 人よりよく知っている 5 4 3 2 1 ひとより多く飲む 5 4 3 2 1 特に気にしない 5 4 3 2 1 新製品が出ると試してみる 5 4 3 2 1 好きなブランドを人に勧めることがある 5 4 3 2 1
分析の手順 分析の手順 1. 1.次元縮約 次元縮約 • 7つの質問項目を少数の変数に要約する。 7つの質問項目を少数の変数に要約する。 • 因子分析、主成分分析、
因子分析、主成分分析、 SEM SEM などを使う。 などを使う。 • 理由:解釈のしやすさ、“次元の呪い”。 理由:解釈のしやすさ、“次元の呪い”。 2. 2.グループ分け グループ分け • ブランド、製品などには階層型クラスター分析。 ブランド、製品などには階層型クラスター分析。 • 消費者をグループ分けするときは分割型。 消費者をグループ分けするときは分割型。 • 決定木、潜在クラスモデルなども使われる。 決定木、潜在クラスモデルなども使われる。
R R にデータを読み込む にデータを読み込む # ワーキングディレクトリの設定と確認。 COFFEE.txt を置いておく。 setwd("C:/R/dat") getwd()
# タブ区切りのテキストファイル。欠損値は“ .” で入力されている。 COFFEE <- read.delim("COFFEE.txt", na.strings=".") # 対象者番号と Q7 の回答を取り出す。欠損値のある対象者は除く。 Q7 <- na.omit(COFFEE[, c(1, 34:41)]) # 変数名を付ける。 colnames(Q7) <- c(" 対象者番号 ", " 味や品質にこだわる ", " 時と場合により飲みわける ", " 気に入ったブランドはない ", " 人よりよく知っている ", " ひとより多く飲む ", " 特に気にしない ", " 新製品が出ると試してみる ", " 好きなブランドを人に勧めることがある ") # 属性。ただし Q7 で欠損値のある人を除く。対象者番号は連番になっていること。 FACE <- COFFEE[Q7[, 1], c(8, 75, 76)] # 変数名を付ける。 colnames(FACE) <- c(" 飲用頻度 ", " 年齢 ", " 性別 ")
R R で因子分析 で因子分析 # 因子分析。 factanal 関数を使うのが一般的だと思いますが、ここでは出力が親切な # psych
パッケージの fa 関数を使ってみます。 # 2因子、最尤法、プロマックス回転で因子分析。 # 実際にはいくつかのパターンを試して最終的な結果を決めます。 library(psych) Q7.fa <- fa(Q7[, -1], nfactors=2, rotate = "promax", scores=TRUE, fm="ml") print(Q7.fa, sort=TRUE) # Factor Analysis using method = ml # Call: fa(r = Q7[, -1], nfactors = 2, rotate = "promax", scores = TRUE, # fm = "ml") # item ML2 ML1 h2 u2 # 好きなブランドを人に勧めることがある 8 0.78 1.00 0.00 # 新製品が出ると試してみる 7 0.67 0.16 0.84 # 人よりよく知っている 4 0.63 0.26 0.74 # ひとより多く飲む 5 0.59 0.55 0.45 # 特に気にしない 6 -0.51 0.27 0.73 # 気に入ったブランドはない 3 -0.50 0.26 0.74 # 味や品質にこだわる 1 0.93 0.47 0.53 # 時と場合により飲みわける 2 0.39 0.66 0.34 # (以下略) # ML1 、 ML2 が因子負荷量、 h2 が共通性、 u2 が独自性 # ここでは仮に ML1 を「機能的関与因子」、 ML2 を「情緒的関与因子」と名づけてみます。
因子分析の結果を確認 因子分析の結果を確認 # 因子得点を X に付値 X <- Q7.fa$scores #
因子得点をヒストグラムで確認。 # hist 関数でも良いのですが、ここでは # MASS パッケージの truehist 関数を # 使ってみます。 library(MASS) par(mfrow=c(2,1)) truehist(X[,1], main=" 情緒的関与因子 (ML2)", col="lightgreen") truehist(X[,2], main=" 機能的関与因子 (ML1)", col="lightblue") par(mfrow=c(1,1))
因子分析の結果を確認 因子分析の結果を確認 # こんな散布図も描ける smoothScatter(X, pch=3, main=" 因子得点の散布図 (smoothScatter)") #
因子得点を散布図で確認 plot(X, pch=3, main=" 因子得点の散布図 (plot)")
いよいよクラスター分析 いよいよクラスター分析 # 階層型クラスター分析(ウォード法) Q7.wa <- hclust(dist(X)^2, "ward") # 樹形図(デンドログラム)を描く
plot(Q7.wa) # クラスター数を3として枠を描く rect.hclust(Q7.wa, k=3, border=1:3) # クラスター数を3としてクラスター番号を # 保存 Q7.wa.clust <- cutree(Q7.wa, 3) # 構成の確認。 table(Q7.wa.clust) # Q7.wa.clust # 1 2 3 # 27 30 23
結果の確認 結果の確認 # クラスターごとの平均値 aggregate(X, by=list(Q7.wa.clust), FUN=mean) # Group.1 ML2
ML1 # 1 1 1.0042568 -0.0564751 # 2 2 -0.6966410 0.8983492 # 3 3 -0.2702479 -1.1054630 # 箱髭図(3変数以上ならレーダーチャート) par(mfrow=c(1, 2)) boxplot(X[, 1] ~ Q7.wa.clust, main=" 情緒的関与因子 (ML2)", xlab=" クラスタ ", col="lightgreen") boxplot(X[, 2] ~ Q7.wa.clust, main=" 機能的関与因子 (ML1)", xlab=" クラスタ ", col="lightblue") par(mfrow=c(1, 1))
結果の確認 結果の確認 # 飲用頻度のモザイクプロット FREQ <- table(Q7.wa.clust, FACE[, 1]) rownames(FREQ)
<- c("clust1", "clust2", "clust3") colnames(FREQ) <- c(" 毎日 ", " 週に数回 ", " 月に数回 ", " 年に数回 ") mosaicplot(FREQ, main=" クラスタ毎の飲用頻度 ", ylab=" 飲用頻度 ", xlab=" クラスタ ", col=TRUE)
結果の確認 結果の確認 # 年代のモザイクプロット AGE <- table(Q7.wa.clust, FACE[, 2]) rownames(AGE)
<- c("clust1", "clust2", "clust3") colnames(AGE) <- c(" ~ 20", "21 ~ 25", "26 ~ 30", "31 ~ 35", "36 ~ 40", "41 ~ 60", "61 ~ ") mosaicplot(AGE, main=" クラスタ毎の年齢 ", ylab=" 年齢 ", xlab=" クラスタ ", col=TRUE, las=1)
結果の確認 結果の確認 # 性別のモザイクプロット SEX <- table(Q7.wa.clust, FACE[, 3]) rownames(SEX)
<- c("clust1", "clust2", "clust3") colnames(SEX) <- c(" 男性 ", " 女性 ") mosaicplot(SEX, main=" クラスタ毎の性別 ", ylab=" 性別 ", xlab=" クラスタ ", col=TRUE)
実例の紹介 実例の紹介
PAM (Partitioning Around Medoids) PAM (Partitioning Around Medoids) # PAM
は分割型クラスタリングの一種。 # K-means よりも頑健であるとされる。 library(cluster) Q7.pam <- pam(X, 3, metric = "manhattan") plot(Q7.pam, col=TRUE) # クラスター構成の確認 table(Q7.pam$clustering) # ウォード法の結果とクロス集計 table(Q7.wa.clust, Q7.pam$clustering)