Skip to content

公車到站時間預測:長期記錄歷史資料建立經驗式 ETA baseline(取平均只是起點) #2

Description

@kiki830621

Problem

Original text:
「我在想要怎麼最佳的推測公車什麼時候到,是不是長時間爬蟲記錄然後取平均」
— Source: 對話直接輸入(2026-06-03,延續 270 公車「9:24 經過南港」反推討論)

如何最佳化公車到站時間(ETA)的預測?目前 TDX 只給即時 snapshot(A2 車輛位置 / A1 到站預估)+ 班表 / 班距,沒有歷史——所以「過去某時某車在哪」只能用 kinematic back-projection 近似(見對話中 270 案例:靠現在位置 + 路線旅行時間反推,誤差 ±3~5 分、折返車無法追蹤)。

使用者提出的方向:長時間爬蟲記錄,然後取平均,建立經驗式的到站/旅行時間模型。

Type

feature(研究方向 / 路由引擎資料採集層;對應 North Star Stage 3+)

背景:為什麼這條路是對的

這正是 CLAUDE.md 北極星點明的「誠實天花板」——路由準度上限是資料形態不是演算法。NAVITIME 之所以準,靠的是實測資料(班次 phase + 即時誤點 + 站間實測旅行時間),不是祕密演算法。要逼近 NAVITIME 的公車/捷運準度 = 資料採集問題(補 phase 時刻表 + 站間旅行時間分布),屬 Stage 3+,不是改演算法能解。

所以「長期記錄 + 統計」確實是正路。但「取平均」是起點不是終點——下面是把它做對的設計考量。

「取平均」的天真版 vs 該做的版本

維度 天真版(單純平均) 該做的版本
統計量 算術平均 分位數(P50/P80/P90)。到站時間分布右偏(塞車是長尾),平均會被長尾拉高且無法表達「最壞情況」
時間分桶 全天混在一起 time-of-day(尖峰/離峰)、weekday/weekend國定假日 分桶
空間粒度 只記端點到站 站間(segment)旅行時間,可組合任意 O/D 並偵測哪一段塞
情境變因 天氣、特殊事件(路線改道,如 issue 板上看到的扶輪年會 / 花季改道)、施工
不確定性 點估計 回傳區間(如「8–14 分,P80=12」),符合 CLAUDE.md「不假裝精確」原則

要記錄什麼訊號(待設計)

TDX 公車有多種即時 feed,各有取捨:

  • A2(車輛位置 GPS):最原始,可推站間旅行時間,但要 map-match 到站序。
  • A1(到站預估 / 進站事件):較高階,直接給「某車到某站」事件,適合建到站時間分布。
  • StopOfRoute / 班表:靜態骨架,用來定義站序與名目班距。

開放問題(Open Questions)

  1. 輪詢頻率 vs rate limit:TDX free tier = 50/min。要記多少路線 × 多少頻率才不爆?是否需要 per-city / per-route 取樣策略?
  2. 儲存:時序資料量會快速累積。DuckDB / SQLite / Parquet?保留多久(retention)?
  3. 記錄 host:MCP 本身是 read-only stateless,logger 應該是獨立常駐服務(cron / launchd / 遠端機器),不是塞進 MCP。
  4. 回灌路徑:統計模型建好後,怎麼透過 tool 服務回去?新 tool(如 bus_eta_predict)還是讓既有 bus_status_arrivals 在 frequency-only 時 fallback 到歷史 baseline?
  5. 冷啟動:記錄前無資料的路線怎麼辦?誠實標 source: no-history
  6. 驗證:怎麼量測預測準度?需要 hold-out 比對「預測 vs 實際到站」。

Impact

  • 把目前「frequency-only 路線抵達誠實從缺」的缺口,用經驗 baseline 補上(source: historical)。
  • 是路由引擎從 Stage 3 走向 NAVITIME 等級準度的關鍵資料層,影響所有 frequency-based 的公車/捷運段。
  • 同時解鎖「歷史回放」能力(對話中 9:24 反推查不到的根因)。

這是設計 / 研究方向 issue,不是即刻實作。下一步建議 idd-diagnose 釐清 MVP scope(先記單一城市單一路線、A1 到站事件、DuckDB 落地、P50/P80 分位數)再談實作。


Current Status

  • Phase: design-decided (discuss done, 2026-06-04)
  • Complexity: Spectra(新子系統:A2 經驗 ETA logger + 模型 + 回灌 tool)
  • Diagnosis: 見 comment(含 TDX 原料盤點 A2/A1/N1 + MVP 策略)
  • Next: /spectra-discuss(對齊 MVP 門檻 / 訊號取捨 / schema / 回灌 surface / rate-limit 路線數)
  • Hardware: NV3 2TB + PROBOX USB4 盒(已下單)
  • Discuss: concluded → BCNF+SCD2 schema, Python-ingest/R-model/Swift-serve, 大臺北 capture-feasibility MVP; next /spectra-propose

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions