#author("2023-09-23T15:13:59+09:00;2023-09-07T14:13:09+09:00","default:inoue.ko","inoue.ko") #author("2023-09-23T15:15:20+09:00;2023-09-07T14:13:09+09:00","default:inoue.ko","inoue.ko") *コレスポンデンス分析 MCA|Multiple Correspondence Analysis https://pypi.org/project/mca/ ~ **概要 コレスポンデンス分析(対応分析:Multiple Correspondence Analysis)とは、多変量解析法の一つで、アンケート結果のクロス集計表など、行と列からなるデータの項目間の関係を散布図のかたちで可視化する手法です。 マーケティングの分野では、Segmentation, Targeting, Positioning (STP)という3つのキーワードがありますが、特に最後のポジショニングに関して、自社と競合他社との棲み分けを検討する際に、コレスポンデンス分析が多用されます。 ~ ~ **事例紹介 ***クロス集計データ 以下の表は、4つの企業の製品を対象に、当該製品の購入者に対して、その購買動機を 機能・形・色・ブランド・価格の5項目から複数選択で回答してもらった結果を集計したものです。 以下の表は、4つの企業の製品を対象に、当該製品の購入者に対して、その購買動機を 機能・形・色・ブランド・価格の5項目から複数選択で回答してもらった結果(項目を選択した人数)を集計したものです。 |25|15|15|15|15|15|c |企業\購買動機|機能|形状|色|ブランド|価格|h |''A社''|10|5|3|4|7| |''B社''|5|1|4|2|10| |''C社''|8|10|6|5|2| |''D社''|2|6|5|6|1| //-CSVファイルにしたものは以下にあります。 //https://github.com/koichi-inoue/DataScience/blob/main/mca_sample.csv __[[DOWNLOAD CSV>https://raw.githubusercontent.com/koichi-inoue/DataScience/main/mca_sample.csv]]__ これぐらい小さな表であれば、どこの製品が、どのような動機で選ばれているのかを見てとることができますが、縦横の項目数が多くなると、それを簡単に捉えるのは難しくなります。そこで、これを2次元の散布図上で、ざっくりと可視化するために、コレスポンデンス分析を使います。 ~ ***分析結果|散布図 #image(mca.png,right,40%) 右の散布図が、分析の結果です。 分布は、中央から遠ざかるほど特徴的で、プロットされた位置が近いほど、項目間の関連性が強いことを意味します。グラフの中央に横軸と縦軸の 0 を意味する十字の線が入るのが一般的で、横軸と縦軸、それぞれの意味づけは分析者が任意に行うものとなります。 この散布図からは、以下のようなことが読み取れます。 -横軸:価格重視(左)か、高級ブランド志向(右)か -縦軸:見た目重視(上)か、機能重視(下)か -A社の商品は、機能重視で選ばれている -B社の商品は、価格(お手頃感)で選ばれている -C社の商品は、形の良さで選ばれている -D社の商品は、ブランド力と色使いの良さで選ばれている コレスポンデンス分析では、複雑なデータをざっくりと可視化する手法なので、結果の散布図のみに頼ると、勘違いも生じます。結果を詳しく検証するには、元のクロス集計表の見ながら考察することが必要です。 ~ ~ **Python サンプルプログラム 上記の事例分析の実際のプログラムを、JupyterNotebook形式で紹介します。 > https://github.com/koichi-inoue/DataScience/blob/main/MCA.ipynb 以下、プログラムの概説です。 ~ ***ライブラリのインストール Pythonでコレスポンデンス分析を行う場合は、mca というライブラリをインストールして利用します。 -https://pypi.org/project/mca/ Google Colaboratory を利用する場合、このライブラリーは入っていないので、以下のようにライブラリーのインストールが必要です。 !pip install mca import する際は、以下のように書くのが一般的です。 import mca ~ ***データの読み込み クロス集計のデータは、前の節のサンプルと同じものです。 df = pd.read_csv('/・・・・/mca_sample.csv', index_col=0, header=0 ) 表は pands のデータフレーム形式で読み込みます。なお、クロス集計表は、通常のデータと異なり、表の左端の列がカテゴリ項目名になるので、以下のようにオプションを付けて読む必要があります。 -左端の列(0列目)を''表側(index_col)''として読み込みます。 -一番上の行(0行目)を''表頭(header)''として読み込みます ~ ***分析 分析処理自体は以下の1行で完了です。 mca_counts = mca.MCA(df, benzecri=False) 2つの配列 raws と cols に、各カテゴリ項目のプロット座標を代入 rows = mca_counts.fs_r(N=2) cols = mca_counts.fs_c(N=2) ~ ***散布図 表側のカテゴリ項目 rows を青色で散布図をプロット。また同様に表頭のカテゴリ項目 cols を赤色で同じ散布図上にプロットします。 plt.scatter( rows[:,0], rows[:,1], marker="None") labels = df.index for label,x,y in zip(labels,rows[:,0],rows[:,1]): plt.annotate(label,xy = (x, y), c="b") plt.scatter(cols[:, 0], cols[:, 1], marker="None") labels = df.columns for label, x, y in zip(labels, cols[:, 0], cols[:, 1]): plt.annotate(label, xy=(x, y), c="r") ~ 以上、ほぼ定番のコードなので、お手元にクロス集計表があれば、プログラムのファイル読み込みの部分を変えるだけで利用できるかと思います。 ~ ~ ~ //-mca のインストールとインポート //Python 言語のライブラリとしてのインストールになるので、一般の Python3 の環境であれば、Terminalから以下のコマンドでインストールできます。 // $ pip3 install --user mca ~