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

Давайте углубимся в набор данных, который мы получили от Kaggle.

Информация о наборе данных:

Набор данных включает 244 экземпляра, которые перегруппировывают данные двух регионов Алжира, а именно региона Беджая, расположенного на северо-востоке Алжира, и региона Сиди-Бель-Аббес, расположенного на северо-западе Алжира.

122 экземпляра для каждого региона.

Период с июня 2012 г. по сентябрь 2012 г. Набор данных включает 11 признаков и 1 выходной признак (класс). 244 случая были классифицированы на пожарные (138 классов) и непожарные (106 классов).

Информация об атрибутах:

  1. Дата: (ДД/ММ/ГГГГ) День, месяц («июнь» – «сентябрь»), год (2012 г.) Наблюдения за погодными данными
  2. Температура: температура в полдень (максимальная температура) в градусах Цельсия: от 22 до 42.
  3. Относительная влажность: Относительная влажность в %: от 21 до 90.
  4. Ws: Скорость ветра в км/ч: от 6 до 29.
  5. Дождь: общее количество дней в мм: от 0 до 16,8 FWI Компоненты
  6. Индекс влажности мелкого топлива (FFMC) системы FWI: от 28,6 до 92,5.
  7. Индекс Duff Moisture Code (DMC) по системе FWI: от 1,1 до 65,9.
  8. Индекс Кодекса засухи (DC) по системе FWI: от 7 до 220,4.
  9. Индекс начального спреда (ISI) из системы FWI: от 0 до 18,5.
  10. Индекс Buildup Index (BUI) по системе FWI: от 1,1 до 68.
  11. Индекс пожарной погоды (FWI): от 0 до 31,1.
  12. Классы: два класса, а именно Огонь и не Огонь.

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

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

Итак, на приведенной выше круговой диаграмме показано, что 43,6% данных относятся к классу «Непожароопасный», а 56,4% данных относятся к классу «Пожароопасный».

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

Мы видим, что существует несколько функций, таких как BUI и DC, которые сильно коррелируют.

На гистограмме выше показан анализ пожаров в регионе Сиди-Бель в Алжире, где мы видим данные за июнь-сентябрь, а из приведенного выше графика мы можем понять, что максимальный пожар пришелся на август. В сентябре месяце было меньше всего пожаров.

Отмечается, что в августе и сентябре произошло наибольшее количество лесных пожаров в обоих регионах. И из приведенного выше графика месяцев мы мало что можем понять. Большинство пожаров произошло в августе, а очень крупные пожары произошли всего за 3 месяца — июнь, июль и август. Меньше пожаров было в сентябре.

После EDA нам нужно разработать функции, а затем обучить модель.

Разработка функций

  1. Мы удалили из набора данных несколько столбцов, таких как день, месяц и год, которые не имели особого отношения к выходному классу.
  2. Мы классифицировали как одну из категориальных функций, которую мы закодировали, преобразуя в числовые значения, такие как огонь->1, а не огонь->0.
  3. Мы удалили «BUI» и «DC», поскольку эти две функции тесно связаны между собой.
  4. Масштабирование объектов выполняется с помощью Standard Scaler.

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

Обучение моделей

Итак, в этой постановке задачи, поскольку это проблема регрессии, мы использовали линейную регрессию.

Средняя абсолютная ошибка составляет 0,564, а оценка R2 — 0,984.

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

  1. Лассо-регрессия
  2. Ридж-регрессия
  3. Регрессия ElasticNet

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

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

Для лассо-регрессии мы имеем MAE как 1,13 и оценку R2 как 0,95.

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

Для ридж-регрессии мы имеем MAE, равный 0,56, и показатель R2, равный 0,984.

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

Для эластичной чистой регрессии мы имеем MAE 1,88 и оценку R2 0,875.

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

Выбор модели: мы выбрали ридж-регрессию, поскольку показатель R2 (0,984) был лучше по сравнению с другими моделями.

Развертывание модели

Мы разработали приложение flask в качестве внешнего приложения, где пользователь может ввести необходимое поле и спрогнозировать FWI. Было создано два файла Pickle: один — «ridge.pkl», который является нашей лучшей моделью, выбранной после обучения, и «scaler.pkl», который можно использовать для стандартизации данных.

Git-хаб: https://github.com/prasenjit2022/forest_fire_prediction

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