Десять помилок і один прорив: чотири місяці досвіду

30 Грудня, 2025

Опубліковано в Блог

arrow

У вересні ми думали, що відкалібруємо модель за два тижні. У грудні дивилися на цифри, які нарешті сходяться, і розуміли: найцінніше, що ми заробили за ці місяці, — не множники й не конфіги. А список того, що не працює.

Звіт

В інженерних блогах люблять історії перемог: ось проблема, ось рішення, ось графік, що йде вгору. Наша осінь виглядала інакше. Двадцять з лишком підходів, перепробуваних на реальних пожежах Полісся. Більшість не дали нічого. Кілька зробили гірше. І жодна наукова стаття не попередила нас заздалегідь — бо негативні результати в цій галузі майже не публікують.

Це нечесно щодо тих, хто йтиме слідом. Тому ось наш звіт — повний, з цифрами, з тупиками. Якщо ви будуєте прогноз пожеж для своєї країни, цей текст збереже вам кілька місяців життя. Нам він коштував чотири.

Як влаштований WildFiresUA

Щоб помилки нижче мали сенс, два слова про саму систему.

Еволюція пожежі — клітинкова. Територія розбита на комірки; модель крок за кроком розраховує, як фронт вогню переходить з комірки в комірку залежно від палива, вітру й вологості. Паливо описане картою Андерсона з 13 класів — стандартною світовою класифікацією горючих матеріалів (трава, чагарник, підстилка, порубкові рештки), яку ми побудували й провалідували для Київської та Дніпропетровської областей. Зараз розширюємо покриття на інші області.

Погода — глобальна модель GFS (NOAA), з якої беремо вітер, температуру, вологість і опади. Для деталізації вітру по рельєфу підключений WindNinja; окремо експериментуємо з асиміляцією даних локальних метеодатчиків — щоб прогноз спирався не лише на глобальну сітку, а й на виміри з місця пожежі.

Еволюції потрібні три речі, і кожна — окремий фронт роботи:

  • правильний старт — точки займання із супутникових детекторів VIIRS і MODIS (та інших джерел): якщо старт зміщений, далі все математично правильно і географічно марно;
  • правильне місце — прогноз має рости там, де росте реальна пожежа, і це міряється індексом збігу площ (IoU);
  • правильна форма вигорілого — найважча з трьох: відтворити не лише розмір, а контур гарі, з усіма язиками за вітром і зупинками на перешкодах.

Як взагалі міряють успіх прогнозу пожежі

Головна метрика цього звіту — IoU (Intersection over Union, він же індекс Жаккара): площа перетину прогнозованої та реальної гарі, поділена на площу їхнього об’єднання. Одиниця — прогноз і реальність збіглися піксель у піксель. Нуль — не перетнулися взагалі. Поруч ходить індекс Серенсена — та сама ідея в іншій шкалі (він завжди трохи вищий за IoU; наприклад, IoU 0.16 відповідає Серенсену ≈0.28).

Прогноз Реальна гарь перетин IoU = площа перетину ÷ площа об’єднання

Скільки «нормально» для цієї галузі? Чесні цифри зі світової літератури протвережують:

  • Cruz і Alexander (2013), проаналізувавши 49 валідаційних датасетів і 1278 спостережень, показали: середня похибка моделей швидкості поширення — від 20 до 310%, і похибка ±35% вважається добрим результатом для дослідницьких умов;
  • Filippi та співавтори (2014) прогнали чотири моделі на 80 реальних середземноморських пожежах в операційному режимі — коли відома лише приблизна точка займання, як у житті. Висновок: навіть найкращі фізичні моделі на більшості пожеж дають низькі індекси збігу; складні моделі виграють у простих, але до «піксель у піксель» далеко всім;
  • значення Серенсена близько 0.6 у літературі класифікують як межу між помірним і суттєвим збігом; показники 0.8–0.9 трапляються — але в ретроспективних прогонах з точними периметрами, локальною погодою і відкаліброваним паливом, а не в операційному режимі на глобальних даних.

Ми працюємо саме в операційному режимі: глобальна погода, супутникова точка старту, жодного ручного підмальовування.

Звідки взялися ці десять напрямків

Ми зібрали їх з валідаційної літератури світових систем — родини моделей Ротермела, FARSITE та їхніх операційних нащадків: які важелі автори крутили, що радили, на що скаржилися. Додали власні гіпотези під специфіку Полісся. Вийшов беклог з двадцяти з лишком пунктів; нижче — десять, які з’їли найбільше часу і дали найменше результату. Саме в такому порядку ми їх і проходили.

Десять способів не зрушити з місця

1Синтетична погода «середній поганий день»

Перша спокуса інженера — спростити світ. Ми ганяли калібрацію на шаблоні: вітер 5 м/с, сухість FFMC 90 (Fine Fuel Moisture Code — індекс сухості дрібного пального з канадської системи пожежної небезпеки; 90 — дуже сухо, легко займається), для всіх пожеж однаково. Швидко, зручно, відтворювано. І порожньо: кожна справжня пожежа живе у своїй погоді, а ми тренували модель на погоді, якої не було ніколи. Коли нарешті підключили реальні архівні поля GFS, окремі сезони зрушили на сімикратну величину. Сімикратну.

Урок: жодної калібрації на синтетиці. Реальна погода — з першого дня, навіть якщо це повільно і боляче.

2Місяць крутіння одного множника

Здавалося логічним: модель перебільшує площу — зменшимо їй швидкість. Множник вниз, прогін, множник вниз, прогін. Місяць цієї медитації дав площу майже один до одного — і форму, яка не зрушила ні на міліметр. IoU стояв на ~0.16, як прибитий. Бо множник масштабує розмір плями, а форму малюють точка займання, вітер і паливо. Ми місяць натирали не ту лампу.

Урок: площа і форма — незалежні осі. Окремі важелі, окремі метрики, окремі графіки.

3«Точніша» фізика вологи, яка все зламала

Підключили повну американську систему вологості палива замість простого емпіричного шортката. Очікували акуратності — отримали різанину: великі пожежі трохи покращали, а малі й середні модель почала душити до десятої частини реальної площі. Відкотили за день. День на відкат, тиждень на інтеграцію.

Урок: складніша фізика не означає краща. Кожен апгрейд — на всіх класах розміру, до того як повірити.

4Гірський вітер для рівнинного Полісся

Тиждень інтегрували WindNinja — вітровий downscaling по рельєфу, серйозний інструмент, яким пишаються каліфорнійські системи. Ефект на Поліссі з його ухилом 0.17%: плюс-мінус один відсоток площі, нуль на форму. Рівнина не викривлює вітер. Нам здавалося, що викривлює. Інструмент лишився в стеку — він знадобиться в Карпатах, але не тут.

Урок: важіль має відповідати ландшафту. Гірський інструмент на рівнині — баласт із гарною документацією.

5Оверфіт на одну ідеальну пожежу

У нас був один майже бездоганний кейс: велика пожежа з чистими супутниковими даними, точною точкою старту, гарною погодою. Спокусливо було відкрутити всі параметри під неї до максимального IoU — і ми це зробили. На цьому кейсі вийшло красиво. На решті архіву стало гірше: те, що ідеально лягло на одну пожежу, перетягнуло модель і зламало десяток інших. Класична пастка — підгонка під найзручніший приклад замість усього розподілу.

Урок: одна пожежа — це не валідація, це анекдот. Тюнінг тільки проти всього архіву одразу.

6Тюнінг пожежі, якої не буває

Крутили модель верхової пожежі — перехід вогню в крони дерев, щільність наметів. Ефект: рівно нуль, з точністю до шуму. Полісся горить низом: трава, очерет, підстилка, торф. Верхова фізика в наших прогонах просто не вмикалась. Ми налаштовували двигун літака на автомобілі.

Урок: спершу зрозумій, як горить твій регіон. Потім тюнь той шар моделі, який у ньому працює.

7Гвинтики, які краще не чіпати

Два внутрішні параметри геометрії еліпса поширення. Сумарний ефект на IoU: від мінус 0.006 до нуля. Бонус: один із них, виставлений «за офіційною рекомендацією», зупиняв поширення взагалі — пожежа в моделі просто відмовлялась рости. Чудовий спосіб втратити два дні на пошук неіснуючого бага у власному коді.

Урок: внутрішні константи рушія — останніми, з A/B-тестом на кожен дотик.

8Літературний фаворит, який сколапсував

Пере-засів з периметра — улюблений прийом наукових статей про асиміляцію: щодня перезапускай модель від реально спостереженого фронту. На папері — елегантно. У нашого рушія фронт, стартований з периметра, колапсував до чотирьох-п’яти гектарів — проти півтори тисячі від точкового підпалу. Ініціалізація конфліктувала з механікою займання десь у глибині рушія. Обхід ми знайшли значно пізніше — хмара точок замість контуру, — але місяць пішов у пісок.

Урок: перш ніж будувати на прийомі з літератури — найдешевший smoke-тест: чи вміє твій рушій це в принципі.

9Стеля, в яку ми довго не вірили

Систематичний прогін множника швидкості по сітці значень — чесний, методичний, до кінця. IoU ріс, ріс і вперся у 0.20. Далі будь-яке зменшення починало вбивати перший день пожежі: модель не встигала розгорітися там, де реальний вогонь уже йшов. Сітка прогонів довела математично те, що ми відчували шкірою: статичний глобальний множник не дасть IoU 0.5. Ніколи. Це була не погана новина — це була перша чесна.

Урок: якщо параметр має стелю — це не параметр поганий. Це не той важіль.

10Паливна карта, яка брехала всім нам три місяці

Найдорожча помилка осені — і найповчальніша. Глобальний кросволк землепокриву призначив поліським торфовищам клас «швидка суха трава». Торф так не горить. Торф тліє — повільно, вперто, тижнями. А модель усі ці місяці літала по «сухій траві» з десятикратним перебільшенням площі, і ми лікували симптоми — множниками, гвинтиками, свіпами з пунктів 2, 7 і 9 — замість того, щоб спитати, по чому вона взагалі горить.

Прозріння виглядало як один вечір і два растри: контур реальної гарі з знімків Sentinel-2, накладений на карту торфовищ. Збіг — сто відсотків. Уся тестова пожежа, до останнього пікселя, лежала на торфі. Пам’ятаю тишу в чаті після цього скриншота. Три місяці тюнінгу проти одного шару даних, який ми могли накласти у вересні.

Урок: перш ніж калібрувати модель — перевір, по якому паливу вона горить. Один растр торфовищ вартував більше за весь квартал тюнінгу.

Десять пунктів. Чотири місяці. Жоден графік не пішов угору. Якби історія закінчувалась тут, це був би текст про те, як команда чесно програла осінь. Але був ще одинадцятий крок.

Крок 11. Пожежа вночі спить. Модель — ні.

Прорив прийшов не з нової статті й не з хитрого алгоритму. Він прийшов з питання настільки простого, що його було незручно ставити вголос: а що робить наша пожежа вночі?

Реальна пожежа вночі майже зупиняється: падає температура, росте вологість, трава відволожується, фронт завмирає до ранку. А рушій за замовчуванням жене вогонь на повній швидкості двадцять чотири години на добу. Кожна нічна година накручувала площу, якої не було. Кожен багатодобовий прогноз роздувався цією невидимою нічною їздою.

Ми ввімкнули добове вікно горіння: повна швидкість у денний пік, близько п’яти відсотків уночі. Один конфіг. І таблиця результатів, у яку ми чотири місяці дивились без надії, вперше відповіла:

  • кожен другий хибний гектар зник із прогнозу. Перебільшення площі впало на 52%: з 6.5× до 3.1× на тестовій пожежі, у важких конфігураціях — з 11.4× до 5.5×. Один параметр зробив те, чого не дали три місяці тюнінгу;
  • збіг форми підскочив на 119% — IoU на testbed з 0.13 до майже 0.28, більш ніж удвічі за один крок. Для порівняння: найкращий із попередніх двадцяти важелів давав одиниці відсотків;
  • на всьому архіві пожеж 2020–2025 добовий цикл став найбільшим одиничним внеском у фінальну медіану IoU 0.16 — у шкалі Серенсена, якою звітує світова література, це ≈0.28. Для операційного режиму на глобальних даних, де Filippi з колегами фіксували низькі скори в більшості моделей, це чесний робочий рівень — і рівно та точка, з якої видно наступну: 0.3;
  • повний стек подешевшав утричі. Разом із бар’єрами незгораності — дороги, вода, рілля — сумарне перебільшення впало з 31× до 12×: мінус 61%, прогноз у 2.6 раза ближчий до реальної площі, ніж «коробковий» стан рушія на старті осені.

Чому саме це спрацювало, коли двадцять інших важелів — ні? Бо всі інші правили простір: де горить, як швидко, в який бік. А добовий цикл — єдиний, що правив час: коли горить узагалі. Для багатодобових пожеж Полісся, де торф тліє тижнями, часова вісь виявилась головною. Ми шукали відповідь у картах і множниках, а вона була в годиннику.

Що ми несемо у 2026

  1. Торф-свідома фізика. Окремий клас палива для торфовищ — осушених і ні, з живою вологістю з супутникових ґрунтових даних. Лікування кореня, а не симптомів з помилки 10.
  2. Класифікація термоточок. Відрізняти наступаючий фронт від тліючого ядра у даних VIIRS/MODIS: фронт формує прогноз, ядро — джерело диму й повторних загорянь. Зараз модель бачить їх однаково.
  3. Асиміляція кожні 12 годин. Пере-прив’язка прогнозу до кожного супутникового прольоту — через хмару точок займання, обхід, виношений у помилці 8. Сюди ж — метеодані з локальних датчиків, щоб погода в моделі була не лише глобальною сіткою GFS.
  4. Стратифікована валідація. Торф’яні й мінеральні пожежі — окремі таблиці. Різна фізика не повинна усереднюватись в один глобальний множник, ми вже знаємо, чим це закінчується.
  5. Нові області. Паливна карта Андерсона, відпрацьована на Київщині та Дніпропетровщині, поїде далі по областях.

Чотири місяці тому ми хотіли красивий IoU. Тепер ми хочемо правильну фізику — і знаємо, що красивий IoU прийде слідом. Це, мабуть, і є головний результат осені, який не влазить у жодну метрику.

Працюймо разом

WildFiresUA — українська climate-tech команда, яка займається якістю повітря, що будує операційну систему виявлення й прогнозування пожеж на відкритих даних — Copernicus Sentinel-2, VIIRS/MODIS, GFS — з валідацією проти опублікованих світових benchmark-ів, на реальних пожежах, у країні, що воює.

Ми відкриті до:

  • акселераційних програм і дослідницьких колаборацій у climate tech, спостереженні Землі та стійкості до катастроф;
  • стратегічних партнерств з командами й організаціями, яким потрібна наша компетенція в моделюванні поширення вогню, супутникових пайплайнах і операційній валідації.

Контакт: yourairtest.com — сторінка контактів

Джерела

  1. Cruz M.G., Alexander M.E. Uncertainty associated with model predictions of surface and crown fire rates of spread. Environmental Modelling & Software, 2013, 47:16–28. doi.org
  2. Filippi J.-B., Mallet V., Nader B. Evaluation of forest fire models on a large observation database. Natural Hazards and Earth System Sciences, 2014, 14:3077–3091. nhess.copernicus.org
  3. Duff T.J., Chong D.M., Tolhurst K.G. Indices for the evaluation of wildfire spread simulations using contemporaneous predictions and observations of burnt area. Environmental Modelling & Software, 2016, 83:276–285. doi.org
  4. Anderson H.E. Aids to Determining Fuel Models for Estimating Fire Behavior. USDA Forest Service, GTR INT-122, 1982. research.fs.usda.gov
  5. Rothermel R.C. A Mathematical Model for Predicting Fire Spread in Wildland Fuels. USDA Forest Service, Research Paper INT-115, 1972. research.fs.usda.gov
  6. Aragoneses E. et al. Comparison of Different Models to Simulate Forest Fire Spread: A Case Study. Forests, 2024, 15(3):563. mdpi.com
  7. NASA FIRMS — Fire Information for Resource Management System (VIIRS/MODIS активні пожежі). firms.modaps.eosdis.nasa.gov
  8. NOAA — Global Forecast System (GFS). ncei.noaa.gov
  9. WindNinja — Missoula Fire Sciences Laboratory. github.com/firelab