Данный проект является университетским заданием команды Team10. Цель проекта - создание модели машинного обучения (ML) для прогнозирования индекса качества воздуха (ИКВ, AQI) и чат-бота для Telegram Messenger.
- Данные были собраны из нескольких источников, включая:
- Метеостанции для погодных показателей.
- Станции мониторинга воздуха для значений PM2.5, PM10, NO2, CO и O3.
- Дополнительные координаты и кластеризация станций.
- Объединенные данные были очищены и обработаны, чтобы устранить дубликаты и выбросы.
- Разделение на обучающую (train) и тестовую (test) выборки для обучения модели.
- Целевая переменная: AQI (индекс качества воздуха).
- Основные признаки:
temp_mean, wdir_mean, wspd_mean, pm10, log_pm25.- Признак log_pm25 был создан из
pm25для борьбы с переобучением и сильной корреляцией.
- Признак log_pm25 был создан из
- Использована модель RandomForestRegressor для предсказания AQI.
- Гиперпараметры были оптимизированы с помощью GridSearchCV:
- Количество деревьев (n_estimators).
- Глубина деревьев (max_depth).
- Минимальное количество образцов для разбиения и листа (min_samples_split, min_samples_leaf).
Результат:
Получены оптимальные параметры модели, что улучшило точность предсказаний.
- Применен RFE (Recursive Feature Elimination) для выбора 5 лучших признаков.
- Важнейшие признаки:
- log_pm25 и pm10.
- Второстепенные: temp_mean, wspd_mean, wdir_mean.
-
Прогноз на основе координат пользователя:
- Координаты пользователя позволяют найти ближайшую станцию.
- Признаки для предсказания AQI формируются на основе данных этой станции.
-
Прогноз на 7 дней вперед:
- Логика включает динамическое добавление изменений в признаки (для учета сезонности и погодных колебаний).
- Модель предсказывает AQI для каждого из 7 дней.
- Метрика: RMSE (Root Mean Squared Error).
- Результаты предсказаний визуализированы:
- Scatter plot: сравнение реальных и предсказанных значений AQI.
- Линейные графики: сравнение динамики реальных и предсказанных данных AQI.
- Важность признаков была оценена и визуализирована.
- Telegram-бот был разработан как интерфейс для конечного пользователя:
- Пользователь отправляет свои координаты в боте.
- Бот возвращает прогноз AQI на 7 дней вперед.
- Собраны и подготовлены данные из нескольких источников.
- Создана стабильная и оптимизированная модель для предсказания AQI.
- Разработан функционал для предсказания на основе координат пользователя.
- Визуализированы результаты и определены важнейшие признаки.
- Реализован Telegram-бот как удобный интерфейс для пользователей.
-
Язык программирования: Python
-
Используемые библиотеки:
-
joblib -
pandas -
numpy -
sklearn -
geopy
-
team10project/
│
├── data/ # Данные для обучения и обработки
│ ├── extracted/ # Извлеченные данные
│ │ ├── df1_with_clusters.csv
│ │ ├── merged_by_date_full.csv
│ │ └── merged_by_date.csv
│ │
│ ├── processed/ # Обработанные данные
│ │ ├── cleaned_air_data_with_aqi.csv
│ │ ├── cleaned_weather_data.csv
│ │ ├── data_cleaned.csv
│ │ ├── merged_data copy.csv
│ │ ├── merged_data.csv
│ │ ├── test_data.csv
│ │ └── train_data.csv
│ │
│ └── raw/ # Исходные данные
│ ├── air_data_with_aqi_and_coor.csv
│ ├── air_quality_with_aqi.csv
│ ├── cat1_moscow_objects.csv
│ └── moscow_weather_full.csv
│
├── model/ # Обученная модель
│ └── new_aqi_model.pkl
│
├── notebooks/ # Jupyter Notebook файлы
│ ├── aqi_forecast.ipynb
│ ├── data_engineering.ipynb
│ ├── model_and_data_eng.ipynb
│ └── new_model_data_eng.ipynb
│
├── .gitignore # Файл для исключения из Git
├── LICENSE # Лицензионное соглашение
└── README.md # Описание проекта
-
Напишите нашему Telegram чат-боту:
👉 @AQI_predicotr_bot -
Отправьте ваше геолокационное местоположение через Telegram.
-
Получите прогноз:
📊 В ответ вы получите прогноз ИКВ на 7 дней, если ваше местонахождение находится в Москве.
Данный проект распространяется на условиях лицензии MIT.
📄 Подробности отражены в файле LICENSE.
Разработано командой Team10 ✨