しくみ
概要
本アプリは、公共交通オープンデータセンターが提供する都営バスのリアルタイム位置情報・時刻表データと 気象データを組み合わせ、機械学習で遅延時間を予測するWebアプリケーションです。
バスの遅延は、路線特性や時間帯に加え、天候にも影響されます。 雨天時は道路の混雑や乗降時間の増加により遅延が発生しやすく、 気温も乗客数の変動を通じて運行に影響を与える、とされています。
本アプリでは、2024年12月15日 〜 2025年3月30日の運行実績データをLightGBMモデルで学習しました。
システム構成

使用データ
| データ種別 | 説明 |
|---|---|
| 東京都交通局 バスロケーション情報 | バスの位置情報(5分で取得) |
| 東京都交通局 バス停情報 | 都営バスの時刻表 |
| 東京都交通局 バス時刻表 | 時刻表データ |
| 天気データ | 1時間ごとの気象情報(OpenWeather) |
モデルの構築
まず、5分間隔で取得したバスのリアルタイム位置情報(JSONファイル群)を読み込みます。次に、このデータを時刻表データおよびバス停IDをキーとして結合し、各バスがどのバス停にいつ到着したかを特定します。さらに、予定時刻をキーとして天気データを結合することで、運行時点の気象条件を付与します。これらの処理を経て、約678万件の前処理済みデータセットを構築しました。
1. データ収集・結合
データの収集と結合は以下の手順で行いました。はじめに、JSONファイル群として蓄積されたバスのリアルタイム位置情報を読み込みます。次に、各レコードを時刻表データとバス停IDで照合し、バスの通過記録と運行スケジュールを紐付けます。最後に、予定時刻をキーとして1時間ごとの気象データを結合し、運行時の天候情報を付与します。
2. 遅延時間の算出
遅延時間は、実際のバス停通過時刻から時刻表上の予定出発時刻を差し引いて算出しています。この値が正の場合はバスが遅延していることを示し、負の場合は予定より早く到着したことを意味します。
3. 特徴量エンジニアリング
最終的に使用した特徴量:
| カテゴリ | 特徴量 |
|---|---|
| 路線情報 | バス路線ID、路線パターンID、時刻表ID |
| バス停情報 | 出発バス停、到着バス停、始発バス停、終点バス停 |
| 時刻情報 | 年、月、日、時、分、曜日(予定出発・到着時刻から抽出) |
| 運行情報 | カレンダー種別、バス停順序、深夜便フラグ、ノンステップバスフラグ |
| 気象情報 | 天気ID、天気概要、気温、体感温度、気圧、湿度、風速、風向、雲量 |
評価結果
精度指標
| 指標 | 値 | 説明 |
|---|---|---|
| RMSE | 2.47分 | 平均二乗誤差の平方根 |
| MAE | 1.51分 | 平均絶対誤差 |
予測誤差はMAEで約1.5分、RMSEでも約2.5分程度に収まっています。
特徴量重要度(上位10件)
モデルが予測に重要視した特徴量:
| 順位 | 説明 |
|---|---|
| 1 | 運行系統パターンID |
| 2 | 対応する時刻表ID |
| 3 | 予定出発時刻(時) |
| 4 | 運行日カレンダーID(平日/土曜/休日など) |
| 5 | 予定出発時刻(日) |
| 6 | 終着停留所ID |
| 7 | 始発停留所ID |
| 8 | 気圧 |
| 9 | バス路線ID |
| 10 | 停留所の順番(路線内でのインデックス) |
技術スタック
| 用途 | ライブラリ |
|---|---|
| データ処理 | pandas, orjson |
| 機械学習 | LightGBM |
| ハイパーパラメータ最適化 | Optuna |
| 並列処理 | concurrent.futures |
| 可視化 | matplotlib |
| モデル永続化 | pickle, joblib |