読者です 読者をやめる 読者になる 読者になる

Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

大学の時にもっと勉強しておけばよかったマーケティング・リサーチ〜その8〜

大学の時にもっと勉強しておけばよかったマーケティング・リサーチの7話目です。

セグメンテーション・コンセプト

マーケティングにおけるセグメンテーションとは、商品やサービスを提供する集団を何らかの特徴をもとに集団を分割することです。つまり、特定の特徴やニーズ、行動、デモグラフィックなどをもとに、マーケットを複数の買い手によるグループに分割することで、自社の商品やサービスを効率的に販売するために行われます。最近では、インターネットの普及によって、買い手の様々なデータが入手できるようになったため、まず、ある大きさのセグメントに切り分け、その中で個別に対応することが可能となりました。いわゆるOne to One Marketingです。 セグメントする際には「特定可能性」「実在性」「到達可能性」「安定性」「反応性」「実行可能性」を考慮して実施する必要があります。これは、Wedel & Kamakuraによって提案されたものです。

1つ目に、「特定可能性」とは、特定の手法を用いて、入手可能なデータにより、各消費者と特定セグメントに分類できるかどうかを指します。 2つ目に、「実在性」とは、セグメントした集団は利益をあげられるほどのサイズがあるのかどうかを指します。 3つ目に、「到達可能性」とは、広告プロモーションなどによって、リーチ出来る集団なのかどうかを指します。 4つ目に、「安定性」とは、セグメントを分割した集団が一定の期間、利益をあげられるほど安定しているかを指します。 5つ目に、「反応性」とは、例えば、価格戦略を実施した時に集団が反応するかどうかを指します。 6つ目に、「実行可能性」とは、セグメントした集団に対して実施したマーケティングミックスは目標と企業のコアコンピタンスに一致していかを指します。

基本的には上記のことを頭に入れながら、セグメンテーションを行っていきます。つまり、基準とする変数をもとに集団を分割し、集団の特徴を評価することになります。

STPアプローチ

STPアプローチはSegmentation, Targeting, Positioningの3つの言葉の頭文字をとったものです。 Segmentationは、顧客ニーズや顧客のウォンツ、反応や行動などを基準に集団に分割する作業のことです。 Targetingは、セグメントされた集団の中で、どれを狙うかを決定する作業です。 Positioningは、提供する商品やサービスがターゲットにした集団の中で、競合の商品・サービスとどのように競合するかを決定する作業のことです。 STPアプローチを実施することによって、特定のセグメントに資源やリソースを集中させることで利益をあげたり、特定のセグメントに資源や資源やリソースに投入することで顧客が享受する益を増加し、リピートが増加したり、市場のシェアを増やせたり、最終的にはロイヤルカスタマーの増加は市場シェアの維持費用も減少させることができたりします。

セグメンテーションのタイプ

ア・プリオリ・セグメンテーション

この手法は、すでに蓄積されている知見や経験を用いながら、観測できたデータを使って集団を分割していく方法です。車であれば、性別を基準に潜在的なニーズやウォンツが異なることを自動車メーカのマーケターは知っているはずです。

クラスタリング・セグメンテーション

クラスタリング・セグメンテーションはクラスター分析を用いて行う方法です。観測できたデータを主成分分析や因子分析などを用いて要約し、クラスター分析でクラスタリングする。

潜在クラス・セグメンテーション

潜在クラス・セグメンテーションは「潜在クラス」と呼ばれる統計モデルを用いた方法です。このアプローチは、上記の2つのアプローチとは異なり、背後の因果関係を想定している点で異なる。また、個人は複数のセグメントに確率的に属する可能性もあります。

クラスター分析(Cluster Analysis)

クラスター分析は、簡単に説明すると内的結合と外的分離を行い、複数の集合に分割する手法です。内的結合は集団内の結びつきを表すため同質性と考え、外的分離はクラスター間の異なりを表すので異質性と考えることができます。 クラスター分析の手法は大きく2つに分けることができます。階層的クラスタリングと非階層的クラスタリングです。階層的クラスタリングはその名の通り、階層構造にするために分岐させることで分割していきます。また、非階層的クラスタリングは、事前に設定した集合の数に分割し、非階層的に集団を構成します。 %e3%82%af%e3%83%a9%e3%82%b9%e3%82%bf%e3%83%bc%e5%88%86%e6%9e%90-03

階層的クラスタリング

階層的クラスタリングは、デンドログラムを作り、データを分類します。基本的な計算手順は以下の通りです。

STEP1:データから互いの距離が近くなる項目対を計算。 STEP2:項目対をクラスタリングする。 STEP3:クラスタリングした集合と、残りのデータから距離が近くなるクラスターを探す。 STEP4:データ全部が1つのクラスターになるまで、STEP1~3を繰り返す。

データの同質性、異質性を測る指標、つまり距離を測る方法として、一般的には「ユークリッド距離」が用いられることが多いです。クラスタリングの手法としては、「ウォード法(最小分散法)」「重心法」「最遠距離距離法」「群間平均法」「最短距離法」「メディアン法」などがあります。ウォード法は、一般的によく使われる手法で、クラスターを統合する際に、クラスター内の平方和の増分が最も小さいものを結合させる方法です。

非階層的クラスタリング

階層的クラスタリングよりも効率よく計算ができる点から、大規模データに向いている手法でもあります。一般的には「k-means」というクラスタリング手法が用いられることが多いです。基本的な計算手順は以下の通りです。

STEP1:k=クラスターの数を決定します。 STEP2:初期シードとして、適当な点をとります。 STEP3:各データをシードから近いものを割り当て、仮でk個のクラスターを作ります。 STEP4:各クラスターの重心を求め、それを中心にします。 STEP5:更新後と更新前の中心の差を計算して、その計算された差が小さくなれば終了。そうでなければSTEP3~5を繰り返す。

クラスター分析〜R実践〜

今回使用するデータは質問はユーザーを分類するために用意された仮想質問紙データがあるとします。それを因子分析にかけて算出された因子スコアをもとにクラスター分析を行い、各クラスタの特徴を見ていきます。

> Dataset <- read.csv("cluster.data001.csv", header = TRUE)
> FactorAnalysis <- factanal(~ q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 + q11 + q12 + q13 + q14 + q15 + q16 + q17 + q18 + q19 + q20, factors = 4, rotation = "varimax", scores = "regression", data = Dataset)

> Dataset <<- within(Dataset, {
  F4 <- FactorAnalysis$scores[,4]
  F3 <- FactorAnalysis$scores[,3]
  F2 <- FactorAnalysis$scores[,2]
  F1 <- FactorAnalysis$scores[,1]
})

> head(Dataset)

 no q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 age
1  1  1  5  5  3  4  1  4  1  4   1   1   2   2   4   2   2   2   2   3   4  45
2  2  3  2  3  3  3  3  3  3  3   3   1   3   3   3   3   3   3   3   3   3  33
3  3  3  5  5  1  4  5  3  1  1   1   1   1   1   1   1   1   1   1   1   1  45
4  4  2  4  4  3  1  3  1  1  2   2   2   4   4   3   4   2   1   1   2   3  46
5  5  3  3  4  3  3  3  4  3  3   3   3   3   3   3   3   3   3   3   3   3  43
6  6  3  3  3  3  3  3  3  3  3   3   3   3   3   3   3   3   3   3   3   3  37
          F1         F2         F3         F4
1  0.2816997  0.2608497 -0.4339629 -2.0173255
2  0.6691022 -0.6279666  0.3769625  0.2461751
3 -1.5423826 -0.1638810 -0.9425974 -1.1888921
4  1.9492361 -2.1224422 -2.4837339 -0.1800188
5  0.6497095 -0.1159995  0.3481227  0.2201810
6  0.6930514 -0.6421426  0.3540616  0.3693998

> print(FactorAnalysis, cutoff = 0, sort = TRUE)

Call:
factanal(x = ~q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 +     q11 + q12 + q13 + q14 + q15 + q16 + q17 + q18 + q19 + q20,     factors = 4, data = Dataset, scores = "regression", rotation = "varimax")

Uniquenesses:
   q1    q2    q3    q4    q5    q6    q7    q8    q9   q10   q11   q12   q13   q14   q15 
0.780 0.941 0.560 0.785 0.467 0.707 0.563 0.712 0.579 0.038 0.412 0.298 0.181 0.245 0.148 
  q16   q17   q18   q19   q20 
0.556 0.180 0.005 0.265 0.710 

Loadings:
    Factor1 Factor2 Factor3 Factor4
q12  0.817   0.106   0.131   0.080 
q13  0.888   0.065   0.131   0.092 
q14  0.849   0.126   0.089   0.103 
q15  0.900   0.010   0.185   0.086 
q16  0.549   0.274   0.257   0.036 
q19  0.783   0.073   0.334   0.071 
q3  -0.041   0.652  -0.074  -0.084 
q5   0.011   0.729   0.005  -0.047 
q6   0.092   0.532   0.042   0.020 
q7   0.043   0.648   0.118   0.034 
q9   0.199   0.578   0.062   0.210 
q17  0.450   0.138   0.761   0.140 
q18  0.404   0.079   0.899   0.134 
q10  0.306   0.275   0.217   0.863 
q11  0.352   0.143   0.299   0.595 
q1   0.075   0.458   0.063   0.020 
q2   0.061   0.109   0.045  -0.204 
q4   0.059   0.457   0.053  -0.004 
q8   0.196   0.403   0.168   0.243 
q20  0.334   0.346   0.242   0.006 

               Factor1 Factor2 Factor3 Factor4
SS loadings      4.700   2.940   1.897   1.333
Proportion Var   0.235   0.147   0.095   0.067
Cumulative Var   0.235   0.382   0.477   0.543

Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 357.11 on 116 degrees of freedom.
The p-value is 2.31e-26 

> ClusterAnaysis <-  kmeans(model.matrix(~-1 + F1 + F2 + F3 + F4, Dataset), centers = 4)

> head(ClusterAnaysis$cluster, 20) # Clusterized data
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 3  2  3  1  2  2  3  1  4  2  4  2  3  2  2  2  2  2  3  3 

> ClusterAnaysis$size # Cluster Sizes
[1]  48 221 157  74

> ClusterAnaysis$centers # Cluster Centroids
          F1          F2         F3          F4
1 -0.3980189 -1.82134958 -0.5083389 -0.10353292
2  0.8413340  0.05384714  0.1326936  0.13633140
3 -0.7678461  0.40471639 -0.7613070 -0.08622503
4 -0.6253793  0.16194715  1.5486510 -0.15705850

> ClusterAnaysis$withinss # Within Cluster Sum of Squares
[1] 127.6036 372.5978 363.2907 201.3469

> ClusterAnaysis$tot.withinss # Total Within Sum of Squares
[1] 1064.839

> ClusterAnaysis$betweenss # Between Cluster Sum of Squares
[1] 765.4532

> biplot(princomp(model.matrix(~-1 + F1 + F2 + F3 + F4, Dataset)), xlabs = as.character(ClusterAnaysis$cluster))
rplot03

> Dataset$cluster <- ClusterAnaysis$cluster
> numSummary(Dataset[,c("age")], groups = Dataset$cluster, statistics=c("mean"))

      mean   n
1 44.65984 244
2 43.98246  57
3 43.05645 124
4 43.84000  75