このページではタクシー需要予測のWebアプリについて解説します。
Webアプリはこのページから試せます: https://example-apps.miyabidigital.com/

1.ビジネス課題
タクシー会社の利益を上げる方法の一つとして、あらかじめ需要のあるエリアにタクシーを多く配車し、需要の少ないエリアには少なく配車することで、需要と供給のバランスを最適化することが考えられます。そのためには、需要を事前に予測できなければなりません。これをML(機械学習)を使って解決することを考えます。

まず、エリアごとの過去の需要(ユーザー数)のデータが取得できるとします。ここでは、実際にNYC Taxi and Limousine Commission (TLC) が取得、提供している記録データを使います。あるエリアにおける1時間ごとの需要推移をグラフにしたものが下記の図です。過去(黄色/フィーチャー)のデータをもとに、1時間後の未来の需要(赤色/ターゲット)を予測するMLモデルを構築する、ということになります。

2.データ準備とモデル学習
データは先ほどのNYC Taxi and Limousine Commission (TLC) からAPIを通して取得します。また、モデルの学習には、色々な予測問題に対して優れた学習が行えることで人気のXGBoostという学習アルゴリズムを使います。

ところが、時系列データはそのままの形ではXGBoostの学習に使うことができません。そこで、上図のようなスライス処理を用いて、XGBoostに使える表形式データへと変換します。また、元データではユーザーが0の場合はその記録そのものが無い状態になっていたり、間違った情報が含まれていたりしているため、このままMLに使用すると学習が上手く行えません。ここでは詳細を省きますが、これらを修正する処理を行うことで、ML学習に適したデータへと変換します。
XGBoostを含め、どの学習アルゴリズムでも、学習時に用いる設定パラメータがあります。これをハイパーパラメータと呼び、ハイパーパラメータの設定によっても学習の良し悪しに大きく影響を与えます。そこで、Optunaというハイパーパラメータを自動的に最適化するツールを使います。
3.モデルの運用化(MLOps)
これまでのデータ準備やモデル学習を使って、Webアプリ構築やデータやモデルの更新などを自動的に行う運用化(MLOps)行います。全体像は下図のようになります。

自動的にプログラムを起動することのできるGitHub Actionsを用いて、1時間ごとにNYCからデータを自動的に取得し、データの変換処理などの準備を行います。そのデータ(フィーチャー)はデータやモデルをAPI経由で効率的に保存することのできるサーバーレス・プラットフォームHOPSWORKSのフィーチャーストア(データを保存したりバージョン管理する機能)に保存します。
次に、初回時やモニタリングによってエラーが大きくなり再学習が必要になった時点で、モデル学習を行います。その結果は、HOPSWORKSのモデルレジストリ(MLモデルを保存したりバージョン管理する機能)に保存します。
これらのデータとモデルをHOPSWORKSからAPI経由で取得し、1時間後の未来の需要を予測し、その結果を表示するWebアプリをPython言語とデータアプリを効率的に実装できるStreamlitを用いて作ります。
このWebアプリを使って予測をもとにタクシー配車を行うことで、需要にマッチしたタクシー供給ができ、無駄を排することでROIを向上させることができます。実際に構築したWebアプリや、その他のMLウェブアプリはこちらから試せます: Apps By Miyabi Digital