Эффективное обслуживание движения v15
Как работает модель

Один проезд — шум. Тысячи проездов — ритм.

Мы собираем множество наблюдений одного подхода, сравниваем только похожие условия и ищем рисунок, который повторяется на новых данных.

много проездовчистые группыповторяемый период
01 · собираем

Сначала всё смешано в одной картине

Каждый столбик показывает, как часто встречалось определённое полное время проезда одного подхода. Здесь вместе лежат будни, выходные, утро, день и вечер — поэтому распределение широкое и многопиковое.

Это исходный материал, а не ответ. Сначала сделаем наблюдения сравнимыми — и только потом будем искать ритм.

02 · выравниваем календарь

Оставляем только понедельник–четверг

Пятница живёт переходом к выходным, а суббота и воскресенье — другим спросом и расписанием. Для первой устойчивой группы оставляем Пн–Чт; пятницу и выходные анализируем отдельно, а не подмешиваем.

Первое правило: сравниваем один подход и направление только внутри похожего календарного класса.

03 · разделяем расписание дня

Строим три независимых графика

Даже Пн–Чт нельзя складывать целиком: утром, днём и вечером светофор и поток могут жить по разным режимам. Поэтому строим отдельные распределения для 06–10, 10–16 и 16–20.

Три графика — три гипотезы расписания. Они больше не создают ложные пики друг для друга.

04 · фиксируем одну группу

Дальше работаем только с днём

Берём Пн–Чт, 10:00–16:00, один подход и одно направление. Утро и вечер никуда не исчезли — для них модель повторит те же шаги отдельно. Сейчас важно не менять объект анализа на полпути.

Наша рабочая группа: одно направление × Пн–Чт × дневной режим.

05 · защищаемся от загрязнения

Отделяем внешний длинный хвост

Редкие долгие проезды могут возникнуть из-за аварии, downstream-пробки или блокировки перекрёстка. Мы помечаем их как внешнее загрязнение X и не позволяем единичным событиям растянуть оценку цикла.

Мы не удаляем неудобные данные молча. Хвост остаётся в приватном QA и получает явную причину подавления.

06 · находим ноль задержки

Оцениваем свободное время проезда

Ищем устойчивую нижнюю границу времени: сколько занимает полный подход без дополнительной задержки. Это низкий робастный квантиль, сверенный с геометрией дорожного графа, а не самый низкий столбик по частоте.

Baseline — положение по оси времени, а не высота столбика.

07 · выделяем задержку

Вычитаем свободный проезд

Из времени каждого проезда вычитаем одно и то же t₀. Поэтому распределение целиком сдвигается влево по оси времени. Значения, которые после вычитания оказались левее нуля, не могут быть задержкой и исчезают.

Мы вычитаем секунды по оси X, а не высоту столбиков. Высота по-прежнему показывает, сколько раз встретилась каждая оставшаяся задержка.

08 · правильно читаем пик

Самый высокий столбик — не длина цикла

Положение пика по X говорит: «примерно 74 секунды дополнительной задержки встречались чаще всего». Высота пика говорит, сколько было таких наблюдений. Ни одно из этих чисел не отвечает, через какой интервал повторяется движение.

«Часто ждать 74 секунды» не означает «цикл равен 74 секундам». Для периода нужен порядок событий во времени.

09 · показываем контрпример

Одинаковые частоты могут скрывать разный ритм

В двух рядах ниже одинаковое число фиолетовых, голубых и жёлтых состояний — значит, их распределения совпадут. Но в ряду A рисунок повторяется через 60 секунд, а в ряду B — через 120.

Гистограмма намеренно забывает порядок. Поэтому восстановить период только по её пику математически невозможно.

10 · возвращаем порядок событий

Те же события группируем уже по времени

Мы не превращаем прошлую гистограмму в новый график. Берём те же исходные наблюдения, возвращаем каждому локальное время и складываем их в privacy-safe 5-секундные клетки. По X теперь идёт время, по Y — относительная масса событий внутри клетки.

Меняется группировка, а не данные. Раньше события лежали по величине задержки без порядка; теперь видна последовательность и расстояние между похожими всплесками.

11 · складываем по кандидату C

Проверяем, выравниваются ли повторения

Для каждого C от 20 до 600 секунд переводим время события в «позицию внутри цикла»: берём остаток от деления времени на C. Если всплески разных часов и дней ложатся в одни позиции, кандидат объясняет ритм.

Обязательно сравниваем C/2, C, 2C и соседей. Так модель не путает настоящий период с половиной или двойной гармоникой.

12 · собираем фазовый профиль

Четыре повтора складываем в один период

После выбора C сравниваем одинаковые позиции повторов: первую клетку с первой, вторую со второй и так далее. Четыре последовательных рисунка превращаются в один усреднённый профиль из 12 пятисекундных клеток.

Здесь ещё нет названий состояний. Мы лишь собрали вместе события с одинаковой позицией внутри проверенного периода.

13 · интерпретируем фазу периода

Только теперь различаем состояния

B — buildup, накопление очереди; D — discharge, разрядка; F — free flow, свободный проход. X — внешняя помеха или неразобранное состояние. Цветные плашки стоят точно над теми клетками, к которым относятся; их ширина соответствует длительности состояния.

Это наблюдаемое поведение потока, не лампы контроллера. Конфликтующие направления помогают проверить логику, но не превращают оценку в телеметрию светофора.

14 · доказываем переносимость

Новая неделя должна повторить результат

Период и длительности состояний выбираются на шести train-неделях. Затем без переобучения применяются к седьмой, untouched holdout. Проверка проходит отдельно для каждого направления и режима суток.

Не повторилось — не публикуем. Лучше честно показать «недостаточно данных», чем уверенно нарисовать цикл из шума.

Сырые наблюдения

Смесь времени проезда

18 420
проездов
20 свремя полного проезда240 с

По горизонтали — время проезда, по вертикали — частота наблюдений.

Что получает пользователь

Не «режим контроллера», а доказанный ритм движения

Для каждого направления и режима суток показываются только устойчивый наблюдаемый период, оценённое окно обслуживания, окно задержки и уверенность повторяемости. Всё остальное остаётся скрытым.

по направлениямпо режимам сутокс holdoutбез экстраполяции