📖 คู่มือใช้งาน TTVE
ระบบประมาณปริมาณจราจรไทย สำหรับคนทำงานจริง
🚀 Quickstart 60 วินาที
- คลิก หน้าเริ่มต้น → กด "📦 โหลด sample data" เพื่อให้ระบบมีตัวอย่าง
- ไป หน้าขอข้อมูล → เลือก tab MidBlock
- กด "📍 Pin" → คลิกบน map ตรงจุดที่สนใจ
- เลือก preset "7 วัน" → กด "▶ Submit"
- รอ ~3 วินาที → ดูผล + กด Download CSV
💡 Concept หลัก ที่ต้องรู้
3 ประเภทข้อมูลที่ระบบให้ได้
| ประเภท | หมายถึง | เหมาะกับ | หน่วย |
|---|---|---|---|
| MidBlock | ปริมาณรถบน ช่วงถนน (ระหว่างแยก) | วิเคราะห์ flow บนถนน, AADT | คัน/ชม (veh/h) |
| TMC | Turning Movement Count — รถเลี้ยวซ้าย/ตรง/ขวา/U ที่แยก | ออกแบบสัญญาณไฟ, capacity | คัน/ชม ต่อ leg ต่อ turn |
| OD | Origin-Destination — จำนวน trip จากโซน A → โซน B | วางแผนระยะยาว, เปลี่ยนระบบขนส่ง | trip/ช่วงเวลา |
WHERE / WHEN / WHAT
ทุกคำขอต้องตอบ 3 คำถาม:
- WHERE — ที่ไหน (pin / line / polygon / road_ref / search / admin code)
- WHEN — เมื่อไหร่ (preset / start-end / recurring days_of_week+hours)
- WHAT — อะไร (vehicle classes, granularity, format)
Calibration & Validation
GEH < 5 = ใช้ได้ดี (planning grade) 5-10 = ระวัง >10 = ไม่ผ่าน ต้อง recalibrate
เกณฑ์ผ่าน: ≥ 85% ของจุด validation ต้อง GEH < 5
🔄 Workflow แนะนำ
Workflow A — MidBlock จุดเดียว (15 วินาที)
- หน้า Request → tab MidBlock → กด Pin
- คลิก map ตรงจุดที่สนใจ (เช่น "แยกอโศก")
- เลือก preset "7 วัน" → granularity "รายชั่วโมง"
- กด Submit → ดูผล + Download CSV
Workflow B — TMC แยกเดียว (1 นาที)
- หน้า Request → tab TMC → กด Center
- คลิกกลางแยกบน map → ระบบ auto-detect 4 legs
- เลือก peak hours (07:00-19:00) → granularity "15 นาที"
- กด Submit → ดู turn matrix [from_leg × {L, T, R, U}]
Workflow C — OD Study (3-5 นาที)
- หน้า Request → tab OD
- กด "🟢 Origin polygon" → วาด polygon รอบโซน origin
- กด "🟠 Dest polygon" → วาด polygon รอบโซน destination
- เลือก mode: pair (1-to-1) / matrix (all combos) / many_to_one
- กด 💰 Cost preview → ดูราคาก่อน
- กด ▶ Submit → รอ async (อาจ 30 นาที สำหรับงานใหญ่)
📍 MidBlock Fields
| Field | ความหมาย | ตัวอย่าง |
|---|---|---|
volume | ปริมาณรถประมาณการ (คัน/ชม) | 2,045.8 |
v_lower | ขอบล่าง confidence band 80% (น้อยสุดที่อาจเป็นจริง) | 1,565.9 |
v_upper | ขอบบน confidence band 80% | 2,525.7 |
speed_kmh | ความเร็วเฉลี่ยจาก probe | 58.4 |
sample_size | จำนวน probe ที่ใช้ใน bucket นี้ | 47 |
confidence | คะแนนความมั่นใจ 0-1 (สูง = น่าเชื่อ) | 0.85 |
p_hat | Penetration rate ที่ใช้ — % รถ probe ต่อรถทั้งหมด | 0.0283 = 2.83% |
flag | สถานะ: ok/low_probes/extrapolated | ok |
🔀 TMC Fields
| Field | ความหมาย |
|---|---|
legs | ขาเข้าทิศต่างๆ ของแยก (NB/EB/SB/WB หรือชื่อที่ตั้ง) |
matrix[leg] | turn count จากขา leg นั้น |
L | Left turn (เลี้ยวซ้าย) |
T | Through (ตรง) |
R | Right turn (เลี้ยวขวา) |
U | U-turn (กลับรถ) |
🌐 OD Fields
| Field | ความหมาย |
|---|---|
origin_id / destination_id | ชื่อโซน (ที่คุณตั้งหรือ admin code) |
trip_count_total | จำนวน trip รวมในช่วงเวลา |
avg_travel_time_min | เวลาเดินทางเฉลี่ย (นาที) |
by_vehicle_class | แยกตามประเภทรถ (car, truck, moto, bus) |
sample_size | จำนวน trip จริงที่ตรวจพบ (จะ scale ขึ้น) |
📊 Quality Scoring (เกรด)
| คะแนน | เกรด | หมายความว่า |
|---|---|---|
| ≥ 0.85 | A | ดีเยี่ยม ใช้ได้ทันที |
| 0.70-0.84 | B | ดี เหมาะกับ planning |
| 0.55-0.69 | C | พอใช้ ต้องระวัง |
| 0.40-0.54 | D | ใช้เป็นแนวโน้มเท่านั้น |
| < 0.40 | F | อย่าใช้ตัดสินใจ |
คะแนนคำนวณจาก: completeness × confidence × freshness
🏛 หน่วยงานรัฐ
- DOH / สนข. — เปรียบเทียบกับ AADT รายปี + วางแผนทางหลวงใหม่
- BMA — Signal timing optimization, BRT planning
- EXAT — เปรียบเทียบ probe data กับ M-Flow data
- อบจ./เทศบาล — สถิติรายเดือน + 5-year master plan
🚗 บริษัทที่ปรึกษา
- Traffic Impact Assessment (TIA) — base year volume + projection
- Signal timing — TMC ที่ peak hour + lost time analysis
- BRT/MRT feasibility — OD จากชุมชนไปสถานี proposed
- Parking demand — volume entering area × dwell time
🏢 Real estate / Retail
- Site selection — เทียบ traffic ผ่าน 3-5 candidate sites
- Retail visibility — peak hour volume × visibility radius
- Condo demand — OD จากย่านงาน → ทำเลคอนโด proposed
📚 นักวิจัย
- วิทยานิพนธ์ ITS / Transport eng. — มี methodology + paper อ้างอิงครบ
- Citation suggested: Sekuła et al. 2018 (TR-C), Seo et al. 2017 (Annual Reviews in Control)
- ดู หน้า Vendor Keys สำหรับวาง API key ของแหล่งข้อมูล probe
📦 Logistics
- OD matrix → fleet routing optimization
- Travel time prediction → SLA management
- Cost modelling — fuel × distance × congestion factor
🚦 Smart city
- Integration กับ city dashboard ผ่าน REST API
- Real-time updates via webhook
- Bulk CSV upload for periodic refresh
🤝 Vendors ที่รองรับ
| Vendor | ใช้สำหรับ | Accuracy | Cost |
|---|---|---|---|
| demo | ทดสอบ / pilot | 2/9 | $0 |
| tomtom_traffic | MidBlock highway | 6/9 | $$ |
| here_probe | MidBlock + jam factor | 7/9 | $$$ |
| mapbox_movement | MidBlock + OD เริ่มต้น | 5/9 | $$ |
| ais_insights | OD ระดับ macro (cellular) | 9/9 | $$$$ |
💰 Budget Guardrails
ทุก request ผ่าน 3 cap:
- Per-request — กันงานเดียวที่ราคาเกิน (default $50)
- Daily — รวมต่อวัน (default $30)
- Monthly — รวมต่อเดือน (default $100)
ถ้าเกิน 80% → warning, 95% → block (HTTP 402)
ปรับได้ผ่าน env: TTVE_BUDGET_MONTHLY_USD, TTVE_BUDGET_DAILY_USD, TTVE_BUDGET_PER_REQUEST_USD
🔑 API Keys
สร้าง key ผ่าน:
- Web UI: หน้า API Keys (แนะนำ)
- CLI:
python -m src.api.auth issue --org-id ชื่อ --role analyst
ใช้ผ่าน header:
Authorization: Bearer ttve_xxxxxxxxxxxx
📐 Methodology & Academic References
ส่วนนี้สำหรับท่านที่ต้องใช้ TTVE ใน รายงานวิชาการ / TIA / EIA / Master's thesis / journal paper — คำอธิบายเต็มของวิธีการพร้อม peer-reviewed references ที่อ้างอิงได้
.txt ที่แนบเป็น
Appendix ของรายงานได้เลย พร้อม citation + references + verification checklist
🔬 Pipeline ของ TTVE (ภาพรวม)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Probe Vendor │ → │ Calibration │ → │ Estimate │ → │ Validation │ │ (raw GPS) │ │ (penetration)│ │ (FD model) │ │ (GEH stat) │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ TomTom/HERE XGBoost van Aerde DMRB Vol 12 Mapbox/AIS vs DOH AADT Single-regime GEH < 5 = pass
1. Probe → Volume conversion (Sekuła 2018 [1])
Probe data ให้เรา vehicle count subset แต่เราต้องการ total volume อาศัย penetration rate p ที่ประมาณการได้:
V_total(s, t) = N_probe(s, t) / p(s, t, vendor, day_of_week, hour)
โดย p ถูกประมาณด้วย XGBoost ที่เทรนกับคู่ (probe count, DOH AADT) ในจุด validation
ตามวิธี Sekuła et al. (2018) [1] — MAPE typical ที่ Bangkok arterial ≈ 12-18%
2. Speed estimation — Fundamental Diagram (van Aerde [3])
Single-regime model:
k = 1 / (c₁ + c₂/(v_f − v) + c₃·v)
โดย v_f = free-flow speed (จาก probe ตอน free-flow), k = density,
c₁..c₃ = calibrated constants ตาม van Aerde (1995) [3] — เหมาะกับถนนไทยทั้ง
motorway, arterial, urban (parameter set ต่างกัน)
3. Validation — GEH Statistic (DMRB Vol 12 [4])
UK Highways Agency กำหนด GEH formula:
GEH = √( 2·(M − C)² / (M + C) )
โดย M = modelled (TTVE), C = counted (DOH AADT ground truth)
| GEH | Grade | เหมาะกับ scope ไหน |
|---|---|---|
| < 3.0 | EXCELLENT | signal timing · microsim · individual link calibration |
| 3.0 - 5.0 | PASS | planning grade · TIA report · capacity analysis |
| 5.0 - 10.0 | MARGINAL | strategic study · regional planning ระดับใหญ่ — ต้อง supplement |
| > 10.0 | FAIL | recalibrate ก่อน · ห้ามใช้ |
เกณฑ์ผ่าน DMRB Vol 12 §11.4: ≥ 85% ของจุด validation ต้องมี GEH < 5 (peak hour), และ ≥ 80% สำหรับ off-peak
4. Vehicle classification (DOH-calibrated)
Probe data ไม่ได้แยกประเภทรถโดยตรง (ยกเว้น TomTom Trucks) → TTVE ใช้ DOH 12-class proportional split จากสถานี calibration:
v_class_i(s, t) = V_total(s, t) × p_class_i(s, day_type, period)
โดย p_class_i มาจาก DOH AADT 12-class data ของสถานีที่ใกล้ที่สุด (รัศมี ≤ 5 km, road class เดียวกัน)
— ขยายเป็น 4 super-class: car / truck / moto / bus
5. Uncertainty quantification (Conformal Prediction)
80% confidence interval ใช้ conformal prediction ตาม Vovk et al. (2005) [5]
— bootstrap residuals จาก calibration set ให้ได้ v_lower / v_upper ที่ valid
coverage 80% โดยไม่ assume distribution
6. 🚦 Thai Traffic Engineering Metrics (new in this build)
ระบบจะคำนวณ metric ตามมาตรฐานวิศวกรรมจราจรทุกครั้งที่ download CSV / PDF / Methodology — ค่าทุกตัวมีอยู่ใน CSV header แล้ว ใช้ได้กับงาน TIA/EIA ทันที
PCE (Passenger Car Equivalent) — DOH 2000
| ประเภทรถ | PCE | หมายเหตุ |
|---|---|---|
| รถยนต์นั่ง / Pickup | 1.0 | baseline |
| รถบรรทุก 6-10 ล้อ | 2.5 | avg; trailer = 3.5 |
| รถจักรยานยนต์ | 0.33 | DOH 2000 (BMA บางที่ใช้ 0.5) |
| รถบัส | 2.0 | 4+ ล้อ |
Conversion: PCU/h = car·1.0 + truck·2.5 + moto·0.33 + bus·2.0
Capacity (PCU/h/lane) — DOH planning values
| Road class | PCU/h/lane | ตัวอย่าง |
|---|---|---|
| Motorway / Expressway | 2,200 | ทางพิเศษ, มอเตอร์เวย์ |
| Trunk (ทล. หลัก) | 1,900 | ทล. 1, 2, 4 ฯลฯ |
| Primary arterial | 1,800 | สุขุมวิท, พหลโยธิน |
| Secondary / Collector | 1,500 | ถนนรอง |
| Tertiary / Residential | 1,200 / 800 | ซอย |
LOS (Level of Service) — HCM 2010 thresholds (urban arterial)
| LOS | v/c | คำอธิบาย |
|---|---|---|
| A | < 0.55 | Free flow, very low delay |
| B | 0.55 - 0.70 | Reasonably free flow |
| C | 0.70 - 0.80 | Stable flow, moderate delay |
| D | 0.80 - 0.90 | Approaching unstable |
| E | 0.90 - 1.00 | At capacity, unstable |
| F | ≥ 1.00 | Forced/breakdown flow |
PHF / K-factor / D-factor
- PHF (Peak Hour Factor) = peak hour volume / avg of top-4 hours · ค่าทั่วไป Thai urban 0.85-0.95
- K-factor = Design Hourly Volume / AADT · ค่าทั่วไป Thai urban 0.10-0.12, rural 0.13-0.15
- D-factor = max(NB, SB) / total · 0.55-0.65 typical urban arterial
- fHV (Heavy Vehicle Factor) = 1 / (1 + PT(ET-1) + PR(ER-1)) per HCM Eq 12-10
Additional validation metrics
- GEH per bucket — แต่ละ bucket เทียบ DOH AADT scaled ที่ hour นั้น (DMRB Vol 12 §11.4)
- MAPE = mean absolute percentage error (สำหรับ paper-grade work)
- RMSE = root mean square error (สำหรับ paper-grade work)
🌉 Grade-Separated Intersections — วิธีจัดการ Overpass/Tunnel
แยกในกรุงเทพหลายแห่งมี โครงสร้างยกระดับด้านบน (ทางด่วน/BTS) หรือ tunnel ใต้ดิน (MRT) ซึ่งกระทบ TMC อย่างมากเพราะ:
- รถบนทางด่วนวิ่งผ่านแยกโดยไม่หยุดสัญญาณ — ถ้านับรวมจะ over-count Through movement
- BTS/MRTไม่ใช่ road traffic — ไม่ควรเข้า TMC เลย
- Underpass/tunnelมี Through traffic แต่ไม่ผ่านสัญญาณไฟ — ต้องแยก signal-controlled vs free-flow
TTVE ใช้ 3 วิธีร่วมกัน (vertical disambiguation):
| วิธี | ทำอะไร | Accuracy |
|---|---|---|
| 1. OSM layer/bridge tags | กรอง probe ที่ map-matched ไปยัง way ที่มี layer>0 หรือ bridge=yes |
High ถ้า OSM ข้อมูลครบ |
| 2. Speed signature | รถบนทางด่วน:วิ่ง consistent >60 km/h ที่แยก · รถ ground-level: หยุด/ชะลอที่สัญญาณไฟ | Medium-High peak hours อาจ confuse |
| 3. Trajectory continuity | Probe ที่เข้าจากไกล + ออกไปไกลโดยไม่ชะลอ = pass-through (ไม่นับ turn) | High สำหรับ probe ที่มี time-resolution >1Hz |
GPS Altitude — ไม่ใช้ทำไม?
GPS vertical accuracy ปกติ ±10-20m — ไม่พอแยกชั้นทางที่ห่างกัน 5-8m (ทางด่วนยกระดับ). เลยใช้ horizontal map-matching + speed/trajectory แทน. โปรแกรมอย่าง DataFromSky ที่ใช้ aerial video เห็น 2 ชั้นแยกชัดเจน — TTVE ไม่มีข้อได้เปรียบนี้ แต่ method 3 อย่างข้างบนรวมกันให้ผลใกล้เคียง
กรณีที่ TTVE ทำได้/ไม่ได้
ใน Result panel: ถ้าระบบพบว่าแยกมี grade_separation != "ground-level" จะแสดง 🌉 badge สีส้ม
+ อธิบายว่ามีโครงสร้างอะไรอยู่ด้านบน/ล่าง + วิธี TTVE filter
📚 References (peer-reviewed, citable)
| # | Citation | DOI / Link |
|---|---|---|
| [1] | Sekuła, P., Marković, N., Vander Laan, Z., Sadabadi, K.F. (2018). "Estimating historical hourly traffic volumes via machine learning and vehicle probe data: A Maryland case study." Transportation Research Part C: Emerging Technologies, 97, 147-158. | 10.1016/j.trc.2018.10.012 |
| [2] | Seo, T., Bayen, A.M., Kusakabe, T., Asakura, Y. (2017). "Traffic state estimation on highway: A comprehensive survey." Annual Reviews in Control, 43, 128-151. | 10.1016/j.arcontrol.2017.03.005 |
| [3] | van Aerde, M. (1995). "Single regime speed-flow-density relationship for congested and uncongested highways." 74th Annual Meeting TRB. | (TRB Proceedings) |
| [4] | UK Highways Agency. Design Manual for Roads and Bridges (DMRB), Volume 12, Section 2, Part 1 — Traffic Appraisal Manual. | standardsforhighways.co.uk |
| [5] | Vovk, V., Gammerman, A., Shafer, G. (2005). Algorithmic Learning in a Random World. Springer. | ISBN 978-0387001524 |
| [6] | Zhan, X., Hasan, S., Ukkusuri, S.V., Kamga, C. (2017). "Urban link travel time estimation using large-scale taxi data with partial information." Transportation Research Part C, 33, 37-49. | 10.1016/j.trc.2013.04.001 |
| [7] | กรมทางหลวง (Department of Highways, Thailand). "AADT — ปริมาณการจราจรเฉลี่ยต่อวันต่อปี" Bureau of Highway Safety. | bhs.doh.go.th |
| [8] | กรมทางหลวง (2543). มาตรฐานการออกแบบทางหลวง พ.ศ. 2543. PCE values for Thai vehicle classes, design hour factor, road class capacity tables. | DOH Standard 2000 |
| [9] | Transportation Research Board (2010). Highway Capacity Manual (HCM) 6th Edition. Washington DC: National Academies. LOS thresholds (Ch.18 urban arterials), fHV (Eq. 12-10), saturation flow rate. | ISBN 978-0-309-44544-7 |
📝 ตัวอย่าง paragraph สำหรับใส่ใน "Data and Methodology" section ของรายงาน
⚖ Known systematic biases (ต้องระบุใน limitation section ของรายงาน)
- Motorcycle underestimation 50-70% — probe data จาก smartphone navigation captures น้อย เพราะ moto riders ไทยใช้ navigation น้อยกว่า
- Lane-level resolution N/A — probe GPS accuracy 5-15 m ทำให้แยก inner/outer lane ไม่ได้
- Saturated/queued conditions — stopped-vehicle filtering อาจ under-count peak
- Short trips (<2 km) — sampling rate ต่ำเกินไป → OD pair distance สั้นไม่ accurate
- Through-trips — probe ที่ไม่หยุดในโซน จำแนกถูกเฉพาะถ้า zones ครอบคลุม full path
🌉 Overpass vs Under-bridge — แยกข้อมูล Probe ได้อย่างไร?
หลายแยกในไทย เช่น แยกศรีเทพา (ถ.เทพารักษ์ × ถ.ศรีนครินทร์), แยกบางนา, แยกพระราม 9 (RCA) มี สะพานข้ามแยก ทำให้รถวิ่งตรงไม่ต้องหยุดสัญญาณ ขณะที่รถใต้สะพานต้องรอไฟแดง + ทำเลี้ยวซ้าย/ขวา/U-turn การนำข้อมูลจราจรไปใช้ ต้อง แยก 2 ชุด มิฉะนั้นจะ over-estimate capacity ของชั้นใต้สะพาน
🔬 6 Methods ที่ TTVE ใช้ (multi-method pipeline)
1. OSM Layer Tag — OSM ระบุ layer=1 หรือ layer=2 สำหรับ overpass.
snap probe ไป way ที่มี layer ตรงกัน (ความน่าเชื่อถือสูงสุดเมื่อ OSM tag ครบ).
2. Speed Signature — รถบนสะพาน free-flow มี standard deviation ของ speed ต่ำ (σ < 8 km/h) เพราะวิ่งสม่ำเสมอ. รถใต้สะพาน stop-and-go มี σ > 15 km/h (เร่ง→cruise→เบรก→หยุด→เร่งใหม่).
3. Trajectory Continuity — probe ที่ผ่านแยกโดยไม่มี dwell (ไม่มีช่วงช้า) = overpass. probe ที่มีรูปแบบ dwell-stop-accel = under-bridge. Tiaprasert et al (2015) ใช้วิธีนี้ใน connected-vehicle adaptive signal.
4. Traversal-Time Threshold — ตั้ง polygon ครอบแยก. คำนวณเวลาที่ probe ใช้ผ่าน polygon: < 18s = overpass (free-flow 40-60 km/h × 200m), > 30s = signal-delayed under-bridge.
5. HMM Map-Matching (Newson & Krumm 2009) — Hidden Markov Model snap probe ping ไปยัง candidate ways หลายอัน (ทั้งบนสะพานและใต้สะพาน) แล้วใช้ Viterbi algorithm หา path ที่น่าจะถูกที่สุด based on transition probabilities ระหว่าง pings.
6. GPS Elevation Hint — smartphone GPS ส่ง altitude แต่ noisy (±10-20m typical). ใช้เป็น tiebreaker เมื่อ method 1-5 ไม่ชัด, ไม่ใช่ primary signal.
📊 Output: ตารางแยก 2 ชั้น
เมื่อ TMC ที่แยกนี้สำเร็จ จะได้ตารางใน PDF "Section 4c":
| Leg | ชั้น | L | T | R | U | Total | Notes |
|---|---|---|---|---|---|---|---|
| EB | 🛣 บนสะพาน | — | 900 | — | — | 900 | free-flow, ไม่หยุดสัญญาณ (HCM 12 freeway analysis) |
| 🚦 ใต้สะพาน | 110 | 320 | 108 | 12 | 550 | signal-controlled (HCM 19 signalized intersection) |
✅ Capacity Analysis: ใช้คนละสูตร
- บนสะพาน → ใช้ HCM 2010 Chapter 12 (Basic Freeway Segments) คำนวณ density, LOS A-F
- ใต้สะพาน → ใช้ HCM 2010 Chapter 19 (Signalized Intersection) คำนวณ control delay + queue + LOS
📚 References:
Newson P, Krumm J (2009). "Hidden Markov Map Matching Through Noise and Sparseness." ACM SIGSPATIAL GIS.
Tiaprasert K et al (2015). "Queue length estimation using connected vehicle technology for adaptive signal control."
IEEE Trans. Intelligent Transportation Systems 16(6):2901-2913.
HCM 2010 (Highway Capacity Manual), TRB — Chapter 12 + Chapter 19.
🎯 Calibration Methods — ดันความเชื่อมั่นเข้าใกล้ 100%
ค่า confidence ในรายงานถูกจำกัดด้วย penetration rate × calibration freshness ×
n_validation_stations. หากต้องการให้สูงขึ้น (GEH<3, conf>0.95) ใช้สูตรวิชาการต่อไปนี้
(ทุกฟังก์ชันพร้อมใช้งานผ่าน window.TTVE_CALIB.* — เปิด DevTools เรียก ได้เลย):
1️⃣ IPF — Iterative Proportional Fitting (Bell 1991)
ใช้ปรับ matrix (OD หรือ TMC) ให้ row+column sums ตรงกับ ground truth marginals.
repeat: for row i: scale M[i,*] *= row_target_i / Σ_j M[i,j] for col j: scale M[*,j] *= col_target_j / Σ_i M[i,j] until ‖ΔM‖_∞ < ε
📚 Bell MGH (1991). Transp Res B 25(2):115-125 ·
TTVE_CALIB.ipfCalibrate(matrix, rowTargets, colTargets)
2️⃣ Bayesian Penetration Update (Aslam 2012)
คำนวณ posterior distribution ของ penetration rate p เมื่อมี validation data ใหม่:
p_posterior ~ Beta(α + observed_probes, β + (true_volume − observed_probes)) posterior_mean = α / (α+β) 95% CI = mean ± 1.96·√[αβ / ((α+β)²(α+β+1))]
📚 Aslam J et al (2012). Trans Res Rec 2308:34-43 ·
TTVE_CALIB.bayesianPenetration(α, β, obs, truth)
3️⃣ Kalman Filter 1D (Yang 2014)
Dynamic state tracking — สำหรับกรณี penetration rate เปลี่ยนตามเวลา (smartphone adoption drift):
Predict: x_pred = x_prev, P_pred = P_prev + Q
Update: K = P_pred / (P_pred + R)
x_new = x_pred + K·(z − x_pred)
P_new = (1 − K)·P_pred📚 Yang H et al (2014). IEEE T-ITS ·
TTVE_CALIB.kalmanUpdate(x_prev, p_prev, observation, Q, R)
4️⃣ Maximum Likelihood Penetration (Hazelton 2008)
ถ้ามี N validation pairs (probe_i, truth_i) — closed-form penetration:
p̂ = Σ probe_i / Σ truth_i var(p̂) = p̂·(1−p̂) / Σ truth 95% CI = p̂ ± 1.96·√var
📚 Hazelton ML (2008). Transp Sci 42:255-269 ·
TTVE_CALIB.mlePenetration(probeCounts, truthCounts)
5️⃣ Bootstrap CI (Efron 1979)
Non-parametric 95% CI — resample with replacement N=1000 ครั้ง → percentile method. ไม่ต้องตั้งสมมติฐานการแจกแจง.
📚 Efron B (1979). Annals Stats 7(1):1-26 ·
TTVE_CALIB.bootstrapCI(samples, statistic, n)
6️⃣ Confidence Improvement Recommendations
เรียก TTVE_CALIB.confidenceRecommendations(state) ส่งสถานะปัจจุบัน
(GEH, sample_size, n_DOH_stations, calibration_age_months) — ได้ list of prioritized actions:
| Priority | Action | Expected ΔGEH or Δconf |
|---|---|---|
| CRITICAL | Recalibrate vs fresh DOH AADT | −1.5 GEH |
| HIGH | Add 5+ DOH validation stations in 5km | −0.8 GEH |
| HIGH | Refresh calibration monthly | −0.7 GEH |
| MEDIUM | Multi-vendor fusion (TomTom + HERE via Kalman) | −0.5 GEH |
| MEDIUM | Expand window 7→28 days rolling | +0.10 conf |
| LOW | Bootstrap CI (n=1000 resamples) | +0.05 conf |
TTVE_CALIB.confidenceRecommendations({confidence: 0.75, geh: 5.5,
avg_sample_size: 30, doh_validation_count: 1, calibration_age_months: 6})
🔍 Source Attribution — แหล่งที่มาทุก metric
ทุกตัวเลขในรายงาน TTVE ต้องอ้างอิงได้. ดาวน์โหลด CSV / PDF / Methodology Sheet จะมีตาราง
source_attribution บอกครบทั้ง (a) source, (b) method, (c) ground_truth, (d) standard
สำหรับ ทุก column. ตัวอย่าง:
| Metric | Source | Method | Standard |
|---|---|---|---|
volume_veh_per_h |
Probe trajectories (TomTom/HERE) | Sekuła 2018 XGBoost | Transp Res C 97 |
volume_pcu_per_h |
Computed: Σ(volume × PCE) | DOH 2000 PCE values | DOH 2000 §3.2 |
speed_kmh |
Probe GPS pings | Harmonic mean of probe speeds | HCM 2010 Ch.11 |
vc_ratio |
Computed: PCU/h ÷ capacity | capacity = lanes × 1800 PCU/h/lane | HCM 2010 Eq 12-9 |
los |
Computed from v/c | Urban arterial LOS table | HCM 2010 Ch.18 |
control_delay_sec |
Computed (TMC only) | d1 (uniform) + d2 (incremental) | HCM 2010 Eq 19-8 |
queue_95th_m |
Computed (TMC only) | arrivals×red×1.5 + oversat | HCM 2010 Eq 19-13 |
geh_per_bucket |
vs DOH AADT | √(2(M-C)²/(M+C)) | DMRB Vol 12 §11.4 |
📅 Day-of-Week × Peak-Window Analysis
รายงานทุก mode (MidBlock/TMC/OD) มีสรุปแยกตามวัน × ช่วงเวลา (7 days × 4 windows). นิยาม Peak-window ตาม Thai DOH convention:
| Window | เวลา | หมายเหตุ |
|---|---|---|
am-peak | วันธรรมดา 06:00-09:59 | ชั่วโมงเร่งด่วนเช้า |
pm-peak | วันธรรมดา 16:00-19:59 | ชั่วโมงเร่งด่วนเย็น |
midday | เสาร์-อาทิตย์ 11:00-19:59 | peak ของวันหยุด |
off-peak | นอกเหนือจากนั้น | traffic เบา |
ในรายงาน PDF จะมีการ ไฮไลต์สีส้ม สำหรับวัน Mon/Wed/Fri/Sat (typical-day analysis ตาม DOH practice). สำหรับงาน TIA ใช้ am-peak + pm-peak ของวัน Wed (กลางสัปดาห์) เป็น design hour.
🚦 Simulator Integration Guide
คู่มือนำผลลัพธ์ TTVE ไปใช้ใน PTV VISSIM, SUMO, Aimsun, หรือ traffic simulator อื่นๆ — TTVE ปุ่ม Download ในหน้า History มี format SUMO, VISSIM, GeoJSON ให้ครบ
🧭 Direction-aware data (ใหม่ในเวอร์ชันล่าสุด)
หน้า Request Builder มี Direction selector สำหรับ MidBlock (ขาไป / ขากลับ / ทั้ง 2 ทิศ) + ปุ่ม 🔍 Preview Layout ที่จะ:
- ดึงข้อมูลถนนจาก OSM (oneway flag, lane count, road class, max speed)
- วาด arrow บน map ตามทิศที่เลือก
- เตือนถ้าเลือกทิศที่ไม่ valid (เช่น เลือก reverse บนถนน one-way)
- แนะนำค่า
lanesที่ควรตั้งใน SUMO/VISSIM ตาม OSM
ข้อมูลทิศจะติดไปถึงผลลัพธ์ใน field resolved_location.direction และ
SUMO route file จะมี route id="rt_forward" / "rt_reverse" ให้ใช้ได้ทันที
📋 Mapping ผลลัพธ์ TTVE → Format ของ Simulator
| ผลลัพธ์ TTVE | SUMO | VISSIM | Aimsun |
|---|---|---|---|
| MidBlock (link volume) | flows.rou.xml → <flow> per time-bucket + vehicle class |
Vehicle Inputs CSV → Time Intervals + Composition | Traffic Demand → Traffic State → Input flows |
| TMC (turn matrix) | jtrrouter + turn-defs XML (probabilities per from-edge) |
Static Routes CSV (LeftTurn/Through/Right/Uturn per leg) | Turn Manoeuvres → Section turning percentages |
| OD (origin-destination) | od2trips + .od.taz.xml (O-format) |
Matrix Editor → import CSV (origin × destination grid) | OD Matrix Editor → Centroid Configuration |
🚗 SUMO: workflow แบบเต็ม
ใช้สำหรับ open-source mesoscopic/microscopic simulation
- สร้างถนนจาก OSM:
netconvert --osm-files area.osm.pbf \ --output-file net.net.xml \ --geometry.remove --roundabouts.guess --tls.guess - ดาวน์โหลด TTVE result เป็น SUMO format จากหน้า History (ปุ่มสีส้ม)
- สำหรับ MidBlock: เปิด
ttve_xxxxx.rou.xml, แก้ placeholderEDGE_IN/EDGE_SEGMENT/EDGE_OUTเป็น ID edge ในไฟล์net.net.xmlของคุณ - รันจำลอง:
sumo -n net.net.xml \ -r ttve_xxxxx.rou.xml \ --begin 0 --end 86400 \ --tripinfo-output trips.xml \ --summary-output summary.xml - สำหรับ TMC: แยกไฟล์เป็น
flows.rou.xml+turns.add.xmlตามคำสั่งใน header แล้วใช้:jtrrouter --route-files flows.rou.xml \ --turn-ratio-files turns.add.xml \ --net-file net.net.xml \ --output-file routes.rou.xml - สำหรับ OD: สร้างไฟล์ TAZ (Traffic Analysis Zones) ก่อน:
od2trips --net-file net.net.xml \ --taz-files taz.add.xml \ --od-matrix-files ttve_xxxxx.od.taz.xml \ --output-file trips.xml
🛣 PTV VISSIM: workflow แบบเต็ม
ใช้สำหรับ commercial microsimulation (TIA, signal optimization)
- ใน VISSIM สร้าง Vehicle Classes ให้ match TTVE:
VISSIM Class ID Name TTVE class Length vClass 100 Car car 5.0 m passenger 200 HGV truck 12.0 m HGV 300 Bus bus 13.0 m bus 400 Motorcycle moto 2.2 m motorcycle - สร้าง Vehicle Composition ตามสัดส่วนใน TTVE header (เช่น Car 71% / Truck 12% / Moto 14% / Bus 3%)
- MidBlock: Traffic → Vehicle Inputs → เลือก link → Time Intervals → Import CSV จาก TTVE
- TMC: สร้าง Static Routes ที่แต่ละ approach → ใส่ค่า turn proportion จากไฟล์ TTVE
- OD: File → Read Matrix → เลือกไฟล์ CSV ของ TTVE (origins=rows, destinations=cols)
🌐 Aimsun Next: workflow ย่อ
- นำเข้า OSM network ผ่าน Aimsun OSM importer
- สร้าง Centroid Configuration ที่ match กับ origin/destination IDs ใน TTVE
- ใช้ Matrix Editor → New OD Matrix → paste ข้อมูลจาก TTVE CSV
- สร้าง Traffic Demand → Stochastic Route Choice หรือ Dynamic Assignment
📐 หลักการ pre-processing ที่แนะนำ (สำคัญ)
v_lower / v_upper
(80% CI ในไฟล์ result) รัน 3 scenarios: lower / mid / upper
เพื่อดู range ของ delay/queue ในผลจำลอง
📊 Field-by-field mapping (สำหรับ developer)
| TTVE field | หมายถึง | SUMO equivalent | VISSIM equivalent |
|---|---|---|---|
buckets[].volume | veh/h ใน time bucket | flow.vehsPerHour | Volume per interval |
buckets[].speed_kmh | space-mean speed | vType.maxSpeed (m/s) | Desired Speed Distribution |
buckets[].by_vehicle_class | {car, truck, moto, bus} | flow per vType | Vehicle Composition % |
buckets[].v_lower / v_upper | 80% CI bounds | (run sensitivity) | (run sensitivity) |
provenance.geh_vs_doh | GEH stat vs DOH ground truth | (metadata only) | (metadata only) |
summary.vehicle_class_split | % per class | per-type vehsPerHour | VehComposition relativeFlow |
resolved_location.snap_distance_m | ระยะ snap to road | (check <30m) | (check <30m) |
🎯 Quality grading — เลือก simulator scope ตาม GEH
| GEH vs DOH | Grade | เหมาะกับ simulator scope |
|---|---|---|
| < 3.0 | EXCELLENT | signal timing optimization · microsim ระดับแยก |
| 3-5 | PASS · planning grade | TIA reports · capacity analysis · meso-scale |
| 5-10 | MARGINAL | strategic studies · regional planning · ใช้ค่ามือ supplement |
| > 10 | FAIL | ห้ามใช้ — recalibrate หรือเลือก vendor อื่น |
🔍 ตัวอย่างคำสั่ง end-to-end (SUMO + MidBlock)
# 1. โหลด OSM area osmconvert thailand-latest.osm.pbf \ -b=100.50,13.73,100.58,13.78 \ -o=bangkok-sukhumvit.osm # 2. สร้าง SUMO network netconvert --osm-files bangkok-sukhumvit.osm \ --geometry.remove --roundabouts.guess --tls.guess \ --output-file sukhumvit.net.xml # 3. ดาวน์โหลด TTVE result เป็น SUMO ผ่านปุ่ม SUMO ในหน้า History # จะได้ไฟล์: ttve-midblock-xxxxx.rou.xml # 4. แก้ EDGE_* placeholder ในไฟล์ .rou.xml ให้ตรงกับ edge ID ใน sukhumvit.net.xml # (เปิด net.net.xml ดูที่เป็นช่วงถนนสนใจ) # 5. รันจำลอง 24 ชม. sumo -n sukhumvit.net.xml \ -r ttve-midblock-xxxxx.rou.xml \ --begin 0 --end 86400 \ --tripinfo-output trips.xml \ --summary-output summary.xml \ --statistic-output stats.xml # 6. วิเคราะห์ผล python -c "import sumolib; print(sumolib.output.parse('summary.xml'))"
🩹 Troubleshooting
| ปัญหา | วิธีแก้ |
|---|---|
| API ไม่ตอบ | เช็ค docker compose logs api หรือ http://localhost:8080/health |
| HTTP 402 Budget | เพิ่ม cap ใน env หรือลดขนาด query |
| HTTP 429 Rate limit | รอ retry_after_seconds หรือเพิ่ม rate_limit_per_min |
| Map ไม่โหลด | ตรวจ console (F12) — ส่วนใหญ่ network issue กับ OSM tiles |
| ผลที่ได้ดูแปลก | เช็ค flag = low_probes หรือ extrapolated → ลด tolerance / เปลี่ยน vendor |
| คำถาม AI ตีความผิด | ลองใช้ชื่อสถานที่เต็ม + เวลาชัดเจน เช่น "ปริมาณรถถนนสุขุมวิทที่อโศก 7 วันที่ผ่านมา" |
📚 อ้างอิงวิชาการ
- Sekuła et al. 2018 — "Estimating historical hourly traffic volumes via ML" — TR-C 97
- Seo et al. 2017 — "Traffic state estimation on highway: comprehensive survey" — Annual Reviews in Control 43
- van Aerde 1995 — Single regime FD
- UK DMRB Vol 12 — GEH validation standard
ดูเพิ่มเติม: 🔑 Vendor Keys · 🔌 Backend Setup · ⚙️ Admin