Skip to content

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

@kiki830621

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions