Skip to content

tatsukikitamura/opendata

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

327 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚃 ノー遅延乗り換え - 遅延リスクを避けるルート検索

Contest

「今の時間は平常通りです」...その言葉を信じて遅刻したことはありませんか?

既存の乗換案内は「現在」の遅延しか教えてくれません。しかし、私たちは未来を予測します。 過去の膨大な運行データから今の平穏に隠れた遅延リスクを暴き出し、「絶対に遅刻できないあなた」を目的地まで安全に送り届ける。それが『ノー遅延乗り換え』です。


🚀 本番サイト

トップ画面
トップ画面
直感的な検索インターフェース
検索結果
ルート比較
4軸スコアで最適な選択
詳細画面
詳細・リスク表示
未来の遅延リスクを可視化

🔥 コンテストに向けた技術的挑戦

本アプリケーションは、既存のAPIをラップしただけのツールではありません。 「いかに速く着くか」ではなく「いかに確実に着くか」 という問いに答えるため、以下のコア技術をフルスクラッチで独自実装しました。

1. 独自実装のグラフ探索エンジン(脱・既存API)

通常の乗換案内APIでは「最短経路」が優先され、「少し遠回りでもリスクの低いルート」を柔軟に探すことは困難です。そこで、私たちはグラフ構造の構築から探索アルゴリズム(Dijkstra法)までを完全に内製化しました。

  • 可変トランスファーバッファ:
    • 乗り換えにかかるコスト(バッファ)を動的に変化させて複数回探索することで、「最速ルート」から「乗り換え回避ルート」まで、特性の異なる複数のルートを一度に導出します。
  • ペナルティ法による強制迂回:
    • 通常の探索で見つかった主要ルートに仮想的なペナルティを与えて再探索することで、物理的に異なる代替ルート(迂回路) を強制的に導出。事故で主要幹線が全滅した際も、生き残っているルートを即座に提示します。

2. 未来のリスクを可視化する

「今、遅れていない」ことは「これからも遅れない」ことを保証しません。算出されたルートに対して、以下の独自評価を行います。

  • 独自のデータ蓄積:
    • オープンデータAPIを継続的に監視し、数ヶ月にわたるリアルタイム遅延データを蓄積・解析。
  • リスクの数値化:
    • 「金曜日、xx線のxx時台は遅延確率が30%上がる」といった傾向を統計的に導出し、現在は正常運行でも、到着予定時刻に遅延するリスクが高いルートには警告を出します。

3. AIコンシェルジュによる意思決定支援

数字だけでは伝わらない「現場の空気感」を伝えるため、生成AI (GPT-4o-mini) を統合しました。

  • 「このルートは乗換回数は少ないですが、イベント終了後のドーム周辺を通るため、避けた方が無難です」

といった、コンシェルジュのような定性的なアドバイスを提供します。


✨ 機能ハイライト

ユーザーの意思決定を支える「4軸スコアリング」

単一の正解を押し付けることはしません。4つの指標でルートを評価し、ユーザーの状況に合わせて選べるようにしています。

指標 説明
速さ 単純な所要時間。急いでいる時に。
快適 混雑度や乗り換え回数を考慮。疲れている時に。
安定 過去の統計に基づく遅延リスクの低さ。重要な予定の時に。
安さ 運賃の安さ。

🛠️ 技術スタック

堅牢なバックエンドと、UXを追求したフロントエンドをモダンな技術で統合しています。

Backend

Python FastAPI OpenAI DigitalOcean

  • Core: Python 3.12, FastAPI
  • Database: PostgreSQL
  • AI: OpenAI API (GPT-4o-mini)
  • Data Source: ODPT API, GTFS-RT (JR東日本, 東京メトロ, 都営地下鉄)

Frontend

Vite TailwindCSS JavaScript GitHub Pages

  • Framework: Vite + Vanilla JavaScript
  • Styling: Tailwind CSS v4
  • Hosting: GitHub Pages

Infrastructure / DevOps

  • Hosting: DigitalOcean App Platform (Backend), GitHub Pages (Frontend)
  • CI/CD: GitHub Actions (10分ごとのデータ収集・自動デプロイ)

📂 ディレクトリ構成

.
├── backend/
│   ├── main.py              # アプリケーションエントリーポイント
│   ├── routers/             # APIエンドポイント定義
│   ├── services/            # ビジネスロジック
│   │   ├── routing.py       # 独自グラフ探索エンジン (Hybrid Strategy)
│   │   ├── risk.py          # 遅延リスク分析 (Predictive Risk)
│   │   └── ai.py            # AIコンシェルジュ (Post-search Analysis)
│   ├── schemas/             # Pydanticモデル
│   ├── db/                  # データベース接続・モデル
│   └── scripts/             # データ収集・バッチ処理
│       └── fetchers/        # 定期実行データ収集スクリプト
│
└── frontend/
    ├── index.html           # トップページ
    ├── detail.html          # ルート詳細
    ├── line.html            # 路線図
    ├── evaluation.html      # 評価・フィードバック
    ├── info.html            # アプリ情報
    ├── src/
    │   ├── components/      # 再利用可能なUIコンポーネント
    │   ├── lib/             # ユーティリティ関数
    │   └── pages/           # ページごとのロジック
    └── dist/                # ビルド成果物 (GitHub Pages公開用)

📊 使用したオープンデータ

本アプリケーションは、以下のオープンデータを活用し、独自の解析を加えて価値を創出しています。

データ提供元 データ種別 活用方法
公共交通オープンデータセンター ODPT API リアルタイム運行情報・遅延情報の取得
JR東日本 GTFS / GTFS-RT 時刻表・リアルタイム列車位置情報の解析
東京メトロ 列車運行情報API 運行履歴の統計分析
都営地下鉄 運行データ 独自グラフネットワークの構築

ライセンス: 公共交通オープンデータセンターが定める利用規約に基づき利用しています。


📜 License

MIT License

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors