Почему автобус вечно опаздывает, или Доказанная теорема вашего невезения
Сразу оговорюсь: автобус приходит точно по графику. Просто не к вам.
Это похоже на обиду на вселенную, но на деле перед нами простая математика. Ей около ста лет, и у неё есть имя: 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 минут, в коротком одну. Считаем:
(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 и не дают карандашу упасть. Пассажиры в салоне теряют минуту, зато все ожидающие на остановках впереди выигрывают несколько.
И ещё один нюанс, который переворачивает всю статью. Всё рассчитанное выше справедливо только для пассажира, приходящего наугад. Именно поэтому я двадцать дней не открывала приложение. Если же следить за ним и выходить из дома под конкретный автобус, случайная точка на оси времени перестаёт быть случайной, и парадокс на вас почти не действует. Выходит, что живой трекинг в телефоне — способ уйти из-под действия формулы. Почти — потому что трекер, как мы помним, иногда просто отключается, и автобус пропадает с карты. Но это уже тема для следующей статьи.
Заводам не требуются 3,5 миллиона работников?
Звёздные карусели в Hen 2–10
Спросите Итана: если разумная жизнь за пределами Земли существует, удастся ли нам выйти на связь?
Ответ Итана: что человечество должно сказать Вселенной?
Кэти Мак: как закончится существование Вселенной (интервью)
Новая реальность приходит раньше, чем мы успеваем испугаться
Дж. У. — фантазёр, аутсайдер и трендсеттер
Космический мусор на орбите: как человечество рискует лишиться выхода в космос