モデリング●●●●●

主成分分析

Principal Component Analysis ・ しゅせいぶんぶんせき

多変量データを分散が最大になる少数の軸に要約する次元削減の代表手法

✦ 30秒で試す — 航海いちばん散らばる向きは、いちばん情報を捨てない向きでもある点から軸への垂線が、全体でいちばん短くなる向きは?予想してみる

概要

主成分分析(PCA)は、たくさんの変数を持つデータを、情報の損失をなるべく抑えながら少数の新しい軸(主成分)に要約する手法です。ここでいう「情報」とは分散と標準偏差で測るデータのばらつきのことで、PCA は「データが最も大きくばらつく方向」を第1主成分、それと直交する中で次にばらつく方向を第2主成分、という順に軸を選び直していきます。

たとえばアンケートの20項目や、商品の数十の測定値をそのまま眺めても全体像はつかめません。PCA を使うと「この20項目のばらつきの7割は、実質2つの軸で説明できる」といった要約が得られ、多次元のデータを2次元の散布図に落として眺められるようになります。次元削減・可視化・変数の整理という3つの場面で登場する、多変量解析の入り口ともいえる手法です。

「教師なし」で動く点も特徴です。予測したい目的変数を必要とせず、データそのものの構造(変数どうしの共分散のパターン)だけから軸を見つけます。この性質から、探索的データ分析の最初の一手としても、機械学習の前処理としても広く使われています。

なぜ生まれたか

20世紀初頭、心理学や生物学では「多数の測定値から個体の特徴を捉えたい」という要求が高まっていました。人の体格を測れば身長・体重・胸囲・座高と変数はいくらでも増えますが、これらは互いに強く相関しており、明らかに重複した情報を含んでいます。変数が増えるほど、どれを見れば本質がつかめるのか分からなくなる — この「変数の洪水」に対して、1901年にピアソンが「データへの当てはまりが最もよい直線・平面を探す」問題として原型を定式化し、1933年にホテリングが「分散を最大化する軸を順に取り出す」現在の形に整理しました。

背後にある発想の転換は、「変数を選ぶ」のではなく「軸を作り直す」ことです。相関し合った変数群から重複を取り除くには、どれかを捨てるのではなく、変数の重み付き合成として新しい軸を合成すればよい。しかも共分散行列の固有値問題という線形代数の道具で機械的に解ける — この見通しのよさが、PCA を多変量解析の標準手法に押し上げました。

詳細

仕組み — 分散最大の方向を順に取り出す

データを多次元空間の点の集まりと見ると、PCA がやることは「座標軸の回転」です。まず各変数から平均を引いてデータの重心を原点に置き、点の雲が最も長く伸びている方向を探します。この方向が第1主成分で、データの分散を最大にする軸です。次に、第1主成分と直交するという条件のもとで分散が最大になる方向を第2主成分とし、以下同様に続けます。数学的には、共分散行列の固有ベクトルが主成分の方向、固有値が各主成分の分散に一致します。

変数 x1変数 x2第1主成分第2主成分分散の配分PC1: 85%PC2: 15%1軸だけで大半を説明できる
2変数データと主成分 — 点の雲が最も伸びる方向が第1主成分、直交する方向が第2主成分

図の例では、2つの変数が強く相関しているため、点の雲は斜めに細長く伸びています。第1主成分の軸だけで全体のばらつきの大半を説明でき、第2主成分方向のばらつきはわずかです。この「わずかな方向」を捨てて第1主成分の値(主成分スコア)だけを残すのが次元削減で、2次元が1次元に、同じ理屈で100次元が数次元に圧縮されます。

「分散を最大にする軸」には、もう一つの顔があります。各点から軸へ垂線を下ろすと、点までの距離の2乗は「軸に沿った成分(影)の2乗」と「垂線の長さの2乗」に分かれます(三平方の定理)。全体のばらつきは軸をどう回しても変わらないので、影の分散を最大にする向きは、垂線の2乗和を最小にする向きと必ず一致します。ピアソンが1901年に探したのは後者の「点の雲に最もよく当てはまる直線」で、ホテリングが整理したのは前者の「分散最大の軸」でした——同じ答えを両側から見ていたわけです。垂線が「縦のずれ」ではなく「軸に直交するずれ」である点が、最小二乗法による回帰直線との違いです。

実際に軸を回してみるのがいちばん早いです。影の広がりと垂線の長さが角度によってどう入れ替わるか、下の部品で確かめてみてください。

⚡ 体験: 影がいちばん広がる向きを探す
軸 0°向きごとの影の分散山の頂上 = 第1主成分、谷 = 第2主成分PC10°45°90°135°180°全体のばらつき = 影 + 垂線影 71%垂線 29%
軸の向き0°影の分散1.61垂線の2乗平均0.67寄与率71%

金色の丸をつかんで軸を回してください。白い点は軸に垂線を下ろし、軸の上に影を落とします。影がいちばん広く散らばる向きを探してみましょう。

金の点 = 軸への射影(影)、金の帯 = 影の ±1SD。赤い線 = 点から軸への垂線。右上 = 向きごとの影の分散

寄与率とスクリープロット — 何次元残すか

各主成分がデータ全体の分散のうち何%を説明するかを「寄与率」、上位からの累積を「累積寄与率」と呼びます。主成分を固有値の大きい順に並べて折れ線で描いたものがスクリープロットで、崖(scree)のように値が急落して平らになる箇所 — いわゆる「肘」 — までを採用するのが古典的な目安です。実務では「累積寄与率が70〜80%を超えるまで」といった基準もよく使われますが、どちらも絶対的なルールではなく、削減後の使い道(可視化なら2〜3軸、前処理ならもっと多くてよい)に応じて決めるのが実際的です。

標準化はほぼ必須の前処理

PCA を使う前に必ず考えるべきなのが標準化です。PCA は分散の大きい方向を優先するため、変数の単位がばらばらだと結果が単位に振り回されます。たとえば「年収(数百万円のスケール)」と「年齢(数十のスケール)」を混ぜると、第1主成分はほぼ年収だけで決まってしまいます。各変数を平均0・分散1に揃えてから行う(共分散行列ではなく相関行列に基づいて行う)ことで、すべての変数を対等に扱えます。変数の単位が共通で、分散の差そのものに意味がある場合に限り、標準化せずに行う選択もあります。

主成分の解釈 — 主成分負荷量を読む

得られた主成分が「何を表す軸なのか」は、各変数と主成分の相関(主成分負荷量)を見て解釈します。ソフトウェアによっては固有ベクトルの成分そのもの(主成分を作る重み)を「負荷量」と表示することもあるので、どちらが出力されているかは確認が必要です。たとえば学力テストで、全科目が正の負荷を持つ第1主成分は「総合学力」、理系科目が正・文系科目が負の第2主成分は「理系‐文系の傾き」と読める、という具合です。ただし PCA の軸はあくまで「分散を最大化する数学的な方向」であり、意味のある解釈がいつも得られるとは限りません。観測値の背後に潜在的な原因を積極的に仮定して探りたい場合は、モデルの立て付けが異なる因子分析が適しています。両者は計算の見た目が似ているため混同されがちですが、PCA は「要約」、因子分析は「背後の原因の探索」と目的が違います。

実務での使いどころと落とし穴

実務での典型的な用途は3つあります。第一に可視化 — 高次元データを2次元に落として散布図で眺め、グループ構造や外れ値の当たりを付ける使い方で、クラスタリングの前段としてもよく組み合わされます。第二に前処理 — 相関の強い説明変数群を無相関な主成分に置き換えることで、重回帰分析を悩ませる多重共線性を回避する主成分回帰などです。第三に圧縮 — 画像やセンサーデータのノイズ除去・容量削減です。

落とし穴も知っておく必要があります。PCA は線形の手法なので、データが曲がった構造(円環状・らせん状など)を持つ場合はうまく要約できません。また「分散が大きい方向=重要な方向」という仮定が常に正しいとは限らず、予測に効く情報が分散の小さい方向に潜んでいることもあります。さらに、捨てた成分は戻らないため、寄与率の小さい成分に実は大事な少数派のパターンが含まれていた、という事態もあり得ます。

見落とされがちな性質が2つあります。1つは符号の不定性です。主成分の軸は「向き」までは決まらず、矢印を逆向きにしても分散はまったく同じです。そのためソフトウェアやバージョン、データのわずかな違いで第1主成分の符号がひっくり返り、「総合学力」の軸が負の向きで出てくることがあります。複数の分析結果を比べたり、主成分スコアを経年で追ったりするときは、符号をそろえる処理が必要です。もう1つは外れ値への敏感さです。分散は偏差の2乗で効くので、遠く離れた数点が軸の向きを引っ張り、主成分がデータの大部分の構造ではなく少数の外れ値を追いかけてしまうことがあります。事前に外れ値を確かめるか、頑健な共分散推定に基づくロバスト PCA を検討します。要約された結果だけを見ず、負荷量と元データを行き来しながら解釈することが、PCA を安全に使うコツです。

試問

平面に散らばった60点と、データの中心を通る1本の軸があります。各点から軸へ垂線を下ろすと、軸の上に「影」(射影)が落ちます。影がいちばん広く散らばる向きが第1主成分、それと直交する向きが第2主成分です。金色の丸をつかんで軸を回せますが、ここでは影の分散・寄与率・向きごとの分散の曲線と、主成分の向きへ飛ぶボタンを外してあり、見えるのは点から軸への赤い垂線だけです。

✦ 命題挑戦中

影(射影)の分散を一度も見ずに、赤い垂線だけを手がかりにして、第1主成分と第2主成分の向きを順に見つけよ

  • 軸を第1主成分の向きに合わせて止める(±5°)
  • 第1主成分を見つけたあとで、軸を第2主成分の向きに合わせる(±5°)
⚡ 体験: 垂線だけを見て、主成分を探す
軸 0°手がかり: 赤い垂線だけ垂線の2乗平均0.671軸 0°
軸の向き0°垂線の2乗平均0.671

金色の丸をつかんで軸を回してください。命題モードでは影の分散は表示されません。見えるのは、点から軸へ下ろした赤い垂線だけです。

金の点 = 軸への射影(影)。赤い線 = 点から軸への垂線。命題モードでは影の分散は表示しない