Парадокс времени ожидания, или почему мой автобус всегда опаздывает?

http://jakevdp.github.io/blog/2018/09/13/waiting-time-paradox/
  • Перевод

Источник: Wikipedia License CC-BY-SA 3.0

Если вы часто ездите на общественном транспорте, то наверняка встречались с такой ситуацией:

Вы приходите на остановку. Написано, что автобус ходит каждые 10 минут. Засекаете время… Наконец, через 11 минут приходит автобус и мысль: почему мне всегда не везёт?

По идее, если автобусы приходят каждые 10 минут, а вы придёте в случайное время, то среднее ожидание должно составлять около 5 минут. Но в действительности автобусы не прибывают точно по расписанию, поэтому вы можете ждать дольше. Оказывается, при некоторых разумных предположениях можно прийти к поразительному выводу:

При ожидании автобуса, который приходит в среднем каждые 10 минут, ваше среднее время ожидания будет 10 минут.

Это то, что иногда называют парадоксом времени ожидания.

Идея встречалась мне раньше, и я всегда задавался вопросом, правда ли это на самом деле… насколько такие «разумные предположения» соответствуют действительности? В этой статье мы исследуем парадокс времени ожидания с точки зрения как моделирования, так и вероятностных аргументов, а затем взглянем на некоторые реальные данные автобусов в Сиэтле, чтобы (надеюсь) решить парадокс раз и навсегда.

Парадокс инспекции


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

Парадокс времени ожидания является частным случаем более общего явления — парадокса инспекции, который подробно обсуждается в толковой статье Аллена Дауни «Парадокс инспекции повсюду вокруг нас».

Короче говоря, парадокс инспекции возникает всякий раз, когда вероятность наблюдения количества связана с наблюдаемым количеством. Аллен приводит пример анкетирования студентов университета о среднем размере их классов. Хотя школа правдиво говорит о среднем количестве 30 студентов в группе, но средний размер группы с точки зрения студентов гораздо больше. Причина в том, что в больших классах (естественно) больше студентов, что и выявляется при их опросе.

В случае автобусного графика с заявленным 10-минутным интервалом иногда промежуток между прибытиями длиннее 10 минут, а иногда и короче. И если придти на остановку в случайное время, то у вас больше вероятность столкнуться с более длинным интервалом, чем с более коротким. И поэтому логично, что средний промежуток времени, между интервалами ожидания дольше, чем средний промежуток времени между автобусами, потому что более длинные интервалы чаще встречаются в выборке.

Но парадокс времени ожидания делает более сильное заявление: если средний интервал между автобусами составляет $N$ минут, то среднее время ожидания для пассажиров составляет $2N$ минут. Может ли такое быть правдой?

Имитация времени ожидания


Чтобы убедить себя в разумности этого, сначала смоделируем поток автобусов, которые прибывают в среднем за 10 минут. Для точности возьмём большую выборку: миллион автобусов (или примерно 19 лет круглосуточного 10-минутного трафика):

import numpy as np

N = 1000000  # number of buses
tau = 10  # average minutes between arrivals

rand = np.random.RandomState(42)  # universal random seed
bus_arrival_times = N * tau * np.sort(rand.rand(N))

Проверим, что средний интервал близок к $\tau = 10$:

intervals = np.diff(bus_arrival_times)
intervals.mean()

9.9999879601518398

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

def simulate_wait_times(arrival_times,
                        rseed=8675309,  # Jenny's random seed
                        n_passengers=1000000):
    rand = np.random.RandomState(rseed)
    
    arrival_times = np.asarray(arrival_times)
    passenger_times = arrival_times.max() * rand.rand(n_passengers)

    # find the index of the next bus for each simulated passenger
    i = np.searchsorted(arrival_times, passenger_times, side='right')

    return arrival_times[i] - passenger_times

Затем смоделируем время ожидания и вычислим среднее:

wait_times = simulate_wait_times(bus_arrival_times)
wait_times.mean()

10.001584206227317

Среднее время ожидания близко к 10 минутам, как и предсказывал парадокс.

Копаем глубже: вероятности и пуассоновские процессы


Как смоделировать такую ситуацию?

По сути, это пример парадокса инспекции, где вероятность наблюдения значения связана с самим значением. Обозначим через $p(T)$ распределение интервалов $T$ между автобусами по мере их прибытия на остановку. В такой записи ожидаемое значение времени прибытия будет:

$E[T] = \int_0^\infty T~p(T)~dT$


В предыдущей симуляции мы выбрали $E[T] = \tau = 10$ минут.

Когда пассажир прибывает на автобусную остановку в произвольное время, вероятность времени ожидания будет зависеть не только от $p(T)$, но и от самого $T$: чем больше интервал, тем больше в нём пассажиров.

Таким образом, можно написать распределение времени прибытия с точки зрения пассажиров:

$p_{exp}(T) \propto T~p(T)$


Константа пропорциональности выводится из нормализации распределения:

$p_{exp}(T) = \frac{T~p(T)}{\int_0^\infty T~p(T)~dT}$


Это упрощается до

$p_{exp}(T) = \frac{T~p(T)}{E[T]} $


Тогда время ожидания $E[W]$ будет составлять половину ожидаемого интервала для пассажиров, поэтому мы можем записать

$E[W] = \frac{1}{2}E_{exp}[T] = \frac{1}{2}\int_0^\infty T~p_{exp}(T)~dT$


что можно переписать более понятным образом:

$E[W] = \frac{E[T^2]}{2E[T]}$


и теперь остаётся только выбрать форму для $p(T)$ и вычислить интегралы.

Выбор p(T)


Получив формальную модель, каково же разумное распределение для $p(T)$? Выведем картину распределения $p(T)$ в пределах наших моделируемых прибытий, построив гистограмму интервалов между прибытиями:

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn')

plt.hist(intervals, bins=np.arange(80), density=True)
plt.axvline(intervals.mean(), color='black', linestyle='dotted')
plt.xlabel('Interval between arrivals (minutes)')
plt.ylabel('Probability density');



Здесь вертикальная пунктирная линия показывает средний интервал около 10 минут. Это очень похоже на экспоненциальное распределение, и не случайно: наше моделирование времени прибытия автобуса в виде однородных случайных чисел очень близко к процессу Пуассона, а для такого процесса распределение интервалов экспоненциально.

(Примечание: в нашем случае это только приблизительная экспонента; на самом деле интервалы $T$ между $N$ равномерно отобранными точками в пределах промежутка времени $N\tau$ соответствуют бета-распределению $T/(N\tau) \sim \mathrm{Beta}[1, N]$, которое в большом пределе $N$ приближается к $T \sim \mathrm{Exp}[1/\tau]$. Для более подробной информации можете почитать, например, пост на StackExchange или эту ветку в твиттере).

Экспоненциальное распределение интервалов подразумевает, что время прибытия следует за процессом Пуассона. Чтобы проверить это рассуждение, проверим наличие другого свойства пуассоновского процесса: что число прибытий в течение фиксированного промежутка времени является пуассоновским распределенем. Для этого разобъём симулированные прибытия на часовые блоки:

from scipy.stats import poisson

# count the number of arrivals in 1-hour bins
binsize = 60
binned_arrivals = np.bincount((bus_arrival_times // binsize).astype(int))
x = np.arange(20)

# plot the results
plt.hist(binned_arrivals, bins=x - 0.5, density=True, alpha=0.5, label='simulation')
plt.plot(x, poisson(binsize / tau).pmf(x), 'ok', label='Poisson prediction')
plt.xlabel('Number of arrivals per hour')
plt.ylabel('frequency')
plt.legend();



Близкое соответствие эмпирических и теоретических значений убеждает в правильности нашей интерпретации: для больших $N$ смоделированное время прибытия хорошо описано пуассоновским процессом, который подразумевает экспоненциально распределённые интервалы.

Это означает, что можно записать распределение вероятностей:

$p(T) = \frac{1}{\tau}e^{-T/\tau}$


Если подставить результат в предыдущую формулу, то мы найдём среднее время ожидания для пассажиров на остановке:

$E[W] = \frac{\int_0^\infty T^2~e^{-T/\tau}}{2\int_0^\infty T~e^{-T/\tau}} = \frac{2\tau^3}{2(\tau^2)} = \tau$


Для рейсов с прибытиями по процессу Пуассона ожидаемое время ожидания идентично среднему интервалу между прибытиями.

Об этой проблеме можно рассуждать так: процесс Пуассона — это процесс без памяти, то есть история событий не имеет никакого отношения к ожидаемому времени следующего события. Поэтому по приходу на автобусную остановку среднее время ожидания автобуса всегда одинаково: в нашем случае это 10 минут, независимо от того, сколько времени прошло с момента предыдущего автобуса! При этом не имеет значения, как долго вы уже ждали: ожидаемое время до следующего автобуса всегда ровно 10 минут: в пуассоновском процессе вы не получаете «кредит» за время, проведённое в ожидании.

Время ожидания в реальности


Вышеизложенное хорошо, если реальные прибытия автобусов на самом деле описываются процессом Пуассона, но так ли это?


Источник: схема общественного транспорта Сиэтла

Попробуем определить, как парадокс времени ожидания согласуется с реальностью. Для этого изучим некоторые данные, доступные для загрузки здесь: arrival_times.csv (CSV-файл объёмом 3 МБ). Набор данных содержит запланированное и фактическое время прибытия для автобусов RapidRide маршрутов C, D и E на автобусной остановке 3rd&Pike в центре Сиэтла. Данные записаны во втором квартале 2016 года (огромное спасибо Марку Халленбеку из транспортного центра штата Вашингтон за этот файл!).

import pandas as pd
df = pd.read_csv('arrival_times.csv')
df = df.dropna(axis=0, how='any')
df.head()

OPD_DATE VEHICLE_ID RTE DIR TRIP_ID STOP_ID STOP_NAME SCH_STOP_TM ACT_STOP_TM
0 2016-03-26 6201 673 S 30908177 431 3RD AVE & PIKE ST (431) 01:11:57 01:13:19
1 2016-03-26 6201 673 S 30908033 431 3RD AVE & PIKE ST (431) 23:19:57 23:16:13
2 2016-03-26 6201 673 S 30908028 431 3RD AVE & PIKE ST (431) 21:19:57 21:18:46
3 2016-03-26 6201 673 S 30908019 431 3RD AVE & PIKE ST (431) 19:04:57 19:01:49
4 2016-03-26 6201 673 S 30908252 431 3RD AVE & PIKE ST (431) 16:42:57 16:42:39

Я выбрал данные RapidRide в том числе потому что на протяжении большей части дня автобусы курсируют с регулярными интервалами 10−15 минут, не говоря уже о том, что я частый пассажир маршрута С.

Очистка данных


Для начала сделаем небольшую очистку данных, чтобы преобразовать их в удобный вид:

# combine date and time into a single timestamp
df['scheduled'] = pd.to_datetime(df['OPD_DATE'] + ' ' + df['SCH_STOP_TM'])
df['actual'] = pd.to_datetime(df['OPD_DATE'] + ' ' + df['ACT_STOP_TM'])

# if scheduled & actual span midnight, then the actual day needs to be adjusted
minute = np.timedelta64(1, 'm')
hour = 60 * minute
diff_hrs = (df['actual'] - df['scheduled']) / hour
df.loc[diff_hrs > 20, 'actual'] -= 24 * hour
df.loc[diff_hrs < -20, 'actual'] += 24 * hour
df['minutes_late'] = (df['actual'] - df['scheduled']) / minute

# map internal route codes to external route letters
df['route'] = df['RTE'].replace({673: 'C', 674: 'D', 675: 'E'}).astype('category')
df['direction'] = df['DIR'].replace({'N': 'northbound', 'S': 'southbound'}).astype('category')

# extract useful columns
df = df[['route', 'direction', 'scheduled', 'actual', 'minutes_late']].copy()

df.head()

Маршрут Направление График Факт. прибытие Опоздание (мин)
0 C юг 2016-03-26 01:11:57 2016-03-26 01:13:19 1.366667
1 C юг 2016-03-26 23:19:57 2016-03-26 23:16:13 -3.733333
2 C юг 2016-03-26 21:19:57 2016-03-26 21:18:46 -1.183333
3 C юг 2016-03-26 19:04:57 2016-03-26 19:01:49 -3.133333
4 C юг 2016-03-26 16:42:57 2016-03-26 16:42:39 -0.300000

На сколько опаздывают автобусы?


В этой таблице шесть наборов данных: направления на север и юг для каждого маршрута C, D и E. Чтобы получить представление об их характеристиках, давайте построим гистограмму фактического минус запланированного времени прибытия для каждого из этих шести:

import seaborn as sns
g = sns.FacetGrid(df, row="direction", col="route")
g.map(plt.hist, "minutes_late", bins=np.arange(-10, 20))
g.set_titles('{col_name} {row_name}')
g.set_axis_labels('minutes late', 'number of buses');



Логично предположить, что автобусы ближе к графику в начале маршрута и больше отклоняются от него к концу. Данные подтверждают это: наша остановка на южном маршруте С, а также на северных D и Е близка к началу маршрута, а в обратном направлении — недалеко от конечного пункта.

Запланированные и наблюдаемые интервалы


Посмотрим на наблюдаемые и запланированные интервалы между автобусами для этих шести маршрутов. Начнём с функции groupby в Pandas для вычисления этих интервалов:

def compute_headway(scheduled):
    minute = np.timedelta64(1, 'm')
    return scheduled.sort_values().diff() / minute

grouped = df.groupby(['route', 'direction'])
df['actual_interval'] = grouped['actual'].transform(compute_headway)
df['scheduled_interval'] = grouped['scheduled'].transform(compute_headway)

g = sns.FacetGrid(df.dropna(), row="direction", col="route")
g.map(plt.hist, "actual_interval", bins=np.arange(50) + 0.5)
g.set_titles('{col_name} {row_name}')
g.set_axis_labels('actual interval (minutes)', 'number of buses');



Уже видно, что результаты не очень похожи на экспоненциальное распределение нашей модели, но это ещё ничего не говорит: на распределения могут влиять непостоянные интервалы в графике.

Повторим построение диаграмм, взяв запланированные, а не наблюдаемые интервалы прибытия:

g = sns.FacetGrid(df.dropna(), row="direction", col="route")
g.map(plt.hist, "scheduled_interval", bins=np.arange(20) - 0.5)
g.set_titles('{col_name} {row_name}')
g.set_axis_labels('scheduled interval (minutes)', 'frequency');



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

Построение однородных расписаний


Хотя официальный график не даёт однородных интервалов, есть несколько конкретных промежутков времени с большим количеством автобусов: например, почти 2000 автобусов маршрута E в северную сторону с запланированным интервалом в 10 минут. Чтобы узнать, применим ли парадокс времени ожидания, давайте сгруппируем данные по маршрутам, направлениям и запланированному интервалу, а затем повторно сложим их, словно они произошли последовательно. Это должно сохранить все соответствующие характеристики исходных данных, облегчив при этом прямое сравнение с предсказаниями парадокса времени ожидания.

def stack_sequence(data):
    # first, sort by scheduled time
    data = data.sort_values('scheduled')
    
    # re-stack data & recompute relevant quantities
    data['scheduled'] = data['scheduled_interval'].cumsum()
    data['actual'] = data['scheduled'] + data['minutes_late']
    data['actual_interval'] = data['actual'].sort_values().diff()
    return data

subset = df[df.scheduled_interval.isin([10, 12, 15])]
grouped = subset.groupby(['route', 'direction', 'scheduled_interval'])
sequenced = grouped.apply(stack_sequence).reset_index(drop=True)
sequenced.head()

Маршрут Направление Расписание Факт. прибытие Опоздание (мин) Факт. интервал Интервал по графику
0 C север 10.0 12.400000 2.400000 NaN 10.0
1 C север 20.0 27.150000 7.150000 0.183333 10.0
2 C север 30.0 26.966667 -3.033333 14.566667 10.0
3 C север 40.0 35.516667 -4.483333 8.366667 10.0
4 C север 50.0 53.583333 3.583333 18.066667 10.0

На очищенных данных можно составить график распределения фактического появления автобусов по каждому маршруту и направлению с частотой прибытия:

for route in ['C', 'D', 'E']:
    g = sns.FacetGrid(sequenced.query(f"route == '{route}'"),
                      row="direction", col="scheduled_interval")
    g.map(plt.hist, "actual_interval", bins=np.arange(40) + 0.5)
    g.set_titles('{row_name} ({col_name:.0f} min)')
    g.set_axis_labels('actual interval (min)', 'count')
    g.fig.set_size_inches(8, 4)
    g.fig.suptitle(f'{route} line', y=1.05, fontsize=14)







Мы видим, что для каждого маршрута распределение наблюдаемых интервалов почти гауссово. Оно достигает максимума около запланированного интервала и имеет стандартное отклонение, которое меньше в начале маршрута (на юг для C, на север для D/E) и больше в конце. Даже на глаз видно, что фактические интервалы прибытия определённо не соответствуют экспоненциальному распределению, что является основным предположением, на котором основан парадокс времени ожидания.

Мы можем взять функцию моделирования времени ожидания, которую использовали выше, чтобы найти среднее время ожидания для каждого автобусного маршрута, направления и расписания:

grouped = sequenced.groupby(['route', 'direction', 'scheduled_interval'])
sims = grouped['actual'].apply(simulate_wait_times)
sims.apply(lambda times: "{0:.1f} +/- {1:.1f}".format(times.mean(), times.std()))

маршрут  направление  интервал по расписанию
C        север        10.0                   7.8 +/- 12.5
                      12.0                   7.4 +/- 5.7
                      15.0                   8.8 +/- 6.4
         юг           10.0                   6.2 +/- 6.3
                      12.0                   6.8 +/- 5.2
                      15.0                   8.4 +/- 7.3
D        север        10.0                   6.1 +/- 7.1
                      12.0                   6.5 +/- 4.6
                      15.0                   7.9 +/- 5.3
         юг           10.0                   6.7 +/- 5.3
                      12.0                   7.5 +/- 5.9
                      15.0                   8.8 +/- 6.5
E        север        10.0                   5.5 +/- 3.7
                      12.0                   6.5 +/- 4.3
                      15.0                   7.9 +/- 4.9
         юг           10.0                   6.8 +/- 5.6
                      12.0                   7.3 +/- 5.2
                      15.0                   8.7 +/- 6.0
Name: actual, dtype: object

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

Заключение


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

Оглядываясь назад, это и не удивительно: процесс Пуассона — это процесс без памяти, который предполагает, что вероятность прибытия полностью независима от времени с момента предыдущего прибытия. На самом деле в хорошо управляемой системе общественного транспорта есть специально структурированные расписания, чтобы избежать такого поведения: автобусы не начинают свои маршруты в случайное время в течение дня, а стартуют по расписанию, выбранному для наиболее эффективной перевозки пассажиров.

Более важный урок в том, что следует быть осторожным относительно предположений, которые вы делаете к любой задаче анализа данных. Иногда процесс Пуассона — хорошие описание для данных о времени прибытия. Но только то, что один тип данных звучит как другой тип данных, не означает, что предположения, допустимые для одного, обязательно действительны для другого. Часто предположения, которые кажутся правильными, могут привести к выводам, которые не соответствуют действительности.
Поделиться публикацией
Комментарии 77
    –4
    среднее время ожидания автобуса всегда одинаково: в нашем случае это 10 минут, независимо от того, сколько времени прошло с момента предыдущего автобуса!

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

    (например, если вы подкинули монетку 9 раз и все раза получили «решка», то подкинув монетку в 10-й раз, у вас все равно будет шанс ~50/50%. Хоть люди и любят присваивать подобным событиям «особенность», событие «1 1 1 1 1 1 1 1 1» не является более особенным, чем событие «1 0 1 0 0 0 1 0 0 1»)

    Если автобус X всегда прибывает с интервалом в 10 минут, то у любого отдельно взятого человека в отдельно взятый день при рандомизированном времени прибытия, шанс попадания на каждый подобный автобус в любую минуту этого интервала (1-10 минут) будет равен 10% на каждую минуту.

    А расчеты в статье показывают, что даже если человек знает, что автобус прибывает в точно заданные интервалы (12:00; 12:10; 12:20...), и человек прийдет на остановку за 1, 2, 3… минуты до отбытия, он все равно по какому-то магическому закону всегда будет ждать еще 10 минут.
      +12
      Если автобус X всегда прибывает с интервалом в 10 минут

      Статью стоило прочитать перед написанием возражений. Явно же написано — автобус приходит в среднем каждые 10 минут, а не всегда. И по коду это тоже видно.

        +3
        На практике автобус не просто ходит «в среднем каждые 10 минут», а имеет конкретную привязку ко времени, от которой может отклоняться в ту или иную сторону с некоторым распределением. И это заметно более жесткое ограничение.

        И, в целом, модель, описанная автором статьи — весьма далека от реального мира.

        Например, когда он «для точности» генерирует выборку на 1 млн. событий — в этой выборке у него на любом интервале времени может собраться произвольное количество приехавших автобусов. Тогда как в отношении более-менее правдоподобной модели с фиксированным расписанием и некоторым отклонением от него можно говорить, что-нибудь в духе «на любом 10-ти минутном интервале придёт от 0 до 2 автобусов».
          0

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


          Согласен, модель из статьи не совпадает с тем, что сейчас можно наблюдать в Москве, например. Но как модель — очень интересна, на мой взгляд. И внутри заданных условий — точна, ошибок в коде я не нашел.

            0
            в этой выборке у него на любом интервале времени может собраться произвольное количество приехавших автобусов

            Где-то я такое видел. Ах, да, это же в Москве иногда автобусы/троллейбусы ездят стайкой, встречал вплоть до 5 особей, не надо мне тут про две)


            На самом деле начало статьи очень желтушное — создается впечатление, что автор считает свою модель достоверной для реального мира, но если дочитать, становится понятно, что статья скорее посвящена тому, как себя развлечь и как не стоит относиться к моделированию

              +1
              Пожалуйста, дочитывайте статьи до конца, перед тем как писать критику. Хотя бы заключение.
            +1
            всегда будет ждать еще 10 минут

            А где в статье сказано про подобное? Вроде сказано про «в среднем», не?
              +1
              Я цитату из статьи в начале своего сообщения указал
                0

                Среднее время ожидания автобуса всегда одинаково?

                  +1
                  Тогда фраза бессмысленна.
              0
              например, если вы подкинули монетку 9 раз и все раза получили «решка», то подкинув монетку в 10-й раз, у вас все равно будет шанс ~50/50%.

              Если вам априори известна вероятность различных сторон. Если же честность монетки неизвестна, то шанс в 50/50 уже не будет.


              Хоть люди и любят присваивать подобным событиям «особенность», событие «1 1 1 1 1 1 1 1 1» не является более особенным, чем событие «1 0 1 0 0 0 1 0 0 1»)

              Это уже к колмогоровской сложности.

              +3
              Тоже показались странными предположения и расчёты в статье.
              Кроме того, неужели в Сиэтле до сих пор так всё печально с транспортом?
              Вот, например, в двух городах Словакии (в которых я жил), распределение транспорта идёт не интервалами, а по конкретному графику.
              Пример из таблички на остановке: 12:10, 12:20, 12:30 и так далее.
              И если один из рейсов опоздал, то приход следующего никак не зависит от предыдущего, и будет вовремя. И заметно, что люди знают конкретное время, когда должен подойти автобус, и собираются на остановке как раз к этому времени. (хотя, может это так кажется)
              И, кстати, из нескольких сотен поездок, опозданий было на моей памяти 3 штуки.
                0
                Загнивающий запад же=)
                  0
                  В Москве бы так…
                    +5
                    В Москве ты можешь отследить нужный тебе транспорт онлайн, без смс и регистрации. Подсказать как?
                      0
                      Если вы про навигацию, то это далеко от идеала. Приложения, которыми я пользовался для этих целей показывают позицию автобуса с существенным запаздыванием, поэтому приходится приходить на остановку заранее и торчать там почем зря те же 5-10 минут. Кроме того, иногда приложение почему-то перестает получать данные, а это не всегда понятно, потому значок связи с сетью горит, а точки автобусов стоят в последней полученной позиции.
                        +3

                        мне кажется мы живём в разных мирах… каждый день вечером на павелецкой набережной на яндекс картах выжидаю автобус в офисном центре в тепле и уюте в 3 минутах ходьбы от остановки. Все автобусы видны со 100% точностью в реальном времени. Никто никуда не пропадает, едут предсказуемо. Ну в крайнем случае всегда можно посмотреть уровень пробки на маршруте и "предсказать результат", наблюдая за его движением пару минут.
                        PS ну может во мне говорит то, что я по сути водитель, и за много лет привык "видеть" скорость движения по карте, поэтому с предсказанием времени прибытия автобусов диссонанса никогда не ощущаю, и на расчетные минуты никогда не смотрю, а смотрю именно на местоположение и топологию местности.

                          +1
                          Реальность не всегда совпадает с вычисленными ожиданиями.
                          В статье достаточно плоские расчеты.

                          Вспомнил, как я решил сэкономить время и силы, проехавшись на автобусе от Павелецкой. Местность мне особо не знакома, маршрут нашел на карте, все отлично показало. Но в итоге я, лишь минут 10 отъезжал от остановки.
                          Карта

                          Автобусу необходимо на коротком участке 5-полосной полосы (с долгим светофором) перестроиться из крайнего правого в крайней левый ряд.
                          +2

                          Попробуйте Яндекс.транспорт. очень точно показывают. Подозреваю, что ваши другие приложения берут данные именно от него.
                          А навигаторы строят маршруты по расписаниям чаще всего.

                            +4
                            Я перестал полагаться на Яндекс.транспорт, когда на карте приложения к моей остановке подъехал автобус. А потом уехал. Только вот в реальности никакого автобуса не было, на дороге были только машины. Я так и не понял что это было, то ли Яндекс брал данные из расписания, то ли ещё что. Но если приложение не может гарантировать правильность отображения информации — то пользоваться им смысла сильно меньше.
                              0

                              Я наблюдал такое же, и в интернетах видел подобные отзывы. Яндекс где-то берет данные от службы автобусов/трамваев/..., а где-то, где данных никто не предоставляет, рисует трансопрт по расписанию.

                                0
                                У нас приложение и «новые» табло на остановках выделяют данные особым образом, если они получены не от реального положения транспорта, а взяты из расписания.
                                0
                                Скажу с другой стороны, не особо пользуюсь наземным общественным, но буквально месяц назад три из трех для Минска за один день (вот прямо в пределах видимости совпадение), и как тут не уверуешь? И вы правы, если расчетные данные, то в этом нет особого смысла.
                                Ваш коммент дал пинка и возможно яндексу стоит уточнять, получает ли он данные для конкретного города или строит на основании расписаний, возможно мои 3:3 — это просто хорошая работа водителей автобусов?
                                  –1
                                  Яндекс рисует транспорт исходя из маршрутов, а не фактического следования транспорта. В итоге если где-то закрыто и все едут в объезд — на картах автобусы будут бодренько ездить мимо вас, а по факту — где-то по другой улице.
                                    0

                                    Тогда не понятно, откуда берутся автобусы-фантомы. Например, по карте он едет, но фактически его нет, но следующий за ним по карте тот же номер приезжает как нарисовано. Пояснить это "объездом" не получится.
                                    А ещё автобусы-фантомы могут пропасть с карты, а потом появиться в том же месте и бодро поехать дальше.
                                    А ещё есть автобусы-призраки. Это которые по факты приезжают на остановку, но на карте его нет. Садишь в него, едешь и через какое-то время бац и он появляется на карте и движется ровно там, где едешь ты

                                      +1
                                      tcapb1 Призраки появляются не просто так. Весь общественный транспорт (напр.Москвы) сливает данные в ДИТ Москвы, а они уже дали API для Яндекса. Координаты автобусы выдают каждые N секунд(в зависимости от наличия связи). Яндекс забирает эти данные тоже через какое-то время, какое позволяет API. Не забывайте, что в первую очередь эти данные нужны самому ДИТ. И уже во вторую очередь они их отдают, а значит отдают с задержкой (сначала сохраняют у себя, затем выдают данные).
                                      На это накладывается то, что чистые координаты всегда передаются с некоей погрешностью.
                                      Вот и получаем: данные поступают относительно редко (допустим каждые 20 секунд), данные могут вообще не поступать (4G отвалился, деньги на симке кончились, нет связи, тоннель, помехи итд...) и получается, что Яндексу нужно дальше самому додумывать, достраивать данные.
                                      Например — заехал автобус в тоннель. Тоннель может быть длинным. А еще там может быть пробка. Надо примерно пытаться предсказывать где сейчас едет автобус. Предсказания и позволяют двигать автобус до тех пор, пока не придут данные.
                                      Таким образом очевидно, что призраки — это когда автобус выехал на линию, включил свой передатчик, ехал какое-то время, и от него перестали поступать данные. Автобус не посылал сигнал «съехал с линии», либо API не послала его. Яндекс всё-еще думает что автобус где-то едет, и делает предположение где он сейчас может быть, делая прогноз.
                                  +2
                                  Его я ставил первым, и он показывал… не знаю что. Наверное, погоду на Марсе.
                                  Возможно, это были детские болячки, попробую еще раз.
                                0
                                Ага. Пункт раз: Купить телефон с большим экраном.
                                  +2

                                  Достаточно удобного соотношения сторон и более менее современной ОС.
                                  Да, никто не запретит вам использовать вашу любимую старую Нокию н95, но серьезно, вы ведь не будете винить всех вокруг, что гужевые повозки в 2018 обязаны двигаться как можно правее и желательно не по асфальту, а в центре города уже и овса не купишь

                                    –1
                                    Конечно не буду. Но вот то, что автобусы ходят не по расписанию, а по каким-то абстрактным интервалам — это недостаток, который приложением не заткнёшь.
                                  +1

                                  Работает плохо. Мало того, что часто вижу как приезжает автобус, которого не видно в системе, так и те, что видно не позволяют планировать.
                                  Автобус приезжает, высаживать пассажиров и уезжает.
                                  Или пишет, что будет через 5 минут, прихожу с сыном на остановку вовремя, а автобус ещё стоит на светофоре через Ленинский в пятницу 10 минут и мы стоим на ветру мёрзнем.

                                    0
                                    Беда всех этих штук — нелинейности в графике. Легко угадывать прогноз когда автобус едет свои 0,5 км/мин и стоит на светофорах не более 30 секунд. А у меня в 3 остановках ж/д переезд. И если автобус проскочил, то я только его спину увижу. А если нет — могу минут 10 куковать лишних…
                                      +2
                                      Ещё частенько бывает весело наблюдать в приложении «автобусы-призраки», которые «в параллельной реальности» подъезжают к остановке и уезжают дальше, а ты остаёшься на ней стоять, размышляя, будет ли следующий таким же виртуальным или всё же материализуется.
                                        0
                                        Особенно классно, когда он последний.
                                          +2

                                          Ещё веселее увидеть в приложении два подъезжающих автобуса, оценить давку при посадке в первый и решить подождать второго. Второй оказывается "невидимкой" и ты кукуешь на остановке дальше.

                                        0
                                        А ещё для всех автобусов Мосгоргранса имеется расписание для всех остановок. Особенно выручает, когда остановка близка к началу автобусного маршрута (отслеживалка в этом случае бесполезна).
                                          +2
                                          Особенно выручает, когда по графику автобус должен быть, гугл, яндекс и МГТ радостно рапортуют об «отправлении в 20:25», а автобус приехал на конечную, встал, выключился, и водитель ушел по своим делам. Жди еще полчаса.
                                      –2
                                      В цитадели демократии общественный транспорт не очень то развит. Все больше на такси или своём авто.
                                        –1
                                        Очень развит. Современный. Удобный. Отлично приспособлен для людей с ограниченными возможностями. Пользовался им (да и сейчас пользуюсь) в самых разных городах США и Канады.
                                          0
                                          Почему же тогда на нём так мало людей ездит?

                                          image
                                        +3
                                        В Сиэтле автобусы приходят (иногда) по расписанию (не через интервалы). Расписание есть на остановке. Есть приложение для телефона/сайт, которое показывает движение и прибытие автобусов в реальном времени. Вот пример для остановки 3rd and Pike, упомянутой в статье: pugetsound.onebusaway.org/where/standard/stop.action?id=1_578

                                        На многих остановках есть табло, которые показывают, когда придет автобус. Насколько я понимаю, эти табло используют то же API, что и телефоннное приложение.

                                        Старое фото табло на остановке


                                        +2
                                        если средний интервал между автобусами составляет N минут, то среднее время ожидания для пассажиров составляет 2N минут
                                        Тут же двойка лишняя. Иначе бы получалось, что при среднем интервале движения в 10 минут среднее время ожидания — 20 минут. Явно не сходится.
                                          +1
                                          Средний интервал движения — это сумма всех интервалов движения, деленная на их количество.
                                          Среднее время ожидания — это всех пассажиров спросили, сколько они ждали и разделили на количество пассажиров.
                                          Логично, что в наиболее длинные интервалы на остановки успевает подходить больше народа.
                                          Хотя N*2 для меня тоже контринтуитивно.
                                            0
                                            Ну… наверняка можно подобрать подходщие параметры, но в общем случае не верно.

                                            Допустим, у нас интервалы равномерно распределены в отрезке от 1 до 10 минут (5.5 в среднем). Допустим, поток пассажиров на остановку постоянен и равен 1 в минуту. Тогда число пассажиров на каждую посадку равно интервалу между текущей и предыдущей. То есть, 1 пассажир ждал 1 минуту, 2 — 2 минуты и тд. Тогда если ихспросить, то среднее время будет 385/55==7.
                                              0
                                              Если среднее 10 минут, то они должны быть распределены в отрезке от 1 до 20 минут. В таком случае получается среднее ~13+ минут.
                                                0
                                                По-моему, с ростом интервала соотношение средних асимптотически стремится к 1.3(3).
                                                0
                                                Пусть у нас 12 автобусов в сутки. Средний интервал между ними N=24часа/12автобусов = 2 часа. Расписатие у нас такое: с 8 до 20 каждый час. Если пассажиры подходят равномерно и днём и ночью для половины из них среднее время ожидания 0.5 часов, а для второй — барабанная дробь — 6 часов. Всреднем > 2N получается время ожидания. Всё зависит от параметров.
                                                +2
                                                Еще раз, статья противоречит сама себе.

                                                В одном месте написано:
                                                При ожидании автобуса, который приходит в среднем каждые 10 минут, ваше среднее время ожидания будет 10 минут.

                                                А в другом месте:
                                                если средний интервал между автобусами составляет N минут, то среднее время ожидания для пассажиров составляет 2N минут
                                                  +1
                                                  Это разные гипотезы, разные утверждения. Одно автор называет «парадоксом времени ожидания», второе «Парадокс инспекции». И в заключении утверждает:
                                                  лежащее в основе парадокса времени ожидания, — что прибытие автобусов следует статистике пуассоновского процесса — не является обоснованным.
                                                  +2

                                                  Логично, но под эту логику написан код. Если в среднем 10 минут, то и среднее ожидание 10 минут выходит по этому коду и по модели из статье. N*2 явная опечатка в статье, так как с остальной статьёй никак не сходится.

                                                +7
                                                Этот симулятор работает не так. Твой автобус всегда уходит на твоих глазах, пока ты стоишь на красный на переходе. Независимо от того, когда ты пошел на остановку. Он успевает проскочить в эти 24 секунды.
                                                  +1
                                                  Вот это правильно, а то какие-то парадоксы придумывают)
                                                    +2
                                                    24?! Карл, я вынужден ходить через переход в обход перехода нарушая ПДД где интервал 180 с и тот становится активен только после нажатия кнопки.

                                                    P.S. адаптивная («интеллектуальная») система управления трафиком, Москва, Зеленоград делает город максимально не для людей.
                                                      +3
                                                      В порядке субботней шутки, разве вы не знаете способа вызова автобусов? Достаточно отойти от остановки и закурить.
                                                        0
                                                        Матрица уже перестроилась и этот чит не работает.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                        +11
                                                        Ну на опаздывающие трамваи вы обращаете внимание, а на те что вовремя — нет. Просто некачественный сбор статистики. Обычно так подобные случаи решаются. :)
                                                        Но если вы выходите не совсем случайно, то возможны перекосы в распределении изза совпадений с пересменками в депо там и тп.
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                            +3

                                                            Это очень просто объясняется. Водитель трамвая — тролль.

                                                          0
                                                          5 минут раньше раньше или 5 минут позже, я каждый раз опаздывал на уходящий трамвай на 20 секунд. Я всегда видел, как он уезжает.
                                                          Та же фигня с «моими» автобусами, всё хотел собрать статистику и разобраться, почему так происходит. Еще бесит, что когда ждешь относительно редкий автобус (который приходит, скажем, раз в 12-15 минут), он очень часто сперва появляется на той же остановке напротив (идущий в противоположном направлении).
                                                          +5
                                                          А ещё, если остановка для нескольких маршрутов, то кажется, что нужный маршрут приезжает реже остальных. Это потому что все автобусы чужих маршрутов пропускаются, а свой — всегда единственный: приехал и прекратил тем самым последующие наблюдения.
                                                            +2
                                                            При ожидании автобуса, который приходит в среднем каждые 10 минут, ваше среднее время ожидания будет 10 минут.
                                                            Видимо это из-за того что иногда интервал был более 70 мин, а иногда ~0 мин (что можно считать за один автобус), что в среднем дает 10 мин. С таким же успехом, можно взять «экспотенциально-случайный» интервал и получить 15 мин ожидания, при среднем 10 мин интервале автобусов.

                                                            Но если взять интервал за 10 мин +-2мин (как я предполагал до прочтения), то среднее время ожидения будет ~5 мин.
                                                              +1
                                                              Смотрите. Тут не нужны никакие крайности вроде 70 минут, чтобы наблюдать это явление. Я приведу в пример очень сферическую ситуацию, чтобы на пальцах объяснить как оно работает.

                                                              Вот допустим, 50% автобусов ходит с интервалом в 16 минут, а 50% автобусов с интервалом в 4 минуты. В среднем это дает 10 минут. Ну вот представим, что есть автобус, а следующий — через 4 минуты, следующий — через 16, следующий — через 4, следующий — через 16 и так далее. В течении 20 минут гарантированно два автобуса.

                                                              Теперь представим, что на остановку приходит 1 человек ровно через минуту.
                                                              То есть в автобус, который пришел спустя 4 минуты после предыдущего село 4 человека, а в автобус, который пришел через 16 минут после предыдущего село 16 человек.
                                                              Автобус, который пришел через 4 минуты после предыдущего ждали в среднем 2 минуты.
                                                              Автобус, который пришел через 16 минут после предыдущего ждали в среднем 8 минуты.

                                                              Дальше. 4 человек ждали в среднем 2 минуты, а 16 человек ждали в среднем 8 минут.
                                                              (4 * 2 + 16 * 8)/20 = 6.8. То есть хотя каждые 20 минут приходило 2 автобуса, с равными интервалами и средним интервалом между автобусами в 10 минут. Среднее время ожидания оказалось не 5 минут, а почти 7.

                                                              Я понимаю, что в реальной жизни такой сферической ситуации не будет, но, как по мне, эффект очень интересный.
                                                                +2
                                                                Ну, эффект становится менее интересным, когда понимаешь, что так можно и 1440 автобусов в полночь провести мимо остановки и сказать, что «в среднем раз в минуту сегодня автобус ходил, а среднее время ожидания — 12 часов».

                                                                А так, тут больше заслуга/вина автора, который выделил жирным кликбейтовое утверждение до хабраката, а затем потратил кучу букв, чтобы как-то оправдаться, что вообще-то не совсем Пугачёва, и не совсем умерла, а кто так считал — не прав.
                                                              +3
                                                              Сначала автор написал кучу программ, загрузил нас интегралами и пуассоновскими процессами, а потом сделал вывод, что всё написанное неправильно, так как оно соответствует действительности. Зачем было тогда писать всё это, почему бы сразу не написать правильно?

                                                              По-хорошему, надо было сначала взять файл реальных данных и посмотреть, что там гауссово распределение. А потом уже писать программу.
                                                                +2
                                                                Интересная, но очень запутанная статья, как по мне, больше на философский метод смахивает, а вообще, любопытно.
                                                                  +5
                                                                  Просто в час пик автобусы стоят в пробке, а потом сразу 3 приезжают за 30 мин ожидания.
                                                                  особенно достается трамваям/троллейбусам



                                                                  А вне часа пик — все как по маслу, но и недовольных людей меньше.
                                                                    0
                                                                    Выделенные полосы для ОТ надо делать в городах, обязательно.
                                                                      +2
                                                                      Чтобы было где парковаться?
                                                                        0
                                                                        С чего бы вдруг? Не знаю на счет других городов, но в мск на всех выделенках всегда висит «остановка запрещена» и «эвакуация» и за все время я не видел ни одной припаркованной там машины.
                                                                          +1

                                                                          Для начала нужно ввести неотвратимость наказания и огромные штрафы. Во Вроцлаве, например, ОТ ходит четко по расписанию, причем, в основном, по обычным полосам движения. Но держаться надо крепко — ибо гоняют нещадно

                                                                            +2
                                                                            В нашей стране просто сделают такое расписание, что вместо 45 минут будешь ехать 1,5 часа. Зато всегда будет успевать, простаивая на остановках, когда есть лишнее время.
                                                                          +3
                                                                          Выделенные полосы для ОТ надо делать в городах, обязательно.

                                                                          И не чистить их зимой от снега, прям как на фотографии выше. На дороге постоянный поток машин хоть как-то прокатывает в снегу колеи, на выделенках такого нет. Как же "весело" было ездить после снегопадов в автобусах в Москве — автобус сначала не может прижаться к остановке (там каша из снега), потом не мог от неё отъехать — задние колёса буксуют в снегу, иногда корму вообще на встречку выносит.

                                                                            +1
                                                                            Но ведь это не проблема выделенной полосы, а проблемы коммунальных служб. Я бы ещё добавил, что в США и Канаде зачастую, кроме выделенной полосы (или отдельной дороги) для ОТ есть выделенная полоса (или дорога) для велосипедистов.

                                                                            Если говорить про Seattle то там снега почти не бывает (т.е. далеко не каждую зиму может выпасть хоть какой-то снег).
                                                                        0
                                                                        При ожидании автобуса, который приходит в среднем каждые 10 минут, ваше среднее время ожидания будет 10 минут.

                                                                        Это никак не относится к маршруткам бегающим на просторах России. У них какие свои уникальные законы движения.


                                                                        Это то, что иногда называют парадоксом времени ожидания.

                                                                        Я бы назвал это российским парадоксом ожидания.

                                                                          0
                                                                          Позанудствую: генерация событий вот в таком виде bus_arrival_times = N * tau * np.sort(rand.rand(N)). Если посмотреть на случайные числа из rand.rand(N) то видно что они могут быть очень малыми хe-07, и поэтому автор умножает каждое измерение на 1000000, чтобы начальное время для первых событий достоверно было выше 1 мин. Так вот лучше тогда сделать обозначение этого коэффициента отдельным от кол-ва событий, т.е. M=1e6
                                                                          Тогда формула будет выглядеть так: bus_arrival_times = M * tau * np.sort(rand.rand(N))
                                                                            +2
                                                                            Чтобы убедить себя в разумности этого, сначала смоделируем поток автобусов, которые прибывают в среднем за 10 минут.

                                                                            N = 1000000  # number of buses
                                                                            tau = 10  # average minutes between arrivals
                                                                            
                                                                            rand = np.random.RandomState(42)  # universal random seed
                                                                            bus_arrival_times = N * tau * np.sort(rand.rand(N))

                                                                            Не все тут знают numpy, что значит N * tau * np.sort(rand.rand(N))? Почему N участвует тут дважды? Какое распределение задержки с заданным средним мы эмулируем? В любом случае более формальная постановка задачи была бы очень кстати.


                                                                            Кроме того на чем основан выбор именно такого распределения? Мне кажется мы можем получить любой результат выбирая распределение как нам нравится.

                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                            Самое читаемое