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

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

2020年11月12日

Python機械学習

 

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

 

こんにちは、古賀です!

 

本記事では、

はてな

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

について、お話します!

 

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

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

Python機械学習を使って、

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

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

 

野球に詳しくない方も、

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

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

 

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

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

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

 

今回は「概要編」です!

まずは、

「課題のゴールは?」

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

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

 

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

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

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

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

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機械学習④「実施」

グラフ

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

 

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

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

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

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

 

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

まとめ

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

まとめ

今回のゴールは、

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

具体的な手順は、

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

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

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

 

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

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

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

 

よく理解できなくても、

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

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

 

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

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

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

 

それぞれのパートで、

「何のために?」

「何をしているのか?」

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

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

 

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

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

 

※次の記事へ

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

おすすめ記事

道のり 1

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

成長するエンジニア 2

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

闘病記 3

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

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

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

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

Copyright© Koga Masao's LifeBlog 〜Alive Today〜 , 2020 All Rights Reserved.