Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал

в 6:50, , рубрики: Блог компании Туту.ру, железная дорога, пассажиры, приложение, расписание, сервис, транспорт, Урбанизм, электричка

Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал - 1
Электричка слева — Аэроэкспресс — теперь тоже добавлена в приложение.

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


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

Как выяснилось, не делать его — идея так себе, потому что:

  1. Многие хотят посмотреть расписание «в целом», а не по текущей ситуации.
  2. Открылся совершенно необычный способ использования приложения: с эскалатора. А на эскалаторах обычно какой-нибудь 3G-LTE-интерконнект или просто смена базовой станции. В час пик ещё и «растянутая» между абонентами сота. И вообще в метро часто так бывает, что интернет как бы есть, а коннекта по факту нет.

Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал - 2

Спасибо OVAV: мы начали детектировать такие ситуации. Сейчас модель действий такая: если есть быстрая связь, то всегда грузится актуальное расписание. Если связи нет — показывается офлайн-версия (это из локального кэша фактически), на ней — метка времени, когда это было актуально. По мере просмотра мы можем успеть получить обновление (пакеты очень лёгкие) и сразу показать его прямо в интерфейсе «на лету». Тогда метка про офлайн-режим будет убрана.

Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал - 3
В офлайн-режим автоматически добавляются избранные маршруты и просмотренные расписания (история). Причём это не загрузка вручную и не просто кэш — мы проходим по всем вашим маршрутам после обращений к нашим серверам и обновляем всё для офлайн-режима. Можно годами не открывать избранные маршруты, но там всегда будет свежая версия с того момента, когда у вас последний раз был Интернет при открытом приложении. История же кэшируется на те дни, на которые вы уже смотрели расписание.

Поскольку пакеты очень лёгкие (там XML-данные по паре килобайт на маршрут), то всё это очень быстро.

Прогнозирование опозданий

Электрички по API транспортной системы дают статус с запозданием на шаг графика (10 минут), и статус будет за последние 10 минут. То есть в 14:22 можно получить фактическую картину движения поездов на 14:12. А в 14:12 она будет собрана с фреймом 10 минут, то есть в худшем случае отставание будет 19-20 минут, в лучшем — 10. Мы немного пошаманили с матмоделями и историческими данными и научились сокращать это окно до двух минут по прогнозированию движения остальных поездов. То есть если электричка опаздывает не из-за внезапной аварии, а из-за тактического изменения расписания, то мы узнаём об этом очень достоверно на 8–18 минут раньше фактических данных.

Юзабельность

Больше всего к нам было вопросов по юзабилити. Да, год назад у нас не открывался сразу тот экран, который вам был нужен: уходил лишний клик на расписание. Спасибо airy за поднятый тикет.

Сейчас открывается последний поиск сразу на стартовом экране. Причём мы следим за половиной дня: если вы открываете приложение после обеда, то переставляем станции отправления и назначения местами.

Нашли очень красивый баг, который сами же и заложили несколько лет назад. Причём так оказалось, что искал его тот же человек, который внёс. В общем, когда-то давным-давно нам нужен был момент, когда на железной дороге наступает завтра. Полночь не подходит. Дело в том, что у планеты сутки заканчиваются в полночь, а у людей — в другое время. И когда ты смотришь электрички на сегодня, то ждёшь, что после той, что в 23:50, будет показана 00:20 без переключения дат.

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

Поскольку мы математики, то смоделировали потоки и учли распределение рейсов. Поскольку больших данных тогда не было, ограничились константами. Для Москвы вывели волшебное время — 2:52, именно в этот момент было удобнее всего сменять сутки.

Примерно пять лет это уходило всё глубже и глубже в код. Дальше была пара тикетов про то, что пропадают электрички на сегодня: это определённые запросы поиска между 00:00 и 2:52 (считали, что сегодня — это вчера). А вчера все электрички ушли.

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

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

Иногда сыпались тикеты на то, что «у вас пропадают электрички». Это они не у нас пропадают, а у ЦППК и других перевозчиков (в расписании). Стандартная модель поведения — когда поезд уходит из расписания, он просто растворяется в эфире. Пользователи, которые его помнили, думают, что как-то не так ищут, и нервничают. Ощущают потерю контроля. Теперь мы сделали призрак поезда: строчка в расписании с меткой «Отменён». Людям стало спокойнее, а нас не считают злыми разработчиками, ворующими поезда у честных граждан.

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

Вторая похожая фича — есть очень много станций с похожими названиями. Явно спрашиваем пользователя, что именно он имел в виду, когда высока вероятность коллизии.

Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал - 4
Много мелких доработок с геолокацией: теперь подсказка по вводу станции зависит от вашего примерного положения, мы показываем ближайшие к вам.

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

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

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

Направление

Цена, автобус

Цена, электричка

Пересадка на электричку

Москва — Можайск

257

276

нет

Москва — Обнинск

269

284

нет

Москва — Ступино

264

279

нет

Москва — Волоколамск

273

322

нет

Москва — Егорьевск

275

276

нет

Москва — Переславль-Залесский

285

-

-

Москва — Кубинка

94

161

нет

Москва — Петушки

253

337

нет

Москва — Воскресенск

213

230

нет

Москва — Суздаль

605

-

-

Москва — Рязань

379

462

нет

Москва — Зарайск

336

-

-

Нижний Новгород — Муром

591

-

-

Москва — Алексин

484

658

да

Москва — Озёры

286

368

да

Москва — Гусь-Хрустальный

517

701

да

Москва — Ясногорск

385

388

нет

Москва — Зубцов

436

-

-

Москва — Лакинск

275

421

нет

Великий Новгород — Сольцы

200

-

-

В целом около 50% направлений электричек (по которым у обеих станций есть привязка к городу) есть альтернатива из автобусного расписания. При этом с поездами дальнего следования пересечение небольшое, около 7 %.

Сделали очень крутую (для нас) штуку: фича «платформа и путь». Это на 50 самых популярных станциях мы стали прогнозировать, куда подадут электричку на основании истории её подач и движения поездов. При этом пассажиры приложения могут голосовать за платформу отправления. То есть вы пришли, сели в свою электричку и нажали вот так:

Электрички Москвы (и не только): что поменялось и спасибо тем, кто помогал - 5
Если голосов достаточно — путь и платформа показываются всем пассажирам. Если мы вам доверяем (а мы доверяем после нескольких правильных голосований), то у вас становится более весомый голос. 15 лет назад нам звонили неизвестные люди сказать, что где-то отмена, а мы вносили в расписание (потому что была только бумага). Ещё тогда мы запомнили, что пассажиры рады помогать друг другу. Думаю, сейчас мы поймём, как сделать это лучше, и будем дальше смотреть в эту сторону.

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

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

Автор: Андрей Мацуленко

Источник