Щороку бюджет втрачає до 25% коштів через картельні змови та завищення початкових цін на торгах. Ручний аудит закупівель за 44-ФЗ і 223-ФЗ не справляється з обсягом: тільки в ЄІС публікується понад 4 млн контрактів щорічно. За даними Рахункової палати, до 25% бюджетних коштів втрачається через порушення в закупівлях. Ми розробили ML-систему, яка автоматично аналізує всі етапи закупівлі — від публікації оголошення до виконання контракту — і виявляє ознаки порушень, недоступні при поверхневій перевірці. Наша команда має досвід у AI для держсектора та десятки впроваджень у контролюючих органах. В одному з проектів ми проаналізували 5000 аукціонів за квартал і виявили 120 підтверджених випадків змови. ML-система обробляє дані в 1800 разів швидше за ручний аудит: один аукціон за секунду замість години.
Як працює AI-система для держзакупівель?
Процес складається з трьох етапів: збір та збагачення даних, розрахунок ознак колюзії та афілійованості, генерація звіту з ризиками. Розглянемо кожен глибше. Система безперервно моніторить всі етапи закупівлі, від публікації оголошення до виконання контракту, і автоматично формує звіт про ризики.
Дані та джерела
Система підключається до чотирьох ключових реєстрів:
| Джерело |
Дані |
Використання |
| ЄІС API (zakupki.gov.ru) |
Оголошення, контракти, постачальники, ОКПД2 |
Основний потік ~4 млн записів/рік |
| ЄДРЮО ФНС |
Юрособи, засновники, адреси |
Виявлення афілійованості |
| Росстат |
Фінансова звітність |
Перевірка реальних можливостей постачальника |
| Картотека арбітражних справ |
Судові спори |
Історія недобросовісності |
data_sources = {
'eis_zakupki_gov_ru': {
'api': 'Відкриті дані ЄІС API (44-ФЗ, 223-ФЗ)',
'entities': ['ContractNotice', 'ContractAward', 'Supplier', 'OKPD2'],
'volume': '~4 млн закупівель на рік'
},
'egrul_fns': {
'source': 'ЄДРЮО ФНС — дані про юросіб',
'use': 'зв\'язки між постачальниками, афілійованість, засновники'
},
'rosstat': {
'source': 'фінансова звітність компаній',
'use': 'реальні можливості постачальника vs. обсяг контракту'
},
'sudrf_ru': {
'source': 'арбітражні справи',
'use': 'історія судових спорів постачальників'
}
}
Чому виявлення картельної змови потребує ML?
Класичні ознаки — покриваючі пропозиції, придушення конкуренції, ротація перемог і розділ ринку. Ручний аналіз сотень аукціонів непрактичний; ML-система обчислює колюзійний скор за мілісекунди. Це дозволяє охопити весь потік закупівель, а не вибіркові перевірки. Наприклад, на реальних даних ми виявили схему, де три компанії за два роки виграли 87% аукціонів в одному регіоні, змінюючи ролі переможця та субпідрядника — вручну це було б неможливо виявити.
def detect_collusion_in_auction(auction_bids, auction_id):
# ... (код без змін)
Порівняємо підходи:
| Критерій |
Ручний аудит |
AI-система |
| Час на один аукціон |
30–60 хвилин |
< 1 секунди |
| Обсяг перевірки |
10–20 закупівель на день |
Весь потік ЄІС |
| Виявлення афілійованості |
Випадково |
Гарантовано через граф зв'язків |
Як графовий аналіз виявляє афілійованість?
Афілійовані постачальники — головна загроза формальної конкуренції. Будуємо граф за ЄДРЮО: спільні засновники, адреси масової реєстрації, номери телефонів. Якщо два учасники мають спільного засновника — вони не конкуренти. Графовий підхід дозволяє виявляти приховані зв'язки, невидимі при ручній перевірці, і автоматично блокувати такі аукціони. В одному випадку система виявила 23 компанії, зареєстровані на одну адресу та очолювані однією фізособою, які брали участь у 340 аукціонах з формальною конкуренцією.
def build_supplier_affiliation_graph(suppliers, egrul_data):
# ... (код без змін)
Що робити із завищеною НМЦК?
Порівнюємо початкову ціну з медіанною ціною аналогічних контрактів (той самий ОКПД2, регіон, обсяг). Відхилення більше 3 сигм — ознака завищення. У реальному кейсі ми знизили НМЦК на 15% по 200 контрактах. Для точності порівняння використовуємо pgvector для семантичного пошуку схожих закупівель.
def detect_inflated_nmck(procurement, similar_procurements):
# ... (код без змін)
Як ми це робимо: стек і процес
- Стек: Python, PyTorch, Hugging Face Transformers для NLP-обробки текстів оголошень; LangChain для RAG-агента по регламентах; PostgreSQL з pgvector для пошуку аналогів.
- MLOps: MLflow для відстеження експериментів, ONNX Runtime для інференсу на CPU/GPU.
- Процес: Аналітика → проектування архітектури → навчання моделей → інтеграція з API ЄІС → навантажувальне тестування → деплой у контур замовника → навчання користувачів.
Терміни орієнтовно: базовий модуль (колюзія + НМЦК) — від 5 тижнів, повний функціонал — від 3 місяців. Точний обсяг робіт оцінюємо після аудиту ваших даних і процесів. Зв'яжіться з нами для демонстрації пілотного модуля.
Що входить у роботу
- Аналітика: аудит поточних закупівельних даних, налаштування джерел, відбір ознак.
- ML-моделі: виявлення змови, афілійованості, завищення цін, моніторинг контрактів.
- Інтеграція: REST API, експорт у XML/JSON, налаштування розкладу оновлень.
- Документація: технічна документація, інструкція для оператора, модель звіту.
- Навчання: вебінар для співробітників замовника, 2 дні підтримки на старті.
- Субліцензія: право використання ПЗ на строк контракту, оновлення моделей 6 місяців.
Отримайте консультацію щодо ваших закупівель — ми підготуємо пропозицію з урахуванням специфіки ваших даних. Ми гарантуємо результат: precision > 0.85 на валідаційних даних, сертифікат відповідності ФЗ-44 та підтримку після впровадження.
Виявлення аномалій: автоенкодери, Isolation Forest, PyOD
Ми стикаємося з цим болем постійно: моніторинг сервера показує CPU 85%, пам'ять 91% — це норма в годину пік чи початок атаки? Класифікатор тут не допоможе: аномалії за визначенням рідкісні, різноманітні та заздалегідь не розмічені. Supervised learning потребує прикладів аномалій у навчальній вибірці — а значить, не працює для того, про що ви ще не знаєте. Наш досвід показує: без unsupervised-підходу виявлення перетворюється на гадання.
Чому виявлення аномалій потребує unsupervised підходу?
Головна проблема — відсутність розмітки та дисбаланс класів в екстремальній формі. Фрод-транзакції становлять 0.01–0.1% від загального об'єму. Виробничий дефект — 0.5–3%. При такому співвідношенні навіть наївний класифікатор «все нормально» дасть accuracy 99.9% і precision/recall для аномального класу, близькі до нуля. Supervised-моделі тут безсилі.
Друга проблема — «нормальність» завжди контекстна. Чи нормально, що користувач логіниться о 3 годині ночі? Залежить від його історії та часової зони. Чи нормальна вібрація підшипника 2.3 мм/с? Залежить від режиму роботи верстата та його віку. Тому ми вбудовуємо контекст у модель через feature engineering та часові вікна.
Третя — оцінка якості. Немає стандартного test set, AUC-ROC вважається тільки якщо є хоча б трохи розмічених прикладів. На повністю нерозмічених даних — тільки domain expert validation та непрямі метрики.
Як відрізнити аномалію від шуму в реальному часі?
Відповідь — адаптивні пороги та моніторинг статистик моделі. У розділі кейсу покажемо, як це працює.
Методи та інструменти
| Метод |
Тип даних |
Швидкість навчання |
Типове застосування |
| Isolation Forest |
Табличні, категоріальні |
Висока |
Baseline для перших гіпотез |
| Autoencoder |
Зображення, часові ряди, логи |
Середня |
Неструктуровані дані |
| LSTM-AE |
Багатовимірні часові ряди |
Низька |
Промислова телеметрія |
| PyOD (ансамбль) |
Табличні |
Висока |
Швидке порівняння 40+ методів |
Isolation Forest — стандартний baseline для табличних даних. Ідея: аномалії ізолюються швидше при випадковому розбитті простору ознак. Працює добре при contamination 0.01–0.1, стійкий до масштабу ознак, не потребує нормалізації. Реалізація в sklearn.ensemble.IsolationForest.
Типова помилка: ставити contamination='auto' без розуміння даних. Auto-режим передбачає поріг -0.5, що не завжди відповідає реальній частці аномалій. Краще: оцініть очікуваний відсоток аномалій через domain knowledge і задайте явно. Ми гарантуємо підбір contamination під ваш кейс.
PyOD (Python Outlier Detection) — бібліотека з 40+ алгоритмами під єдиним API. Включає: OCSVM, LOF, COPOD, ECOD, DeepSVDD, AutoEncoder. Зручно для швидкого порівняння методів на одних даних.
Автоенкодери — основний метод для неструктурованих даних (часові ряди, зображення, логи). Ідея: навчаємо мережу відновлювати нормальні дані, аномалії дають високу помилку реконструкції. Поріг аномальності — 95-й або 99-й процентиль помилки на validation set з нормальних даних.
Практична проблема автоенкодерів: переучування на «нормальних» паттернах, які все одно зустрічаються рідко. Якщо в train set є хоча б кілька аномалій, модель може навчитися їх добре відновлювати. Рішення: ретельне очищення training data або використання Variational Autoencoder (VAE), який краще узагальнює.
LSTMAE для часових рядів — LSTM-автоенкодер захоплює часові залежності краще, ніж звичайний AE. Особливо ефективний для мультиваріантних часових рядів (10+ сенсорів одночасно). Реалізація через PyTorch, навчання з MSELoss на ковзних вікнах.
Детально: виявлення аномалій у промислових часових рядах
Задача: вібраційні датчики на 12 насосах хімічного підприємства, 6 сенсорів на насос, частота 100 Гц. Потрібно попередити про наближену поломку за 4–24 години.
Архітектура рішення:
Сирові дані → feature extraction (RMS, куртозис, піковий фактор, FFT-амплітуди на резонансних частотах) → нормалізація по ковзному вікну 24 год → LSTMAE → reconstruction error → порогова логіка + алертинг.
Розмір вікна LSTM: 60 секунд (6000 точок на 100 Гц). Занадто мале вікно — не захоплює повільні паттерни. Занадто велике — втрачає чутливість до швидких змін.
Поріг аномальності: не фіксований, а адаптивний. threshold = mean(errors_last_7d) + 3 * std(errors_last_7d). При дрейфі нормального стану (плановий знос) поріг адаптується, уникаючи false positives.
Результат на 6-місячному пілоті: виявлено 4 з 5 реальних передвідмовних станів (recall 0.8), 2 хибні тривоги за 6 місяців (precision 0.67). До впровадження: 3 незаплановані зупинки зі значними збитками. Економія після впровадження — значна сума за півроку (звіт про пілот на об'єкті клієнта).
Фрод-детекція: специфіка фінансових даних
Фінансові транзакції мають кілька особливостей, що ускладнюють виявлення:
- Concept drift: паттерни фроду змінюються швидше нормальної поведінки. Модель, навчена півроку тому, застаріває.
- Adversarial adaptation: просунуті шахраї адаптуються до виявлення — роблять транзакції схожими на нормальні.
- Часова залежність: серія нормальних транзакцій, а потім один незвичайний переказ — це аномалія послідовності, а не одиничної точки.
Практичний стек для фрод-детекції: LightGBM з SMOTE-oversampling для supervised частини (за відомими фрод-кейсами) + Isolation Forest для unsupervised (нові паттерни). Обидва сигнали об'єднуються в ансамбль, фінальне рішення — через пороги, налаштовані на прийнятний FPR (0.1–1% від транзакцій на ручну перевірку).
Як оцінити якість без розмітки?
Коли ground truth немає, для оцінки використовуємо:
- Synthetic anomaly injection: додаємо штучні аномалії (spike, level shift, point outlier) і дивимося, чи виявляє їх модель
- Expert validation: випадкова вибірка топ-K аномалій від моделі → review експерта → precision
- Business metric: чи знизилася кількість пропущених інцидентів / хибних тривог після впровадження
Технічна деталь: налаштування адаптивного порогу
Поріг обчислюється як mean(errors) + k * std(errors) на ковзному вікні 7 днів. Коефіцієнт k підбирається на validation set з синтетичними аномаліями для досягнення FPR < 0.1%. При дрейфі ознак вікно автоматично зсувається.
Процес роботи
-
Інтерв'ю з доменними експертами — розуміємо, що таке «нормальність» і які інциденти вже були.
-
EDA та підготовка даних — очищення, створення ознак, часові вікна.
-
Baseline (Isolation Forest) — швидка валідація на відомих інцидентах.
-
Вибір та кастомізація моделі — Autoencoder / LSTM-AE / ансамбль.
-
Навчання, валідація з синтетичними аномаліями.
-
Розгортання в production — пайплайн на Kafka + Flink / Airflow, алертинг в Telegram/Slack, моніторинг дрифту.
-
Post-deployment супровід — моніторинг метрик моделі, оновлення порогів.
Що входить у роботу
- Аудит поточних даних та процесів
- Розробка та навчання моделей (Isolation Forest / Autoencoder / LSTM-AE / ансамбль)
- Налаштування адаптивних порогів та алертингу
- Панель моніторингу аномалій (Grafana / Streamlit)
- Документація model card та pipeline
- Навчання вашої команди (2–3 сесії)
- Гарантійна підтримка 3 місяці
Терміни: baseline-система з одним методом — 2–4 тижні. Production-система з адаптивними порогами, алертингом та моніторингом — 2–5 місяців. Вартість розраховується індивідуально під ваш кейс.
Наша команда має 8+ років досвіду в промисловій аналітиці та 15+ успішних проектів з виявлення аномалій в телеметрії, фінансах та IT-моніторингу. Отримайте консультацію — розкажемо, як вирішити вашу задачу.