誰にでもできるんだろうか。。
やっぱり難しいコードを書いたりするんだろうか。。
イメージを掴みたいな。。
こんにちは、古賀です!
本記事では、
はてな
「Python機械学習でホームラン数を予測する」の概要
について、お話します!
今回からPythonの機械学習についてお話していきますが、
ただコードの書き方や、機械学習について説明しても面白くないので、
Python機械学習を使って、
「プロ野球選手が何本ホームランを打ったかどうかを当てる!」
ことをテーマにして進めていきます!
野球に詳しくない方も、
Python機械学習のことが理解できるように説明していきますので、
ぜひ見ていってください!
使用する環境は、前回お話した「JupyterLab」を使っていきますので、
「JupyterLab」の記事を読んでいない方は、まずこちらを確認してみてください!
-
JupyterLabとは?Python実行環境「JupyterLab」の概要と基本的な使い方!
Pythonの実行環境「JupyterLab」が起動できるところまできたけど、 どういう風に使っていけばいいんだろう?? そもそも「JupyterLab」ってなんだ?? こ ...
続きを見る
今回は「概要編」です!
まずは、
「課題のゴールは?」
「機械学習をするために、どのような作業が必要なのか?」
を理解して、データ分析の基本を学びましょう!
自己紹介が遅れましたが、
わたしは大学卒業後、上場IT企業に就職し、プログラマー、システムエンジニアとして
約10年間働いておりまして、その後は様々な活動をしております。
プロフィールの詳細はこちらです。
-
プロフィール
こんにちは、古賀正雄です。現在36歳です。 簡単ではありますが、こちらのページで自己紹介とこのブログについてお話します。 高校時代 学生時代は主に野球をしていました。 進学先の高校も野球で選びました。 ...
続きを見る
※YouTubeに同内容を公開しております。
Python機械学習テーマ「ホームラン数を予測する」
まず今回の課題の「ゴール」を決めておきます!
今回は、
「2020年のプロ野球のデータを使って、巨人の選手のホームラン数を当てる」
がゴールです。
もう少し補足すると、
- 巨人以外の11球団のデータを使って機械学習を行う
- 「出場試合数」や「ヒット数」などから「ホームラン数」の傾向を学習させる
- 学習したモデルを使って、巨人の選手のデータを使い、「ホームラン数」を当てる
このような感じです。
「AI」、「機械学習」と言っても、
「巨人の選手の名前」だけを与えられても、ホームラン数を予測することはできません。
まずは、機械に勉強させてあげる必要があります。
それを「巨人以外の11球団のデータ」を使って勉強させます。
どのようなデータを与えるかと言うと、
「試合数」、「打席数」、「ヒット数」などのデータと、答えである「ホームラン数」を与えます。
このようなデータを機械に与えることで、
機械は「試合数」、「打席数」、「ヒット数」などから、
「ホームラン」の数を予測できるようになります。
この予測できるようになった機械を「AIモデル」、「機械学習モデル」と呼んだりします。
モデルが出来上がったら、
巨人の選手の「試合数」、「打席数」、「ヒット数」などを与えて、
「ホームラン数」を予測します。
これが今回のやりたいことです。
少しだけ用語の勉強をしておきましょう。
以下の言葉はよく出てくるので覚えておきましょう!
- モデルを作るためのデータ(今回は11球団のデータ)を「教師データ」と言う
- 「教師データ」を使う機械学習を「教師あり学習」と言う
- 予測するためのデータ「試合数」、「打席数」、「ヒット数」などを
「説明変数(特徴量)」と言う - 予測したいデータ「ホームラン数」を「目的変数」と言う
- 「ホームラン数」といった「実数を予測する問題」を「回帰問題」と言う
今回の機械学習はほんの一部です。
ディープラーニングの分野である「教師なし学習」や、
分類分けをする「分類問題」もあります。
一度に説明しておくとわけがわからなくなるので、
まずは上記5つを覚えておきましょう!
それでは、今回の作業手順について説明していきます!
Python機械学習①「データ収集」
機械学習をするためには、データがなければ何もできません。
ということで、はじめにやることが「データ収集」です。
データサイエンスの実際の仕事であれば、
企業が使っている業務システムのデータベースからデータを取得してきたりしますが、
今回必要なデータは「2020年のプロ野球データ」です。
プロ野球データを管理しているWEBサイトがあるので、
そのWEBサイトのデータを使いたいと思います。
WEBサイトに表示されているデータをコピーして、
EXCELファイルに集約しても良いのですが、
ここもPythonでプログラミングを行って、データを取ってきましょう!
このように、
WEBサイトの情報を取ってくることを「WEBスクレイピング」
と言うので、この言葉も覚えておきましょう。
今回は「WEBスクレイピング」を行って、
データをCSVファイルに出力してみたいと思います。
Python機械学習②「データ分析」
データ収集を行った後は、「データ分析」が必要です。
データを取ってきて、後は機械に丸投げできれば楽なのですが、
もう少し人間側で頑張る必要があります。
取ってきたデータを機械に渡すのですが、取ってきたデータを全て渡してしまうと、
機械が正しく予測できなかったり、
「教師データ」にだけ良い予測結果が出る「過学習」を起こしたりしてしまいます。
正しく予測させるためには、先程説明した「説明変数(特徴量)」が重要です。
選手名など、ホームランを予測する際に必要のないデータは省いて、
ヒット数など、ホームラン数を予測する際に関連性のあるデータだけを渡す必要があります。
「ホームランと関連性の高いデータをどのように調べるか?」
についてですが、
もちろん野球に詳しい方であれば、直観的にデータを選択する方法も取れますが、
今回は各項目とホームラン数の相関係数を調べて、相関が強いデータを選択する方法を取りたいと思います。
相関係数は中学数学で習うものですが、
「-1~1」を取る値のことで、
「-1」に近ければ負の相関があると言って、値が小さければ目的の数値が大きくなります。
「三振の数が少なければ、ホームランの数が増える」のような関係です。
逆に「1」に近ければ正の相関があると言って、値が大きければ目的の数値も大きくなります。
「ヒット数が多ければ、ホームランの数も増える」のような関係です。
相関係数が「0」付近であれば、ホームランの数には影響しないデータなので、
「説明変数(特徴量)」からは外します。
このようにホームラン数との関連が高いデータを調べて、
「説明変数(特徴量)」を作成します。
予測精度が高いモデルを作成するには、このデータ分析作業がカギを握ります。
Python機械学習③「モデル作成&モデル評価」
「説明変数(特徴量)」を作成した後は、
作成した「説明変数(特徴量)」とホームラン数である「目的変数」を機械に渡して「モデル」を作成します。
これにより、モデルは「説明変数(特徴量)」を与えると、ホームラン数を予測できるようになります。
「モデルを作成する!」
といっても、自分で作るわけではありません。
1から作成するには、とてつもない量の勉強が必要になるので、
先人が作成してきたものが「Pythonのライブラリ」になっているので、それを使います。
ただし、「どれを使うか?」は自分で決めなくてはなりません。
どの課題に対しても万能なモデルはありませんので、
課題に合ったモデルを選択しなくてはなりません。
今回は「ホームラン数を予測する」という「数値を予測する回帰問題」なので、
回帰問題に合うモデルを選択します。
モデルを作成した後は、
「モデルがどれくらいの精度で予測できているのか?」
を確かめる必要があります。
そのために必要なのが「評価関数」です。
「評価関数」も「モデル」と同じで、
Pythonライブラリになっているので、自分で1から作成する必要はありません。
また、課題によって「どの評価関数を使うか?」を決めなくてはなりません。
今回は、先程の「モデル」と同様に「回帰問題」に合った評価関数を選択します。
「評価関数」を使ってモデルの精度を確かめるためには、
「教師データ」を2つ分けておく必要があります。
今回で言うと、11球団のデータを「学習用」と「評価用」に2分割します。
例えば、
「10球団のデータでモデルを学習させて、
阪神のデータでモデルが正しくホームラン数を予測できているか確認する」
と言った感じです。
今回は「巨人の選手のホームラン数を予測する」ことがゴールですが、
その前のリハーサルのようなものです。
そのリハーサルで予測結果が良くなかった場合は、
「どこか改善できる部分がないか?」
探す必要があります。
データの量を増やしたり、「説明変数(特徴量)」の見直しをしたりします。
新しい「説明変数(特徴量)」を自分で作るのも1つの手です。
このように改善を繰り返して、モデルの精度を上げていき、モデルを完成させます。
Python機械学習④「実施」
最後に作成されたモデルを使用して、巨人の各選手のホームラン数を予測します。
何も難しいことはせずに、巨人の選手の「説明変数(特徴量)」をモデルに渡すだけです。
実際の業務では「未来の予測」なので、答え合わせができませんが、
今回は巨人の選手のホームラン数データも取得してきているので、
どれだけ正しく予測ができたかどうか、答え合わせもします。
以上が、今回の作業手順です!
まとめ:Python機械学習「概要編」
ここまでの話をまとめます。
まとめ
今回のゴールは、
「2020年のプロ野球のデータを使って、巨人の選手のホームラン数を当てること」
具体的な手順は、
- データ収集(WEBサイトからデータを取得する)
- データ分析(ホームランと相関が強いデータを選択する)
- モデル作成&モデル評価(データを渡してモデルを作成して精度を確認する)
- 実施(作成したモデルを使用してホームラン数をあてる)
機械学習用語を覚えよう!
- 目的のものを予測できるようになった機械を「モデル」と言う
- モデルを作るためのデータ(今回は11球団のデータ)を「教師データ」と言う
- 「教師データ」を使う機械学習を「教師あり学習」と言う
- 予測するためのデータ「試合数」、「打席数」、「ヒット数」などを
「説明変数(特徴量)」と言う - 予測したいデータ「ホームラン数」を「目的変数」と言う
- 「ホームラン数」といった「実数を予測する問題」を「回帰問題」と言う
- 教師データにだけ良い予測結果が出てしまうことを「過学習」と言う
- モデルの精度を確認するための関数を「評価関数」と言う
ざっと今回の流れを説明していきました。
概ね理解できた方もいるかもしれませんが、
初めて聞く言葉も多かったと思うので、よく理解できなかった方もいるかもしれません。
よく理解できなくても、
それぞれのパートでもう一度お話していくので大丈夫です!
実際にコードを見ることで、理解もしやすくなると思います。
今回は「ゴール」と「手順」さえ頭に入っていれば問題なしです!
もし「ゴール」と「手順」がわからなくなってしまったら、
この記事に一旦戻ってきましょう!
それぞれのパートで、
「何のために?」
「何をしているのか?」
わからなくなってしまうので、
「ゴール」と「手順」だけは押さえておきましょう!
次回は「データ収集(WEBスクレイピング)編」です!
WEBサイトに表示されているプロ野球データをCSVファイルに出力します!
※次の記事へ
-
Python機械学習「ホームラン数予測②」データ収集「WEBスクレイピング」編!
PythonのプログラミングでWEBサイトの情報を取ってきたいけど、 どうやってやればいいんだろう。。 CSVデータに出力したいんだけど。。 こんにちは、古賀です! &nb ...
続きを見る