MoTLab -Mobility Technologies Engineering Blog-MoTLab -Mobility Technologies Engineering Blog-

タクシー業界の分析は何をやっている?

行灯LaboBI
May 01, 2018

💁🏻
※本記事は Mobility Technologies の前身である JapanTaxi 時代に公開していたもので、記事中での会社やサービスに関する記述は公開当時のものです。
An image from NotionAn image from Notion

JapanTaxiでは全国タクシーというアプリを開発・運用していて、それに関連する様々なプロジェクトにおいて分析を行っています。

分析といっても集計、分析から予測、可視化まで各要件によって対応範囲は異なります。

大きく分けると下記のものが該当します。

  • 事業KPIの集計、分析と可視化
  • 各プロジェクトの分析サポート
  • 実証実験のシミュレーション
  • R&D(事業に貢献し得る機能開発など)

位置情報の処理

分析を進める中でキーとなるのが位置情報です。 どこで注文・乗車が多かったのか、車両はどこにどのような状態でいたのかといった情報は配車の効率化とアプリの利便性向上に大きく関わってきますし、分析する上で重要な要素となります。 この位置情報を処理する際に問題となってくるのがデータサイズと集約の方法です。 過去の注文・乗車データを一定期間扱うと結構なデータサイズになりますし、特に車両の位置情報は数秒に一度収集されるため、かなりのデータサイズとなります。 また位置情報の処理では下記のような集約方法をとりますが、データサイズが大きいと手法が限られてしまうケースがあります。

  • ポリゴン範囲
  • 半径
  • 住所(逆ジオコーディング)
  • 地域メッシュコード、Geohashなど

データ分析チームでは状況によっては空間データが扱えるRDBでの処理もしますが、基本的にはBigQueryを使用します。 ※なぜBigQueryを利用するかは饗庭の記事を参照してください。

地域メッシュコードへの変換

BigQueryの処理でよく利用するのは地域メッシュコードです。 地域メッシュコードとは総務省の「統計に用いる標準地域メッシュおよび標準地域メッシュ・コード」のことです。 1辺の長さを1kmとした地域メッシュが基準となり、それを縦横で2等分すると2分の1地域メッシュ(500m)、さらに2等分すると4分の1地域メッシュ(250m)、さらに2等分で8分の1地域メッシュ(125m)となります。 当然ながらメッシュが細かくなればなるほど処理量は増加していくのでその点は注意しています。 あまり使いませんが基準地域メッシュより広域のものは1次メッシュ(80km)、2次メッシュ(10km)となりかなり広い範囲となります。 データ分析チームでは特に2分の1地域メッシュ(500m)を使うことが多いです。 また桁数調整でメッシュの範囲を使い分けることもできます。 例えば、下記のような調整です。

8分の1 ⇒ 53394518444
4分の1 ⇒ 5339451844
2分の1 ⇒ 533945184
基準  ⇒ 53394518
2次   ⇒ 533945
1次   ⇒ 5339

要するに桁を調整することで対象範囲を拡大、縮小できるということです。 BigQueryでは空間データを扱えないため、地域メッシュコードに変換することでそれぞれの位置情報を特定のエリアに集約し、関連付けできるようにします。 そうすることによって一定のバルクで集約、結合処理ができ、処理の効率化が図れます。 この変換にはBigQueryのUDFを利用していて、JavaScriptで関数を定義しGCSに配置して下記のように呼び出します。(標準SQLの場合)

CREATE TEMP FUNCTION getMeshcode6(latitude FLOAT64, longitude FLOAT64)
  RETURNS INT64
  LANGUAGE js AS
"""
    return getMeshcode6(latitude, longitude);
"""
OPTIONS (
  library="gs://xxxxxxx/UDF/gis.js"
);

SELECT getMeshcode6(35.682317, 139.736868);
# meshcode(8分の1地域メッシュ) ⇒ 53394518444

また地域メッシュコード変換以外にも、測地系変換や2点間の距離取得、最短・最長距離の検索などもUDFを用いて処理しています。

可視化(地図へのプロット)

分析結果を地図にプロットする際にも地域メッシュコード単位で表示するケースがよくあります。 その場合、基本的にはTableau + mapbox(もしくはOpenStreetMap)で可視化することが多いです。 mapboxは地図の作成と共有を主としたサービスで(ジオコーディングやナビゲーション機能もありますが)、柔軟に地図をカスタマイズすることができます。 一日中遊んで検証していても飽きません。 50,000view/月まで無料で使えるという手軽さもあります。 またTableauとの相性も良く、バックグラウンドにmapboxの地図を設定することでリッチな表現をすることができます。 例えば下記のような地域メッシュで区切った形で需要を可視化することもできます。 ※地域メッシュのシェープファイル(ベクタデータの記録形式の一つ)をレイヤーとして使っています。 今回はベーシックな地図を使いましたが、ポップなものやクールなものまで様々なテイストで表現できます。

An image from Notion

みなさんもmapboxでイケてる地図を作成してみてください。 mapboxはコチラ

次回の予告

今回は位置情報を地域メッシュコードに変換する形をご紹介しました。タクシーの需要予測もこの地域メッシュ単位で行っているので、次回はLSTMなど時系列モデルのお話しができればと思います。

💁🏻
※本記事は Mobility Technologies の前身である JapanTaxi 時代に公開していたもので、記事中での会社やサービスに関する記述は公開当時のものです。

Mobility Technologies では共に日本のモビリティを進化させていくエンジニアを募集しています。話を聞いてみたいという方は、是非 募集ページ からご相談ください!