Вдохновение

В детстве я любил читать книги об акулах. Когда я ходил в библиотеку с мамой, я всегда получал столько книг об акулах, сколько мог. При этом у меня развивается легкий страх перед акулами, и это не обязательно был страх самих акул, а вместо того, чтобы быть атакованным кем-то, кто знает, насколько они могут быть вязкими. Хотя мой страх перед нападениями акул произошел из-за того, что я знал о них, есть люди, у которых тоже есть основания бояться их. Бьюсь об заклад, если вы видели фильм «Челюсти», вам было довольно страшно какое-то время плавать в океане, и я вас не виню. Но на самом деле нападения акул случаются довольно редко. Ежегодно во всем мире поступает около 80 сообщений о неспровоцированных акулах, что может быть шоком для вас, потому что это определенно было шоком для меня. Поэтому я хотел посмотреть, можно ли предсказать исход такого события.

Данные

Для этого проекта я фактически использовал два набора данных (по причинам, которые будут объяснены в другом разделе), оба из которых я получил из общедоступного репозитория наборов данных Kaggle.

Объяснение данных

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

Сначала я подумал: «Ага, это должно быть забавное испытание», но чем больше я анализировал данные, тем менее «увлекательным» и более сложным становилось это.

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

С учетом сказанного позвольте мне познакомить вас с dataset2.

Dataset2 с самого начала был намного чище, чем dataset1. В нем было не так много пропущенных значений, и мне пришлось не так много чистки. Это было похоже на переход с C ++ на Python.

Единственным недостатком этого набора данных было то, что в нем было не так много полезных функций. Например, в наборе данных 1 была информация о виде акулы, возрасте жертвы и типе травмы в результате атаки. В Dataset2 ничего из этого не было. Итак, оставалось всего два дня, и я решил, что этого нужно сделать, и начал делать свою модель.

Очистка данных

Первым делом нужно было исправить все пропущенные значения, что в случае набора данных 2 было не очень много. Из 9 столбцов только в 3 отсутствовали значения: код страны, Континент и полушарие. Поскольку country_code и Continent практически одинаковы, я просто использовал прямую заливку, чтобы очистить все отсутствующие значения, и после этого у меня был идеальный набор данных.

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

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

Безымянный был удален, потому что он просто давал текущий индекс в данных.

Какая модель?

Это была проблема двоичной классификации (фатальная / не фатальная), и моей функцией выбора был случайный древовидный классификатор с 1000 оценщиками, с использованием всех процессоров и случайным состоянием 42.

Результаты, достижения

Базовый уровень для этой проблемы был 0,75 (75%), что в значительной степени говорит о том, что если бы я угадал класс большинства в 100% случаев, я бы получил правильный прогноз в 75% случаев.

Итоговая модель имела показатель ROC_AUC 80% на проверочном наборе и 78% на тестовом наборе, что ненамного выше исходного уровня, но все же превосходит его. Он также имел показатель точности 80% на тестовом наборе и 76% на тестовом наборе.

Я хотел увидеть, какие особенности были наиболее важными при определении результата подобной атаки. Неудивительно, что тип и активность были самыми важными.

Тип - это объяснение того, как произошло нападение, а активность - это то, что человек делал, когда произошло нападение.

Модель имела показатель точности 81% для ложных прогнозов (не смертельный) и оценку точности 54% для истинных прогнозов (смертельный).

Заключение

Так что вам может быть интересно, действительно ли эта модель помогает предсказать исход нападения акулы. Да и нет. Да, в некотором смысле, это подтверждает тот факт, что нападения акул - редкое событие, которое приводит к летальному исходу примерно в 25% случаев, но это не является хорошим предиктором вопроса «Если бы я пошел на пляж, какие мои шансы попасть в смертельную атаку акулы при таких условиях? ». Эта модель была бы полезна для своего рода симуляции или игры, где вы просто хотите использовать результаты как вероятности для результата или просто если вы хотите получить более глубокое обоснование того, как модель делает прогнозы с предоставленными ей данными.

Если бы мне было предоставлено больше времени, я бы хотел продолжить очистку набора данных1, чтобы дать модели больше условий, чтобы кто-то мог настроить модель и спросить ее: «Если бы я пошел на пляж в Северной Америке, чтобы поплавать, каковы мои шансы быть в смертельной атаке с большой белой акулой? " или «Если бы я поехал заниматься серфингом в Австралию, каковы мои шансы попасть в смертельную атаку с тигровой акулой?». Я планирую продолжить работу над этой проблемой и загрузить веб-приложение, чтобы люди могли делать такие типы интерактивных прогнозов, но пока я надеюсь, что это было так же интересно для вас читать, как и для меня.

Ссылки

Репозиторий кода



Набор данных 2



Набор данных 1