Tunny Icon
TunnyDocs

The next-gen Grasshopper optimization tool.

RF-ANOVA

概要

RF-ANOVA(Random Forest ANOVA)は、Hutter et al. (2014) が提案した functional ANOVA(fANOVA)をランダムフォレスト上で計算する手法です。 学習済みの回帰木の葉ノード区間(box)から目的関数の分散を主効果ごとに厳密に周辺化分解することでパラメータ重要度を定量化します。

Optuna との関係: Tunny Dashboard は Optuna の FanovaImportanceEvaluator(Hutter et al. 2014 と同じ手法ファミリー)と同種のアルゴリズムを採用していますが、木の学習方法(分割探索、停止条件、木の本数など)が異なるため、数値は完全には一致しません。


理論背景

基本原理

ランダムフォレストの各木 TT は、パラメータ空間を軸並行な区間(葉ノードの box)に分割する区分定数関数とみなせます。 葉 \ell の box を B=dBdB_\ell = \prod_d B_{\ell d}、予測値を yy_\ell(葉内サンプルの平均)とします。

観測データの各パラメータ dd の範囲 ranged=[mind,maxd]\mathrm{range}_d = [\min_d, \max_d] 上に一様事前分布を仮定すると、葉 \ell の重みは

w=dlen(Bdranged)len(ranged)w_\ell = \prod_d \frac{\mathrm{len}(B_{\ell d} \cap \mathrm{range}_d)}{\mathrm{len}(\mathrm{range}_d)}

ranged\mathrm{range}_d が退化している場合、その次元の比率は 1 とします)。

木全体の期待値と全分散は

f0=wy,V=wy2f02f_0 = \sum_\ell w_\ell y_\ell, \qquad V = \sum_\ell w_\ell y_\ell^2 - f_0^2

パラメータ jj の主効果分散 VjV_j は、他の全次元を周辺化した「1 変数関数」の分散として定義されます。 次元 jj について、全葉の box の端点で区切られた基本区間 II ごとに

fj(I)=:IBj(djlen(Bdranged)len(ranged))yf_j(I) = \sum_{\ell:, I \subseteq B_{\ell j}} \left( \prod_{d \neq j} \frac{\mathrm{len}(B_{\ell d} \cap \mathrm{range}_d)}{\mathrm{len}(\mathrm{range}d)} \right) y\ell

を計算し、

Vj=Ilen(I)len(rangej)(fj(I)f0)2V_j = \sum_I \frac{\mathrm{len}(I)}{\mathrm{len}(\mathrm{range}_j)} \left( f_j(I) - f_0 \right)^2

とします。 これは近似ではなく、木の葉パーティションに対する厳密な分散分解です(Hutter et al. 2014, Algorithm 2 相当)。

木ごとの重要度は Vj/VV_j / V です( V<1012V < 10^{-12} の木はほぼ定数出力とみなしてスキップします)。 フォレスト全体の重要度は、スキップされなかった木にわたる Vj/VV_j/V の平均を、合計 1 になるよう正規化したものです。


Tunny Dashboard での計算方法

CART 回帰フォレスト

LightGBM は葉ノードの box をクリーンに取得する API を提供しないため、fANOVA 専用の CART 回帰木を使用しています。

  • ブートストラップ標本: 木ごとに n-of-n 復元抽出(決定的シード: RF_ANOVA_SEED + tree_index
  • 分割探索: 全特徴量を対象に、ノード内の相異なるソート済み値の中点を候補とし、子ノードの重み付き分散を最小化する分割を選びます(特徴量サブサンプリングは行いません。fANOVA の主効果分解は、木の軸並行分割がパラメータ空間全体を厳密に被覆していることに依存するため、全特徴量を使うことで近似ではなく厳密な分解になります)
  • 停止条件: 深さが max_depth に達した、ノードサイズが 2 * min_samples_leaf 未満、または有効な分割が存在しない(y が定数、または全特徴量が定数)場合に葉にします
  • 葉の box: 訓練データ全体(ブートストラップ前)の次元ごとの観測範囲で初期化し、祖先ノードの分割制約で逐次収縮させます

全体フロー

flowchart TD
    data["実際のトライアルデータ"] --> step1["Step 1: 前処理<br/>• NaN/Inf 行を除外<br/>• N > 2000 の場合はランダムサンプリングで<br/>2000 行に削減"]
    step1 --> step2["Step 2: 80/20 ホールドアウト分割"]
    step2 -- "デフォルト" --> split1["シャッフル後 80% を訓練データ、<br/>20% を評価データとする"]
    step2 -- "N < 4 の場合" --> split2["全データを訓練・評価両方に使う"]
    split1 --> step3["Step 3: CART 回帰フォレストを学習<br/>(訓練データ、64 本)<br/>各木は独立したブートストラップ<br/>標本から学習"]
    split2 --> step3
    step3 --> step4["Step 4: 各木を fANOVA 分解<br/>• 葉の box と訓練データ範囲から<br/>重み w_ℓ を計算<br/>• f_0, V を計算(V < 1e-12 の木はスキップ)<br/>• 次元ごとに V_j を区分求積で計算"]
    step4 --> step5["Step 5: フォレスト全体の重要度<br/>• スキップされなかった木にわたる<br/>V_j/V の平均を計算<br/>• 合計 1 に正規化"]
    step5 --> step6["Step 6: R² の計算<br/>• 評価データをフォレスト予測<br/>(木ごとの葉平均値の平均)<br/>• R² = 1 - MSE_eval × N_eval / SS_total<br/>(0 未満は 0 にクリップ)"]
    step6 --> output["出力:<br/>(importances[P], r_squared)"]

ハイパーパラメータ

パラメータ 備考
木の本数 64 Optuna の fanova 既定値 n_trees=64 に合わせている
最大深さ 10 Optuna は max_depth=64(実質無制限)だが、fANOVA 分解のコストは葉数に応じて増加するため、計算量とのトレードオフとして意図的に 10 に制限している
最小リーフサンプル 2 ✓ MDI/SHAP と同じ
乱数シード 42 木ごとに 42 + tree_index
最大行数 2,000 MDI は 1,000

R² の解釈

RF-ANOVA の R² は ホールドアウトデータ上のフォレスト予測の決定係数を表します:

R2=1MSEeval×Nevali(yiyˉ)2R^2 = 1 - \frac{\mathrm{MSE}{\mathrm{eval}} \times N{\mathrm{eval}}}{\sum_i (y_i - \bar{y})^2}

  • R20.8R^2 \geq 0.8(緑): モデルの当てはまりが良好です。重要度の信頼性が高いです
  • 0.5R2<0.80.5 \leq R^2 < 0.8(黄): やや低め。参考程度として扱います
  • R2<0.5R^2 < 0.5(赤): モデルが目的関数を説明できていません。重要度の信頼性が低いです

MDI との比較

比較軸 RF-ANOVA (fANOVA) MDI
測定タイミング 学習後(葉の box に対する分散分解) 学習中(木構築時に記録)
計算コスト 木構築 + 木ごとの分散分解(葉数に依存) 木 1 本あたり O(N·P·D)
バイアス パラメータ間の相互作用を主効果に含めない 高カーディナリティ特徴量に過大評価傾向あり
解釈 "目的関数の分散のうち、このパラメータの主効果で説明できる割合" "学習時にどれだけ役立ったか"

出典

F. Hutter, H. Hoos, K. Leyton-Brown, "An Efficient Approach for Assessing Hyperparameter Importance", ICML 2014. https://proceedings.mlr.press/v32/hutter14.html