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

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

2020年11月12日

Python機械学習

 

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

 

こんにちは、古賀です!

 

本記事では、

はてな

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

について、お話します!

 

今回からPythonの機械学習についてお話していきますが、

ただコードの書き方や、機械学習について説明しても面白くないので、

Python機械学習を使って、

「プロ野球選手が何本ホームランを打ったかどうかを当てる!」

ことをテーマにして進めていきます!

 

野球に詳しくない方も、

Python機械学習のことが理解できるように説明していきますので、

ぜひ見ていってください!

 

使用する環境は、前回お話した「JupyterLab」を使っていきますので、

「JupyterLab」の記事を読んでいない方は、まずこちらを確認してみてください!

JupyterLab
JupyterLabとは?Python実行環境「JupyterLab」の概要と基本的な使い方!

  Pythonの実行環境「JupyterLab」が起動できるところまできたけど、 どういう風に使っていけばいいんだろう?? そもそも「JupyterLab」ってなんだ??   こ ...

続きを見る

 

今回は「概要編」です!

まずは、

「課題のゴールは?」

「機械学習をするために、どのような作業が必要なのか?」

を理解して、データ分析の基本を学びましょう!

 

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

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

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

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

野球
プロフィール

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

続きを見る

 

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

Python機械学習テーマ「ホームラン数を予測する」

野球

まず今回の課題の「ゴール」を決めておきます!

今回は、

「2020年のプロ野球のデータを使って、巨人の選手のホームラン数を当てる」

がゴールです。

 

もう少し補足すると、

  • 巨人以外の11球団のデータを使って機械学習を行う
  • 「出場試合数」や「ヒット数」などから「ホームラン数」の傾向を学習させる
  • 学習したモデルを使って、巨人の選手のデータを使い、「ホームラン数」を当てる

このような感じです。

 

「AI」、「機械学習」と言っても、

「巨人の選手の名前」だけを与えられても、ホームラン数を予測することはできません。

 

まずは、機械に勉強させてあげる必要があります。

それを「巨人以外の11球団のデータ」を使って勉強させます。

どのようなデータを与えるかと言うと、

「試合数」、「打席数」、「ヒット数」などのデータと、答えである「ホームラン数」を与えます。

 

このようなデータを機械に与えることで、

機械は「試合数」、「打席数」、「ヒット数」などから、

「ホームラン」の数を予測できるようになります。

この予測できるようになった機械を「AIモデル」、「機械学習モデル」と呼んだりします。

 

モデルが出来上がったら、

巨人の選手の「試合数」、「打席数」、「ヒット数」などを与えて、

「ホームラン数」を予測します。

これが今回のやりたいことです。

 

少しだけ用語の勉強をしておきましょう。

以下の言葉はよく出てくるので覚えておきましょう!

  • モデルを作るためのデータ(今回は11球団のデータ)を「教師データ」と言う
  • 「教師データ」を使う機械学習を「教師あり学習」と言う
  • 予測するためのデータ「試合数」、「打席数」、「ヒット数」などを
    「説明変数(特徴量)」と言う
  • 予測したいデータ「ホームラン数」を「目的変数」と言う
  • 「ホームラン数」といった「実数を予測する問題」を「回帰問題」と言う

今回の機械学習はほんの一部です。

ディープラーニングの分野である「教師なし学習」や、

分類分けをする「分類問題」もあります。

 

一度に説明しておくとわけがわからなくなるので、

まずは上記5つを覚えておきましょう!

 

それでは、今回の作業手順について説明していきます!

Python機械学習①「データ収集」

PC

機械学習をするためには、データがなければ何もできません。

ということで、はじめにやることが「データ収集」です。

 

データサイエンスの実際の仕事であれば、

企業が使っている業務システムのデータベースからデータを取得してきたりしますが、

今回必要なデータは「2020年のプロ野球データ」です。

 

プロ野球データを管理しているWEBサイトがあるので、

そのWEBサイトのデータを使いたいと思います。

 

WEBサイトに表示されているデータをコピーして、

EXCELファイルに集約しても良いのですが、

ここもPythonでプログラミングを行って、データを取ってきましょう!

 

このように、

WEBサイトの情報を取ってくることを「WEBスクレイピング」

と言うので、この言葉も覚えておきましょう。

 

今回は「WEBスクレイピング」を行って、

データをCSVファイルに出力してみたいと思います。

Python機械学習②「データ分析」

分析

データ収集を行った後は、「データ分析」が必要です。

 

データを取ってきて、後は機械に丸投げできれば楽なのですが、

もう少し人間側で頑張る必要があります。

 

取ってきたデータを機械に渡すのですが、取ってきたデータを全て渡してしまうと、

機械が正しく予測できなかったり、

「教師データ」にだけ良い予測結果が出る「過学習」を起こしたりしてしまいます。

 

正しく予測させるためには、先程説明した「説明変数(特徴量)」が重要です。

選手名など、ホームランを予測する際に必要のないデータは省いて、

ヒット数など、ホームラン数を予測する際に関連性のあるデータだけを渡す必要があります。

 

「ホームランと関連性の高いデータをどのように調べるか?」

についてですが、

もちろん野球に詳しい方であれば、直観的にデータを選択する方法も取れますが、

今回は各項目とホームラン数の相関係数を調べて、相関が強いデータを選択する方法を取りたいと思います。

 

相関係数は中学数学で習うものですが、

「-1~1」を取る値のことで、

「-1」に近ければ負の相関があると言って、値が小さければ目的の数値が大きくなります。

「三振の数が少なければ、ホームランの数が増える」のような関係です。

逆に「1」に近ければ正の相関があると言って、値が大きければ目的の数値も大きくなります。

「ヒット数が多ければ、ホームランの数も増える」のような関係です。

相関係数が「0」付近であれば、ホームランの数には影響しないデータなので、

「説明変数(特徴量)」からは外します。

 

このようにホームラン数との関連が高いデータを調べて、

「説明変数(特徴量)」を作成します。

予測精度が高いモデルを作成するには、このデータ分析作業がカギを握ります。

Python機械学習③「モデル作成&モデル評価」

PC

「説明変数(特徴量)」を作成した後は、

作成した「説明変数(特徴量)」とホームラン数である「目的変数」を機械に渡して「モデル」を作成します。

これにより、モデルは「説明変数(特徴量)」を与えると、ホームラン数を予測できるようになります。

 

「モデルを作成する!」

といっても、自分で作るわけではありません。

1から作成するには、とてつもない量の勉強が必要になるので、

先人が作成してきたものが「Pythonのライブラリ」になっているので、それを使います。

 

ただし、「どれを使うか?」は自分で決めなくてはなりません。

どの課題に対しても万能なモデルはありませんので、

課題に合ったモデルを選択しなくてはなりません。

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

回帰問題に合うモデルを選択します。

 

モデルを作成した後は、

「モデルがどれくらいの精度で予測できているのか?」

を確かめる必要があります。

そのために必要なのが「評価関数」です。

 

「評価関数」も「モデル」と同じで、

Pythonライブラリになっているので、自分で1から作成する必要はありません。

また、課題によって「どの評価関数を使うか?」を決めなくてはなりません。

今回は、先程の「モデル」と同様に「回帰問題」に合った評価関数を選択します。

 

「評価関数」を使ってモデルの精度を確かめるためには、

「教師データ」を2つ分けておく必要があります。

今回で言うと、11球団のデータを「学習用」と「評価用」に2分割します。

例えば、

「10球団のデータでモデルを学習させて、
阪神のデータでモデルが正しくホームラン数を予測できているか確認する」

と言った感じです。

 

今回は「巨人の選手のホームラン数を予測する」ことがゴールですが、

その前のリハーサルのようなものです。

 

そのリハーサルで予測結果が良くなかった場合は、

「どこか改善できる部分がないか?」

探す必要があります。

 

データの量を増やしたり、「説明変数(特徴量)」の見直しをしたりします。

新しい「説明変数(特徴量)」を自分で作るのも1つの手です。

 

このように改善を繰り返して、モデルの精度を上げていき、モデルを完成させます。

Python機械学習④「実施」

グラフ

最後に作成されたモデルを使用して、巨人の各選手のホームラン数を予測します。

 

何も難しいことはせずに、巨人の選手の「説明変数(特徴量)」をモデルに渡すだけです。

実際の業務では「未来の予測」なので、答え合わせができませんが、

今回は巨人の選手のホームラン数データも取得してきているので、

どれだけ正しく予測ができたかどうか、答え合わせもします。

 

以上が、今回の作業手順です!

まとめ:Python機械学習「概要編」

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

まとめ

今回のゴールは、

「2020年のプロ野球のデータを使って、巨人の選手のホームラン数を当てること」

具体的な手順は、

  1. データ収集(WEBサイトからデータを取得する)
  2. データ分析(ホームランと相関が強いデータを選択する)
  3. モデル作成&モデル評価(データを渡してモデルを作成して精度を確認する)
  4. 実施(作成したモデルを使用してホームラン数をあてる)

機械学習用語を覚えよう!

  • 目的のものを予測できるようになった機械を「モデル」と言う
  • モデルを作るためのデータ(今回は11球団のデータ)を「教師データ」と言う
  • 「教師データ」を使う機械学習を「教師あり学習」と言う
  • 予測するためのデータ「試合数」、「打席数」、「ヒット数」などを
    「説明変数(特徴量)」と言う
  • 予測したいデータ「ホームラン数」を「目的変数」と言う
  • 「ホームラン数」といった「実数を予測する問題」を「回帰問題」と言う
  • 教師データにだけ良い予測結果が出てしまうことを「過学習」と言う
  • モデルの精度を確認するための関数を「評価関数」と言う

 

ざっと今回の流れを説明していきました。

概ね理解できた方もいるかもしれませんが、

初めて聞く言葉も多かったと思うので、よく理解できなかった方もいるかもしれません。

 

よく理解できなくても、

それぞれのパートでもう一度お話していくので大丈夫です!

実際にコードを見ることで、理解もしやすくなると思います。

 

今回は「ゴール」と「手順」さえ頭に入っていれば問題なしです!

もし「ゴール」と「手順」がわからなくなってしまったら、

この記事に一旦戻ってきましょう!

 

それぞれのパートで、

「何のために?」

「何をしているのか?」

わからなくなってしまうので、

「ゴール」と「手順」だけは押さえておきましょう!

 

次回は「データ収集(WEBスクレイピング)編」です!

WEBサイトに表示されているプロ野球データをCSVファイルに出力します!

 

※次の記事へ

Python機械学習
Python機械学習「ホームラン数予測②」データ収集「WEBスクレイピング」編!

  PythonのプログラミングでWEBサイトの情報を取ってきたいけど、 どうやってやればいいんだろう。。 CSVデータに出力したいんだけど。。   こんにちは、古賀です! &nb ...

続きを見る

おすすめ記事

道のり 1

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

成長するエンジニア 2

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

闘病記 3

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

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

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

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

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