Предотвращение лесных пожаров с помощью инструментов машинного обучения

Использование данных для выявления идеального размещения ресурсов для тушения лесных пожаров

Глядя в окно моего кабинета естествознания в средней школе, казалось, что сам ад прибыл на окраину Боулдера, штат Колорадо. Дым практически закрыл солнце, и план урока был нарушен звуками вертолетов и низколетящих самолетов, жужжащих туда-сюда, чтобы доставить воду и антипирен к огню в Четырехмильном каньоне. В результате этого пожара было сожжено 6 181 акров земли, разрушено 168 домов и нанесен ущерб имуществу примерно в 217 миллионов долларов.

К сожалению, в наши дни этот пожар далеко не аномалия. В 2020 году лесные пожары на западе США обошлись им в 13 миллиардов долларов в виде материального ущерба, не говоря уже о потерянных жизнях и душевной боли бесчисленных семей, вынужденных строить заново.

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

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

Научная основа

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

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

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

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

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

Методы

Я нашел набор данных из 1,88 миллиона лесных пожаров в США с географической привязкой на Kaggle. Это послужило бы моей целевой функцией. Конечно, это потребовало существенного переформатирования, поскольку в нем не было данных ни по одному округу, в котором не было лесных пожаров, а были только записи о существующих лесных пожарах. Кроме того, для восточных штатов было мало данных, что вынудило меня сузить свой анализ до западной части Соединенных Штатов. Я импортировал эти данные с помощью SQLite.

Что касается моих предикторов, я получил данные из нескольких источников. Мне удалось собрать климатические данные от NOAA, данные о местности от USDA и данные о топливе от Лесной службы США. Собрав все это воедино, у меня появилась довольно хорошая картина переменных, с которыми я работал на западе США.

Я использовал множество моделей в итеративном процессе, но самой мощной моделью, которую я нашел, был классификатор Extra Trees из пакета scikit-learn. Этот алгоритм представляет собой вариант случайного леса, предназначенный для дальнейшего уменьшения дисперсии путем случайного изменения точки отсечки в каждом узле каждого дерева решений. Для получения дополнительной информации об алгоритме Extra Trees я рекомендую эту статью.

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

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

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

Streamlit — отличный простой инструмент, позволяющий размещать код Python в веб-браузере. Я настоятельно рекомендую его всем, кто хочет развернуть модели без особых хлопот. Если вы хотите найти больше информации о том, как реализовать потоковое развертывание, я рекомендую их отличное руководство.

Результаты

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

Ниже метрики отображают точность и точность инструмента для пользователя. Точность колебалась от 0,88 до 0,83, а полнота варьировалась гораздо больше, от 0,93 до 0,29. Метрики зависели от точки отсечки, выбранной пользователем. По мере увеличения размера порогового огня точность улучшалась, а отзыв ухудшался.

Вывод

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

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