Skip to content

Instantly share code, notes, and snippets.

@levonet
Last active July 6, 2021 20:43
Show Gist options
  • Save levonet/e1d5e3cfc2fc8864fdc7622d1350bc12 to your computer and use it in GitHub Desktop.
Save levonet/e1d5e3cfc2fc8864fdc7622d1350bc12 to your computer and use it in GitHub Desktop.
How BlaBlaCar uses Machine Learning to maximise the success of new drivers

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

Привіт!

Це рубрика Behind the Curtain від BlaBlaCar.

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

Сьогодні хочу поділитись, як ми допомагаємо новим водіям успішно знаходити попутників під час публікації першої поїздки.

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

Погляд на моделі які піддаються поясненню …

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

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

Зрозумілий ШІ (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”, нам довелося виділити три групи ознак:

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

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

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

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

Заключення

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment