02 — Пояснення
Чому саме це число
Коротка відповідь: це не здогад. Це частота — скільки діб з останніх тридцяти закінчилися атакою.
Розрахунок
завантаження…
Тобто число на головній — це відповідь на питання «як часто таке ставалось останнім часом», а не «що противник зробить сьогодні». Модель, яка намагається вгадати саме сьогоднішній намір, у нас теж є — і поки що вона програє цій простій лічилці. Нижче показано, наскільки саме.
Словник
Шість слів, які вживаються на всьому сайті. Усе, крім окремо позначеного, стосується міста Києва, а не області.
Що модель бачила на момент відсічки
Це стан на 12:00, коли видавалось число. Нічого з поточної доби сюди не входить — інакше це був би не прогноз, а переказ уже відомого.
Хвилини тривог у місті Києві, останні 30 діб
Цілі курсом на Київ, останні 30 діб
Стовпчик — одна доба нальоту. Це кількість повідомлень про цілі на місто, а не кількість збитих апаратів: таких даних по Києву не публікує ніхто.
А що робить модель
Паралельно з кліматологією щодня рахується ансамбль машинного навчання: він бере 70 ознак (підсумки попередніх діб, ковзні середні за 3, 7, 14 і 30 діб, довжину поточної серії, календар, тривалість темного часу) і видає свій відсоток — той, що показаний на головній під вікном прогнозу. Його записують у базу, але не публікують.
Питання «а може, модель просто слабка» ми перевірили окремо, чесно й до
кінця. ml/bakeoff.py проганяє ходьбу вперед: модель
перенавчається кожні 14 діб на всьому, що відомо на той момент, і прогнозує
наступні два тижні — рівно як у продакшні. Однакові доби, однакова відсічка,
жодного підбору по тесту. У змаганні — сучасні бустинги, а не лише навчальний
зоопарк:
| Спосіб дати прогноз | Brier | log-loss | як читати |
|---|---|---|---|
| Частота за 30 діб — те, що публікується | 0.2448 | 0.6820 | найкраще з перевіреного |
| Частота за 60 діб | 0.2482 | 0.6894 | інше вікно не допомагає |
| Random Forest | 0.2489 | 0.6901 | найкраща з моделей — і все одно позаду |
| Медіана чотирьох моделей | 0.2569 | 0.7089 | ансамбль не рятує |
| HistGradientBoosting | 0.2602 | 0.7158 | бустинг теж ні |
| XGBoost | 0.2692 | 0.7406 | гірше значуще |
| Логістична регресія | 0.3017 | 0.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 пунктів |
| Учора цілей було понад 5 | 30 діб | 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 над містом були цілі — від одного дрона до масованого удару. Різницю між цими сценаріями показує окреме число «масована атака».