バナナでもわかる話

計量経済学・統計学が専門の大学院生です。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

Rを用いたブランドスイッチ(遷移)に関する統計分析

そういえば、マーケティング関連の分析手法を記事にしたことがなかったので、少しずつ記事にしていこうと思います。

今回はブランドスイッチングに関する分析です。

・ブランドスイッチについての説明
・ブランドスイッチの可視化(他サイトさんに丸投げ)
・強制的ブランドスイッチングについて

の3本立てで説明していきます。



ブランドスイッチ(遷移)

ブランドAを買っていた消費者が、別のブランドBを買うようになることをブランドスイッチと呼びます。

例えば、

カルビーのポテトチップスを買っていた消費者が、ある時からコイケヤのポテトチップスを気に入って、コイケヤばかり買うようになる

ずっとdocomoの携帯を使っていた消費者がauに乗り換える


このように、消費者は時に気に入っていた商品の購入をやめて、別の競合に移ってしまうことがあるわけです。


自分が何か商品を作っている企業だとして、競合企業の商品に消費者が移っていったら大問題ですよね。

それを事前に防いだり、いち早く察知したりするためにはデータを分析する必要があるわけです。



R

分析ツールはRを使っていきます。

↓Rのインストールや基本操作はここが参考になります。
統計分析フリーソフト「R」



ブランドスイッチの確認

自社の製品でスイッチが起こっているかどうかはGmiscパッケージのtransitionplot関数で簡単に確認することが出来ますので、実例と参考サイトを交えてまとめてみることにします。

必要なデータ

具体的には次のような形式のデータが必要になります。
f:id:bananarian:20181003140130p:plain

これは、1~6という消費者のポテチの購買データで、1回目の購入と2回目の購入に関するものです。
1回目の購入と2回目の購入が異なっていれば、一度お試しで買ったあとにスイッチが発生したと考えることが出来そうです。

まあ当然、1回目2回目で2種類を検討した後にどっちを定期購入するか決める消費者もいると思うので、これはあくまでわかりやすい具体例と捉えておいてください。実際の分析はもっと柔軟にデータを見るべきです。



で、この分析を試すのに好都合なデータをRで取ってくることが出来て、それがこちらのKetchupデータになります。

library(mlogit)
library(Gmisc)
library(grid)
data("Ketchup", package = "mlogit")
d = Ketchup

> head(Ketchup)
  Ketchup.hid Ketchup.id Ketchup.choice price.heinz price.hunts price.delmonte price.stb
1           1          1          heinz        1.19        1.39           1.49      0.89
2           1          2          heinz        0.99        1.36           1.39      0.95
3           1          3          hunts        1.46        1.43           1.49      0.99
4           1          4          hunts        1.46        1.43           1.45      0.99
5           1          5            stb        1.46        1.36           1.39      0.95
6           2          1          heinz        0.99        1.36           1.47      0.95

この辺の分析は下のサイトが全てやってくださっているので、説明は下のサイトをご覧ください
RのtransitionPlot関数を用いた遷移図の作成 - データ分析がしたい

体裁が悪いのでとりあえず上のサイトさんのコードだけズラズラと書いておくとこんな感じ。

d = Ketchup												
d[,2] = Ketchup[,2] - 1									
dat = merge(Ketchup,d,by=c("Ketchup.hid","Ketchup.id"))	
dat = dat[dat$Ketchup.id == 1,] 							
dat2 = data.frame(choice1 = dat$Ketchup.choice.x, choice2 = dat$Ketchup.choice.y)	
trans_mat = table(dat2)

要は何をしたのかというと、こういうデータを作っています。

> head(dat2)
  choice1 choice2
1   heinz   heinz
2     stb     stb
3   heinz   hunts
4   heinz   heinz
5   hunts   hunts
6   hunts   hunts

さっきのポテチの例と一緒ですね。この形のデータが出来たら可視化してみましょう。

可視化
transitionPlot(trans_mat,
               overlap_add_width=1,type_of_arrow="gradient",
               min_lwd = unit(0, "mm"), max_lwd = unit(15, "mm"),cex=1.5)

f:id:bananarian:20181003141350p:plain

ブランドからブランドへ、どのように推移しているのかを可視化することが出来ました。


プロデジーモデル

このスイッチを強制的に行わせることで、競合や市場の構造を確認するといったことも出来ます。その際に用いられるのが、ある商品が無かったら、何が起こるかを考えるプロデジーモデルです。


状況の設定

ブランドA、ブランドB、ブランドC、ブランドDがあるような市場を考えます。

で、消費者に次のようなアンケートを取ります。



Q1 ブランドAからDの中であなたが最もよく購入するものはどれですか。一つ選んでください。

Q2 もし、Q1で選んだブランドが販売中止になったとしたらどのブランドを購入しますか。一つ選んでください。



これってつまり、強制的にいつも買っているブランドを選択肢から外すことで消費者を疑似的にスイッチさせていることにほかなりませんよね。


これを強制的ブランドスイッチングと呼びます。

このようなデータを取ることで、ブランド間の市場構造を確認することが出来るわけです。


強制的スイッチングの解釈

例えば、100人に先ほどのアンケートを取ったとして、Q1の結果が次のようだったとします。

ブランドAを好む:50人
ブランドBを好む:20人
ブランドCを好む:20人
ブランドDを好む:10人


ここで、Q1でブランドAを好んだ人に対して、Q2を聞いた場合、どのようなスイッチが起こるでしょうか。

ブランドA~Dが互いに競合のケース

まず、次のようなケースを考えます。
f:id:bananarian:20181003143027p:plain

一つの市場の中で互いに全員が争っています。この場合、ブランドAを好んでいた50人は市場シェアに合わせて各ブランドに分配されるはずなので次のように変化するはずです。


ブランドAを好む:0人
ブランドBを好む:20人+ \frac{20}{20+20+10}×50人=40人
ブランドCを好む:20人+ \frac{20}{20+20+10}×50人=40人
ブランドDを好む:10人+ \frac{10}{20+20+10}×50人=20人


ブランドAとB、ブランドCとDがそれぞれ競合だった場合

しかし、次のような市場構造だった場合はどうなるでしょうか。
f:id:bananarian:20181003143630p:plain

この場合、小さい市場におけるAの競合はBなので、Aが無くなった場合、ほとんどはBにスイッチするはずです。

つまり例えば次のような状況になります。


ブランドAを好む:0人
ブランドBを好む:65人
ブランドCを好む:20人
ブランドDを好む:15人



つまり、Q1,Q2の二つの質問によって、もし、過剰にあるブランドから別のブランドへの流入が起こったら、市場の構造上、その二つのブランドは特に強く競合しあっていると考えることが出来るわけです。


差の検定でチェック

ブランドBへのスイッチは、理論値が20人のところ、45人も発生しました。直感的には過剰にスイッチしていそうですが、イマイチ客観性に欠けるので、仮説検定を行ってみましょう。


ブランドBにスイッチするか、他のブランドにスイッチするかという選択が、純粋な市場シェアをもとにした二項分布で行われている、つまりブランドA~Dが互いに競合で、無構造であると仮定すると

ブランドBにスイッチする人数の期待値は 50×\frac{20}{20+20+10}=20人、分散は 50×\frac{20}{20+20+10}×\frac{30}{20+20+10}になりますね。

※二項分布については下のページをご覧ください
基礎からイメージで学ぶ統計学~二項分布編~ - バナナでもわかる話


帰無仮説:無構造
対立仮説:サブマーケットが存在する

として、仮説検定を行うと、検定統計量は次のようになります。

 \frac{45-20}{\sqrt{50×\frac{20}{20+20+10}×\frac{30}{20+20+10}}}=2.083

標準正規分布表を確認してやると、有意水準0.05の両側信頼区間を考えれば1.96より大きいならば棄却されることが分かります。


以上の議論から、ブランドA~Dの間にはサブマーケットが存在するということを確認することが出来ます。