前回に引き続きPythonを使った機械学習の実践的な実装方法をご紹介します。(前回の記事はこちらから)
本記事ではGoogleが無償で提供しているPythonの実装環境であるGoogle Colaboratoryを使って、Pythonで簡単な天気予測を行う方法を初心者向けにご紹介します。Pythonでの機械学習の導入として使い方のイメージを持っていただける内容になっているかと思います。
機械学習とは
前回のおさらいとしてプログラミングを始める前に簡単に機械学習とは何か?を説明します。機械学習とは「AI」と世間で呼ばれているものとほぼ同義と考えていただければと思います。
AIと呼ばれる人間味あふれた知能の裏側はこの機械学習で作られており、機械学習には大きく「教師あり学習」「教師なし学習」「強化学習」の3つの手法があります。今回の天気の予測は過去のデータ(教師データ)を利用した教師あり学習となります。
教師あり学習
教師あり学習は過去データを用いて学習を行い、学習モデルを生成する手法です。過去データからモデルを生成するため教師あり学習で、教師あり学習は「予測」に利用されるのが一般的です。
過去データ(例えば顧客の属性、行動データ、購買データ)から未来(商品を買うかどうか、優良顧客になるかどうか)を予測するロジックを生成します。具体的な学習方法としては回帰や分類、ニューラルネットワークなどがありさらに細かい分析手法があります。
教師なし学習
教師なし学習は過去データを用いて学習モデルを生成するのではなく、大量のデータからパターンや構造を見つける手法で、クラスタリングが有名です。クラスタリングは例えば大量のお客様のデータから似たような購買行動をしているお客様をグルーピングします。(例:小売業でいうとプレゼント目的、自分の服を買う目的など購買行動から自動で客層を分類する) その結果はマーケティングに応用したりでき、DMやメルマガの内容を変えることでより高い角度で受注につなげることが出来るのです。
強化学習
強化学習は学習ロジックが自ら精度を高めるスタイルの学習方法です。事前に報酬という概念が設定されており、この報酬を最大化するロジックは何か?を学習します。ランダムに行動した上で報酬を最大化する行動は何か?を理解し、それをひたすら繰り返して学習する手法で、ロボットや自動運転などの技術に利用されています。
機械学習を始めてみよう!
今回は、Google Colaboratory(Colab)を使って、Pythonで簡単な天気予測を行う方法を初心者向けにご紹介します
ステップ1:Google Colabの開始
まずGoogle Colabにアクセスします。(https://colab.research.google.com/)
「ファイル」メニューから、「新しいノートブック」を選択して、新しいノートブック(コードを記載するファイル)を作成します。ちなみに前回の記事でも触れましたがGoogle ColabはJupyter NotebookというオープンソースのPythonのエディタを応用しています。
Pythonで機械学習の実装をする際にJupyter Notebookはとてもよく利用されるため、Google Colabでもこちらを応用しています。Jupyter Notebookで記載したコードはノートブックのファイルとして保存されます。
ステップ2: 必要なライブラリのインストール
以下のコードをセルに入力し、実行(Shift + Enter)してください。
!pip install pandas scikit-learn
pipというのはPyPIというサイトで管理しているPythonのライブラリ(有志にて開発された便利なアドインツールのようなもの)をダウンロードするコマンドです。ここではpandasというライブラリのさらにscikit-learnという部品をインストールする、という命令になります。Scikit-learnはPythonで機械学習を行うための様々なツールが入ったとても有名なライブラリです。今後もとりあえず新しいコードを実装する際はインストールしておくとよいでしょう。
ステップ3: 天気データの取得
今回は、気温と湿度のデータを使って、翌日の天気(晴れ、曇り、雨)を予測します。以下のサンプルデータを使用しますので以下のコードを打ち込んで実行してください。データの内容は気温(Temperature)と湿度(Humidity)と天気(Weather)となっています。
import pandas as pd
data = {'Temperature': [20, 22, 25, 28, 27, 24, 21, 19, 23, 26, 30, 27],
'Humidity': [70, 65, 60, 55, 68, 75, 80, 85, 60, 50, 45, 70],
'Weather': ['Rainy', 'Cloudy', 'Sunny', 'Sunny', 'Cloudy', 'Rainy', 'Rainy', 'Rainy', 'Sunny', 'Sunny', 'Sunny', 'Cloudy']}
df = pd.DataFrame(data)
なお、import pandas はpandasというライブラリをインストールしています。こちらはpipしなくてもそもそもGoogle Colabに組み込まれておりそれを導入しているイメージになります。pandasも機械学習を実装する上で必要なデータを取り扱う機能を幅広くそろえているので毎回必須のライブラリといえます。またas pd は今後ライブラリを呼び出す際に毎回pandasと記載しなくてもpdという名前を付けることで今後はこの名前で呼び出しができるようになる、という記載です。
DataFrameというのはpandasで取り扱うデータの入れ物のようなものです。ここではdfという名前の箱に記載したdataをDataFrameにして投入するという実装をしています。
ステップ4: データの前処理
次にデータをトレーニングデータとテストデータに分割します。トレーニングデータとは機械学習のロジックを生成するための学習用のデータです。テストデータとはトレーニングデータで生成したロジックを評価するためのデータです。なぜ評価が必要かというと、トレーニングデータだけで学習を行うと、与えられたトレーニングデータと同じデータは完全に予測できるが、少しデータが変わると予測できないという「過学習」という現象が起きます。この過学習を防止するため通常は手元のデータを分け(大体トレーニングデータが80%、テストデータが20%が多い)トレーニングが正しく行われていることをテストデータで担保するのです。では、データを二つに分けるために以下のコードを実行してください。
from sklearn.model_selection import train_test_split
X = df[['Temperature', 'Humidity']]
y = df['Weather']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
上記のコードでは、まずsikit-learnに含まれる tarin_test_splitという便利な機能をインポートしています。これを使えば簡単にデータがわけられるのです。さらに、データを予測対象のデータ(ここではwheather(天気) と 予測の材料となるデータ(ここではTempreature(温度)とHumidity(湿度))を分けています。こちらも通常必須となります。その後Train_test_splitによって(トレーニング or テストデータ)×(予測対象データ(y)と予測の材料となるデータ(X))の4つにデータを分けています。
ステップ5: 機械学習モデルの選択と学習
ここまでできたら、実際に天気を予測する機械学習のロジック(モデル)を作成していきましょう。今回は、決定木(Decision Tree)アルゴリズムという有名なロジックを使って学習モデルを構築します。以下のコードをセルに入力し、実行してください。
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
ここではscikit-learnに標準で決定木のアルゴリズムが実装されているためそちらを読み込んでいます。その後、dtという決定機のアルゴリズムを格納する箱を作成し、fit()という関数でトレーニングデータであるX_train, y_trainというデータセットで学習を実施します。なんとこれだけで学習ロジックの生成は終わりました。簡単ですよね。
ステップ6: モデルの評価
次に実際に作ったモデルの評価をテストデータで行ってみましょう。評価をするにあたってもscikit Learnに評価のツールも入っているのでそちらを利用します。では以下のコードを実行してみてください。
from sklearn.metrics import accuracy_score
y_pred = dt.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}".format(accuracy * 100))
ここではaccuracy_scoreというライブラリをscikit-learnから取得しています。
その後テストデータの学習の材料になるX_testを使ってdtという上記で作成した決定木のモデルで予測を行っています(dt.predict(X_test))この結果をy_predという箱に格納しています。
そしてy_test(これはトレーニングデータで実際の天気の値)と予測した結果であるy_predをaccuracy_scoreで評価しています。print以降は結果を出力しなさい、という命令になります。さて、結果はどのようになりましたか?おそらく
Accuracy: 66.67
と表示されるのではないかと思います。つまり、大体67%の確率で気温と湿度がわかればこのモデルを使って天気を予測できる、ということです。
ステップ7 予測してみよう
最後に、新しい気温と湿度のデータを入力して、天気を予測してみましょう。以下のコードをセルに入力し、実行してください。
new_data = [[23, 67], [25, 55], [21, 80]]
predicted_weather = dt.predict(new_data)
print("Predicted weather:", predicted_weather)
新たなデータとして温度と湿度のデータセットを3点投入してみます。予測するときは毎回predictという関数を使いましょう。これで結果を表示すると、
Predicted weather: ['Cloudy' 'Sunny' 'Rainy']
と出力されるかと思います。気温と湿度だけで見事天気が予測されました。
おわりに
機械学習に関しては多くの分析モデルに関するライブラリが用意されているためこれらのライブラリを用いて実装すればそれほど深い知識がなくても予測機能はある程度の精度で実装ができます。
上記はかなり簡単な例ですのでより深い学習がしたい方は前回の記事でおすすめした学習コンテンツなども是非ご利用ください!
株式会社KUIXではこのような機械学習に関する開発案件の受託やデータ分析に関する教育、プロフェッショナル人材のご紹介などをお客様に提供しております。もし自社で進めるのはちょっと厳しい、といった場合は是非弊社までお問い合わせください!お問い合わせはこちらから

