コンテンツにスキップ

第06回: PCA バイプロット

資料のダウンロード

ファイル 内容
exercise.py ハンズオン演習スクリプト

ヒントの使い方

python exercise.py --hint 1            # 方向性ヒント
python exercise.py --hint 1 --level 2  # より具体的なヒント
python exercise.py --hint 1 --level 3  # コード例
python exercise.py --check             # 提出前の自己チェック

演習問題への取り組み方

  1. 下の講義ノートを読む(事前学習・2時間目安)
  2. exercise.py を実行してグラフを確認する
  3. 演習問題(5問)に取り組む
  4. python exercise.py --check で確認する
  5. exercise.py を提出する(締切は授業後1週間)

詰まったとき

# ヒントを見る
python exercise.py --hint N --level 1

# AIに質問する
python ../../ask.py "質問内容"

解決しない場合は Q&A ページの投稿フォームを使ってください。


講義ノート

1. バイプロットとは何か

第5回では PCA のスコアプロット(地点の分布)を描きました。しかし、その散布図だけでは「なぜその地点がその位置にいるのか」という原因が見えません。バイプロット(biplot)は、観測値(地点)のスコアと変数のローディング矢印を1枚のグラフに重ねることで、この「なぜ」を直接読み解く手法です。

「bi(二重)」という接頭辞は、スコア空間とローディング空間の2つの情報を同時に表示することに由来します。1971年に K.R. Gabriel が提案した古典的な可視化手法で、現在も環境科学・マーケティング・生物学など幅広い分野で使われています。


2. スコアプロットとローディングプロット:2つの空間

バイプロットを正しく読むためには、重ね合わさった2つの空間を区別することが重要です。

スコアプロット(点)

各点は1つの観測値(本講義では1地点)を表します。座標は PC1・PC2 への射影値、すなわち元の特徴量を主成分方向に投影したときの値(スコア)です。第5回で学んだスコアプロットと同じものです。

  • 2点が近い → 元の特徴量が似ている地点
  • 2点が遠い → 特徴量が異なる地点

ローディングプロット(矢印)

各矢印は1つの元変数を表します。矢印の向きは「その変数がどの主成分方向に強く効くか」を示し、矢印の長さは「その変数がPC1/PC2の2次元でどれだけ表現されているか」を示します。

これら2つの空間は異なるスケールを持つため、バイプロットではどちらかを係数で調整して重ねます。演習コードの scale 引数がこのスケール調整に対応します。


3. 矢印の長さ・角度・共線性の意味

矢印の長さ: 共通性(communality)

矢印が長い変数は、PC1/PC2 の2次元によってよく説明されている変数です。数式で言えば、第 \(j\) 変数のローディングベクトル \((\ell_{1j}, \ell_{2j})\) の長さ

\[h_j = \sqrt{\ell_{1j}^2 + \ell_{2j}^2}\]

が1に近いほど「この2主成分でその変数の分散のほとんどを説明できている」ことを意味します。逆に短い矢印は「この変数は PC3 以降で説明される」ことを示唆します。

矢印の角度: 変数間の相関

2つの矢印のなす角は元変数間の相関と対応します。

なす角 解釈
約0° (同じ方向) 正の相関が強い
約90° (直角) ほぼ無相関
約180° (反対方向) 負の相関が強い

今回のデータで言えば、「騒音」と「混雑度」の矢印が近い方向を向いていれば、この2変数は正の相関を持つことがバイプロットから読めます。相関ヒートマップと照合することで、この解釈を数値で確認できます。

矢印の方向と点群の位置: 変数と観測値の関係

点が特定の矢印の方向に集まっている場合、その点群はその変数の値が高い観測値に相当します。逆に矢印の反対方向にある点群はその変数の値が低い観測値です。

例: 「緑化率」の矢印が PC1 の負の方向を向いており、「公園」クラスターが同じく PC1 の左側に集まっている → 公園は緑化率が高い、という関係がバイプロット1枚から読める。


4. バイプロットから得られる洞察の実例

本講義の都市空間データで期待される読み方を具体的に示します。

洞察1: 「快適軸」vs「都市圧力軸」の発見

PC1 のローディングを見ると、noise_level・crowd_density・stress_score が正の方向、green_ratio・happiness_score が負の方向を向いていると予想されます。これはバイプロット上で「右側 = 都市の圧力が高い地点(駅前・オフィス街)」「左側 = 自然・快適さが高い地点(公園・住宅地)」という軸として現れます。このような発見は、事前に仮説を立てずにデータを眺めるだけでは気づきにくいものです。

洞察2: ストレスと幸福感の対称性

stress_score と happiness_score の矢印がほぼ反対方向を向いていれば、この2変数は強い負の相関を持ちます。「ストレスが高い = 幸福感が低い」という直感的に当然な関係が、バイプロットで視覚的に確認できます。ただし、完全に反対にならない場合は「ストレスが高くても幸福感がある地点」が存在することを示唆し、分析の次のステップへの問いにつながります。

洞察3: PM2.5 と季節変数の独立性

pm25 の矢印が PC2 方向に大きく向いている一方で PC1 への寄与が小さい場合、大気汚染は「都市圧力 vs 快適性」とは独立した次元(例: 季節や気候の軸)で変動していることがわかります。これは「PM2.5 は都市の賑やかさより季節に左右される」という環境科学的な解釈を支持します。


5. バイプロットの限界と注意点

スケールの恣意性

スコアとローディングは異なるスケールを持つため、どちらかを係数で調整して重ねます。この係数(演習コードの scale)の選択によって視覚的な印象が変わることに注意が必要です。矢印の絶対的な長さよりも、相対的な長さと方向を比較することが重要です。

次元の情報落ち

PC1/PC2 の2次元だけを見ているため、累積寄与率が低い場合(例: 60% 程度)は元データの40%の情報がバイプロットに反映されていません。解釈を過信せず、「2次元での近似的な描像」として扱うことが必要です。

外れ値の影響

PCA は分散(距離の二乗)を最大化するため、外れ値に敏感です。バイプロットで極端に遠い点がある場合、その点が主成分の方向を引っ張っている可能性があります。


6. 本日のまとめ

要素 意味
スコア(点) 各地点の PC1/PC2 空間での座標
ローディング(矢印) 各変数が主成分方向に持つ重み
矢印の長さ 2次元での説明割合(共通性)
矢印の向き 変数間の相関関係の近似
点と矢印の位置関係 「どの変数がどの地点を特徴づけるか」

バイプロットは PCA の結果を最も情報密度高く伝える可視化の一つです。ただし「見えること」と「事実」は別物であり、仮説の出発点として使い、別の統計的検証で裏付けることが重要です。


次回予告

第7回からはクラスタリングに進みます。PCA でデータの構造を「見る」のに対し、クラスタリングは「グループに分割する」ことを目的とします。k-means 法の仕組みと、PCA 空間でのクラスター可視化を組み合わせる方法を学びます。