Методология
Как изчисляваме надеждността на градския транспорт в София.
Данни
Използваме официалните GTFS и GTFS-Realtime данни на „Центъра за градска мобилност" (ЦГМ), публично
достъпни на gtfs.sofiatraffic.bg. Системата записва snapshot на TripUpdates и
VehiclePositions фийдовете на всеки 20 секунди денонощно. Нощният процес обработва натрупаните данни
и изчислява метриките.
Действително пристигане (v2)
От юли 2026 използваме VehiclePositions GPS данни за реалното пристигане на
превозните средства. Всяка VehiclePosition entity съдържа (trip_id, stop_id, GPS координати,
измерен timestamp). Пристигането се записва когато превозното средство докладва
stop_id за дадена спирка — не се използва геофенсинг, тъй като фийдът сам посочва
на коя спирка се намира.
За пътувания без GPS данни (около 53% от активните в пиковите часове) запазваме TripUpdates предсказанията като резервен метод. Резултатът е хибриден: VehiclePositions където има, TripUpdates където няма.
закъснение = действително_пристигане (GPS) − планирано_време
или предсказано_пристигане (TripUpdates) − планирано_време Метод за закъснението
Закъснението се изчислява, не се чете директно от фийда. Използваме хибриден подход:
закъснение = действително_пристигане (GPS) − планирано_време
или предсказано_пристигане (TripUpdates) − планирано_време
Където има VehiclePositions GPS данни, използваме measured_ts на превозното средство
като действително пристигане. За останалите пътувания (~47% покритие) използваме предсказаното
време от последния TripUpdate, получен до 30 минути след планираното. Отхвърляме записи с
|закъснение| > 3 ч. като шум.
Спирания (stop events)
Всеки запис представлява едно измерено спиране: комбинация от (дата, линия, посока, пътуване, спирка) с планирано и изчислено закъснение.
Активни пътувания
Само пътуванията, активни за съответната дата по calendar_dates.txt (в GTFS
фийда няма calendar.txt). Граница на деня: 04:00 ч. (Европа/София) — нощни
тръгвания след полунощ принадлежат към предходния сервизен ден.
Навреме
Спирането се счита навреме, ако закъснението е в прозореца [−60, +180] секунди (до 1 мин. рано или до 3 мин. късно). Ранните тръгвания над 1 мин. не се считат навреме.
Призрачно пътуване (ghost trip)
Пътуване от активния набор, за което не е получен нито един TripUpdate в ±30 минути от планираното тръгване. Призрачните пътувания са изключени от статистиката на закъсненията, но са включени в % изпълнени.
Изпълнени %
изпълнени% = (планирани − призрачни) / планирани × 100
Медиана и P90 на закъснението
Изчисляват се чрез линейна интерполация върху всички измерени спирания за периода. P90 означава: 90% от спиранията са закъснели по-малко от тази стойност. Отрицателните стойности (ранни тръгвания) се запазват.
Публикуваната стойност е за по-слабата посока на линията.
Минимална извадка
Линия с по-малко от 300 измерени спирания за месеца получава оценка „—" (недостатъчно данни) и е изключена от класацията.
Честа линия
Линии с пиков интервал ≤ 10 минути (метро, основни трамваи) получават стандартна оценка по разписание, но с предупреждение: точността спрямо разписание е по-малко показателна за тях.
Формула за оценка
Оценката е от 0 до 100 точки, съставена от три компонента:
резултат = 0,40 × компонент_изпълнени
+ 0,35 × компонент_навреме
+ 0,25 × компонент_p90
компонент_изпълнени = clamp01((изпълнени% − 90) / 10) × 100
компонент_навреме = clamp01((навреме% − 50) / 45) × 100
компонент_p90 = clamp01((15 − p90_мин) / 12) × 100
clamp01(x) = max(0, min(1, x)) Интерпретация на прага за компонент_изпълнени:
- 90% изпълнени → 0 точки
- 100% изпълнени → 100 точки
За компонент_навреме:
- 50% навреме → 0 точки
- 95% навреме → 100 точки
За компонент_p90:
- P90 ≥ 15 мин → 0 точки
- P90 ≤ 3 мин → 100 точки
Прагове за оценките
| Оценка | Точки | Описание |
|---|---|---|
| A | ≥ 85 | Отлично |
| B | ≥ 70 | Добро |
| C | ≥ 55 | Задоволително |
| D | ≥ 40 | Лошо |
| E | < 40 | Много лошо |
Тренд (тренд_мом)
Разлика между медианата на закъснението за текущия и предходния месец (в минути). Положителна стойност означава влошаване; отрицателна — подобрение. Показва се „—" ако предходният месец няма данни.
Честотна диаграма на закъсненията
Спиранията са разпределени в шест фиксирани интервала:
- < −1 мин: ранни тръгвания над 1 мин.
- −1 до +2 мин: практически навреме
- 2 до 5 мин: леко закъснение
- 5 до 10 мин: умерено закъснение
- 10 до 15 мин: значително закъснение
- > 15 мин: тежко закъснение
Топлинна карта (heatmap)
Показва медианното закъснение по час (05:00–23:00) и ден от седмицата. Клетки с по-малко от 20 измервания са оцветени в сиво. По-тъмен цвят означава по-голямо закъснение.