air*alert

03 — Методологія

Як побудовано оцінку

Формальний опис: означення, відсічка, схема валідації, метрики, результати й межі застосовності.

Зміст 1. Одиниця спостереження 2. Цільова змінна 3. Відсічка прогнозу й витік 4. Простір ознак 5. Схема валідації 6. Специфікація моделі 7. Метрики 8. Результати 9. Обмеження

1. Одиниця спостереження

Одиниця — доба нальоту (raid day), визначена як інтервал від 12:00 до 12:00 наступної календарної доби за київським часом і підписана датою початку:

raid_day(t) = date( (t at time zone 'Europe/Kyiv') − 12 год )

Вибір зумовлений тим, що типовий наліт має нічний профіль (22:00–05:00) і календарна північ розділяє одну подію на дві доби, штучно створюючи дві спостережні одиниці з половинними значеннями. Нічним вікном скрізь вважається 22:00–06:00.

2. Цільова змінна

Визначено порядкову шкалу тяжкості S ∈ {0,1,2,3} для міста Києва:

РівеньНазваОпераційна ознака
0тишатривог не було або сумарно < 30 хв
1тривога без ударутривога ≥ 30 хв, ознак цілей над містом немає
2атакацілі на місто: супровід курсом на Київ, робота ППО, влучання
3масована атакацілі над містом і при цьому ≥ 8 год тривоги за добу нальоту або ≥ 15 треків

Пороги рівня 3 — апріорні константи (480 хвилин, 15 треків), а не квантилі. Причина: кількість треків залежить від того, наскільки докладно канал описує повітряну обстановку, і її квантиль дрейфує (у добу атаки: 5 у 2024, 5 у 2025, 9 у 2026). Поріг, знятий з одного року, наступного означав би інше. Тривалість тривог надходить із реєстру КМДА — тракту, незалежного від каналу. Рівень 3 трапляється 5 / 14 / 14 разів на рік.

Замість однієї 4-класової задачі розв'язується три вкладені бінарні: P(S ≥ 1), P(S ≥ 2), P(S ≥ 3). Рівень S ≥ 2 тотожний мітці «атака» за побудовою, тому окремої моделі під нього немає. Публікується P(S ≥ 2) як «ймовірність повітряної атаки», P(S ≥ 3) як «масована атака», P(S ≥ 1) як «тривога понад 30 хвилин».

Бінарне «був / не був» втрачає різницю між одним дроном і 300 цілями, а саме вона визначає практичні наслідки. Водночас точна кількість засобів по Києву не публікується жодним джерелом, тому вигадане число дало б модель, навчену на шумі.

3. Відсічка прогнозу й витік

Прогноз формується о 12:00 київського часу доби d. Ознака вважається допустимою, якщо існувала до цього моменту. Оскільки відсічка збігається з початком вікна, правило зводиться до зсуву:

горизонт 1 («сьогодні»): ознаки = f( raid_day ≤ d−1 )
горизонт 2 («завтра»): ознаки = f( raid_day ≤ d−2 )

Для горизонту 2 доба d−1 на момент відсічки ще триває, тому її підсумки недоступні. Це найпоширеніше джерело прихованого витоку в задачах такого типу: модель, що бачить d−1 при прогнозі на d+1, показує неправдоподібно високу якість.

Окремий випадок — погода. Прогноз погоди на ніч є допустимою ознакою (о 12:00 він уже виданий), фактична погода тієї ночі — витік. У поточній версії блок погоди вимкнено повністю: у базі поки накопичена лише фактична погода (ERA5), а прогнозні зрізи з власним issued_at збираються з 07.09.2026. Ціна вимкнення виміряна: log-loss 0.4643 з погодою проти 0.4742 без неї, і перше число некоректне.

4. Простір ознак

58 ознак, згрупованих у блоки:

Абляція блоків (горизонт 1, XGBoost, log-loss): A — 0.4659; C — 0.6366; A+C — 0.5001; A+B+C — 0.4836. Історичні вікна дають найбільший приріст серед допустимих блоків; календар сам по собі не несе майже нічого.

5. Схема валідації

Розбиття виключно хронологічне; перемішування неприпустиме, оскільки сусідні доби сильно корельовані:

train : 2024-02-01 … 2026-03-07 (732 доби, 80%)
  train_fit : перші 80% train — добір гіперпараметрів (CV)
  train_val : останні 20% train — вибір K, корекції частки і того, що взагалі публікувати
test : 2026-03-08 … 2026-09-07 (184 доби, 20%)

Гіперпараметри добираються всередині train процедурою TimeSeriesSplit(n_splits=5) (forward chaining) за критерієм log-loss. Тестова частина не бере участі ні у відборі гіперпараметрів, ні у відборі моделей, ні у визначенні порогів лейбла.

Це важливо, бо в попередній версії роботи сім рішень (ансамбль замість одиночної моделі, K, медіана проти середнього, вікно навчання, поріг, набір блоків ознак) приймалися за таблицями на тесті — після чого тест перестав бути оцінкою узагальнення. Тепер усі вони ухвалюються на train_val, і тест повідомляє лише підсумок.

6. Специфікація моделі

Розглянуто десять сімейств із програми курсу машинного навчання: kNN, логістична регресія з L1 і L2 регуляризацією, PCA + логістична регресія, дерево рішень, беггінг, випадковий ліс, градієнтний бустинг (HistGB), XGBoost, багатошаровий перцептрон. Додатково — стекінг, блендинг, ізотонічне калібрування.

Підсумкова специфікація:

p̂(x) = median{ p̂1(x), …, p̂5(x) },
де {1…5} — п'ять моделей з найменшим CV-log-loss усередині train

Обґрунтування ансамблю: рейтинг за крос-валідацією не переноситься на майбутнє. На горизонті 1 CV поставила LogReg L1 на перше місце, тоді як на тесті найкращою виявилась XGBoost, восьма за CV із десяти. Медіана п'яти не гірша за одиночну модель, обрану за CV, у жодному з двох зрізів, і краща на тесті. Медіана, а не середнє: одна модель з аномальним виходом (MLP, CV = 1.12) зміщує середнє й не зміщує медіану.

Склад ансамблю не фіксується: при кожному дотренуванні п'ять моделей відбираються заново й записуються разом із прогнозом.

Відхилені варіанти, з підставами: стекінг і блендинг (гірші за медіану на 760 рядках); ізотонічне калібрування (0.4956 проти 0.4643); обрізання вікна навчання до 365 і 180 діб (0.4764 і 0.5511 проти 0.4581); експоненційна вага за свіжістю (0.4647–0.5142); регресія на тривалість тривог (R² ≤ 0 в усіх моделях, тобто гірше за константу).

7. Метрики

Основні — власні (proper) правила оцінювання, оскільки предметом є ймовірність, а не мітка:

log-loss = −(1/n) Σ [ yi log pi + (1−yi) log(1−pi) ]
Brier = (1/n) Σ ( pi − yi

Додатково: ROC-AUC і PR-AUC для оцінки ранжування, матриця плутанини за порогом рішення.

Accuracy свідомо не використовується. Базова частка позитивів на тесті — 45.7%, у train 39.5%; при такому дрейфі та незбалансованості точність відображає передусім співвідношення класів, а не якість прогнозу. Крім того, на 184 добах різниця в кілька відсотків log-loss не відрізняється від нуля — тому кожне число подано з довірчим інтервалом.

8. Результати

Тестова вибірка — 184 доби (2026-03-08 … 2026-09-07), навчальна — 732. Частка позитивів: 0.395 у train, 0.457 у test. Конфігурація без блоку погоди. Довірчі інтервали — рухомий блоковий бутстреп (блок 7 діб, 5000 реплік) для різниці поточкових втрат відносно кліматології.

Горизонт / цільОцінкаlog-loss BrierROC-AUC Δ до кліматології95% ДІ
сьогодні / атакамодель0.69200.24640.606-0.0169[-0.042, +0.016]
сьогодні / атакаконстанта0.69720.25190.500-0.0116[-0.042, +0.019]
сьогодні / атакаперсистенція0.70890.25710.512+0.0000[+0.000, +0.000]
сьогодні / атакакліматологія 300.67980.24280.570-0.0290[-0.061, +0.010]
сьогодні / тривога ≥30 хвмодель0.59810.20380.495+0.0325[-0.022, +0.084]
сьогодні / тривога ≥30 хвконстанта0.57270.19120.500+0.0070[-0.043, +0.052]
сьогодні / тривога ≥30 хвперсистенція0.56800.18930.518+0.0024[-0.049, +0.044]
сьогодні / тривога ≥30 хвкліматологія 300.56560.18610.449+0.0000[+0.000, +0.000]
сьогодні / масованамодель0.23530.05680.719-0.0044[-0.010, +0.010]
сьогодні / масованаконстанта0.23970.05720.500+0.0000[+0.000, +0.000]
сьогодні / масованаперсистенція0.22950.05640.664-0.0102[-0.023, +0.001]
сьогодні / масованакліматологія 300.18370.04910.774-0.0560[-0.117, +0.006]
завтра / атакамодель0.95390.31880.542+0.2483[+0.126, +0.404]
завтра / атакаконстанта0.69720.25190.500-0.0084[-0.037, +0.019]
завтра / атакаперсистенція0.70560.25560.518+0.0000[+0.000, +0.000]
завтра / атакакліматологія 300.67820.24220.585-0.0274[-0.064, +0.014]
завтра / тривога ≥30 хвмодель0.98360.34150.529+0.4123[+0.188, +0.675]
завтра / тривога ≥30 хвконстанта0.57270.19120.500+0.0014[-0.056, +0.050]
завтра / тривога ≥30 хвперсистенція0.57390.19220.476+0.0026[-0.052, +0.045]
завтра / тривога ≥30 хвкліматологія 300.57130.18740.434+0.0000[+0.000, +0.000]
завтра / масованамодель0.24110.05720.676+0.0014[-0.008, +0.012]
завтра / масованаконстанта0.23970.05720.500+0.0000[+0.000, +0.000]
завтра / масованаперсистенція0.23240.05670.616-0.0072[-0.018, +0.001]
завтра / масованакліматологія 300.19080.05020.757-0.0489[-0.104, +0.007]

Кліматологія — ковзне середнє за 30 діб — перевершує модель на всіх трьох цілях і обох горизонтах. Жодна різниця на горизонті «сьогодні» не є статистично значущою: усі довірчі інтервали накривають нуль. На горизонті «завтра» модель значущо гірша за базові лінії.

ROC-AUC моделі для головної цілі — 0.606, тобто певна здатність ранжувати є, але вона не конвертується в кращі ймовірності. Для рівня 3 найкраще ранжування дає та сама кліматологія (0.774).

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

9. Обмеження

  1. Домінування інерції. Вісім із десяти найвагоміших ознак — автокореляція власного ряду. Модель відтворює режим, а не механізм ухвалення рішень противником, і принципово не здатна передбачити зміну режиму.
  2. Нестаціонарність. Частка позитивів зросла з 53% (2024) до 81% (2026). Частина зростання пояснюється не інтенсивністю, а щільністю публікацій джерел: формат супроводу цілей став регулярним лише з 2024 року, тому дані до 2024 у навчанні не використовуються.
  3. Режимний зсув вересня 2026. З 05.09.2026 середні хвилини тривог у Києві впали з 553 до 179. Ознак, що описують цю зміну, у моделі немає; якщо режим триває, оцінки будуть систематично завищеними.
  4. Відсутність погодинного контуру. Сигнали з випередженням у години (зліт МіГ-31К, пуски з носіїв) на добовому горизонті не працюють: перевірено, 61% проти 61%. Для горизонту 1–2 години вони були б найінформативнішими, але такої моделі поки немає.
  5. Одне місто. Оцінка стосується лише Києва. Перенесення на інші міста потребує окремої розмітки, оскільки джерела й формат оголошення тривог відрізняються.
  6. Не є системою оповіщення. Оцінка описує добу цілком і не локалізує ні час, ні район, ні тип засобу.

Відтворюваність

Кожен виданий прогноз зберігається з часом видачі, складом ансамблю й розміром навчальної вибірки; рядки не перезаписуються. Порівняння прогнозів із фактом доступне у вивантаженні predictions.csv, вхідні дані — у daily_features.csv.

Дані: реєстр КМДА, Повітряні Сили ЗСУ, Open-Meteo ERA5. Період: 24.02.2022 →. Навчальна вибірка: 2024 →.
ЄІ