06.7.27
パラレルコーディネートで多次元データを俯瞰
parallel_coordinates(df, class_column="タイプ") が DataFrame の数値列を軸にして自動で描きます。読み終えると、スピード軸で攻撃型(平均 75)と技巧型(平均 50)の帯が分かれる様子から特徴量の判別力を読み取り、alpha と軸の並び順を調整して自分の多次元データを探索できるようになります。直感 #
サッカー選手 180 人の「体力・技術・判断力・スピード」の 4 つのスコアを、攻撃型・技巧型・万能型の 3 タイプで比べたいとします。散布図は 2 軸までなので、4 変数なら 6 枚の散布図が必要です。パラレルコーディネートは 4 本の縦軸を横に並べ、1 人の選手を「体力の軸で 70、技術の軸で 65、判断力で 60、スピードで 75」の 4 点を結んだ 1 本の折れ線にします。タイプごとに色を分けると、180 本の線が 3 色の帯になり、帯が上下に離れている軸(この例ではスピード)がタイプを見分ける特徴量だと読めます。
Python で描く #
次のコードは、3 タイプ × 60 人の 4 つのスコアを、タイプごとに平均の異なる正規乱数で作ります。parallel_coordinates にタイプの列名を渡し、線を半透明にして 180 本を重ねます。
| |

実行結果の読み方 #
4 本の縦軸の間で色の帯がどう動くかを見ます。スピード軸では赤(万能型、平均 85)が上、青(攻撃型、75)が中、緑(技巧型、50)が下と 3 色が分かれており、この 1 軸だけでタイプをかなり判別できます。技術軸では 3 色が 60〜75 の範囲で重なるので、タイプの判別には弱い特徴量です。帯の太さはタイプ内のばらつきで、技巧型のスピード(標準偏差 12)が最も太く見えます。隣り合う軸の間で線が交差していれば「体力が高い選手はスピードが低い」のような負の関係、平行なら正の関係が読めます。
使いどころと落とし穴 #
パラレルコーディネートは、4〜10 次元のデータでクラスごとのプロファイルの違いを探す、特徴量エンジニアリングの初期段階に向いています。サンプルが 500 を超えると線が重なって真っ黒になります。alpha を 0.1〜0.3 に下げるか、タイプごとの中央値の線だけを太く重ねてください。次元が 15 を超えると軸ラベルが読めなくなるため PCA や t-SNE で 2〜3 次元に落として散布図にする方が現実的で、スケールの異なる列をそのまま渡すと一部の軸が潰れるので、描く前の z-score 標準化か 0〜1 への正規化も欠かせません。軸の並び順で見え方が変わるため、関心のある 2 つの特徴量は隣に置き、df[["スピード", "体力", "技術", "判断力", "タイプ"]] のように列順を入れ替えて何通りか試します。グループ平均だけを比べたいならレーダーチャートで十分です。
- レーダーチャート — グループ平均の多角形比較
- 散布図行列 — 全ペアの散布図を一覧
- リッジラインプロット — カテゴリごとの分布比較