機械学習を使ったWebサイトを無料で構築する[GCP]

第 2 回 東京公共交通オープンデータチャレンジに参加した!
で,電車の運休や遅延を予測する Web サイトを Python で作った!
が,応募のためにはどこかにデプロイして公開しないといけない!
コンテスト応募にわざわざお金をかけたくはないが,どこで公開すれば??

最終的に GCP 上にて無料で公開することにしたので,その内容についてメモしておく。

目次

作った Web サイトについて

西武鉄道の明日・明後日・明々後日の運行状況を予測するサイトを作った ↓

リアルタイムの遅延は現状のアプリでもわかるが,
朝起きた時点で遅延が発生していることがわかっても如何しようも無い。
翌日の遅延が事前にわかれば早めに起きる等の対処ができるので,遅延とか運休の予測に需要があるのでは!?という発想で開発した。
天気予報みたいに出したいなーと思ったがいまいち。。。

使った技術

  • 使用言語は Python
    機械学習といえば Python でしょ!ということで Python で開発することに決定!

  • Web FW はTornado
    Flask, Django, Bottle は使ったことがあるので,気になっていた Tornado を使ってみた。なんか速いらしい。
    今回規模が小さめだったので,良さとかを十分感じられなかったが,シンプルで書き易かったと思う。

  • ベースとなる学習データは西武鉄道運行情報 Twitter
    あと,気象庁の気象データを,学習に使用した。
    また,予測の際は,天気予報情報が必要になるので OpenWeathrMapを使った。
    学習データ探してみて,意外だったのが,過去の運休・遅延情報があんまり無いこと。
    運行情報を Twitter で公開し始めたのが最近であったり,公式 HP は 1,2 ヶ月分ぐらいしか履歴が無い。
    西武鉄道は結構前から Twitter やっていたので Twitter API の制限数 32000 件(1 年超の運行データ)を取得することができ,今回使用することになった。普段一切使わない路線なので,分析のモチベーションは低め。。。

  • 機械学習のアルゴリズム
    LightGBM, XGBoost, CatBoost で試した。
    後述するが,最終的にデプロイの問題で XGBoost を採用した!
    細かくチューニングしていないので,どれも精度は似たり寄ったり。

  • 画面
    Tornado デフォルトのテンプレートエンジン使ってサクッと作った。
    グラフはApexCharts.jsを使った。これ結構使い勝手がよく,好んで頻繁に使っている。人気が出てもいい気がするが,あんまり使用例を聞かないのは何故だろう。。。??

デプロイ先の要件

前述の Web サイトを公開するにあたって要件は以下の通り。

  • Python3 系が動く(ライブラリも自由に追加できる)
  • 無料で公開できる

で,静的サイトのホスティングサービスは無料で結構あるが(Netlity とか Github pages とか),Python Web server 動かせるところというと中々無料では無い。
少額でも払えば色々選択肢はあるが,今回は無料にこだわったので,GCP の mf1-micro インスタンスで公開することにした!

GCP の mf1-micro インスタンスで Python プログラムを無料公開するときのポイント

GCP を無料で運用する手順はググれば出てくるので特にここでは記載しない。

参考:

今回デプロイで問題になった点は,mf1-micro インスタンスが非力すぎて LightGBM や CatBoost がインストールできなかったこと。
miniconda を入れてライブラリをインストールしていたが,メモリ不足のためか,インストールが完了しなかった。結局 pip で XGBoost を入れた場合のみ成功した。

おわりに

金を払えば解決する話だが,無料でも工夫すれば結構色々できるので,それはそれで楽しい!