Skip to the content.

AgroNDVI – постановка задачи

Контекст и цель

Пет-проект по ML/геоданным. Цель трудоустройства – ML/DS-команды в банковском агро-сегменте (РСХБ-Цифровые решения, Сбер для агробизнеса, Совкомбанк Страхование), агрохолдинги, агростраховые компании, геотех-стартапы (ExactFarming, OneSoil, Геомир).

Проект расширяет портфолио после MiniProctor (CV-прокторинг) в сторону:

Исходные вводные

Проект: AgroNDVI – спутниковый прогноз продуктивности полей

Что делает:

  1. Скачивает мультиспектральные снимки Sentinel-2 (10 м/px, каждые 5 дней) над выбранным регионом.
  2. Считает индекс вегетации NDVI по каждому пикселю.
  3. Усредняет NDVI по границам конкретных полей (shapefile или нарисованные вручную).
  4. Строит time-series NDVI по сезону для каждого поля.
  5. Скачивает погоду из Open Meteo и историческую урожайность из Росстат.
  6. Обучает LightGBM на исторических данных для прогноза урожайности.
  7. Детектирует аномальные поля – те, где NDVI уходит ниже исторического коридора.
  8. Streamlit-приложение с интерактивной картой полей, раскрашенных по предсказанной урожайности.

Технологический стек

Что показать в портфолио

План на 7-10 дней

День Задачи
1 Окружение, venv. Регистрация на Copernicus или настройка AWS-доступа. Скачиваем тестовый Sentinel-2 tile над Краснодарским краем за июль. Учимся читать через rasterio.
2 Считаем NDVI = (B8 - B4) / (B8 + B4) для каждого пикселя. Визуализация: серый снимок vs цветная NDVI-маска (red-yellow-green).
3 Загружаем shapefile с границами 3-5 тестовых полей (либо рисуем вручную в QGIS / folium). Усредняем NDVI по полю, сохраняем в pandas DataFrame.
4 Скачиваем серию tile за сезон апрель-октябрь (10-15 снимков), строим time-series NDVI по каждому полю. Визуализация классической «горбатой» кривой роста культуры.
5 Качаем погоду из Open Meteo + историческую урожайность Росстата по региону. Feature engineering: средний NDVI пика, длительность вегетации, кумулятивная сумма осадков, GDD.
6 Train LightGBM на 3-5 лет истории, регрессия на ц/га. Backtest на отложенном годе, метрика MAPE.
7 Аномалия-детектор: поля, где NDVI в этом сезоне идёт ниже исторического коридора для культуры. Простой algoritm на percentiles или isolation forest.
8 Streamlit UI: карта с folium, поля раскрашены по предсказанной урожайности, по клику – timeline NDVI + сравнение с прошлыми годами + прогноз.
9 README, docs/architecture.md, метрики, скрипт record_demo.py или подобный для демонстрации работы pipeline.
10 Заливка на GitHub под аккаунтом EValentyuk, англоязычный README (если хватит сил), пост в TenChat/LinkedIn с акцентом на агро-домен.

Почему это сильно для найма в банковский агро-сегмент

Риски и страховки

Открытые вопросы к обсуждению перед стартом

Глоссарий

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

Аббревиатуры и термины

Термин Расшифровка Что значит
AgroNDVI Agro + NDVI Авторское название проекта. Не отраслевой термин, а заголовок этой папки. Указывает на ядро системы: классический индекс NDVI применённый к агро.
NDVI Normalized Difference Vegetation Index Нормализованный индекс растительности, базовая метрика дистанционного зондирования. Подробнее в разделе ниже.
Sentinel-2 Группа из двух спутников ESA (S2A, S2B). Снимают одну и ту же точку Земли каждые 5 дней в 13 спектральных полосах. Разрешение 10/20/60 м/px. Бесплатно.
L2A Level-2A Уровень обработки Sentinel-2 – атмосферно скорректированный, готовый к расчёту индексов. Альтернатива L1C – без коррекции, требует допобработки.
B04, B08 Band 04, Band 08 Спектральные полосы Sentinel-2. B04 – красная (665 нм), B08 – ближний инфракрасный (842 нм), обе с разрешением 10 м/px.
SCL Scene Classification Layer Маска пиксельных классов в L2A: 4 = вегетация, 5 = голая земля, 6 = вода, 8/9 = облака, 10 = тонкий cirrus, 11 = снег. Используем для отсеивания мусора.
NIR Near Infrared Ближний инфракрасный диапазон. В Sentinel-2 – полоса B08. Растения активно отражают NIR, голая земля и вода – нет.
MGRS Military Grid Reference System Сетка, которой Sentinel-2 нарезает Землю. Каждый tile – квадрат 110×110 км с буквенно-цифровым ID, например 37TDK для юго-запада Кубани.
COG Cloud Optimized GeoTIFF Формат GeoTIFF с встроенными пирамидами и блочной структурой. Позволяет читать удалённо через HTTP-range без скачивания всего файла.
STAC SpatioTemporal Asset Catalog Открытый стандарт каталогизации геоданных. AWS Element 84 STAC API раздаёт каталог Sentinel-2 L2A бесплатно.
.SAFE Standard Archive Format for Europe Формат «коробки» Sentinel: папка с XML-метаданными и JP2-файлами всех полос. Альтернатива COG, используется Copernicus.
GDAL Geospatial Data Abstraction Library C-библиотека номер один для геоданных. rasterio – её Python-обёртка.
CRS Coordinate Reference System Система координат. WGS84 (EPSG:4326) – глобальная градусная сетка. UTM (например EPSG:32637 для зоны 37N) – метрическая, локальная, удобна для расчётов площадей.
GDD Growing Degree Days Сумма эффективных температур за период. Агрономический показатель развития культуры: пшенице нужно ~2000 GDD от посева до жатвы.
MAPE Mean Absolute Percentage Error Метрика регрессии: средняя по модулю относительная ошибка в процентах. Для прогноза урожайности 15-20% – норма для индустрии.
U-Net Архитектура свёрточной сети для семантической сегментации. Возможный второй этап проекта: автодетекция границ полей по снимкам. В MVP не используется.

NDVI подробнее

Формула:

NDVI = (NIR - Red) / (NIR + Red) = (B08 - B04) / (B08 + B04)

Физика, почему работает: хлорофилл поглощает красный свет (665 нм) ради фотосинтеза, а клеточная структура листа отражает ближний инфракрасный (842 нм), чтобы не перегреться. Чем активнее фотосинтез – тем сильнее этот контраст. Деление на сумму нормализует значение в диапазон [-1, +1] и убирает зависимость от яркости освещения и угла солнца.

Шкала интерпретации:

NDVI Что это
0.7 - 0.9 густой лес, пшеница в колошении, пик вегетации
0.4 - 0.7 здоровая культура в развитии
0.2 - 0.4 разреженная растительность, ранняя стадия, усыхающие посевы
0.0 - 0.2 голая земля, песок, скошенное поле
-0.3 - 0.0 вода, снег
-1.0 - -0.3 облака, искусственные поверхности

Зачем нам time-series NDVI: один снимок – это срез. Серия снимков за сезон даёт характерную кривую развития культуры. У озимой пшеницы кривая двугорбая: осенние всходы → зимний минимум 0.2 → весенний пик 0.8 в мае-июне → жатва в июле, провал к 0.1. По форме этой кривой и сопутствующей погоде LightGBM учится предсказывать урожайность ц/га.

Источники данных проекта

Источник Что даёт Доступ
AWS Element 84 STAC + bucket sentinel-cogs Sentinel-2 L2A в формате COG бесплатно, без регистрации, удалённое чтение
Copernicus Data Space Sentinel-2 L2A в формате .SAFE заблокирован для российских IP (санкции)
Microsoft Planetary Computer Sentinel-2 L2A, STAC бесплатно, fallback на случай отказа Element 84
Open Meteo Historical API температура, осадки, влажность, ветер бесплатно, без ключа
NASA POWER солнечная радиация, GDD бесплатно, без ключа
Росстат урожайности по районам РФ открытые данные, ручной парсинг
OpenStreetMap подложка карты, иногда границы полей (landuse=farmland) бесплатно, через folium или Overpass API
QGIS / geojson.io ручная отрисовка тестовых границ полей локальное использование
EuroCrops европейские размеченные поля мало российских регионов, fallback