
きょうは「仕分ける道具が、なぜ数値も出せるのか」を、順に開けていきます
ランダムフォレストは、分類にも回帰にも使えます。
説明を読むと、たしかにそう書いてあります。
ただ、ここで引っかかった方は多いはずです。
中身は決定木、つまり「はい/いいえ」で枝分かれする仕組みです。
それが、なぜ連続した数値を出せるのでしょうか。
言われてみれば、仕分けと数当ては別の作業だよね

ここは、大人の学び直しで差が出るところだと思っています。
学生時代なら、「両方に使えます」で先に進めました。
覚えることが目的だったからです。
いまは、その先が要ります。
使うかどうかを、自分で判断しなければならないからです。
判断するには、できることだけでなく、できないことを知る必要があります。
入門記事が書かないのは、たいてい後者のほうです。
なので、できない側まで書きます。
結論:変えているのは、まとめ方だけです
分類 … たくさんの木の答えを、多数決でまとめる
回帰 … たくさんの木の答えを、平均でまとめる
木の作り方は、ほとんど同じです。
違うのは、最後の一手だけ。

「両方に使える」というより、出口を付け替えている。そう捉えたほうが正確なんです
1本の木は、何をしているのか
決定木は、質問を重ねてデータを仕分けます。
「広さは100平方メートル以上か」
「築年数は20年より新しいか」
こうして枝分かれを繰り返すと、最後は小さな仲間に分かれます。
その仲間の中を見て、答えを出します。
- 分類なら … その仲間に多かったほうを答える
- 回帰なら … その仲間の数値を平均して答える
数式を解いているわけではありません。
似たものを集めて、その平均を返しているだけです。
ここが分かると、後の話がすべて素直に入ってきます。
ひとつ、細かい注記を挟みます。
分類を「多数決」と書きましたが、これは提案された当時の説明です。
広く使われているscikit-learnの実装は、少し違います。
各木が出した確率を平均して、いちばん高い種類を選びます。
たいていは同じ答えになりますが、同じ仕組みではありません。
自信のない木の1票と、確信のある木の1票を、区別できるかどうかが違います。
なぜ1本ではなく、森にするのか
木を1本だけ作ると、そのデータに合わせ込みすぎます。
手元のデータには完璧に当たるのに、新しいデータでは外す。
決定木は、単体だとこうなりやすい手法です。
そこで、たくさん作って平均します。
でも同じデータで作ったら、同じ木が並ぶだけじゃないの?


いいところを突きました。だから、わざと2か所でばらけさせるんです
- 使うデータをばらけさせる … 全件から重複ありで選び直し、木ごとに違う顔ぶれで学習させる
- 使う列をばらけさせる … 枝分かれのたびに、候補の列をランダムに絞る
2つ目が、地味に効きます。
強い列が1本あると、放っておけば全部の木がそれを使います。
似た木ばかりになり、平均しても意味がありません。
わざと視野を狭めた木を、たくさん作る。
間違い方がばらけるので、平均すると打ち消し合います。
なお、これで過学習が起きなくなるわけではありません。
1本の木より起きにくい、というだけです。
回帰係数は出ません
ここが、最初の関門です。
線形回帰なら、式が出ます。
「広さが1平方メートル増えると、価格は32万円上がる」
こういう言い方ができます。
ランダムフォレストには、これがありません。
式がないからです。
あるのは、枝分かれの規則が数百本ぶんだけ。
え、それで予測できてると言えるの?

言えます。
ただし、言えることの中身が違います。
「この条件なら、だいたいこの値」は出せます。
「この条件を1つ動かすと、いくら変わるか」は出せません。
答えは出るが、理由は式で説明できない。
逆に言えば、説明が要らない場面では、これで十分です。
値そのものが欲しいだけなら、困りません。
では、何なら分かるのか
代わりに出せるのが、特徴量の重要度です。
どの列が予測に効いていたかを、割合で示します。
たとえば、こういう形で出ます(値は説明のための例です)。
| 列 | 重要度 |
|---|---|
| 広さ | 40% |
| 部屋数 | 25% |
| 立地 | 20% |
| 築年数 | 10% |
| 近隣の学校評価 | 5% |
ここで、ひとつ強く注意してほしいことがあります。
重要度は「効き目の大きさ」であって、「効き方」ではありません。
広さが40%だと分かっても、こうは言えません。
- 広いほど高い、という向きは分からない
- 広さが2倍だと価格がどうなるか、という量も分からない
分かるのは、順位だけです。
そこ、混ぜて説明されてる気がする……

実際、混ざりやすいところです。
会議で「広さが効いています」と言うと、聞いた側は向きまで受け取ります。
その重要度にも、既知のクセがあります
さらに一段、踏み込んでおきます。
ふつうに出てくる重要度は、枝分かれでどれだけ仕分けが進んだかを足し上げたものです。
この作り方には、はっきりした偏りが知られています。
- 取りうる値が多い列ほど、高く出ます。連続した数値の列が、二択の列より有利になります
- 学習に使ったデータの上で計算するため、合わせ込んだ列まで高く出ます
これは実装の不備ではなく、仕組み上そうなるものです。

だから、出てきた順位をそのまま結論にしないでほしいんです。ここは注意書きが付いています
対処もあります。
列の値をわざとシャッフルして、成績がどれだけ落ちるかを測る方法です。
落ちれば、その列は効いていた。
落ちなければ、効いていなかった。
学習に使っていないデータの上で測れるので、偏りも避けられます。
順位を人に説明するなら、こちらを使うほうが安全です。
分類は、何種類までできるのか
よく聞かれるところなので、書いておきます。
仕組みの上での上限はありません。
2種類でも、100種類でも動きます。
詰まるのは、いつもデータの側です。
種類が増えれば、1種類あたりの件数は減ります。
10件しかない種類は、まず当たりません。
「何種類まで可能か」ではなく
「1種類あたり何件あるか」で考えてください。
数の上限を気にして止まる場面は、実務ではほとんどありません。
見落とされがちな弱点:外側が出せません
最後に、回帰で使うときの弱点をひとつ。
この手法の答えは、学習に使った数値の平均です。
ということは、学習データにあった範囲の外へは出られません。
過去の取引がすべて6,000万円以下だったとします。
どれだけ広い家を入れても、予測は6,000万円あたりで頭打ちになります。
え、それ知らずに使ったら怖いね


しかもエラーは出ません。それらしい値が返ってくるので、気づけないんです
右肩上がりを外に伸ばしたいなら、線形回帰のほうが向いています。
この2つは、優劣ではありません。
内側を細かく当てるか、外側へ伸ばすか。
向いている場所が違うだけです。
使いどころを、1行で
当てたいだけなら、強い。
理由を説明したいなら、向かない。
まず試す手法としては、いまでも有力です。
前処理の手間は、比較的少なくて済みます。
目盛りをそろえる作業は要りません。
ただし、ここも1つ注意があります。
「区分データもそのまま扱える」と書かれているのを見かけますが、scikit-learnの実装では数値に直す必要があります。
文字のまま渡すと、動きません。
まずこれで基準の成績を出し、そこから他と比べる。
そういう置き方が、いちばん扱いやすいと思っています。
できないことを知ってから、使う
最後に、勉強のしかたの話を少しだけ。
入門の説明は、できることから並びます。
売り込む必要があるからです。
ところが実務で効くのは、たいてい逆でした。
できないことを1つ知っているだけで、事故が1つ減ります。
できることを10個覚えても、事故は減りません。
今回でいえば、覚えて帰るのは3つで足ります。
- 分類は多数決、回帰は平均。出口が違うだけ
- 重要度は順位。向きも量も出ない
- 学習データの外側へは出られない
結果の良し悪しをどう測るかは、F値とは何か。混同行列と調和平均で理解するにまとめました。
この辺りをどこまで勉強するかで迷ったら、統計検定2級と準1級、どちらが必要かで線を引いています。
