質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

2308閲覧

ランダムフォレスト 学習データにpredictを付与するのはNGなのか

nasu0922

総合スコア17

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2019/05/24 08:04

編集2019/05/24 08:50

前提・実現したいこと

ある顧客データ(約1500件)を活用し、自社製品を買ってくれる/買ってくれない(=目的変数)について分類をしたいため、ランダムフォレストで分析を行っています。
顧客データのうち、学習用データ(8割)でモデルを作成し、テスト用データ(2割)で評価しています。
最終的に、顧客データ(約1500件)に対して買ってくれる見込みのある顧客なのか、そうでないのか、予測をpredict関数にて付与したいと考えていますが下記問題が発生しております。(分析ツールはRを使用)

発生している問題・エラーメッセージ

学習用データ(8割)でモデル作成後、テストデータにて評価したところ、Accuraryは80%以上、Recallは70%という結果となりました。
そこで、全データで予測を付与し評価してみると、Accuraryは95%以上、Recallは94%となってしまいます。
そもそも学習データに予測を付与するのは誤りなのでしょうか。

試したこと

ランダムフォレストについて調査したところ、「学習データに対して予測を付与すると、元々の説明変数の値を返す」であったり、「学習モデルの精度はほぼ100%」という情報があるため、学習用データに対して予測を付与するのができないということになります。
決定木やロジステック回帰、SVMなどは、学習データに予測確率を付与できるのですが(誤った認識できたらご指摘ください)、ランダムフォレストに比べ精度が低いためランダムフォレストで実現したいと考えております。
学習データに予測を付与しているのはそもそも誤っているのか、等を含めてご教授いただきたく存じます。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horiegom

2019/05/24 08:33

全データで予測を付与し の部分が意味不明です。
nasu0922

2019/05/24 09:09

全データは学習用+テスト用の顧客データを指します。ご指摘部分の含め文言を修正いたしました。
yamato_user

2019/05/24 09:17

> 予測を付与 がわからん
guest

回答1

0

ベストアンサー

一般的に、学習に使ったデータを予測させて出た結果だけで評価をするのは誤りとされます。未知のデータを予測させるのが機械学習を使う目的なのに、そうした場合の性能を評価できていないからです。

ランダムフォレストに限った話ではなく、SVMだろうがロジスティック回帰だろうが同じです。

この手の機械学習の評価を行う場合は、交差検証(Cross Validation)を行うのが一般的です。また、ランダムフォレストの場合はOOB(Out-Of-Bag)誤り率で評価することも可能です。そういった方法を使ってください。

参考:
「そのモデルの精度、高過ぎませんか?」過学習・汎化性能・交差検証のはなし - 六本木で働くデータサイエンティストのブログ

投稿2019/05/24 09:44

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nasu0922

2019/05/24 23:41

コメントありがとうございます。 ランダムフォレストにて、学習データのOOB は20%ほど(=精度は80%)で、テストデータの評価したところ、正確度は80%となり過学習も起きてないようでした。 最終的に学習データとテストデータの自社製品を買う買わないの予測結果を見たいのですが、単純に学習モデルにpredict もしくはpred関数で算出すれば出るという認識でよろしいでしょうか。  今回の質問は分かりづらく周りの方々にご迷惑おかけして申し訳ありません。
hayataka2049

2019/05/25 17:55

>学習データとテストデータの自社製品を買う買わないの予測結果を見たい 見るだけならできますが、最終的な性能評価に使えるのはテストデータの場合の数字だけです。回答に書いたとおり、学習データを予測させても「不当に良い結果が出る」という結果を招きます。 「不当に良い結果になっていない」全データに対する予測がほしい場合は、交差検証してください。
hayataka2049

2019/05/25 17:57

「学習データにどの程度fitできたか」を測るために学習データを予測させることは一般的です。しかし、それは汎化性能(実際に使われるシチュエーションに即した性能)を見れている訳ではないのです。
nasu0922

2019/05/26 23:31

hayataka2049さん、ご返答ありがとうございます。ようやく理解できました。おっしゃるとおり学習データでは不当に良い結果が出るため、交差検証を行なってみます。ご丁寧なご返答誠にありがとうございました。大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問