ひとことで言うと#
たくさんの変数(列)を持つデータから、情報の損失を最小限に抑えながら少数の「主成分」に要約する手法。50個の変数を2〜3個の主成分にまとめることで、人間の目では見えなかったデータの構造やパターンが浮かび上がる。
押さえておきたい用語#
- 主成分(Principal Component)
- データのばらつきが最も大きい方向を抽出した新しい変数のこと。第1主成分が最も多くの情報を含み、以降は順に情報量が減る。
- 寄与率(Explained Variance Ratio)
- 各主成分がデータ全体の分散のうち何%を説明しているかを示す指標。累積寄与率70〜80%が主成分数を決める目安。
- 因子負荷量(Factor Loading)
- 元の変数が各主成分にどれだけ寄与しているかを示す値。この値を見て主成分に「購買パワー」などの意味を付ける。
- 標準化(Standardization)
- 各変数を平均0・標準偏差1に変換する前処理。PCAはスケールに敏感なため、標準化を省くと値の大きい変数に引きずられる。
- スクリープロット
- 各主成分の寄与率を折れ線グラフで表したもの。急激に下がるポイント(肘)の手前で主成分数を打ち切る判断に使う。
主成分分析の全体像#
こんな悩みに効く#
- 変数が多すぎて、どの変数が重要なのか見極められない
- 高次元データを2次元のグラフで可視化したい
- 機械学習モデルの精度が上がらず、特徴量を整理したい
基本の使い方#
PCAは変数のスケール(単位)に敏感なため、すべての変数を標準化する。
- 各変数から平均を引き、標準偏差で割る(平均0、標準偏差1に変換)
- 「年収(万円)」と「年齢(歳)」のようにスケールが異なる場合、標準化しないと年収がPCAを支配する
ツール: Python(scikit-learnのStandardScaler)、R(scale関数)、Excelでも計算可能。
標準化したデータに対してPCAを実行し、主成分を抽出する。
PCAの仕組み(直感的に):
- データの「ばらつきが最も大きい方向」を第1主成分として見つける
- 第1主成分と直交する方向で「次にばらつきが大きい方向」を第2主成分にする
- これを変数の数だけ繰り返す
出力されるもの:
- 主成分スコア: 各データ点の新しい座標値
- 因子負荷量: 元の変数が各主成分にどれだけ寄与しているか
- 寄与率: 各主成分がデータ全体の分散のうち何%を説明しているか
何個の主成分を使うかを決める。
判断基準:
- 累積寄与率: 累積で70〜80%以上の分散を説明できる主成分数を選ぶ
- スクリープロット: 寄与率をグラフにし、急激に下がるポイント(肘)の手前で切る
- 実用性: 可視化目的なら2〜3個、モデルの前処理なら累積80%以上
例:20変数のデータで、第1主成分が40%、第2主成分が25%、第3主成分が12%を説明 → 3主成分で77%をカバー。通常はこの3つで十分。
各主成分が何を意味しているかを、因子負荷量から読み解く。
- 第1主成分に「購入金額」「購入頻度」「購入カテゴリ数」が強く寄与 → 「購買活性度」と名付ける
- 第2主成分に「直近購入日」「サイト訪問頻度」が寄与 → 「エンゲージメント度」と名付ける
命名することで、データの本質が掴みやすくなる。この主成分スコアをクラスター分析やモデリングの入力として使う。
具体例#
ECサイトの顧客データに30個の変数(購入金額、訪問頻度、カテゴリ別購入数、デバイス情報、地域情報など)がある。これを使って顧客セグメンテーションをしたいが、変数が多すぎて直接クラスタリングすると意味のあるグループが出てこなかった。
PCAを実行した結果、PC1(寄与率35%)は「購買パワー」(購入金額・頻度・単価が高い)、PC2(20%)は「デジタル積極性」(アプリ利用率・SNS経由流入が高い)、PC3(12%)は「カテゴリ多様性」、PC4(8%)は「季節性」を表すことがわかった。4主成分で累積寄与率75%。
PC1×PC2の散布図を描くと、右上に「デジタルVIP」、左上に「デジタル見込み客」、右下に「リアル重視の優良顧客」が明確に分かれた。
30変数を4主成分に圧縮した上でK-meansクラスタリングを実施。元の30変数で直接クラスタリングした場合より施策適合率が28%向上し、セグメント別メールの開封率が平均1.8倍に改善した。
半導体製造工場が品質検査データ25変数(温度、圧力、電流、時間、ガス流量など)を使って不良品の予兆検知に取り組んだ。変数間の相関が強く、個別変数の監視では異常を見逃していた。
PCAで3主成分に集約。PC1(寄与率42%)は「熱関連プロセス」、PC2(22%)は「ガス制御」、PC3(11%)は「電気的安定性」と解釈できた。累積寄与率75%。
PC1×PC2の管理図を作成し、管理限界を超えたロットを自動フラグする仕組みを導入。25変数を個別に監視するより、3軸の管理図で全体の異常を俯瞰できるようになった。
導入4ヶ月後、不良品の流出率が0.8%から0.3%に62%削減。個別変数のアラートが日に50件以上あったのが、PCA管理図では1日平均3件に集約され、エンジニアの対応効率も大幅に向上した。
従業員1,200名を対象とした組織サーベイ40問の回答データを分析した。40問を個別に見ても傾向がつかめず、部署別の課題が見えにくかった。
PCAを実行したところ、PC1(寄与率28%)は「マネジメント満足度」、PC2(18%)は「成長実感」、PC3(12%)は「ワークライフバランス」、PC4(8%)は「チーム関係性」、PC5(6%)は「報酬納得感」に対応していた。5主成分で累積寄与率72%。
部署別にPC1〜PC5のスコアをレーダーチャートで可視化。営業部門はPC3(ワークライフバランス)が全社平均より1.5標準偏差低く、開発部門はPC2(成長実感)が突出して高いことが明確になった。
営業部門にフレックスタイム制を試験導入した結果、半年後のPC3スコアが0.8標準偏差改善。同期間の営業部門の離職率が年率18%から11%に低下した。
やりがちな失敗パターン#
- 標準化を忘れる — スケールが異なる変数をそのままPCAにかけると、値の大きい変数が主成分を支配する。PCAの前に必ず標準化するのは絶対ルール
- 主成分を解釈せずにそのまま使う — PC1、PC2という無機質な名前のまま分析を進めると、ビジネス上の示唆が得られない。因子負荷量を見て主成分に名前をつけることが、PCAの価値を最大化する
- 寄与率が低い主成分まで全部使う — 寄与率が2〜3%の主成分はほぼノイズ。含めるとモデルの精度が落ちることもある。累積寄与率70〜80%を目安に打ち切る
- 非線形なデータに無理やり適用する — PCAは線形な構造しか捉えられない。データが曲面状に分布している場合、カーネルPCAやt-SNEなど非線形手法を検討する
まとめ#
主成分分析(PCA)は、多数の変数を少数の主成分に圧縮し、データの本質的な構造を見える化する手法。可視化、ノイズ除去、機械学習の前処理として幅広く活用できる。まずは「変数が10個以上あるデータ」を見つけたら、PCAで2〜3軸に圧縮して散布図を描いてみよう。データの中に隠れた構造が見えてくるはずだ。