【Python】コレスポンデンス分析

【Python】コレスポンデンス分析

コレスポンデンス分析対応分析)とは、クロス集計した各項目のカテゴリーを数量化(得点化)し、視覚的にわかりやすいグラフ(散布図)にすることで、カテゴリー間の関係を把握しやすくする手法です。
略して「コレポン」とも呼ばれます。

コレスポンデンス分析は、2変数の関係性を見るもので、2変数以上を扱う場合には、多重コレスポンデンス分析多重応答分析MCAMultiple Correspondence Analysis))を使います。
これは、総合評価指標を作成するために、変数に重み付けをした主成分分析の応用手法です。
主成分分析が量的変数を扱うのに対し、多重コレスポンデンス分析はカテゴリー変数(質的変数)を扱います。

商品のポジショニングや、ブランドイメージなど、商品開発やマーケティングの分野に役立てられています。

Pythonでは、mcaというパッケージを使って多重コレスポンデンス分析を行えます。

今回は、このmcaパッケージを使って、ポジショニング・マップを作成してみます。
※データの検定や結果の解釈などは省略します。

分析テーマ例

飲料メーカーの商品イメージについてアンケート調査した結果から、商品とイメージのポジショニングを把握し、新規商品開発に役立てます。

作業ポイント

  1. クロス集計表の読み込み
  2. コレスポンデンス分析の実施
  3. ポジショニング・マップの作成

手順

1.ライブラリをインポート

必要に応じてライブラリをインポートしてください。

import mca
import pandas as pd
import matplotlib.pyplot as plt

2.クロス集計表を読み込む

クロス集計表には、以下のサンプルデータ(csvファイル)を使います。※手作りデータです。
10商品(行)に対して、11のイメージ(列)があります。
アンケートで、各商品にそれぞれのイメージが当てはまるかどうか回答(Yes or No)してもらい、当てはまると回答された度数を集計したものです。

商品,高級感がある,お手頃価格,目が覚める,リラックスできる,よく飲む,たまに飲む,香り高い,あっさりしている,コクがある,渋みがある,おしゃれな感じ
エチオピア,22,28,36,46,5,4,26,13,6,3,7
カフェラテ,0,0,3,4,2,4,0,2,0,0,0
カプチーノ,7,11,17,23,4,5,2,4,3,2,5
グアテマラ,5,0,5,7,2,1,1,5,3,1,2
ココア,0,1,3,4,2,5,6,1,0,0,0
ブラジル,17,23,4,0,3,2,23,0,0,1,0
モカ,6,8,13,30,6,1,17,1,11,2,6
季節の果汁,5,7,16,23,2,2,5,6,5,3,5
煎茶,6,1,8,6,2,1,13,26,16,28,2
抹茶ラテ,27,13,16,2,2,12,0,2,1,2,10

csvファイルを読み込みます。
※実行環境がWindowsOSのため、ファイルパスの前に「r」を付けています

df = pd.read_table(r'C:\Users\XXXXX\bevarage_summary.csv', sep=',', skiprows=0, index_col=0, header=0)

3.多重コレスポンデンス分析を実行

mca_counts = mca.MCA(df)
rows = mca_counts.fs_r(N=2) #商品(行)の成分スコア Nは保持する成分の数
cols = mca_counts.fs_c(N=2) #イメージ(列)の成分スコア Nは保持する成分の数

ちなみに、「rows」と「cols」の中身(第1成分、第2成分の各スコア)はこちら。

>>> print(rows)
[[-0.06498824 -0.01159637]
 [-0.05852682 -0.09539619]
 [-0.07336389 -0.05043805]
 [ 0.08600523 -0.04211354]
 [-0.11632822 -0.01624858]
 [-0.20299308  0.13322756]
 [-0.01955066 -0.04265699]
 [ 0.00932947 -0.05457324]
 [ 0.47514995  0.04227852]
 [-0.18647594  0.04460876]]
>>> print(cols)
[[-0.14500105  0.06634983]
 [-0.19605031  0.05962923]
 [-0.05962183 -0.03647513]
 [-0.0351143  -0.08467303]
 [-0.05892466 -0.03174347]
 [-0.18184762 -0.00798078]
 [-0.02515574  0.05917182]
 [ 0.35225171  0.00213384]
 [ 0.29240605 -0.02171537]
 [ 0.56617674  0.06187979]
 [-0.0843154  -0.02981675]]

4.ポジショニング・マップを作成

#グラフのレイアウトを設定
plt.axhline(0, color='gray') #横線
plt.axvline(0, color='gray') #縦線
plt.xlabel('成分1', fontname='MS Gothic') #X軸のラベル fontname:日本語の文字化け防止にフォントを指定
plt.ylabel('成分2', fontname='MS Gothic') #Y軸のラベル

#商品(行)のプロット
plt.scatter(rows[:,0], rows[:,1], c='b',marker='o') #c:色、marker:マーク
labels = df.index
for label,x,y in zip(labels,rows[:,0],rows[:,1]):
    plt.annotate(label, xy=(x, y), fontname='MS Gothic')

#イメージ(列)のプロット
plt.scatter(cols[:,0], cols[:,1], c='r',marker='x')
labels = df.columns
for label,x,y in zip(labels,cols[:,0],cols[:,1]):
    plt.annotate(label, xy=(x, y), fontname='MS Gothic')

5.ポジショニングマップを表示

plt.show()

以上、mcaパッケージを使ってポジショニング・マップを作成できました。

実際に業務などで使用する場合には、分析結果の解釈などを丁寧に行う必要があります。
macパッケージでは、固有値や余弦2乗、寄与率などを確認できますので、これらも合わせて使うと良いと思います。
使い方の詳細はこちらで紹介されています。
https://nbviewer.org/github/esafak/mca/blob/master/docs/mca-BurgundiesExample.ipynb

また、複数の公開データがありますので、試してみてはいかがでしょうか?
https://github.com/esafak/mca/tree/master/data

※参考
https://pypi.org/project/mca/
https://github.com/esafak/mca
Brigitte Le Roux, Henry Rouanet (2021)「多重対応分析」(大隅 昇、小野 裕亮、鳰 真紀子 訳). オーム社