air*alert

02 — Пояснення

Чому саме це число

Коротка відповідь: це не здогад. Це частота — скільки діб з останніх тридцяти закінчилися атакою.

Розрахунок

завантаження…

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

Словник

Шість слів, які вживаються на всьому сайті. Усе, крім окремо позначеного, стосується міста Києва, а не області.

Доба нальотуПроміжок з 12:00 до 12:00 наступного дня, підписаний датою початку. Нічний наліт 22:00 → 05:00 — це одна подія; календарна північ розрізала б її навпіл.
АтакаНад містом були цілі: супровід курсом на Київ, робота ППО, влучання. Від одного дрона до масованого удару — усе це «атака». Тривога без цілей атакою не рахується.
Масована атакаДоба, коли цілі були і тривоги сумарно тривали 8 годин та більше, або зафіксовано 15+ цілей курсом на місто.
Ціль курсом на Київ («трек»)Одне повідомлення Повітряних Сил про ціль, що йде на місто. Це спостереження, а не кількість бортів: одне повідомлення може означати групу дронів.
КліматологіяСлово з метеорології: «як зазвичай буває в цю пору». У нас — частота події за останні 30 завершених діб. Саме вона публікується як прогноз.
Похибка (Brier)Наскільки названі відсотки відрізнялись від того, що сталося: середній квадрат різниці. 0 — ідеально, 0.25 — рівень «щодня кажу 50%». Менше — краще.

Що модель бачила на момент відсічки

Це стан на 12:00, коли видавалось число. Нічого з поточної доби сюди не входить — інакше це був би не прогноз, а переказ уже відомого.

Хвилини тривог у місті Києві, останні 30 діб

Цілі курсом на Київ, останні 30 діб

Стовпчик — одна доба нальоту. Це кількість повідомлень про цілі на місто, а не кількість збитих апаратів: таких даних по Києву не публікує ніхто.

А що робить модель

Паралельно з кліматологією щодня рахується ансамбль машинного навчання: він бере 70 ознак (підсумки попередніх діб, ковзні середні за 3, 7, 14 і 30 діб, довжину поточної серії, календар, тривалість темного часу) і видає свій відсоток — той, що показаний на головній під вікном прогнозу. Його записують у базу, але не публікують.

Питання «а може, модель просто слабка» ми перевірили окремо, чесно й до кінця. ml/bakeoff.py проганяє ходьбу вперед: модель перенавчається кожні 14 діб на всьому, що відомо на той момент, і прогнозує наступні два тижні — рівно як у продакшні. Однакові доби, однакова відсічка, жодного підбору по тесту. У змаганні — сучасні бустинги, а не лише навчальний зоопарк:

Спосіб дати прогнозBrierlog-lossяк читати
Частота за 30 діб — те, що публікується0.24480.6820найкраще з перевіреного
Частота за 60 діб0.24820.6894інше вікно не допомагає
Random Forest0.24890.6901найкраща з моделей — і все одно позаду
Медіана чотирьох моделей0.25690.7089ансамбль не рятує
HistGradientBoosting0.26020.7158бустинг теж ні
XGBoost0.26920.7406гірше значуще
Логістична регресія0.30170.8624найкраще ранжує, найгірше калібрована

184 доби, перенавчання кожні 14 діб, довірчі інтервали різниці — рухомий блоковий бутстреп. Повна таблиця з інтервалами: ml/bakeoff.csv.

Жоден кандидат не побив просту частоту. Для найближчих довірчий інтервал різниці накриває нуль — це нічия, а не поразка моделі; для XGBoost і логістичної регресії відставання вже значуще. Тому це не «ми полінувались взяти ML»: ML узяли, дали йому сучасні алгоритми й чесні умови, і він не виграв. Публікувати складніше за простіше без доведеної переваги — це продавати складність замість точності.

Одну річ модель усе-таки вміє: впорядковувати доби за ризиком (у логістичної регресії ROC-AUC 0.63 проти 0.50 у монети — це помітно більше за випадковість). Але ранг і калібрована ймовірність — різні речі: та сама модель, що краще за всіх упорядковує доби, називає найгірші відсотки. Її щоденний вихід лежить у predictions.csv, у колонці members, поле ensemble_p — щоб було видно той день, коли вона нарешті почне вигравати.

Склад ансамблю на сьогодні (для тих, кому це цікаво)

—

Склад не зафіксований: щодня беруться п'ять моделей, найкращих за крос-валідацією на навчальних добах, і з їхніх п'яти відповідей береться медіана. Медіана, а не середнє: одна модель, що з'їхала, тягне середнє за собою, а медіану — ні.

Що ми перевіряли й що не спрацювало

Частка діб з атакою в кожній групі, 916 діб за 2024–2026. Середня частка по всій вибірці — 40.7%.

Гіпотезагрупачастка атаквисновок
Учора цілей на Київ не було578 діб34.1%працює — розрив 36 пунктів
Учора цілей було понад 530 діб70.0%
Довга ніч (понад 12 год темряви)398 діб45.7%слабко — 13 пунктів
Коротка ніч (менше 9 год)245 діб32.2%
Тихо вночі (вітер менше 8 км/год)288 діб40.6%ні — погода нічого не додає
Сильний вітер (понад 15 км/год)97 діб36.1%
МіГ-31К напередодні не злітав741 доба42.4%ні — ефект у зворотний бік
МіГ-31К напередодні злітав175 діб33.7%
Українські свята35 діб42.9%ні — вибірки замалі, різниця в межах шуму
Російські свята30 діб33.3%

Окремо про МіГ-31К. На добовому горизонті сигналу немає, але всередині того самого вікна зліт носія дає 0.29 ракетного треку проти 0.12 — удвічі більше. Сигнал реальний, просто живе години, а не добу: для прогнозу «сьогодні вночі» він марний, для контуру «удар у найближчі 1–2 години» був би найсильнішим з наявних.

Які ознаки важать найбільше

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

Читати це слід буквально: усі десять найсильніших ознак — це історія самого ряду, тобто «як було останній тиждень-місяць, так і буде». Саме тому просте середнє за 30 діб її й перемагає: модель вивчила ту саму інерцію, тільки складнішим способом. Це не вада реалізації, а властивість задачі — зовнішніх ознак, які реально попереджають за добу, у відкритих даних поки не знайдено.
Чого це число не означає. 80% не значить «майже напевно влучать у ваш будинок». Воно значить: із 100 діб, схожих на цю за вхідними даними, приблизно у 80 над містом були цілі — від одного дрона до масованого удару. Різницю між цими сценаріями показує окреме число «масована атака».
Розрахунок відтворюваний: код і дані відкриті, кожен виданий прогноз збережено з часом видачі.
ЄІ