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

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

Привет, хочу поделиться личным опытом в построение модели машинного обучения для предсказания пробега автомобиля. Сразу поясню для чего это и какую цель мы преследовали. Придя на должность руководителя ИТ департамента в одном из Авто холдингов, мы обсуждали цели и задачи и была озвучена одна из проблем которую хорошо бы было решить, а именно: Коммуницировать с клиентом, у которого подходит срок очередного технического обслуживания (ТО).

Большинство знают, что у автомобиля есть гарантийный регламент, по которому нужно проходить ТО либо раз в год, либо через определенный пробег (у разных брендов автомобилей он разный: от 10 000 км до 20 000). Отсюда вытекает задача: определить, когда у конкретной машины настанет дата следующего ТО и вовремя с коммуницировать с клиентом. Если этого не сделать, клиент может уехать или в другой конкурентный сервис, или вообще забыть сделать ТО и нарушить условия гарантии. Анализ выбывания базы клиентов показал, что задача очень актуальна.

Как это решалось раньше.

Просто звонили клиентам через год после покупки или прохождения ТО, и часто получали ответ что уже сделали или срок давно прошел по пробегу.

Поиск решения

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

  • Не решает проблему, когда автомобиль новый и не было заездов
  • Есть высокая зависимость от введенных данных, любая ошибка пользователя, введение неверного пробега или сезонные колебания в пробеге у клиента, сильно сказывается на результате. Пример приведен на графике. При введении не корректного пробега на нескольких заездах прогнозирование по нескольким точкам дает высокую погрешность

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

· Можно, конечно по среднему пробегу по машине, но тогда нужно иметь много заездов, что не всегда возможно и нужно учитывать смену владельца. В общем, слишком много ЕСЛИ.

Делать систему по жестким правилам с описанием множества формул и исключений (if) не хотелось, да и тема больших данных и машинного обучения не давала покоя. Решил построить прогнозирование на машинном обучении, благо в системе имелась информация более чем за 10 летний период заездов в более 15 автосалонов, и было желание погрузиться в тему.

Первые шаги

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

Выгрузив данные мы получили первичный датасет с более чем 1,7 млн строк. Мы порадовались, потерли руки и принялись за работу. Для начала решили проверить на алгоритме линейной регрессии. Обучили, проверили и ужаснулись - разброс был “просто пальцем в небо”. Начали пробовать другие алгоритмы, но результата особого не дало. Ну, если не работают алгоритмы - надо смотреть данные, решили мы и погрузились в анализ.

Первым делом очистили датасет от явных выбросов с помощью стандартных функций pandas. Проверили - ситуация чуть-чуть улучшилась, но не значительно. Мы погрузились в более тщательный анализ и заметили, что в некоторых случаях ввод был произведен не корректно (об этом писал раньше), но мы это проигнорировали, решили, что таких немного и на общей системе это не скажется. Фактический пример показан ниже на графике, где видно, что за пол года пробег изменился на 1 км., в некоторых случаях было 10, иногда 50, 100, в общем, пресловутый человеческий фактор.

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

Определив на нескольких примерах правильные и неправильные точки (по нашему мнению), мы написали процедуру очистки от ошибок и запустили по ней наш первичный датасет.

Какого же было наше удивление, когда из 1.7 млн. осталось чуть более 500 тыс. записей. Запустив уже обучение на этой выборке, мы получили более-менее приемлемые цифры по MSE. Поэкспериментировав еще некоторое время с моделями обучения остановились на градиентном бустинге. В данном случае практика подтвердила правило: в машинном обучении очень важны правильные данные. Даже если данных много, но они кривые, ничего не выйдет.

Но нам хотелось еще улучшить показатели получаемых данных, поэтому мы снова сели за анализ и увидели, что очень во многих случаях у нас есть данные нескольких заездов, но отсутствует информация о начале использования автомобиля, о смене владельца, о пробеге данного владельца. Задачу удалось решить не сразу, но в итоге, когда получилось найти данные и добавить в модель еще несколько признаков, средне-медианное отклонение стало около 2 недель. Это значение нас более чем устраивало.

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

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

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

Итог

В итоге просчитав даты планируемых заездом мы смогли построить план заездов на год и далее.

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

Проанализировать процент автомобилей, проходящих ТО и тех, кто пропустил, и построить аналитику в разрезе брендов и сроков владения авто.

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

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

Есть еще несколько моментов над которыми нужно работать, но результаты нам нравятся. Буду рад мнениям и комментариям.

Начать дискуссию