Random Forest(ランダムフォレスト)

Random Forest タブでは、ランダムフォレストを使った分類と回帰ができます。ランダムフォレストはブートストラップ標本から複数の決定木を構築し、予測を集約するアンサンブル手法です(Breiman, 2001)。分類では多数決、回帰では平均で集約します。応答変数の分布を仮定しないため、GLM のような分布ファミリーやリンク関数の選択は不要です。

基本的な使い方

Random Forest を開く

メニューバーから Analysis > Random Forest... を選択します。タブ上部の Train / Predict ボタンで学習モードと予測モードを切り替えます。

変数の設定

以下の例では Iris データセットを使用しています。

Dataset で分析対象のデータセットを選択します。

Task Type でタスクの種類を選択します。

  • Classification: 目的変数の値をクラスラベルとして扱います。全ての列型が選択できます
  • Regression: 目的変数を連続値として扱います。数値型(int64, float64)の列のみ選択できます

Target Variable (Y) で目的変数を選択します。Regression モードでは数値型でない列は "(requires conversion)" と表示され選択できません。

Predictor Variables (X) で説明変数を選択します。数値型の列から複数選択できます。カテゴリ尺度(名義・順序)や日付型の列は選択できないため、事前に Dummy Coding タブで数値変換してください。目的変数に選択した列は候補から自動的に除外されます。

Random Forest フォーム

ハイパーパラメータ

パラメータUI 表記デフォルト説明
nEstimatorsNumber of Trees (n_estimators)100アンサンブルに含める決定木の数
maxDepthMax Depth空欄(無制限)各決定木の最大深さ。浅くすると過適合を抑制できます
minSamplesSplitMin Samples Split2内部ノードを分割するのに必要な最小サンプル数
minSamplesLeafMin Samples Leaf1葉ノードに必要な最小サンプル数
randomStateRandom State42乱数シード。同じ値を指定すると同じ結果が再現されます

各分割で考慮する説明変数の数は、分類・回帰とも p\lfloor\sqrt{p}\rfloorpp は説明変数の総数)に固定されています。回帰では p/3p/3 を使う実装もありますが、MIDAS では p\sqrt{p} を採用しています。

分析の実行

設定が完了したら、Run Random Forest ボタンをクリックします。学習中は進捗メッセージが表示されます。

結果の見方

分類の指標

Task Type が Classification の場合に表示されます。

分類の結果

指標説明
Accuracy正しく分類されたサンプルの割合
Precision各クラスの適合率(予測が陽性のうち実際に陽性の割合)
Recall各クラスの再現率(実際に陽性のうち正しく予測された割合)
F1 ScorePrecision と Recall の調和平均
OOB AccuracyOut-of-Bag 正解率(OOB スコアを参照)

2クラスの場合、Precision・Recall・F1 Score は混同行列の列順で2番目のクラスに対する値です。3クラス以上の場合はサンプル数による重み付き平均です。

Accuracy 等は学習データに対して計算されるため、過適合したモデルでも高い値が出ます。モデルの汎化性能は OOB Accuracy で判断してください。2クラス分類で Precision・Recall・F1 Score が意図したクラスに対する値かどうかは、混同行列の列順で確認できます。

混同行列

分類結果のすぐ下に混同行列が表示されます。行が実測クラス、列が予測クラスを表します。対角要素が正しい分類の数です。

回帰の指標

Task Type が Regression の場合に表示されます。

回帰の結果

指標数式説明
R-squared (R2R^2)1(yiy^i)2(yiyˉ)21 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}モデルが説明する目的変数の分散の割合
RMSE1n(yiy^i)2\sqrt{\frac{1}{n}\sum(y_i - \hat{y}_i)^2}二乗平均平方根誤差
MAE1nyiy^i\frac{1}{n}\sum\lvert y_i - \hat{y}_i\rvert平均絶対誤差
MSE1n(yiy^i)2\frac{1}{n}\sum(y_i - \hat{y}_i)^2平均二乗誤差
OOB R2R^2Out-of-Bag R2R^2OOB スコアを参照)。モデルの予測が平均値より悪い場合は負になります

R² や RMSE などの指標は学習データに対して計算されるため、過適合したモデルでも高い値が出ます。モデルの汎化性能は OOB R2R^2 で判断してください。

診断プロット(回帰)

Regression モードでは2つの散布図が表示されます。これらは学習データに対する予測値と残差をプロットしたものです。

Actual vs Predicted: 横軸に予測値 y^\hat{y}、縦軸に実測値 yy をプロットします。データ点が対角線付近に集まっていれば、予測が実測に近いことを示します。

Residuals vs Fitted Values: 横軸に予測値、縦軸に残差 yy^y - \hat{y} をプロットします。ゼロの水平線が表示されます。ランダムフォレストは学習データに対して強くフィットするため、残差が小さくなりやすく、このプロットだけでは過適合を検出できません。モデルの汎化性能は OOB R2R^2 で判断してください。

プロット上でデータポイントをクリックまたは矩形選択すると、選択されたポイントの詳細(Row, Actual, Predicted, Residual)がプロット下部のテーブルに表示されます。

特徴量重要度

分類・回帰の両方で表示されます。重要度の高い順にソートされたテーブルと、棒グラフによる可視化が表示されます。

特徴量重要度

重要度は Mean Decrease in Impurity(MDI)で計算されます。各説明変数がアンサンブル全体でもたらした不純度の減少量を集計し、合計が1になるよう正規化した値です。分類では Gini 不純度、回帰では分散を不純度の指標として使います。

MDI は学習データ上の分割寄与度なので、連続変数のようにユニーク値が多い説明変数ほど分割候補が増え、重要度が高く出やすくなります。逆に、カテゴリ変数を Dummy Coding で展開すると、元の1変数の重要度が複数のダミー列に分散して低く見えます。

モデルの保存

結果の下部にある Model Name フィールドにモデル名を入力します。デフォルトでは "RF Classification - {データセット名} ({日付})" または "RF Regression - {データセット名} ({日付})" の形式で生成されます。

Save Model をクリックするとモデルがプロジェクトに保存されます。保存したモデルは Predict モードで使用できます。

予測

予測の実行

  1. タブ上部の Predict ボタンをクリックして予測モードに切り替えます
  2. Model ドロップダウンから保存済みモデルを選択します。モデルの情報(Task Type、説明変数の数、必要な説明変数名、分類の場合はクラス数)が表示されます
  3. Dataset for Prediction で予測対象のデータセットを選択します。モデルの説明変数名と同名の列を含むデータセットを選んでください
  4. Run Prediction をクリックします

予測フォーム

予測結果

予測が完了すると、以下が表示されます。

予測結果

プレビューテーブル: 先頭20行の予測結果です。分類の場合は各クラスの予測確率 P(クラス名) も表示されます。

Predicted Class Distribution(分類のみ): 予測されたクラスごとの件数と割合のテーブルです。

Prediction Statistics(回帰のみ): 予測値の要約統計量(Mean, Median, Std Dev, Min, Max)のテーブルです。

データセットとして保存

Save as Dataset をクリックすると、予測結果が派生データセットとして保存されます。

内容
説明変数列元データセットからモデルの説明変数に一致する列
Prediction予測値。分類ではクラスラベル(string 型)、回帰では数値(float64 型)
P(クラス名)各クラスの予測確率(分類のみ、float64 型)

説明変数に欠損値がある行では、予測列は null になります。

注意事項

カテゴリ変数の使用

説明変数には数値型のみ使用できます。カテゴリ変数を使用するには、Dummy Coding タブで数値のダミー変数に変換してから分析を行います。

欠損値の自動除外

学習時には、選択した変数に欠損値(null)、非数値、無限大を含む行が自動的に除外されます。除外が発生した場合、結果の Samples に除外行数が表示されます。この除外はリストワイズ除去に該当します。妥当な推定を与える条件については欠損データのメカニズムを参照してください。

予測時には、説明変数に欠損値がある行はスキップされ、予測列に null が設定されます。スキップされた行数は結果に表示されます。

Out-of-Bag (OOB) スコア

各決定木はブートストラップ標本(復元抽出、元データと同サイズ)で学習されます。OOB スコアは、各学習サンプルに対してそのサンプルを含まない木だけで予測を行い、集計した性能指標です。分類では正解率、回帰では R2R^2 を表示します。

各ブートストラップ標本には約 63.2% のサンプルが含まれ、残り約 36.8%(1(11/n)n1 - (1 - 1/n)^n)が OOB として検証に回ります。別途の検証セットを用意せずに汎化性能を推定できます。

制限事項

  • ランダムフォレストの学習はブラウザ内の JavaScript で実行されます。データセットが大きい場合や木の数が多い場合、処理に時間がかかることがあります
  • 交差検証や train/test 分割は未提供です。汎化性能は OOB スコアで推定できます
  • 各分割で考慮する説明変数の数(maxFeatures)は p\lfloor\sqrt{p}\rfloor に固定されており、UI から変更できません

参考文献

関連ページ