次元削減

英語名 Dimensionality Reduction
読み方 ディメンショナリティ リダクション
難易度
所要時間 数時間〜数日
提唱者 カール・ピアソンによる主成分分析(1901年)を起源として発展
目次

ひとことで言うと
#

たくさんの変数を持つデータを、情報の損失を最小限に抑えながら少ない変数にまとめる技術」。100個の特徴量を2〜3個に圧縮して可視化したり、モデルの学習効率を上げたりする。データの本質的な構造を見抜くための強力なツール

押さえておきたい用語
#

押さえておきたい用語
PCA(Principal Component Analysis)
主成分分析。分散が最大になる方向にデータを射影し、少ない変数で元データの情報を表現する線形手法を指す。
累積寄与率(Cumulative Contribution Rate)
削減後の主成分が元データの分散(情報量)どの程度説明しているかの割合のこと。80〜95%を目安に次元数を決める。
t-SNE(t-Distributed Stochastic Neighbor Embedding)
高次元データの近傍関係を保ちながら2〜3次元に圧縮する非線形手法のこと。クラスタの可視化に特に強い。
次元の呪い(Curse of Dimensionality)
変数が増えるほどデータ間の距離が均一化し、分析や学習の性能が低下する現象のこと。次元削減が必要になる根本的な理由。

次元削減の全体像
#

次元削減の手法選択フロー:目的とデータ特性から最適な手法を選ぶ
高次元データ50〜1000+変数前処理・圧縮探索的可視化大規模・高速PCA線形・高速・解釈しやすい累積寄与率で次元数決定モデル前処理の定番t-SNE非線形・近傍関係を保持クラスタ可視化に強い探索的分析の定番UMAP高速・大域構造も保持t-SNEより大規模対応大規模データの新定番低次元の本質的構造可視化・モデリング・解釈がすべて改善
次元削減の進め方フロー
1
データ確認
変数の数・型・目的を整理
2
手法選択
PCA/t-SNE/UMAPから適切な手法を選ぶ
3
次元数決定
累積寄与率やスクリープロットで判断
結果の解釈・検証
ドメイン知識と照合し下流タスクで検証

こんな悩みに効く
#

  • 変数が多すぎてデータの全体像が掴めない
  • 機械学習モデルの学習に時間がかかりすぎる
  • 高次元データを2次元で可視化して、パターンやクラスタを発見したい

基本の使い方
#

ステップ1: データの性質と目的を確認する

次元削減の手法を選ぶ前に、データの特性と分析の目的を整理する

確認事項:

  • 変数の数と型: 数値変数のみか、カテゴリ変数も含むか
  • データの規模: サンプル数と変数の比率
  • 目的: 可視化、前処理、ノイズ除去、特徴量圧縮のどれか
  • 線形性: データ間の関係が線形か非線形か

ポイント: 目的によって最適な手法が異なる。可視化ならt-SNEやUMAP、前処理ならPCAが定番。

ステップ2: 代表的な手法を選択する

目的とデータの性質に応じて適切な手法を選ぶ

主な手法:

  • PCA(主成分分析): 分散が最大になる方向にデータを射影する。線形手法の基本
  • t-SNE: 高次元の近傍関係を保ちながら2〜3次元に圧縮。可視化に強い
  • UMAP: t-SNEより高速で、大域的な構造も保持しやすい
  • LDA(線形判別分析): クラス間の分離が最大になるように次元を削減
  • オートエンコーダ: ニューラルネットで非線形な次元削減を学習

選択の目安:

  • 探索的な可視化 → t-SNE / UMAP
  • 前処理としてモデルに入力 → PCA / LDA
  • 複雑な非線形構造 → UMAP / オートエンコーダ
ステップ3: 次元数を決定する

削減後の次元数を定量的に判断する

PCAの場合の判断基準:

  • 累積寄与率: 元の分散の80〜95%を説明できる次元数を選ぶ
  • スクリープロット: 固有値の減少が緩やかになる「肘」の位置を見る
  • 下流タスクの精度: 実際にモデルに入れて精度を比較する

ポイント: 「とりあえず2次元」で可視化するだけでなく、目的に応じた適切な次元数を選ぶことが重要。

ステップ4: 結果を解釈し、検証する

次元削減の結果をビジネス的に意味のある形で解釈する

  • PCAの場合: 各主成分がどの元の変数と関係が強いかを確認する(因子負荷量)
  • 可視化の場合: クラスタや外れ値のパターンを確認し、ドメイン知識と照合する
  • 前処理の場合: 次元削減前後でモデルの精度や計算時間を比較する

注意: t-SNEやUMAPの可視化では、点間の距離やクラスタの大きさに過度な意味を読み取らない。

具体例
#

例1:小売企業が顧客セグメンテーションに活用する

状況: 年商50億円の小売企業。顧客データ(50変数: 購買履歴、行動データ、属性情報)を使って顧客セグメントを作りたいが、50次元のままではクラスタリングの精度が低い。

アプローチ:

  1. 前処理: 欠損値補完、標準化を実施
  2. PCAで次元削減: 50変数 → 8主成分(累積寄与率85%)
  3. UMAPで可視化: 8主成分 → 2次元にマッピングし、顧客の分布を確認
  4. クラスタリング: PCAの8次元でk-meansを実行し、5つのセグメントを抽出

主成分の解釈:

  • 第1主成分: 購買金額と購買頻度に強く関連 → 「購買力」
  • 第2主成分: 来店頻度とオンライン利用率に関連 → 「チャネル選好」
  • 第3主成分: 購入カテゴリの多様性に関連 → 「嗜好の幅」

50変数をそのまま使ったクラスタリングよりも、PCA後のクラスタリングのほうがシルエットスコアが0.15→0.38に改善。ノイズが除去されたことで、各セグメントの特徴が明確になりマーケティング施策に直結した。

例2:製薬企業が遺伝子発現データを解析する

状況: 製薬企業の研究チーム。がん患者200名の遺伝子発現データ(20,000遺伝子)から、がんのサブタイプを分類したい。変数が多すぎてそのままでは分析不可能。

アプローチ:

  1. PCAで20,000変数 → 50主成分に圧縮(累積寄与率72%)
  2. UMAPで50主成分 → 2次元に可視化
  3. 可視化の結果、4つの明確なクラスタが出現

結果:

  • 4つのクラスタが既知のがんサブタイプ(I〜IV型)と85%一致
  • 残り15%のうち、既存の分類と異なる12名の患者を詳細分析したところ、新しいサブタイプの候補を発見
  • 計算時間: 20,000次元のままクラスタリングすると48時間 → PCA後は3分

次元削減は「情報を捨てる」のではなく「ノイズを捨てて本質を残す」技術。20,000変数を50に圧縮しても生物学的に意味のあるパターンが保持され、むしろ新発見にもつながった。

例3:ECサイトが商品レコメンドの精度を改善する

状況: 月間ユーザー30万人のECサイト。商品数8,000点の閲覧・購入履歴をもとにレコメンドモデルを構築しているが、ユーザー×商品のマトリクスが巨大すぎて学習に12時間かかる。

アプローチ:

  1. ユーザー×商品マトリクス(8,000次元)をPCAで200次元に圧縮
  2. 200次元の特徴量で協調フィルタリングモデルを再構築

結果:

  • モデルの学習時間: 12時間 → 45分(16倍高速化)
  • レコメンド精度(MAP@10): 0.18 → 0.21(3ポイント改善)
  • 精度が上がった理由: 購入回数1回の「ノイズ的な」データが圧縮で除去された

次元削減は精度と効率のトレードオフではなく、ノイズ除去効果により両方を同時に改善できるケースがある。まずPCAで圧縮してからモデルを構築するアプローチは、計算コストの削減にも直結する。

やりがちな失敗パターン
#

  1. 標準化せずにPCAを実行する — スケールの大きい変数に引きずられてしまう。PCAの前にデータを標準化(平均0、分散1)するのが基本
  2. t-SNEの結果を過信する — クラスタ間の距離やクラスタのサイズには意味がないことが多い。あくまで近傍関係の可視化であり、定量的な分析には使わない
  3. 次元削減で情報を捨てすぎる — 累積寄与率50%で圧縮すると重要な情報が失われる。下流タスクの精度で次元数の妥当性を必ず検証する
  4. ハイパーパラメータをデフォルトのまま使う — t-SNEのperplexityやUMAPのn_neighborsは結果に大きく影響する。複数の設定で試し、結果が安定するか確認する

まとめ
#

次元削減は、高次元データを扱いやすくするための必須技術。PCA、t-SNE、UMAPなど目的に応じた手法を選び、適切な次元数で圧縮することで、可視化・モデリング・解釈のすべてが改善する。まずはPCAでデータの構造を把握し、必要に応じてt-SNEやUMAPで可視化するところから始めよう。