【Pythonでデータ分析】アンケート結果を因子分析(FactorAnalysis)する。おすすめ書籍も紹介。

  • このエントリーをはてなブックマークに追加
スポンサーリンク

この記事を読むのに必要な時間は約 5 分です。

因子分析とは?

アンケートの回答結果などから、多くの質問項目に共通する特性(因子)を抽出する分析手法のことです。

主に心理学の研究や、マーケティングの調査で顧客心理(インサイト)を発掘するために用いられています。

今回は、Pythonのscikit-learnライブラリFactorAnalysisを用いて、アンケートの結果から因子分析を行ってみます。

参考:sklearn.decomposition.FactorAnalysis

環境

Google Colab

分析に使用するデータはcsvでもなんでも構いません、今回はBigQueryにレシートデータが揃っている前提でお話を進めます。

※以降のコードは全てGoogle Colab上で実行しています。

手順

分析用データの準備

ColabとBigQueryを接続します。

上記のようなおまじないを実行すればGoogle ColabとBigQueryは接続完了です。簡単ですね。

project_idには、ご自身のGCPのプロジェクトIDを入れてください。

BigQueryからデータを集計してColab上に出力します。

前処理の内容は元データによって様々ですので割愛しています。

下の図表のような感じで、回答者IDと質問でできるDataFrameが出力できればOKです。(csvから読み込んでも問題ありません)

 

 

ポイントは全ての質問項目への回答値が、1〜5(全く当てはまらない〜とても当てはまる)の5段階で数値化されていることです。

前準備

始まりでお話ししたsk-learnのFactorAnalysisライブラリに放り込むために回答データを整形します。

ここで実施するのは以下の二つです。

  1. ユーザーIDと質問への回答値を分離
  2. 5段階の回答値を平均0、分散1に標準化

因子数の決定

因子分析で抽出したい要素の数(因子数)は自分で決める必要があります。

また、因子数を決めるには、スクリープロット、MAP、BICなど様々な基準があります。

ここでは、よく使われる手法であるスクリープロットで因子数を決めてみることにします。

スクリープロットは回答値の相関行列を算出し、そこから固有値を取り出してプロットすることで作ることができます。

出力結果は以下のような感じです。

図の見方としては縦軸の値(固有値)が1を切ったところ、または値がガクッと下がった時点を因子数としてカウントすることが多いです。

因子分析

因子分析をFactorAnalysis関数にて実施していきます。

FactorAnalysis関数内の引数「n_components」には、スクリープロットなどで決定した因子数を入力します。

これだけでも一応答えは出ますが、抽出した因子を解釈しやすくするために因子の軸を動かす=回転の操作を加えます。

参考:statsmodels.multivariate.factor_rotation

結果の出力

最後に回転後の値の出力と整形を行います。

rotate_factorsメソッドで得られた結果(変数Lの方)とQ1、Q2などの質問番号と合体させます。

※色付けはスプレッドシートで行いました。

おすすめ書籍

記事をコピペしていけばある程度ライブラリは触れるようになるかと思いますが、やはり理論がわかっていないと実務では不安になります。

数学的なロジックを追うことができるような書籍を3冊まとめてみました。

マンガでわかる統計学 因子分析編

因子分析のプロセスについて、要点を押さえてわかりやすく解説してくれています。

簡潔さを失わずかつ数学的なロジックについても逃げずに解説してくれている良書です。

文系だけど、固有値の部分なども理解してみたい方はチェックして見ると良いと思います。

 

入門はじめての多変量解析

こちらも初心者向けに、分析手法の理論的なプロセスを追うことができます。

回帰分析や主成分分析など、因子分析以外の分析手法も充実しています。

 

因子分析 (シリーズ行動計量の科学)

がっつり因子分析のロジックを追ってみたい方向けの書籍です。

こちらは少し難易度が高いですが、取り組んで見る価値はあるかと思います。

入門書で気になったところを詳しく調べるために、つまみ食い的に読んで見るのも良いかと思います。

スポンサーリンク

  • このエントリーをはてなブックマークに追加
スポンサーリンク