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
TokyoWebmining#03 市場細分化とクラスター分析
Search
bob3bob3
January 12, 2022
Programming
130
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
1k
RでPSM分析
bob3bob3
1
460
Rでコンジョイント分析 2024年版
bob3bob3
0
2.5k
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
1.5k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
660
『データ可視化学入門』をPythonからRに翻訳した話(増強版)
bob3bob3
0
600
『データ可視化学入門』を PythonからRに翻訳した話
bob3bob3
1
680
qeMLパッケージの紹介
bob3bob3
0
2.8k
「国と音楽」 ~spotifyrを用いて~ #muana
bob3bob3
2
670
Other Decks in Programming
See All in Programming
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
520
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
150
霧の中の代数的エフェクト
funnyycat
1
410
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
270
自作OSでスライド発表する
uyuki234
1
3.9k
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
270
AIエージェントで 変わるAndroid開発環境
takahirom
2
700
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
230
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
140
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
120
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
110
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Visualization
eitanlees
152
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.9k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
610
Optimizing for Happiness
mojombo
378
71k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Ethics towards AI in product and experience design
skipperchong
2
330
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
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)