Можно ли предсказать, насколько вы хороший водитель?
Введение
Исследование направлено на прогнозирование различных показателей и категорий на основе данных о вождении. Насколько хорошо будет сказать вам, хороший вы водитель или плохой, основываясь на ваших данных о вождении? Или, может быть, сказать водителям снизить скорость во время поворотов или увеличить тормозной путь.
Такая модель может иметь несколько приложений, таких как страховой рейтинг / ценообразование, система оценки водителей, бортовая система предупреждений, компании, желающие отслеживать водителей своего автопарка. Некоторые компании (Uber, Lyft, Progressive) уже используют свои собственные личные данные для прогнозирования/построения своих моделей.
Поскольку исследование предполагает получение большого количества данных о вождении автомобиля, было сложно найти доступные наборы данных. Первым шагом этого проекта с самого начала было создание приложения, позволяющего собирать данные для построения модели. Из-за того, что у меня не хватило времени, я, к сожалению, не смог его построить. Надеюсь, что сделаю это в ближайшее время.
Примечание. Код и блокнот доступны на Github здесь
Описание набора данных
Исходный набор данных представляет собой zip-файл, содержащий 38 файлов CSV, соответствующих 38 автомобильным поездкам (~ 30 минут каждая).
Содержимое файлов CSV:
- Столбец 1: Время (в секундах)
- Столбец 2: Скорость автомобиля (в м/с)
- Столбец 3: номер смены (0 = промежуточное положение)
- Столбец 4: Нагрузка на двигатель (% от максимальной мощности)
- Столбец 5: Общее ускорение (м/с²)
- Столбец 6: обороты двигателя
- Колонка 7: Питч
- Столбец 8: Боковое ускорение (м/с²)
- Столбец 9: количество пассажиров (0–5)
- Столбец 10: Загрузка автомобиля (0–10)
- Столбец 11: Состояние кондиционера (0–4)
- Столбец 12: Открытие окна (0–10)
- Столбец 13: Громкость радио (0–10)
- Столбец 14: Интенсивность дождя (0–10)
- Столбец 15: Видимость (0–10)
- Столбец 16: Самочувствие водителя (0–10)
- Столбец 17: Спешка водителя (0–10)
Исследовательский анализ данных
EDA был проведен в 3 отдельных этапа:
- Загрузка наборов данных и проверка структуры, типов объектов и нулевых значений.
- Просмотр распределения признаков (поиск выбросов) и любых корреляций признаков.
- Извлечение событий вождения (торможение, ускорение, поворот), вычисление метрик вокруг этих событий и последующее построение метрик в соответствии с нашим целевым значением
driver_rush
Из трех типов событий наиболее заметным является торможение. Даже если цифры невелики, соотношение резкого торможения к общему количеству торможений в пять раз выше, когда водитель спешит, по сравнению с тем, когда он не спешит. Другие события (ускорения и повороты) на самом деле не показали разницы между rush
и not rush
при рассмотрении коэффициента резкого ускорения и коэффициента резкого поворота.
EDA подчеркивает также тот факт, что наблюдения не являются окончательными. Было бы полезно получить больше данных, особенно больше данных, поступающих от отдельных водителей. Здесь у нас есть только измерения вождения для одного водителя-одной машины, что, очевидно, не идеально.
Моделирование
Этот шаг состоял в попытке найти лучшую модель, которая может предсказать наше целевое значение driver_rush
. Мы прагматично подошли к этапу моделирования и выполнили следующие шаги:
- Выберите список известных моделей классификации
- Запустите базовую модель для каждой из наших предварительно выбранных моделей
- Выберите лучшие модели на основе точности, отзыва, оценок f1.
- Настройте гиперпараметры топ-модели с помощью перекрестной проверки и наблюдайте за увеличением количества баллов.
Список предварительно выбранных моделей классификации:
- Логистическая регрессия
- Древо решений
- Случайный лес
- АдаБуст
- K Ближайшие соседи
- XGBoost
- SVC (классификация опорных векторов)
Из наших базовых моделей моделирования и после сведения задачи классификации к бинарной классификации наиболее эффективными моделями являются XGBoost Classifier, Decision Tree Classifier, Logistic Regression.
После обработки нашего набора данных о целевых показателях дисбаланса выясняется, что нашим лучшим исполнителем был классификатор XGBoost. Удивительно, но модель, которая больше всего выигрывает от сбалансированного обучающего набора данных, — это случайный лес. Таким образом, я оставил его для следующего шага этапа моделирования.
Для каждого выбранного классификатора (Random Forest и XGBoost) мы выполнили поиск по сетке вместе с перекрестной проверкой, чтобы определить лучшие гиперпараметры для данного классификатора.
В конце концов, самым эффективным классификатором был случайный лес с общим средним баллом проверки 0,707.
Вывод
- Random Forest был лучшим классификатором для прогнозирования индикатора спешки водителей.
- Удивительно, но ускорения и повороты на самом деле не указывали на то, что можно было предсказать наши целевые значения. Это наблюдение определенно нуждается в дополнительных исследованиях, поскольку на данный момент у нас недостаточно данных.
- Следующие шаги включают сбор дополнительных данных от разных дайверов и способ маркировки этих данных. Я бы посмотрел на создание приложения, которое делает это, и попросил бы друзей принять участие.
- Также было бы интересно обучить нейронную сеть и посмотреть, сможет ли она работать лучше, чем случайный лес.