2015年9月12日から2015年9月29日にわたって開催されたAmazon Machine Learningに参加してきたのでそのレポートです。
ハッカソンテーマ
2015/09/14(月)~ 2015/09/20(日)の東急ハンズの店舗毎売上予測を実施する
今回はハンズラボさまより過去5年分のposデータをご提供頂き、それをAmazon Machine Learningにかけて売上予測を行うのが今回の内容になります。
なかなか、こんなビッグなデータを扱える機会は無いので大興奮してしまいました。
解析方法
今回は予測がテーマとなるので、Amazon Machine Learningのregression(数値予測)の学習アルゴリズムを使うことになります。
目的となる変数(売上)に対して、それに関連する説明変数(天気や曜日)を導き出して式を出していきます。
データを解析してからモデル(予測器)を作る流れは以下のとおり
- posデータをRedshiftに全部入れる。tablueとRedshiftを接続
- ひたすら予測したいデータに相関がありそうなデータをtablueでグラフ化して見る
- 実際に相関があったデータを教師データとして整形、RedshiftのcopyコマンドでS3にCSVに変換してアップロード
- Amazon Machin Learningに3の教師データのデータを突っ込んで、モデルを作成
教師データの選定
まずはより精度の良いモデルを作るために、質の良い教師データを作って上げる必要があります。
- 予測したい9月の売上は年間とおして良くも悪くもない。なので、キャンペーン期間の売上が異常に上がる期間及び年間とおして売上の上がる月の売上げデータは教師データから削除して、学習データのばらつきを抑える
- モデルについては店舗ごとにつくる。店舗間では店舗規模により売上がまちまちなため、店舗をすべて一つのモデルで考えてしまうと、店舗間での売上の差異を説明するために、より多くの説明変数が必要になると考えた。
- 大きく相関のあるデータとして、年月週の周期的なもの、祝日かどうか、天候の状態。この辺りにポイントを絞って解析を行った。
上記に基いて最終的に出来た教師データは以下のとおりです。
年 | 月 | 日 | 週 | 休日プラグ | 天候 | 降水量 | 売上 |
---|---|---|---|---|---|---|---|
2010 | 10 | 12 | 2 | 0 | 晴れ | 0 | xxxxx |
2010 | 10 | 13 | 3 | 0 | 曇り | 0.5 | xxxxx |
2010 | 10 | 14 | 4 | 0 | 晴れ | 0 | xxxxx |
2010 | 10 | 15 | 5 | 0 | 晴れ | 0 | xxxxx |
2010 | 10 | 16 | 6 | 1 | 晴れ | 0 | xxxxx |
2010 | 10 | 17 | 0 | 1 | 晴れ | 0 | xxxxx |
モデルの作成と検証
では、上記の教師データを元にして、モデルを作ってあげましょう。
ここでようやくAmazon Machine Learningの出番です。上記のデータをCSVにしてS3に吐き出して、それをAmazon Machine Learningに投入します。後は確率的勾配降下法というアルゴリズムに基いて、自動でモデルを作ってくれます。
デフォルトでは投入したデータの70%からをモデルの学習に、30%のデータを評価に使うので、その30%のデータで評価した結果をモデルの評価結果として可視化してくれます。
上記の教師データから出来た渋谷店のモデルの評価分布です。真ん中の緑の線に集まれば集まるほど精度の良いモデルと言う意味になります。
予測の実施
さて、最後に作ったモデルから2015/09/14(月)~ 2015/09/20(日)売上予測を実施します。
結果としては以下の様な形になりました。いい感じ!
渋谷店
町田店
三宮店
まとめ
今回のハッカソンに参加してAmazon Machine Learningを使った機械学習を行うにあたっての一連の流れを学習できたことが一番の収穫でした。
今後はセンサーでデータ収集して、機械学習にかけて、それをオープンデータと掛けあわせて、レコメンドして、みたいな妄想を漠然としています。絶対楽しいと思う!
最後にハッカソンで使ったAmazon Machine Learningの操作を行うPHPスクリプトも書いたのでGistへのリンク設置しておきます。
それでは、本ハッカソンを企画頂いたアマゾンデータサービスジャパン株式会社様、データをご提供頂いたハンズラボ株式会社様、本当にありがとうございました。そしてお疲れ様でした。
次はAmazon Machine Learningの別のアルゴリズムを用いて機械学習やってみたいっすね。