Як Machine Learning у BlaBlaCar допомагає водіям знайти пасажирів

Привіт! Мене звати Павло Башинський, я Senior Devops Engineer в BlaBlaCar.

У рубриці Behind the Curtain від BlaBlaCar буду ділитися кейсами та історіями, як у нас все влаштовано, з якими технічними складнощами стикаємося та як шукаємо рішення.

Часто читаю статті про технології від різних гігантів. В них часто не вистачає деталей: як саме ця чи інша технологія інтегрована в архітектуру, які процеси відбуваються навколо неї, чому саме вона? Щоразу доводиться шукати відповіді поміж рядків. Тому ми вирішили почати розповідати, як у нас всередині. Ми теж маємо багато цікавого як у компанії загалом, так і в офісі в Києві, де розташований другий за величиною інжиніринговий хаб BlaBlaCar після Парижа, який працює над автобусним маркетплейсом.

Сьогодні BlaBlaCar — це найбільша платформа для поїздок у світі, яка об’єднує карпулінг (поїздки з попутниками) та автобусні поїздки. У цій колонці я хочу поділитись, як ми допомагаємо новим водіям успішно знаходити попутників під час публікації першої поїздки.

Однією з головних цілей нашого сервісу є заохотити водіїв користуватися нашою платформою. Пасажири без водіїв нікуди не дістануться. Коли новий водій створює першу поїздку, ми хочемо допомогти йому знайти попутників, щоб він отримав позитивний досвід і продовжив користуватися сервісом. Тому ми надаємо кожному водію рекомендації під час публікації. Рекомендації мають на меті допомогти пасажиру обрати конкретного водія.

Спочатку ми надавали загальні рекомендації для водіїв, але в цьому випадку суб’єктивно вважали, що та чи інша рекомендація допомагає. Аналітика чи ABT тут може лише показати, наскільки ці рекомендації дієві, але не може відповісти, що ще впливає на успішність пошуку пасажирів. Це підштовхнуло нас до ідеї створити персоналізовані рекомендації для водіїв на основі накопичених даних у нашій платформі. До того ж вони мають допомогти збільшити кількість попутників.

Щоб надати більш корисні рекомендації новим водіям, ми вирішили створити модель, яка пояснює передбачення успіху пошуку попутників у дусі explainable AI. Тобто ми хочемо зрозуміти, що саме сприяє успіху, і на основі цього створити персональні рекомендації для водіїв. Наша задача полягала в тому, щоб знайти ознаки (feature), які впливають на це, та відібрати одну чи дві ключових. Ми припускаємо, що персональні рекомендації, створені на основі таких ознак, є набагато ефективніші, ніж загальні рекомендації для водіїв.

Погляд на моделі, які можна пояснити

Зрозумілий ШІ (explainable AI) — це такі моделі, які дозволяють пояснити свої дії в зрозумілих термінах або вигляді.

Зважаючи на можливі підходи explainable AI, ми визначили різні методи, які можуть пояснити та кількісно визначити, як кожна ознака стосується прогнозованого результату. Ось деякі приклади:

  • Створення моделі, яка може бути інтерпретована з коробки як лінійна модель або дерева рішень. Таким чином ми можемо легко прочитати на самій моделі, як кожна ознака впливає на успіх. Ми не віддавали перевагу цьому методу, оскільки хотіли використовувати складніші моделі.
  • Для більш складних моделей ми можемо використати метод LIME (Local Interpretable Model-Agnostic Explanations). Завдяки йому можна наблизити будь-яку чорну скриньку до лінійної моделі. Отже, для кожної навчальної вибірки ми могли б використовувати це лінійне наближення для інтерпретації того, як переміщення різних параметрів впливає на успіх.
  • Також для складних моделей, таких як дерева градієнтного бустингу, існує метод під назвою SHAP (SHapley Additive exPlanations), розроблений Лундбергом та Лі. Він спирається на те, що в теорії ігор називають вектор Шеплі. Задача вектора Шеплі — визначити, наскільки кожна ознака сприяє нашій ймовірності успіху. Більше про це тут. Наприклад, якщо ми прогнозуємо, що успіх поїздки становить 80%, а середній рівень успіху 50%, то кожна ознака має вектор Шеплі, що пояснює частину цього 30% розриву. Потім ми можемо використовувати ці числові значення для аналізу результатів нашої моделі та перевірити, чи одна або дві ознаки суттєво підвищують/знижують показник успіху.
  • Ще один, на наш погляд, цікавий метод — використання PDP (Partial dependence plots) кожної ознаки. Ідея PDP полягає в тому, щоб побачити на графіках граничний вплив однієї змінної на змінну успіху. Це передбачає, що кожна інша ознака не залежить від тієї, яку ми розглядаємо. Це допомагає зрозуміти, як зміна цієї ознаки в середньому впливає на зміну рівня успіху. Тоді для кожного значення даних ми побачили б, де стоїмо на нашому PDP, щоб зробити прогноз. Однак ці графіки базуються на апроксимальних даних. Тому на них можна робити лише загальні припущення.
  • Вищенаведений метод не є корисним для надання індивідуальних рекомендацій. Але ми можемо спробувати для кожного значення даних зсунути всі ознаки, знову передбачити успіх і подивитися, як їх переміщення впливає на оцінку. Рекомендованою ознакою буде та, що має більший вплив. Це також припускає, що наші ознаки є незалежними одна від одної. Цей метод схожий на те, що робить What-If Tool.

Ми вирішили використати останній метод для вироблення індивідуальних рекомендацій, оскільки вважали, що він добре відтворює те, що користувачі робитимуть у реальному житті. Крім цього, його легко інтерпретувати. Також ми вирішили взяти вектор Шеплі, щоб контролювати поведінку нашої моделі та виявляти невідповідність даних.

Як ми обрали найкращу

Що ж, подивімось, як ми до цього дійшли. Спочатку ми створили модель для прогнозування шансів водіїв на успіх знайти попутників. Ця модель для кожної публікації поїздки застосовує наші знання, досвід і дані. Вона використовує градієнтний бустинг і навчена на даних 2019 року. Датасет містить дані з профілів водіїв та описів поїздок. На виході ми маємо отримати дані, була опублікована поїздка успішною чи ні. Для нашого випадку градієнтний бустинг є швидким і показує гарні результати. Площа під кривою становила близько 0,8. Дивлячись на криві влучності (precision) та повноти (recall), ми підтвердили, що модель показала гарні результати.

Щоб побудувати модель з урахуванням методології «what if», нам довелося виділити три групи ознак:

  • ознаки, які допомагають передбачити здійснення;
  • дієві ознаки під час публікації;
  • дієві ознаки на час відправлення.

Крім того, якщо ми використовуємо лише ті ознаки, які безпосередньо пов’язані з користувачем, то ми маємо не найкращу модель. Нам також потрібні дієві ознаки, які можуть виступати потенційними рекомендаціями. Існує два типи таких дієвих ознак. Перші діють відразу після публікації, наступні допомагають майбутній публікації. Наприклад, ми не можемо надіслати лист в минуле, щоб повідомити водія опублікувати поїздку за два дні до відправлення. Однак ми можемо дати таку рекомендацію водію після від’їзду для публікації наступних поїздок.

Ми помітили дві проблеми. Коли існує колінеарність між ознаками, одна ознака може приховати ефект іншої. Наприклад, ми побачили, що кількість днів між реєстрацією та публікацією має сильний вплив. Однак ознака, яка повідомляє, чи був водій у ролі пасажира до публікації, виявилась малозначущою. Роздивляючись різні значення вектора Шеплі, ефективність (main effect) та інтерактивні значення (interactive values) цих ознак, ми зрозуміли взаємодію. Справді ознака «кількість днів між реєстрацією та публікацією» не є дуже корисною, якщо вона не приховує, що новий водій у ролі пасажира отримав кілька балів рейтингу, що підвищило шанси на успіх як водія. Ми вирішили проблему, згрупувавши такі ознаки та підсумувавши їхні вектори Шеплі, щоб зрозуміти вплив цієї групи на успіх. Через адитивність вектора Шеплі ми знали вплив цих ознак як групи і більше не звертали увагу на взаємодію цих ознак.

Друга проблема, пов’язана з колінеарністю, полягає в тому, що коли ми змінюємо ознаку A, то будь-яка ознака, яка залежить від A, залишається незмінною в нашій моделі. Однак у реальному житті елемент, що змінює ознаку A, впливав би й на інші колінеарні ознаки. Отже, це могло б вплинути на ймовірність успіху інакше, ніж у нашій моделі. Для нас це виявилось незначущим, оскільки наші дієві ознаки не залежали від будь-якої іншої ознаки.

Висновок

Зрештою, ми створили дві окремі моделі. Перша схожа на «what if tool», що створює рекомендації новим водіям під час публікації та відправлення. Та модель на основі метода SHAP, яка виробляє агреговані вектори Шеплі, які далі використовуються для аналізу в нашій CRM.

Ці дві моделі побудовані на основі однієї простої моделі класифікації. Ми вважаємо, що справжній результат дає не модель прогнозування, а більше пояснення роботи моделі. Розуміння поведінки моделі — це те, над чим ми завжди працюємо у BlaBlaCar. Це дало змогу покращити нашу платформу, яка допомагає водіям збільшити шанси успішно знайти попутників.

Щиро дякуємо за допомогу Дані Сраж, Ентоні Барчевски, Data Scientists в BlaBlaCar, і Дмитру Унковському, Data Scientist в Grammarly.

👍НравитсяПонравилось1
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

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

Кросс-пост из тви, by @iamkioshi (оригинал без цензуры):
«***єнний блаблакар як завжди ггг, вказана водієм жіночка — насправді мужик 35 років, машина на чотирьох пасажирів раптом стала бусиком спрінтєром на десятьох, 130 гривень на одного за луцьком стали 160, а моя віра в людей і гідність зникли......
в кента цей спрінтер на трасі на швидкості 130 глохне на***, він на ходу його заводить і їде далі, тримаю балончик в кишені»

Что мешает таким лохам перезвонить водителю и уточнить всё до поездки?
Вопрос риторический.

Хотя не, ещё пару слов. Вот как раз когда купил билет на рейсовый автобус (пофиг спринтер то или ЛАЗ) — знаешь что приходишь в установленное время в установленное место и гарантированно уезжаешь. Но как можно забронировать поездку у совершенно незнакомого человека и даже не уточнить где именно встреча? Он тот бусик что, в поле нашел?

Лохи, что с ОЛХ, что с блаблакар — обязаны страдать. Это их место в пищевой цепочке.

Нафига мне перезванивать? В бан водителя и авто пожизненно, пусть на ОLX ищут попутчиков, если позиционировать себя как сервис.

Нафига мне перезванивать?

А ты тут (как пассажир) вообще при чём если речь была о водителе-перевозчике?

Как БлаБлаКар должен проверять водителей до поездки чтобы ленивые пассажиры не соизволившие позвонить водителю не писали потом возмущенных отзывов о том что ехали в Спринтере и что цена оказалась не той?

Я не знаю как сейчас происходит регистрация в сервисе, я тут вообще со времён Подорожника. Но врядли БлаБлаКар требует ВУ и техпаспорт. В конце концов это не сервис такси а-ля Болт или Убер, это сервис поиска попутчиков для нерегулярных поездок. Хотя добавление автобусов немного поменяло эту концепцию. Но автобусы и показываются на отдельной вкладке, и они наверняка проверяются иначе чем обычные водители. Да опять же и жалобы то не на автобусы, а не тех хитросделанных кто пытается по старинке выдавать свои спринтеры за ланосы.

В бан водителя и авто пожизненно

Просто по одной жалобе пассажира? Так через полгода на сервисе может просто не остаться водителей: достаточно чтобы какой-то троль случайным образом бронировал поезди и потом строчил жалобы на водитлей.
Это как если бы банки закрывали счета клиентам просто по жалобе анонимуса из интернета — пассажиры в БлаБлаКаре вообще никакой верификации не проходят.

Лично я бы не просто голосовал за то, чтобы требующих «позвонить и узнать детали» сжигали на костре. Я бы сам этим занимался. И да, было бы стоп-слово. Но надо позвонить и узнать детали. А костёр бы постоянно тух (ну не было бы у меня дров), поэтому я бы каждый раз поджигал его заново, в лучшем случае горелочкой. А забыл бы горелку или газ кончился — добывал бы огонь трением.

Требование «позвонить и узнать детали» означает, что всё сказанное — полный ***дёж, хрен знает откуда добытая инфа, и хрен знает сколько раз прошедшая копипасту. Включая самого человека на том конце — совсем не факт что он что-то предоставляет. Но кого это ***т, когда есть Machine Learning?

Что мешает таким лохам, заказавшим в uber eats бургер, а им доставили просроченный чебурек из палатки у метро, перезвонить курьеру и уточнить всё до доставки?
Вопрос риторический.

Хотя не, ещё пару слов. Вот как раз когда пошел сам в кафе (пофиг мак то или бургер кинг) — знаешь что приходишь в установленное время в установленное место и гарантированно покупаешь бургер. Но как можно забронировать доставку у совершенно незнакомого человека и даже не уточнить, привезет ли он гнилой чебурек или то, что ты заказал? Он тот чебурек что, в поле нашел?

Лохи, что с ОЛХ, что с uber eats — обязаны страдать. Это их место в пищевой цепочке.

Как uber eats должен проверять курьеров до доставки чтобы ленивые клиенты не соизволившие позвонить курьеру не писали потом возмущенных отзывов о том что заказали бургер, а чел привез просроченный чебурек и что цена оказалась не той?

Зачем так много слов для такой натянутой аналогии?

Uber Eats это именно сервис который с помощью нанятых им водителей выполняет заказы своего клиента. За это Uber Eats берет деньги с клиента и часть этих денег потом отдаёт водителю.

BlaBlaCar со мной, как с водителем (да и как с пассажиром тоже) никаких договоров о перевозке не заключал. BlaBlaCar это не более чем ОЛХ для поездок со специальным набором фильтров. Денег за поездку БлаБлаКар с пассажира не берёт — расчёт идёт напрямую между водителем и пассажиром точно так же как если бы объявление о поездке было опубликовано на ОЛХ или в Харьковском Курьере. И если на ОЛХ есть хотя бы «ОЛХ доставка» которая за дополнительную плату гарантирует что продавец не кинет, то у БлаБлаКар-а нет даже такого. По крайне мере в Украине, может в других локациях иначе.

Проблемы типа той что мы обсуждаем решаются двумя простыми способами:
* позвонить водителю перед поездкой
* если водитель обманул то оставить соответствующий отзыв после
Но что происходит сейчас? Ищешь поездки, видешь какого-то условного Василия (автомобиль не указан) с рейтингом 5. Заходишь в профиль там куча лестных отзывов, изредка в них упоминается что бусик был удобный или даже случайно написано что то был спринтер. Кто этим людям доктор, а? Почему ни один из них не написал что водителаь на самом деле перевозчик?

Мир не крутится только вокруг пассажиров, водитель и пассажир на этом сайте — равноправные участники.

Отзыв оставить не получится, если поездка не состоялась, так как её нужно будет отменить. Единственное что можно указать это причину отмены, но сомневаюсь, что на основании этого водителю прилетит бан. Та и если прилетит, они просто зарегают еще сотню аккаунтов с которых свой спринтер с работающим кондиционером будут выдавать за Volkswagen CC

Та и если прилетит, они просто зарегают еще сотню аккаунтов с которых свой спринтер с работающим кондиционером будут выдавать за Volkswagen CC

Тогда какие претензии к ББК если ты сам пишешь что водителю те баны по сараю?

Претензия может быть если ББК может фильтровать спринтерщиков до размещения ими объявлений, но не делает этого. Есть алгоритм который позволит отсеять перевозчиков и заставить их регаться как автобусы?

Так сервис скатился на столько, что из тупо в 6 объявлениях подряд водители пытались наебать в каждом. Первые указывали левую локацию Выдубичи и Печерскую, хотя по факту была Житомирская. Еще предлагали автобус с Польщи вместо легковушки. Остальные чисто пытаются тебе всучить спринтер вместо легкового авто, оправдывая себя тем, что это максимально подходящая модель из доступных в списке (охотно верим) через бла бла кар, которая подходит под мерседес спринтер. Попасть на реального водилу просто не приходится возможным. Когда в поисках поездки тратишь 3-4 часа и попадаешь на такой треш, то в другой раз просто не захочешь ехать таким способом. Мне в итоге пришлось смериться и ехать на спринтере, так как иначе в принципе не уехал бы в тот день. Оно и не странно, что количество реальных водителей уменьшилось, они просто не могут конкурировать с тонной фейковых объявлений от предприимчивых бизнесменов.

И если даже пассажиру лень позвонить и уточнить кто его везёт — то что собственно может сделать БлаБлаКар в данной ситуации? Обзванивать всех водителей и спрашивать «вы точно не перевозчик?» ?

Взагалі BBC зіткнувся з цією проблемою лише на пострадянському просторі. На скільки мені відомо ми щомісяця видаляємо величезну кількість таких аккаунтів-спринтерів, але точну цифру не скажу, бо в голові не тримаю.
Схоже це сама болюча тема і мабуть варто як раз про цю боротьбу написати наступну статтю )))

как то плохо получается. В 19-20 годах ездил много, сейчас редко. Но каждая поездка показывает что их кратно 10 на одного реального водителя. В итоге они заваливают твою поездку фейками со всех сторон как по цене так и по времени, что ты в пролете. Как по мне работа по удалению маршруток впринципе провальная.
Те кто удаляют, пусть разместят поездку и просто сами все увидят.

Взагалі BBC зіткнувся з цією проблемою лише на пострадянському просторі.

в основном это потому что на западном простори коммерческие и тем более пассажирские перевозки строго лицензированы и будет очень конкретный ай-яй-яй делающий такой «бизнес» не выгодным от слова совсем

Потому что там сознательный гражданин не только отзыв на ББК оставит, но и в полицию позвонит

Честно говоря статья напоминает кандидата на Bullshit Bingo так как я не нашёл в ней ничего полезного ни как клиент БлаБлаКара, ни как программист. Зато много красивых модных слов.

Вибач, що саме ти очікував від статті? Реально цікаво, щоб наступним разом написати про щось цікавіше.

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

Прочитал. Вынес полезной информации 0.

Зачем тут АИ и почему не показывать поездку всем подряд кто ищет схожий маршрут?

Какой профит даёт АИ для водителя и для пассажира?

Що до поїздок, то вони показуються всім без обмежень, але попутник вибирає з ким поїхати.
ML тут потрібна щоб створити персональні рекомендації для водіїв. Якщо водії виконує ці рекомендації то отримує профіт у вигляді пасажирів, які вирішать поїхати саме з ним.
А взагалі тут про використання explainable ML, як технології, яка допомогає створити ці рекомендації на основі історичних даних, а не вигадувати рекомендації і мати надію що це спрацює.

А як виглядають ці пропозиції? І в який саме час вони показується?

От наприклад я створюю поїздку до Київа. Обираю якись точки на карті в Харкові та Киїєві. Потім можу додати проміжні пункти які мене цікавлять (наприклад Чутове, Полтава, Пирятин), або не додавати нічього. Завершую створення поїздки.

І все, моє спілкування с БлаБлаКар далі тільки стосовно:

  • підтвердження для попутників (якщо я не обрав автоматичне підтвердження) які їдуть з обраних мною населених пунктів,
  • або підтвердження для попутників які їдуть з Валок або Хорола, або яким треба в аеропорт Бориспіль.
Але це ж було і до АИ, чи не так? Я пригадую як мені дало попутника з Прилук, а ще пам’ятаю як для поїздки в Черкаси знайшовся попутник до Золотоноші. При тому що я не обирав ні перше, ні друге. Прилуки то взагалі 70 км в бік і я досі не розумію як так сталося що мою поїздку до Харкова побачив попутник який шукав Київ-Прилуки.

Тут багато запитань, навряд у мене є відповіді на всі )
Пропозиції можуть з’являтись на різних етапах і вони виглядають дуже звичайно. На скріншоті вище як раз приклад. Можливо частина рекомендацій прив’язана до регіонів, також можливо що ти маєш гарно заповнений профіль і високий рейтинг.

Навіщо тут ML? — ML це не срібна куля, по суті це боротьба за невеликі відсотки на дуже великих об’ємах. І тут його (ML) досить багато. В даному випадку я розповів про нетривіальний кейс, коли цікавий не результат який віддає модель, але цікаво зрозуміти чому модель дає саме такий результат, і від якої фічи це залежить. Щоб використати це знання в більш тривіальних цілях — наповнити базу с порадами новими порадами. Мені здалось що це може бути цікавим тим хто працює з ML, в інтернетах саме про це не так багато інформації.

Що до проблем з попутниками, то тут теж не стоять на місці і технології постійно змінюються.
Як приклад, з’явилась опція Boost, вона намагається самостійно визначити зупинки і прокласти маршрут щоб зібрати як умога більше попутників. Я так розумію що це стало актуально на час карантину, коли було дуже важко кудись дістатись. Цю опцію можна вимкнути, можливо питання з попутником за 70км то до неї? ))) Це теж ML.

Увы, но в последнее время БлаБлаКар превратился в помойку из левых акков, которые через один не отвечают или пытаются тебя на***ть. Есть еще третья категория «перевозы». Цену ставят на 100-200 грн. дешевле, после заказа связываются с тобой через мессенджеры и рассказывают сказки о том, что реальную цену выставить не могут, что цена вот такая хочешь едь не хочешь не едь.
Реальный водитель ищущий попутчиков стал вымирающим видом на этом сервисе. Увы. Проще реальную попутку стало на ОЛХ найти.

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

ХЗ как там со стороны пассажира — ни разу не ездил.

Но сто стороны водителя — найти попутчиков не проблема.

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

Оффтоп
Я, як водій, який возив пасажирів на приватному авто, погоджуюся з Вами про «помийку». Розповім свої міркування з точки зору водія.
Бажаючи не сильно витрачатися на дорогу, коли подорожей багато, вирішив брати з собой пасажирів. Ще 3-4 роки тому, коли в Україні блаблакар тільки завойовув популярність — це було круто. ГОЛОВНЕ це ставлення пасажирів до тебе, як до водія і до автомобіля було на 2 порядки краще. Починаючи з 2020 року я майже не беру пасажирів, оскільки люди почали тебе сприймати, як приватного водія в маршрутці. Жодної охайності, жодної ввічливості! Скасування поїздок за 5-10 хвилин до виїзду.... Ну от і вийшло так, що нормальні водії на нормальних авто пішли з сервісу, а їх нішу зайняли маршрутчики.
В сервісі не продумано жодної нормальної «валідації» як пасажирів, так і водіїв.
На майбутнє я для себе вирішив, що не буду взагалі користуватися сервісом.
А про ML стосовно пошуку попутників по дорозі — це фігня. Коли я ставлю поїзду Харків-Київ, я хочу отримати з пасажира 350 грн, то навіщо мені брати пасажира з Пирятина за 100грн? Тому такі бронювання відхиляються.

Взагалі...задумка сервісу непогана. Але її потрібно доопрацьовувати під наш ринок.

а ще проблема, коли алгоритми бла-бла кару пропонують взяти пассажирів з попутніх міст за цінами які набагати нижче середньоринкових

причем blablacar это полностью устраивает, facebook забросили. Канал связи только e-mail.

Подписаться на комментарии