この記事はHacobu Advent Calendar 2024の8日目の記事です。
株式会社Hacobuで、動態管理サービス「MOVO Fleet」のエンジニアリングマネージャーをしています。
はじめに
今年の4月1日から改善基準告示が施行され、ドライバーの拘束時間等の制約が強化されました。この改善基準告示に合わせて、MOVO Fleetにドライバーの稼働時間を分析する機能をリリースしました。
稼働時間分析は、トラックに取り付けたGPS端末から取得される位置情報をもとに、運転時間や停留時間、1日の拘束時間などを可視化し、法令に則しているかチェックする機能を提供しています。
この機能では、ドライバーが適切に休憩しているかチェックするため、正確に停留(トラックが停車している)状態を取得する必要があります。Fleetチームでは、この停留状態を正確に把握するために様々な試行錯誤を重ねています。ここでは、その取り組みについて簡単にご紹介します。
地図メッシュごとに集計する
地図上の領域を表現するために、格子状に区切ったメッシュがよく使用されています。はじめに簡易的に停留を実装していたときは、このメッシュ内の滞在時間から停留を判定していました。
この方法の最大のメリットは、実装がとても簡単であることです。メッシュは緯度経度から直接計算できるため、一定期間内の位置情報を参照してメッシュ内の経過時間を集計すれば判定できます。
デメリットは、メッシュの境界で集計単位が分かれてしまうため、停留地点がメッシュ境界付近にあると位置情報のばらつきによってメッシュが分かれ、1つの停留として判別できないことがよく起こります。
移動速度の変化から判定する
次に試した方法は、各ログの移動速度(移動距離)から推定する方法です。各GPSログの移動速度が落ちた時に停留と判別します。
この方法のメリットは、判定が単純であることと、デバイスから上がってくるログを逐次処理して、即時に停留の判定ができることです。
デメリットとしては異常値に弱く、取得される速度のゆらぎで意図しない停留の開始・終了が発生してしまうことです。また、停車後すぐにエンジンを切るとGPSが途切れ、速度の落ち込みを取得できないこともあります。今回のように安定して位置情報が取れないケースでは、期待通りの結果を得ることができません。
クラスタリングの手法を使う
最後に、現在チームが実用化に向けて検討を進めている方法で、クラスタリングのアルゴリズムを使って推定する方法です。停留時はGPSの位置情報が近くに密集するため、その位置情報のクラスタリングを抽出することで停留を抜き出すことができます。
メリットとしては、ノイズ(位置情報のゆらぎ)が多いデータに対してもロバストに判別できることです。図のように、信号待ちも含めて停車を取得できていそうです。
もちろん前述の方法よりは計算コストがかかりますが、問題になりそうなレベルではありません。実用化にはアルゴリズムをそのまま使うだけではうまくいかないところも多いですが、チーム内で試行錯誤を進めて一通り改善させることができました。
おわりに
クラスタリングの有効性が確認でき、実用化に向けたアルゴリズムの改善も進められたので、実際にサービスに導入する準備を進めています。単純な機能実装にとどまらず、こうした研究開発要素が含まれると非常におもしろいなと感じました。今後も、今回のように一つ一つの品質にこだわりながら、チーム一丸となって取り組んでいきたいと思います。