モデリング●●●●●

主成分分析

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

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

概要

主成分分析(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次元が数次元に圧縮されます。

「分散を最大にする軸」がどういうものかは、実際に軸を回してみるのがいちばん早いです。射影の影の広がりが角度によってどう変わるか、下の部品で確かめてみてください。

⚡ 体験: 軸を回して分散が最大の方向を探す
データと射影軸θ=0°射影の分散(角度の関数)寄与率 58%(最大 88%)0°90°180°第1主成分

軸を回すと、点を軸に落とした影(金色の目盛り)の広がりが変わります。右の曲線が山になる角度を探してみてください。

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

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

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

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

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

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

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

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

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