エンジニア データサイエンティスト

Python機械学習「ホームラン数予測⑤」予測編!

2020年12月27日

Python機械学習

 

機械学習をさせて作ったモデルはどれくらい正確に予測してくれるんだろう?
モデル評価のスコアは結構良い感じだったけど、実際はどうだろ?

 

こんにちは、古賀です!

 

本記事は、

はてな

「Python機械学習でホームラン数を予測する」の予測編

です!

 

今回で、この「ホームラン数予測」は最終回です!

 

機械学習をさせてモデルを作成した後は、

実際にそのモデルを使って、予測させてみましょう!

良いモデルが作成できていれば、良い予測結果が出るはずです!

 

今回が最後なので、機械学習の一通りの流れは終わりです!

Pythonの機械学習の基本を学んで、次の勉強に活かしましょう!

 

前回の続きになりますので、

前回の記事を読まれていない方はこちらをご覧ください!

Python機械学習
Python機械学習「ホームラン数予測④」モデル作成・モデル評価編!

  「機械学習させてAIを作る!」ってなんだか難しそう。。 自分のレベルでもできるのかな。。   こんにちは、古賀です!   本記事は、 はてな 「Python機械学習で ...

続きを見る

 

自己紹介が遅れましたが、

わたしは大学卒業後、上場IT企業に就職し、プログラマー、システムエンジニアとして

約10年間働いておりまして、その後は様々な活動をしております。

プロフィールの詳細はこちらです。

野球
プロフィール

こんにちは、古賀正雄です。現在34歳です。 簡単ではありますが、こちらのページで自己紹介とこのブログについてお話します。 目次1 高校時代2 大学時代3 社会人1年目~3年目(発症期)4 社会人4年目 ...

続きを見る

 

※YouTubeに同内容を公開しております。

Python機械学習「予測」の概要

分析

前回までの動画で、

  1. WEBスクレイピングでデータを収集
  2. データ分析をして「説明変数」と「目的変数」を作成
  3. 11球団のデータを使用して「モデル作成&モデル評価」

をしてきました。

 

今回は、今回の目的のゴールである

「作成したモデルを使って、巨人の選手のホームラン数を予測」

します!

 

前回、評価用データのホームラン数を予測したように、

巨人の選手のデータを渡して、ホームラン数を予測させます。

ですので、コードの内容も前回書いた内容と同じです。

 

具体的な手順は、

  1. 巨人のデータの「説明変数」を作成する
  2. 作成したモデルを使用して、巨人のホームラン数を予測させる
  3. 予測したホームラン数と実際のホームラン数を比較してみる

です!

Python機械学習「予測」をしてみる!

野球場

前回までのコードも含まれていますが、今回のコードは最後の4行分です。

今からこのコードを説明していきます!

巨人の説明変数を作成する

まずは、ホームラン数を予測するための材料「説明変数」を巨人のデータで作成します。

学習用データの「説明変数」の項目と一致していないと、

予測処理を実行させた時にエラーが発生してしまうので、

学習用データの「説明変数」を作った時と同じように、巨人のデータの「説明変数」も作成します。

「df_g」の変数には、巨人の選手データが格納されています。

※その過程はこちら記事で解説しています。

Python機械学習
Python機械学習「ホームラン数予測③」データ分析編!

  ホームラン数を予測できるように機械学習させたいけど、 どんな情報を渡せば良いんだろう。。 片っ端から渡して色々と試せばいいんだろうか。。   こんにちは、古賀です! &nbsp ...

続きを見る

 

その巨人のデータから「説明変数」の項目名が配列型で格納されている「X_columns」を指定して、

「説明変数」の項目のみ取り出して、「X_g」にセットしています。

これで巨人の選手の「説明変数」の作成が完了です!

 

中身を確認してみると、

説明変数の項目だけ取り出せていることが確認できます。

 

おさらいですが、この項目は「ホームラン数との相関係数が0.7以上」の項目です。

この項目から「ホームラン数」を予測できるように、モデルを作成してきました。

「チーム名」や「選手名」が項目にないので、

巨人のデータかどうか判断が付かないかもしれませんが、

「チーム名」や「選手名」はホームラン数を予測するための材料ではないので、

除外されているのが正解です!

モデルに巨人のホームラン数を予測させる

「説明変数」を作成したら、機械学習モデルに渡して「ホームラン数」を予測してもらいます。

この処理は前回「評価用」データを使って「ホームラン数」を予測した時の処理と同じです。

「predict」関数に「説明変数」を渡すだけです。

予測した結果を「y_pred_g」に格納しています。

 

この「y_pred_g」の中身を確認してみると、

こんな感じになっています。

各選手の予測ホームラン数が一覧で表示されています。

「e+01」や「e-01」という表示がありますが、これは「10の何乗」であるかを表しています。

「3.03649782e+01」であれば、「30.36」本ということになります。

 

ただこれだと、かなり見づらいですね。。

ちょっと見やすくなるように改善してみましょう!

小数点以下を四捨五入してみます。

「Numpyのndarray型」の各要素を四捨五入したい場合は、「np.round」関数を使います。

これで大分見やすくなりましたが、「小数点」と「-」が気になるので、

これも消していきましょう。

 

1つ1つの要素を整数型である「int型」に変換します。

要素に対して変換をする場合は、「astype(変換したいデータ型)」関数を使います。

「int(変数)」では要素に対して変換が行われないので注意が必要です!

「int(変数)」では、ndarrayをintに変換しようとして、エラーが発生してしまいます。

これでホームラン数が綺麗に確認できるようになりました!

予測したホームラン数と実際のホームラン数を比較

最後に「予測したホームラン数」と「実際のホームラン数」を比較してみましょう。

前回と同じように、評価関数を使って比較しても良いのですが、

評価関数の値を確認してもいまいちピンとこないと思うので、

今回は直接「予測したホームラン数」と「実際のホームラン数」を、

横並びで確認してみたいと思います!

 

やることは簡単です。

まずは、巨人のデータが格納されている「df_g」に「予測したホームラン数」を追加します。

「Dataframe」の変数「df_g」に列追加したい場合は、

「Dataframe[追加したい項目名]=セットしたい値」

とすれば、新しい列が追加できます。

セットしたい値は、先程「予測したホームラン数」を綺麗にした値です。

これで巨人の選手データに「予測本塁打」の列が追加されています。

 

最後に「選手名」、「本塁打」、「予測本塁打」を指定して、データを確認してみましょう!

各選手のホームラン数を見てみると、1、2本の誤差がある選手もいますが、

大体正確に予測ができていると思います!

 

5回に分けて説明してきましたが、

このようにデータを機械に読み込ませて、機械学習モデルを作成することで、

「説明変数」を渡すだけで、「目的変数」を求めることができるようになります!

 

最後に今回のコード全体をもう一度見てみましょう!

おまけ

少しだけおまけです。

今回はホームラン数を相関が強い項目を説明変数として、モデルを作成しました。

野球に詳しい方であれば、お気づきでしょうが、

野球の「塁打」という項目は、

「塁打」=4×「本塁打」+3×「三塁打」+2×「二塁打」+「単打」

という式で求めることができます。

なので、「本塁打」を求めたければ、

相関の強さに関係なく、「塁打」、「三塁打」、「二塁打」、「単打」を渡せば、

正確に「ホームラン数」を求めることができるはずです。

ただ今回データの中に「単打」の項目がないので、代わりに「安打」を渡してみます。

※「単打」はシングルヒット数、「安打」はホームランを含んだ全ヒット数です。

 

これで再度機械学習をさせて「ホームラン数」を予測してみると、

評価関数「RMSE」の値は「4.897912368638467e-15」でほぼ「0」です。

「予測したホームラン数」と「実際のホームラン数」の値も完全一致しています。

 

このように「Pythonの知識」や「機械学習の知識」、「データ分析力」も必要ですが、

目的の値を正しく予測するためには、「取り組む課題自体の知識」も非常に重要になります!

まとめ:Python機械学習「予測」

ここまでの話をまとめます。

まとめ

今回は作成したモデルを使用して「予測したホームラン数」と「実際のホームラン数」を比較した!

今回やったことは、

  1. 巨人のデータの「説明変数」を作成した
  2. 作成したモデルを使用して、巨人のホームラン数を予測させた
  3. 予測したホームラン数と実際のホームラン数を比較した

1、2本の誤差はあったものの、ホームラン数を精度高く予測することができた!

 

全5回に分けて「Python機械学習」について、説明してきました。

今回の内容は機械学習の基本的な部分です。

 

ところどころ何やっているのか、わからなくなってしまった方は、

「概要編」を振り返ってみてください。

Python機械学習
Python機械学習「ホームラン数予測①」概要編!

  PythonってAIや機械学習ができるって言うけど、 誰にでもできるんだろうか。。 やっぱり難しいコードを書いたりするんだろうか。。 イメージを掴みたいな。。   こんにちは、 ...

続きを見る

 

全体の流れを再確認することで、機械学習の基本的な流れや、

コードの理解も進むと思います。

 

今回はホームランという「実数」を予測する「回帰問題」であり、

機械学習をさせるためのデータがある「教師あり学習」でした。

 

機械学習の分野には他にも、分類分けをする「分類問題」であったり、

「教師なし学習」ができる「ディープラーニング」の分野もあります。

 

まだまだ奥が深いので、

今回の内容を足掛かりにして、お互いに勉強を進めていきましょう!

おすすめ記事

道のり 1

※本記事は、各記事のまとめ記事です。   こんにちは、古賀です!   本記事では、 「プログラミング未経験者がエンジニアとして働き、 年収1000万に到達するまでの道のり」 をご説 ...

成長するエンジニア 2

  エンジニアになったけど、いまいち成長を感じられないなぁ。。 作業スピードも品質も平凡。 この先成長していけるんだろうか。。   こんにちは、古賀です!   エンジニア ...

闘病記 3

※本記事は、各記事のまとめ記事です。   こんにちは、古賀です!   わたしは25歳の時に、悪性リンパ腫になりました。 不安な気持ちになって、たくさん泣きました。 本気で「死ぬかも ...

プログラミングスクール 4

  プログラミングを本格的に勉強して仕事に繋げていきたいけど、 プログラミングスクール多すぎる。。 どういう目線で選べばいいんだ。。   こんにちは、古賀です。   プロ ...

-エンジニア, データサイエンティスト
-, ,

Copyright© Koga Masao's LifeBlog , 2021 All Rights Reserved.