10.14 実例で見るGBM — 隠れた構造を語らせる
ESL 10.14 Illustrations(勾配ブースティングの実例)
ここまで、勾配ブースティングを「アルゴリズム」「損失関数」「正則化」「変数重要度」「Partial Dependence Plot」と、 部品ごとに見てきた。
ところが、これらを全部つないだとき、実データの前で何が起きるのか。 それを見ない限り、私たちはまだ GBM を理解したとは言えない。
この章では、2つの実データセット — カリフォルニアの住宅価格(回帰問題)と、ショッピングモールの顧客層(多クラス分類問題) — に GBM を放り込み、出てきた図を一枚ずつ読んでいく。 すると見えてくるのは、単一の変数では決して見えない「隠れた交互作用」、 そしてクラスごとに姿を変える「同じ変数の違う顔」だ。
アルゴリズムから「現実」へ
ここまで勉強してきた変数重要度やPartial Dependence Plotは、 理屈の上ではきれいに見えました。
でも、本当の問題は「それが現実のデータで意味のある結論を出せるのか」ということです。
そこで、ここからは具体的なデータセットを使って、勾配ブースティング(GBM)を 実際に走らせると何が見えるのかを観察します。

最初の舞台は、カリフォルニア州の住宅価格データ。 1990年の国勢調査に基づき、20,460個の近隣地区について「住宅価格の中央値」を、 8つの特徴量から予測します。
- 目的変数: その地区の住宅価格中央値(10万ドル単位)
- 入力変数(8つ): 中央値所得、緯度、経度、平均占有人数、平均部屋数、平均寝室数、住宅築年数、人口密度
これは何の変哲もない普通の表データに見えます。ところが、ここに GBM を当てると、 「数字の表」が「意味のあるストーリー」に変わります。
各変数がどれだけ価格に効いているのか。どんな効き方をしているのか。 さらに、変数同士がどう絡み合っているのか。これら全てを一気に教えてくれます。
GBM が学習する関数はこの形です。$T_m$ は $m$ 番目の決定木、$\nu$ は学習率(縮小率)。 $M$ 回の繰り返しで、少しずつ予測を改善していきます。
カリフォルニア住宅データには、外れ値に強いHuber 損失を使いました。 設定は、学習率 $\nu = 0.1$、各木の終端ノード数 $J = 6$、木の本数 $M = 800$ です。
結果、テスト平均絶対誤差は 0.31(10万ドル単位)、 決定係数 $R^2 = 0.86$ という、当時最先端の空間統計手法を上回る精度を達成しました。
数字としての精度はもちろん大事ですが、ここから先で見るように、GBM の真の価値は 「なぜその予測になったのか」を語ってくれる点にあります。
「何が効いているか」を見抜く — 変数重要度
GBM が高い精度を出したのは結構ですが、それだけでは「ブラックボックス」と何も変わりません。 中で何が起きているのかを覗いてみましょう。
最初の覗き穴が 変数重要度(Relative Importance)です。 これは、各変数が「予測精度の向上にどれだけ貢献したか」を測るものでした。

カリフォルニア住宅データで GBM が出した変数重要度を棒グラフで見ると、次のような結果になります。
- 中央値所得(MedInc): 100(最大)
- 経度(Longitude): 約60
- 平均占有人数(AveOccup): 約55
- 緯度(Latitude): 約45
- 住宅築年数(HouseAge): 約35
- 平均部屋数(AveRooms): 約25
- 平均寝室数(AveBedms): 約15
- 人口密度(Population): 約15
最重要は「中央値所得」。これは直感的にも納得できます。豊かな地区ほど住宅価格が高い、 というのは当たり前の話です。
興味深いのは、経度と緯度の両方が上位に来ていることです。 これは「場所そのもの」が住宅価格を強く左右することを意味します。 海岸沿いか内陸か、北部か南部か。地理だけで価格が違うのです。
ただし、ここで一つ重要な注意があります。変数重要度は「単独で効くか」を測るものではないということです。 重要度が低い変数も、後で見るように、他の変数と組み合わさったときに大きな効果を発揮することがあります。
複数の木にわたって平均化された変数重要度の式です。各木 $T_m$ における 変数の重要度で、次式で計算されます:
つまり、その木の各内部ノード $t$ で、変数 $\ell$ が分割に使われたとき、 その分割で得られた改善量を全て足し合わせます。 それを $M$ 個の木で平均することで、安定したスコアが得られます。
「平均する」ことが重要です。単一の木だと、ある重要な変数が他の似た変数に「隠されて」しまうことがありますが、 たくさんの木を平均すると、本来効くべき変数の重要度が浮かび上がってくるのです。
「どう効いているか」を見抜く — Partial Dependence
変数重要度で「どの変数が効くか」は分かりました。次の問いは 「どのように効くのか」です。
ここで登場するのが Partial Dependence Plot (PDP) です。 PDPは、ある変数 $X_S$ を動かしたときに、他の変数を「平均的に扱って」 予測がどう動くかを描いた曲線です。
ここで $x_{iC}$ は訓練データ中の $i$ 番目のサンプルの「$X_S$ 以外の変数」の値です。 ある $X_S$ の値で、他の変数を訓練データの分布全体にわたって平均化することで、 $X_S$ の純粋な効果を取り出します。

カリフォルニア住宅データで主要な変数の PDP を描くと、それぞれが全く違う形をしていることが分かります。
MedInc(中央値所得)の PDP: ほぼまっすぐな直線で、所得が上がるほど予測価格も比例して上がります。 「予想通り」のパターン。所得2倍なら価格もおよそ2倍。
AveOccup(平均占有人数)の PDP:U字(あるいは逆U字)のような非単調な形をしています。 占有人数が少なすぎても多すぎても、価格は変わった動きをします。 中間(3人程度)で予測が安定し、極端な値で価格が上がったり下がったりします。
HouseAge(住宅築年数)の PDP:ほぼ平坦です。築年数を単独で動かしても、予測価格はほとんど変わりません。 「築年数は関係ない」と結論したくなります——でも、これは間違いです。
ここで大事なのは、同じモデルから抽出した曲線でも、変数によって形が全く違うということです。 GBMは「全部の変数を同じ形にフィット」するのではなく、データに応じて変数ごとに最適な関数形を 自動で見つけ出しています。
そして、HouseAge の「平坦な PDP」は、本当に「築年数は関係ない」を意味するのでしょうか? 次のセクションで、私たちの直感が裏切られます。
PDPは特定変数 $X_S$ 以外を周辺化した期待値です。実用上は訓練データの経験分布で近似します。 注意:PDPは $X_S$ と $X_C$ が独立であるという暗黙の仮定の下で意味を持ちます。 強く相関する変数の PDP は慎重に解釈する必要があります。
隠れた交互作用 — 2変数PDPの威力
前のセクションで、住宅築年数(HouseAge)の単独 PDP は「平坦」だと言いました。 これだけ見ると「築年数は住宅価格と関係ない」と結論したくなります。
ところが、これは間違いです。変数は1つずつ見ているだけでは、その本当の役割が見えないことがあります。
そこで、PDPを 2変数同時 に描いてみます。 HouseAge と AveOccup(平均占有人数)を両方変化させて、 予測価格がどう動くかを2次元の地形として描きます。

すると、驚くべきパターンが見えてきます:
- AveOccup が大きい(2人以上)地区: HouseAge をどう変えても、予測価格はほとんど変わらない(平坦な領域)
- AveOccup が小さい(2人未満)地区: HouseAge が新しい(築浅)と価格が急に高くなる、 古い(築古)と価格が下がる
つまり、HouseAge は特定の条件下でのみ価格に影響するのです。
これは現実的にも理解できる現象です。占有人数が少ない地区は、おそらく単身者向けの高級物件や、 富裕層の別荘地。そこでは「新しさ」がプレミアム要素になります。 一方、ファミリー向けの普通の住宅地(占有人数が多い)では、築年数より部屋数や立地のほうが重要、 というわけです。
2変数の Partial Dependence は、対象変数 $X_S = (X_j, X_k)$ を2つに拡張するだけです。 $X_C$ は $X_j, X_k$ 以外の全変数。出力は2次元の関数で、ヒートマップや等高線図、 3次元曲面として可視化できます。
もしモデルに $X_j$ と $X_k$ の交互作用が無い(加法的)なら、2変数 PDP は次の形に分解できるはずです:
これは「$X_j$ の効果と $X_k$ の効果が単純に足し合わされるだけ」という意味で、 ヒートマップで見ると 縦方向と横方向に同じパターンが繰り返される形になります。
逆に、ヒートマップのある領域だけ色が違うと、その2変数の間に交互作用があることが視覚的に分かります。
ここから得られる教訓は2つあります:
- 単独の変数重要度や単独のPDPでは見えない構造がある。 GBMはこれを自動的に学習し、2次元の PDP で可視化できます。
- 重要度が低めの変数でも、他の変数と組み合わさることで意味を持つことがある。 安易に「不要な変数」と切り捨てる前に、交互作用を 確認する価値があります。
多クラスの「個性」 — 同じ変数の違う顔
最後の事例は、サンフランシスコ近郊のショッピングモールで集めた人口統計データです。 回帰ではなく、9つの職業カテゴリを予測する多クラス分類問題に GBM を適用します。
- 目的変数: 9つの職業(退職者、学生、専門職、主婦、労働者、事務員、軍人、無職、営業)
- 入力変数: 年齢、収入、教育、性別、婚姻状況など14個の人口統計属性
ここで興味深いのは、「年齢」という同じ変数が、職業ごとに全く違う形で効くということです。

クラス別に「年齢」の Partial Dependence Plot を描くと:
Retired(退職者)の年齢PDP:単調増加。60歳を超えたところで急激に「退職者である確率」が上昇します。 直感通り。退職者は高齢層に集中します。
Student(学生)の年齢PDP:山なり(逆U字)。18〜25歳付近にピーク。 若すぎても歳を取り過ぎても「学生である確率」は下がります。 大学生のボリュームゾーンを学習しています。
Prof/Man(専門職・管理職)の年齢PDP:ほぼ平坦。年齢では決まりません。 専門職は幅広い年代に分布しており、年齢以外の変数(教育、収入)が決め手です。
ここで重要なポイントは、変数重要度は 「全クラスを平均」した値なので、こうしたクラスごとの違いは見えないということです。
実際、全体の変数重要度では「年齢」が最重要ですが、それは退職者と学生での効きが強いことに 引っ張られているだけで、専門職を予測する上では年齢はほとんど役立ちません。
多クラス分類でのクラス $k$ に対する Partial Dependence は、log-odds スケール(softmax を取る前の生のスコア)で 計算されます。$\hat{f}^{(k)}(x)$ はクラス $k$ の予測スコア(確率に変換する前の対数オッズ)です。
各クラスのスコアは softmax で確率に変換されます:
クラスごとに $\hat{f}^{(k)}$ の形が違うので、PDPもクラスごとに違う形になります。
これが意味するのは、「変数重要度の平均」というスカラー値は便利だが、 クラスごとの個性を捨象しているということです。実問題では、クラス別の PDP を併せて見ることで、 より深い洞察が得られます。
実問題では、こうしたクラス別の解釈こそが意思決定の鍵になります。 退職者向けのマーケティングなら年齢を主要シグナルに、専門職向けなら教育や収入を主要シグナルにすべき、 という具合に。
ひとつのモデル、ひとつの変数。でも、見る角度を変えれば全く違う姿が現れる。 GBM の解釈ツールが提供してくれるのは、まさにこの 「多面的な視点」なのです。
まとめ
2つの実データセットを通じて見えてきたのは、GBMが単なる予測器ではないということです。
予測の精度は確かに高い。でも、それと同じくらい価値があるのが、予測の中身を語る能力でした。
- 何が効いているか(変数重要度)
- どう効いているか(単変数 PDP)
- どんな条件で効きが変わるか(2変数 PDP の交互作用)
- クラスごとにどう違うか(クラス別 PDP)
この4つの視点を組み合わせることで、ブラックボックスは 「地図」へと変わります。 データの中に潜む構造を、人間が読み解き、意思決定に活かせる地図に。
ここまでで、私たちは Boosting と Additive Trees の章を終え、いよいよ次はニューラルネットワークへと進みます。 GBM が「決定木の足し算」だったのに対し、ニューラルネットは「単純な関数を何層にも重ねる」 アプローチで、同じく非線形な関係を学習します。
道具は違っても、目指す場所は同じ —データから本質を引き出すこと、です。