Почему автобус никогда не приходит вовремя, или Теорема о том, что вам не повезло


Скажу сразу: автобус приходит вовремя. Просто не для вас.
Звучит как обида на мироздание, но это математика, и довольно простая. Ей лет сто, у неё есть название (inspection paradox, парадокс инспекции, или, если по-нашему, парадокс времени ожидания). При этом она почти никогда не всплывает в разговоре на остановке. А зря: она объясняет, почему табличка «интервал 10 минут» и ваши реальные пятнадцать минут на ветру — не взаимоисключающие вещи.
Я полезла в это после одного утра в феврале. Стою на остановке, на табличке гордо написано «интервал в часы пик — 10 минут», в приложении автобус то «через 4 минуты», то «через 7», то вообще пропадает. Через 22 минуты из-за поворота выезжают три автобуса подряд, бампер в бампер. Первый битком, второй полупустой, третий вообще пустой и обгоняет первые два, не останавливаясь. На работу я опоздала пришла с готовой идеей для исследования.
Стоять и злиться было неконструктивно, поэтому я начала считать.
Замер базового уровня: сферический автобус в вакууме
Начнём с идеала. Автобус ходит строго раз в 10 минут, как швейцарские часы. Вы приходите на остановку, когда попало: не смотрите расписание, просто вышли из дома.
Сколько вы ждёте в среднем? Правильно, 5 минут. Вы с равной вероятностью попадаете в любую точку десятиминутного интервала, ждёте от нуля до десяти, в среднем половину.
Заведём табличку:
Сценарий | Средний интервал | Среднее ожидание |
|---|---|---|
Строго по расписанию | 10 мин | 5,0 мин |
Пока всё сходится с интуицией. Интуиция довольна, но ненадолго.
Ты ждёшь
Теперь немного испортим автобус. Средний интервал оставим ровно 10 минут, но пусть автобусы приходят неравномерно: 2 минуты, потом 18, потом снова 2, потом 18. В среднем как раз (2 + 18) / 2 = 10. Диспетчер в отчёте пишет «интервал 10 минут» и абсолютно прав.
Сколько теперь ждёт пассажир?
Возьмём час. За час проходит три пары «короткий + длинный». Из 60 минут 54 приходятся на длинные интервалы и только 6 на короткие. Значит, случайно пришедший пассажир в 90% случаев попадает в длинный интервал. Не в половине случаев, как хотелось бы, а в девяноста процентах.
В длинном интервале он ждёт в среднем 9 минут, в коротком 1. Считаем:
(54 × 9 + 6 × 1) / 60 = (486 + 6) / 60 = 8,2 минСредний интервал тот же, а ждём мы на 64% дольше.
Сценарий | Средний интервал | Среднее ожидание |
|---|---|---|
Строго по расписанию | 10 мин | 5,0 мин |
Чередование 2 / 18 | 10 мин | 8,2 мин |
Вот и весь фокус. Длинные интервалы длинные (спасибо кэп), поэтому в них попадает больше людей. Вы приходите на остановку не в случайный интервал, а в случайный момент времени, а моменты времени свалены в основном в длинных интервалах. Короткий интервал проскакивает мимо почти пустым, а длинный собирает толпу, и вы в этой толпе.
Кстати, ровно та же механика объясняет, почему у ваших друзей в среднем больше друзей, чем у вас, и почему средний размер группы в университете по отчётности меньше, чем тот, который ощущают студенты.
Общая формула, или проклятие теоремы
Если обобщить то, что мы сделали руками, выходит так. Вероятность попасть в интервал длины T пропорциональна T. Внутри интервала ждём в среднем T/2. Перемножаем, усредняем:
E[ожидание] = E[T²] / (2 · E[T])А поскольку E[T²] — это дисперсия плюс квадрат среднего, формулу можно переписать в более человеческом виде:
E[ожидание] = (E[T] / 2) · (1 + CV²)где CV — коэффициент вариации, то есть стандартное отклонение интервала, делённое на средний интервал.
Проверим на 2/18: среднее 10, отклонение 8, CV = 0,8, CV² = 0,64.
5 · (1 + 0,64) = 8,2Сходится!
Смотрите, что тут важно. Первый множитель (половина интервала) — это то, что обещает табличка на остановке. Второй множитель — это налог на бардак. При идеальном расписании CV = 0, налог нулевой. Чем сильнее разброс, тем больше вы доплачиваете своим временем. И доплачиваете квадратично.
Пуассон, который не смотрит в расписание
Ладно, 2/18 — это пример из учебника. Что будет, если автобусы приходят вообще случайно? Каждую секунду с одинаковой маленькой вероятностью, без всякого расписания. Это пуассоновский поток, интервалы в нём распределены экспоненциально.
У экспоненциального распределения стандартное отклонение равно среднему. CV = 1, CV² = 1.
5 · (1 + 1) = 10 минСредний интервал 10 минут, и среднее ожидание тоже 10 минут.
Внимание вопрос! Какова средняя длина того интервала, в который вы попали? По той же логике E[T²] / E[T], для экспоненты это 2 · E[T] = 20 минут. Средний интервал на маршруте 10 минут, а средний интервал, внутри которого стоите вы, — 20. Это не баг. Это так устроены вероятности.
Сценарий | Средний интервал | Среднее ожидание |
|---|---|---|
Строго по расписанию | 10 мин | 5,0 мин |
Чередование 2 / 18 | 10 мин | 8,2 мин |
Пуассон (полный хаос) | 10 мин | 10,0 мин |
В ожидании Годо
У экспоненты есть ещё одно свойство, от которого на остановке хочется лечь на асфальт. Она без памяти.
Формально: P(T > s + t | T > s) = P(T > t). По-человечески: если вы уже прождали 10 минут, ожидаемое время до автобуса по-прежнему 10 минут. Прождали двадцать — всё ещё десять. Мироздание не засчитывает вам уже отстоянное.
Вы стоите, мёрзнете, внутренний голос говорит «ну сейчас-то уж точно», а математика отвечает «ровно так же, как пять минут назад».
Правда, реальные автобусы не совсем пуассоновские. Расписание у них всё-таки есть, и это немного спасает. Но, как выяснится дальше, иногда реальность умудряется быть хуже пуассона.
Автобус иногда бывает паровозом
Почему автобусы вообще ходят неравномерно, если расписание есть? Тут мы погружаемся в черную дыру, которая частично физика, а частично человеческая природа.
Есть такое явление, bus bunching, слипание автобусов. Механизм примерно такой. Автобус чуть задержался — пробка, светофор, бабушка с тележкой. Пока он задерживался, на следующих остановках накопилось больше людей, чем обычно. Значит, на каждой остановке он стоит дольше: все заходят, валидируют, кто-то спрашивает водителя про маршрут. Значит, задерживается ещё сильнее. Значит, людей впереди ещё больше.
А следующий за ним автобус видит обратную картину. Остановки почти пустые, их только что подмели. Он едет быстрее, чем по графику, и догоняет первого.
Это положительная обратная связь. Равномерный интервал — неустойчивое равновесие, как карандаш, поставленный на острие: любое отклонение само себя раздувает. Насколько я помню, модель этого процесса описывали ещё в 60-х, так что транспортники про это знают давно. Но знать не значит победить.
В пределе автобусы ходят парами. Посчитаем: интервалы 0 и 20 минут, среднее всё те же 10.
E[T²] = (0² + 20²) / 2 = 200
E[ожидание] = 200 / (2 · 10) = 10 минТо есть два автобуса подряд по ожиданию эквивалентны одному автобусу раз в 20 минут. Просто с двумя водителями.
А если тройками (0, 0, 30), как в моё февральское утро?
E[T²] = 900 / 3 = 300
E[ожидание] = 300 / 20 = 15 минСценарий | Средний интервал | Среднее ожидание |
|---|---|---|
Строго по расписанию | 10 мин | 5,0 мин |
Чередование 2 / 18 | 10 мин | 8,2 мин |
Пуассон (полный хаос) | 10 мин | 10,0 мин |
Парами (0 / 20) | 10 мин | 10,0 мин |
Тройками (0 / 0 / 30) | 10 мин | 15,0 мин |
Тройками хуже пуассона. Пуассон хотя бы реально случаен, а паровозик — это организованный хаос, который выглядит как три автобуса, а работает как один.
Мои замеры
Теория теорией, а что на реальном маршруте?
Стоять на остановке с секундомером по три часа я не готова, поэтому пошла другим путём. Город отдаёт положение автобусов через API (то самое, из которого рисует точки приложение). Я написала скрипт, который раз в 30 секунд опрашивал его и записывал момент, когда автобус моего маршрута проезжал мою остановку. Две рабочие недели, 10 дней, утро с 7:00 до 10:00 и вечер с 17:00 до 20:00. Шаг опроса 30 секунд даёт погрешность момента прибытия в пределах полминуты, для интервалов в десятки минут это терпимо.
Первый облом случился на третий день. В логах обнаружился интервал 27 минут, после которого автобус «материализовался» сразу на три остановки дальше моей. Оказалось, у некоторых машин трекер периодически отваливается, и автобус для API просто исчезает. Пришлось чистить: интервалы, где автобус пропадал с карты дольше чем на 5 минут, я выкинула. Таких набралось 6 штук. Не исключаю, что парочку пропущенных я не поймала, так что данные скорее чуть пессимистичнее реальности.
Вот что получилось:
утро: n=176, mean=10,2 мин, sd=7,1 мин, CV=0,70 → ожидание 7,6 мин
вечер: n=158, mean=11,4 мин, sd=10,3 мин, CV=0,90 → ожидание 10,4 минУтро | Вечер | |
|---|---|---|
Интервал по табличке | 10 мин | 10 мин |
Средний интервал по факту | 10,2 мин | 11,4 мин |
Стандартное отклонение | 7,1 мин | 10,3 мин |
CV | 0,70 | 0,90 |
Интервалов короче 2 минут | 9% | 17% |
Самый длинный интервал | 31 мин | 41 мин |
Ожидание по формуле | 7,6 мин | 10,4 мин |
Проверка на утре: 5,1 × (1 + 0,49) = 7,6. На вечере: 5,7 × (1 + 0,82) = 10,4. Сходится.
Средний интервал почти честный, перевозчик в среднем действительно возит раз в 10 минут (утром) и раз в 11 с хвостиком (вечером). Но вечером почти каждый шестой интервал короче двух минут, то есть каждый шестой автобус идёт в паре с соседним. Вечерний маршрут по ожиданию — практически чистый пуассон, хотя у него есть расписание, диспетчер и даже табличка.
Интереснее всего разброс по дням. Утренний CV гулял от 0,4 до 1,1, и самый плохой день совпал с самым дождливым. Дождь — это пробки, пробки — это первая задержка, а дальше карандаш падает сам.
Потом мне стало мало формулы, и я решила проверить её на себе. Двадцать утр подряд я выходила из дома в случайный момент: время выхода генерировал random.randint в пределах получаса, чтобы я не могла подгадать под автобус. Приложение при этом не открывала (это было самое сложное). Записывала, сколько простояла.
n=20, среднее ожидание 8,1 мин, медиана 6,5 мин, максимум 24 минФормула обещала 7,6, вышло 8,1. Двадцать замеров — это смешно мало, разброс ожидания у меня был минут шесть, так что стандартная ошибка порядка 1,3 минуты, и полминуты разницы в неё спокойно влезают. Максимум в 24 минуты — это, разумеется, был дождливый вторник.
Второй раунд. Или нет?
Хотя... Из формулы следует вещь, которую я сначала проскочила, а она важнее всего остального.
Посмотрите ещё раз: (E[T] / 2) · (1 + CV²). Частота автобусов входит туда линейно, а разброс квадратично. Возьмём два маршрута:
Сценарий | Средний интервал | Среднее ожидание |
|---|---|---|
Раз в 10 мин, хаос (CV = 1) | 10 мин | 10,0 мин |
Раз в 15 мин, строго (CV = 0) | 15 мин | 7,5 мин |
Автобус, который ходит в полтора раза реже, но ходит ровно, возит пассажиров быстрее. На треть меньше машин, водителей и топлива, а ожидание короче.
А теперь вернитесь к моей табличке. Утренний маршрут «раз в 10 минут» даёт 7,6 минуты ожидания. Идеальный автобус раз в 15 минут даёт 7,5. То есть мой маршрут по факту возит как автобус, который ходит в полтора раза реже. Треть машин на нём работает исключительно на CV.
Именно поэтому существует холдинг: автобус, который приехал на контрольную точку раньше графика, специально стоит и ждёт. Со стороны выглядит как издевательство («Ну поехали уже!»), но это тот самый способ обрезать CV и не дать карандашу упасть. Пассажиры в салоне теряют минуту, все пассажиры на остановках впереди выигрывают несколько.
И второй нюанс, который переворачивает всю статью. Всё посчитанное выше верно только для пассажира, который приходит наугад. Ровно поэтому я двадцать дней не открывала приложение. Если же смотреть в него и выходить из дома под конкретный автобус, случайная точка на оси времени перестаёт быть случайной, и парадокс на вас почти не действует. Значит, живой трекинг на телефоне — это способ выйти из-под формулы. Почти — потому что трекер, как мы помним, иногда просто отваливается, и автобус исчезает с карты. Но это уже тема для следующей статьи.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.