はじめに
東京メトロがアプリコンテストをやっていましたね。ちょうど締切もあってモチベーションにもなるし、何か勉強がてらアプリを作ってみようと考え、機械学習の初歩を勉強して、表題のBotを作ってみようと思いつきました(大したアプリでは無いですが)。
オープンデータ活用コンテスト
http://tokyometro10th.jp/future/opendata/
※ちなみに、コンテスト応募アプリを見てみると、結構たくさん応募されてますね。
https://www.youtube.com/results?search_query=%E6%9D%B1%E4%BA%AC%E3%83%A1%E3%83%88%E3%83%AD+%E3%82%B3%E3%83%B3%E3%83%86%E3%82%B9%E3%83%88&page=2
アプリケーション(Twitter Bot)
「東京メトロ 遅延予報」
https://twitter.com/metro_delay
毎日18時に東京メトロの各路線が明日「遅延するかどうか」を予報します。
アプリケーションの利用API
・東京メトロ
・OpenWeatherMap
・Twitter
アプリケーションの仕組み
「OpenWeatherMapAPI」により取得した天気予報と、「東京メトロAPI」により遅延情報を取得し、ある予報が出た日とその日に遅延が発生したかどうかを機械学習により学習します。この学習データをもとに、ある予報が出た日に遅延が発生するかどうかを求め、遅延の予報としてBOTにつぶやかせています。
(機械学習の仕組みとしてはベイジアンフィルタを用いています。)
常にデータを取得し、学習し続けているので、学習データが集まれば集まるほど、精度が高くなることが期待出来るかなと。
作ってみた所感
実際に動かしてみるとやたら遅延するような予報になるのですが、下記のサイトでちらちらと確認すると、結構毎日遅延証明書を発行しているようなので、割りと当たっている気もします。ただ、時間の区切り方がざっくりなので、どこかで遅延したら遅延ありにしているため、そうなるのだろうなと。まだ1週間分の学習データしか無い(2014年11月19日時点)ので、もう少し様子を見たら変わるかもしれませんが。
運行情報:遅延証明書|東京メトロ http://www.tokyometro.jp/delay/list/
電車別に遅延の予報をするとか、天気予報以外の学習データ(例えば、前日のTwitter界隈のつぶやき内容の解析等)を使って予報するとかしたらもう少し面白いことが出来るかもしれません(猫が顔を洗ったら雨が降る的な)。
まあ、どんなに頑張っても的中率100%の予報はまず無理(学習データの天気予報ですら100%は当たらないのに)なので、大体の目安を予報出来るようになればいいなと。
※ちなみに東京メトロAPIのデータをDBに保存するのは、コンテスト向けのアプリで使う場合に限るみたいな規約があるので、データ自体はもう少し使い道がありそうですが、規約を確認してから使いたいと思います。