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)
- 輪詢頻率 vs rate limit:TDX free tier = 50/min。要記多少路線 × 多少頻率才不爆?是否需要 per-city / per-route 取樣策略?
- 儲存:時序資料量會快速累積。DuckDB / SQLite / Parquet?保留多久(retention)?
- 記錄 host:MCP 本身是 read-only stateless,logger 應該是獨立常駐服務(cron / launchd / 遠端機器),不是塞進 MCP。
- 回灌路徑:統計模型建好後,怎麼透過 tool 服務回去?新 tool(如
bus_eta_predict)還是讓既有 bus_status_arrivals 在 frequency-only 時 fallback 到歷史 baseline?
- 冷啟動:記錄前無資料的路線怎麼辦?誠實標
source: no-history。
- 驗證:怎麼量測預測準度?需要 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
Problem
如何最佳化公車到站時間(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 該做的版本
要記錄什麼訊號(待設計)
TDX 公車有多種即時 feed,各有取捨:
開放問題(Open Questions)
bus_eta_predict)還是讓既有bus_status_arrivals在 frequency-only 時 fallback 到歷史 baseline?source: no-history。Impact
source: historical)。註
這是設計 / 研究方向 issue,不是即刻實作。下一步建議
idd-diagnose釐清 MVP scope(先記單一城市單一路線、A1 到站事件、DuckDB 落地、P50/P80 分位數)再談實作。Current Status
/spectra-discuss(對齊 MVP 門檻 / 訊號取捨 / schema / 回灌 surface / rate-limit 路線數)/spectra-propose