それでは本題に入りましょう。今回は機械学習(Azure Machine Learning)を使用して、海の家の実際の売り上げデータをもとに機械学習で予測モデルを作成するための下準備を行いたいと思います。
3か月前のあの日、湘南の海は最高でした…。
振り返りますが、第 3 回では、売り上げデータを俯瞰的に見てきました。その中で、海の家の売り上げデータは商品毎にみた場合、偏りがあることがわかりました。その偏りですが、カテゴリごとにまとめることにより、データがまんべんなく存在するようになります。
では、この偏りの何が問題なのでしょうか。
機械学習ではデータから規則性や、パターンを発見し、それを利用して将来の予測を行うことが可能ですが、モデルのトレーニング(学習)において無視できない条件があります。それがデータの件数とその多様性(パターン)です。まず、機械学習は一般的に同じ種類のデータであればデータ数の増加に伴い精度を向上させることができます。次に、多様性(パターン)です。説明変数として設定したい項目を学習させられるだけのパターンが必要になります。ただし、あんまりたくさんパターンを分けてしまうと、そのパターンでの件数が減ってしまいますので、注意が必要です。
今回は海の家の売り上げデータを利用しますので、予測したい海の家の「売上」という目的変数に対して「天気」という説明変数は比較的簡単に思いつくと思います。ただし、海の家は 7月11日から8月31日までの神奈川県東部(横浜)の天気を確認すると、7月11日から8月31日までの間雨の日は 7月17日と7月25日の2日間のみとなっています。この状況では、
晴 | 35日 |
曇 | 15日 |
雨 | 2日 |
……となってしまいます。さらに、雨が降ったか、降らないか、で分けてしまうと、
雨じゃない(晴か曇) | 50日 |
雨 | 2日 |
……となってしまい、このデータで学習を行うと「天気はほぼ雨ではない」という前提で売り上げの規則性やパターンを学習してしまいます。もちろん、雨の場合も学習していますが、そのデータ数は2件ですので精度に関してはあまり期待できないでしょう。
さらに、海の家なのだから、気温が高いほど人が集まる可能性があるし、暑いと海の家でビールを飲みたくなるだろう、として気温を説明変数に加えるとします。特にビールは気温が28度を超えると大きく売り上げが伸びるといわれていますので、閾値を28度に設定するとします。ここでは同じく神奈川県東部(横浜)の最高気温(15時)を参考にしてみます。
最高気温28度以上 | 45日 |
最高気温28度未満 | 7日 |
天気と同じように、このデータでも「最高気温は28度以上」という前提で売り上げの規則性やパターンを学習してしまいます。気温が低い場合の精度は期待できそうにありませんね。
この組み合わせでどのようなデータの分布になるか見てみましょう。
雨じゃない | 雨 | |
最高気温28度以上 | 43日 | 2日 |
最高気温28度未満 | 7日 | 0日 |
上記の分布では、基本的に「雨ではなく、最高気温は28度以上」という前提での学習になってしまいます。今シーズンに限っては天気(雨か雨じゃないか)と最高気温を説明変数に取り入れてもあまり適切ではなさそうです。
次に人の動きを大きく左右するのが平日か否か、でしょうか。7月11日から8月31日までですので、世の学生の方は夏休みかもしれませんが、第3回に掲載したグラフからもわかるように、やはり週末の方が売り上げが伸びます。そこで説明変数として平日か休日か、を設定してみたいと思います。
雨じゃない | 雨 | |
平日 | 34日 | 2日 |
休日 | 16日 | 0日 |
最高気温28度以上 | 最高気温28度未満 | |
平日 | 31日 | 5日 |
休日 | 14日 | 2日 |
あれ、気温よさそうに見えますね。
とはいえ、雨だと海にはいかないでしょうし、第3回に掲載したグラフからも雨が降った7月17日と8月17日の売り上げは極めて低いので、天気の方が売り上げとの関係性が強いとして、天気の方を説明変数として採用したいと思います。
もちろん機械学習ですので、3つとも説明変数にしても良いのですが、その場合データが分割されてパターンごとのデータ件数が減ってしまいます。
最高気温28度以上 | 最高気温28度未満 | |
平日で雨 | 2日 | 0日 |
平日で雨じゃない | 29日 | 5日 |
休日で雨 | 0日 | 0日 |
休日で雨じゃない | 14日 | 2日 |
28度未満のケースで見ると、休日で雨じゃない日の精度は高くなさそうです。