Данни

Използваме официалните 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))

Интерпретация на прага за компонент_изпълнени:

За компонент_навреме:

За компонент_p90:

Прагове за оценките

Оценка Точки Описание
A≥ 85Отлично
B≥ 70Добро
C≥ 55Задоволително
D≥ 40Лошо
E< 40Много лошо

Тренд (тренд_мом)

Разлика между медианата на закъснението за текущия и предходния месец (в минути). Положителна стойност означава влошаване; отрицателна — подобрение. Показва се „—" ако предходният месец няма данни.

Честотна диаграма на закъсненията

Спиранията са разпределени в шест фиксирани интервала:

Топлинна карта (heatmap)

Показва медианното закъснение по час (05:00–23:00) и ден от седмицата. Клетки с по-малко от 20 измервания са оцветени в сиво. По-тъмен цвят означава по-голямо закъснение.