Этот проект является частью курса специализации Coursera, в котором различные алгоритмы классификации машинного обучения используются для прогнозирования кода серьезности аварии в городе Сиэтл.

Ссылка на код

Введение/ Бизнес-проблема

Портал данных об авариях Департамента транспорта штата Вашингтон предоставляет информацию о авариях, произошедших по всему штату. По данным на 2019 год, на всех дорогах произошло 45 524 ДТП. Из тех:

· 235 аварий со смертельным исходом

· 973 человека подозревались в несчастных случаях с тяжелыми травмами

· 2798 человек подозревались в несчастных случаях с легкими травмами

· 9 412 ДТП с возможными травмами

· 32 106 столкновений без очевидных травм

Наша мотивация состоит в том, чтобы использовать данные о погоде, местоположении и состоянии дорог, представленные в наборе данных, предоставленном Отделом управления дорожным движением Департамента транспорта Сиэтла, чтобы получить корреляцию для прогнозирования серьезности дорожно-транспортных происшествий. Затем этот инструмент/данные могут быть предоставлены общественности и дорожным властям Сиэтла, чтобы, возможно, предотвратить/уменьшить количество серьезных или смертельных аварий в будущем, приняв меры предосторожности.

Понимание данных

Мы выбрали несбалансированный набор данных, предоставленный Отделом управления дорожным движением Департамента транспорта Сиэтла, с 194673 строками (аварии) и 37 столбцами (признаками), где каждой аварии присвоен код серьезности. Он охватывает несчастные случаи с января 2004 г. по май 2020 г. Некоторые из функций в этом наборе данных включают, помимо прочего, код серьезности, место / адрес аварии, погодные условия на месте происшествия, состояние водителя (независимо от того, находится ли он под воздействием или нет), столкновение тип. Следовательно, мы считаем, что это хороший обобщенный набор данных, который поможет нам создать точную прогностическую модель.

Дисбаланс по коду серьезности в наборе данных выглядит следующим образом.

КОД СЕРЬЕЗНОСТИ Количество

1 — 136485

2 — 58188

Предварительная обработка данных

Используется несбалансированный набор данных, предоставленный Отделом управления дорожным движением Департамента транспорта Сиэтла, с 194673 строками (происшествия) и 37 столбцами (признаками), где каждому происшествию присвоен код серьезности. Шаги, предпринятые при предварительной обработке набора данных, следующие.

1. Удаление ненужных столбцов или функций

Столбцы, содержащие описания и идентификационные номера, которые не помогают в классификации, удаляются из набора данных, чтобы уменьшить сложность и размерность набора данных. «OBJECTID», «INCKEY», «COLDETKEY», «REPORTNO», «STATUS», «INTKEY», «EXCEPTRSNCODE» и другие относятся к этой категории. Некоторые другие категориальные функции были удалены, поскольку они имели большое количество различных значений, например: «МЕСТОПОЛОЖЕНИЕ».

После выполнения этого шага размерность упала с 37 до 18.

2. Идентификация и обработка пропущенных значений

Следующим шагом является выявление столбцов и строк с отсутствующими значениями. Пустые поля, «Неизвестно» и «Другое» считались отсутствующими значениями. Они были заменены на NA, чтобы сделать набор данных однородным.

Столбцы («INATTENTIONIND», «PEDROWNOTGRNT», «SPEEDING»), в которых отсутствовало более 20% значений, были отмечены и удалены. Для столбцов («X», «Y», «COLLISIONTYPE», «JUNCTIONTYPE»….), в которых отсутствовало менее 20 % значений, соответствующие строки были удалены, поскольку большинство столбцов в этом наборе данных относятся к категориальному типу, цель было не вменять нечисловые столбцы; следовательно, не имело смысла заменять значения.

После применения двух вышеуказанных стратегий набор данных сократился с 194 673 строк и 15 столбцов до 143 747 строк и 15 столбцов.

3. Балансировка набора данных

По завершении двух вышеуказанных шагов предварительной обработки получается набор данных (143747 строк) с 94821 строкой для кода серьезности 1 и 48926 строк для кода серьезности 2. Обучение алгоритма на несбалансированном наборе данных по целевой категории приведет к необъективной модели. Модель узнает больше об одной категории, в которой больше данных. Чтобы предотвратить это, создается новый сбалансированный набор данных (97852 строки) путем случайной выборки 48926 строк с кодом серьезности 2, а затем их объединения с 48926 строками с кодом серьезности 1. Затем набор данных перемешивается для рандомизации строк.

4. Кодирование данных

Набор данных разделен на два набора данных, X и Y, где Y содержит целевую функцию (SEVERITYCODE), а X содержит все независимые функции/переменные.

Модели машинного обучения обучаются только на числовых данных; следовательно, все категориальные функции в наборе данных должны быть закодированы, чтобы алгоритмы можно было обучить этим функциям. Метод get_dummies из библиотеки pandas используется для преобразования/кодирования каждой категориальной функции. После применения количество признаков в наборе данных X увеличилось с 14 до 50.

5. Разделение на наборы данных для обучения и тестирования

Наборы данных X и Y разделены на X_train, Y_train, X_test и Y_test. Первые два будут использоваться в учебных целях, а последние два — в тестовых. Коэффициент разделения составляет 0,8, 80% данных используются для обучения, а 20% — для тестирования.

6. Нормализация/масштабирование данных

Масштабирование характеристик данных выполняется для нормализации данных в наборе данных до определенного диапазона. Это также помогает повысить производительность алгоритмов машинного обучения. Метрика Standard Scaler используется для масштабирования/нормализации всех числовых данных для наборов данных X_train и X_test. На этом этап предварительной обработки завершен, можно переходить к обучению наших моделей.

Понимание корреляции в наборе данных

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

Примеры. Существует сильная положительная корреляция между «PEDCYLCOUNT» и «COLLISIONTYPE_Cycles». Это означает, что если в столкновении участвуют велосипедисты, то в аварии участвует как минимум один велосипедист. Существует сильная отрицательная корреляция между «ROADCOND_Wet» и «ROADCOND_Dry», что означает, что если дорога мокрая, она не может быть сухой. Вот как мы можем получить более глубокое понимание данных, используя графики корреляции.

Алгоритмы машинного обучения

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

1)Классификатор логистической регрессии

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

Выбранный набор данных имеет только две целевые категории с точки зрения присвоенного кода тяжести аварии; следовательно, можно было применить эту модель к тому же самому. Результаты, матрица путаницы, отчет о классификации и точность:

2)K ближайших соседей

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

Чтобы получить оптимальные значения для ближайших соседей (k) и метрики расстояния (евклидово и манхэттенское), использовался гиперпараметр KNN. Наилучшая точность была получена для 7 ближайших соседей с евклидовой метрикой расстояния при применении к рассматриваемой задаче.

Результаты, матрица путаницы, отчет о классификации и точность:

3) Наивный байесовский классификатор

Наивный Байес классифицирует объекты на основе теоремы Байеса с предположением, что предикторы (признаки) независимы друг от друга. Теорема Байеса — это способ вычисления апостериорной вероятности P(c|x) из P(c), P(x), P(x|c). Наивный Байес наивен, поскольку предполагает, что наличие одного признака совершенно не связано с наличием другого, и каждый из них независимо вносит свой вклад в апостериорную вероятность.

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

4)Классификатор дерева решений

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

Прирост информации для классификатора дерева решений можно рассчитать либо с помощью показателя индекса Джини, либо показателя энтропии, в зависимости от того, что дает больший выигрыш. Классификатор дерева решений с гиперпараметром использовался, чтобы решить, какое дерево использовать, DTC, использующий энтропию, имел больший информационный прирост; следовательно, он был использован для этой проблемы классификации.

Результаты, матрица путаницы, отчет о классификации и точность:

5)Классификатор деревьев случайного леса

Классификатор случайного леса представляет собой ансамбль (алгоритмы, которые объединяют более одного алгоритма одного или разных типов для классификации объектов) алгоритм обучения на основе дерева. RFC представляет собой набор деревьев решений из случайно выбранного подмножества обучающей выборки. Он объединяет голоса из разных деревьев решений, чтобы определить окончательный класс тестового объекта. Используется как для классификации, так и для регрессии.

Подобно DTC, RFT требует входных данных, указывающих меру, которая должна использоваться для классификации, наряду с тем, что требуется значение количества оценщиков (количество деревьев решений). Гиперпараметр RFT был использован для определения наилучшего выбора для вышеупомянутых параметров. RFT с 75 DT с использованием энтропии в качестве меры дала наилучшую точность при обучении и тестировании на предварительно обработанном наборе данных о серьезности аварии.

Результаты, матрица путаницы, отчет о классификации и точность:

6)Машинный классификатор опорных векторов

Машина опорных векторов — это алгоритм, который можно использовать как для задач классификации, так и для регрессии. Тем не менее, он в основном используется в задачах классификации. В алгоритме SVM каждый элемент данных отображается в виде точки в n-мерном пространстве (где n — количество имеющихся у вас признаков), при этом значение каждого признака является значением конкретной координаты. Затем выполняется классификация путем нахождения гиперплоскости, которая различает два класса.

Гиперпараметр SVC использовался для выбора между Linear SVC и Kernel SVC, и последний оказался на вершине с большей точностью при применении к рассматриваемому набору данных. Он использовал ядро ​​«радиальной базисной функции» для выполнения классификации.

Результаты, матрица путаницы, отчет о классификации и точность:

Результаты

Ни один из реализованных выше алгоритмов не дал показатель точности, равный или превышающий 0,7, все они находились в диапазоне от 0,6 до 0,7. То есть эти модели могут предсказать код тяжести аварии с точностью 60–70%. Ниже представлена ​​гистограмма, где столбцы представляют точность каждой модели в порядке убывания соответственно.

Заключение

Точность классификаторов невелика, самая высокая — 69%. Обычно это означает, что модель недостаточно приспособлена, то есть ее необходимо обучить на большем количестве данных. Хотя набор данных отличается большим разнообразием сценариев, необходимо собрать больший объем данных для таких сценариев.

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

Будущая работа

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