
# AI‑двигун рішень для пріоритетизації та оцінки ризику анкет постачальників у реальному часі

Анкети безпеки, аудити відповідності та оцінки постачальників — це важливі «ворота» для кожної B2B SaaS‑угоди. Однак ручна триажування вхідних запитів часто створює приховані витрати: затримка угод, розпорошене уявлення про ризик та перевантажені команди з відповідності. **Procurize** вже пропонує єдину платформу для організації анкет, а наступний еволюційний крок — *шар прийняття рішень*, який знає **яку** анкету вирішити **коли** і **наскільки** ризикованим є кожен постачальник.

У цій статті розглянуто дизайн, реалізацію та бізнес‑вплив AI‑двигуна рішень, який:

1. **Збирає** сигнали постачальників у реальному часі (звіти [SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2), сертифікати [ISO 27001](https://www.iso.org/standard/27001), атестації DPO згідно [GDPR](https://gdpr.eu/)).  
2. **Оцінює** ризик за допомогою гібридної Graph Neural Network (GNN) + Bayesian‑моделі.  
3. **Пріоритезує** розподіл анкет через планувальник, який навчається підкріпленням.  
4. **Передає** рішення у спільний робочий простір Procurize для безшовного виконання.

Після ознайомлення ви зрозумієте, як перетворити море запитів у даними‑керований, постійно оптимізований робочий процес, який скорочує цикл відповіді до 70 % і підвищує точність відповідей.

---

## Чому важлива пріоритетизація в реальному часі

| Проблема | Традиційний підхід | Трансформація за допомогою ШІ |
|------------|------------------------|---------------------------|
| **Різкі сплески об’єму** під час фінансування або запуску продукту | Черга за принципом «перший прийшов — перший обслуговується» | Динамічне планування з урахуванням навантаження |
| **Сліпі зони ризику** — команди оцінюють усіх постачальників однаково | Ручна оцінка ризику (часто застаріла) | Безперервна оцінка ризику на основі актуальних даних |
| **Втрати ресурсів** — молодші аналітики відповідають на низько‑важливі анкети | Правила‑базове розподілення | Призначення завдань за навичками |
| **Тертя в угодах** — повільні відповіді призводять до втрачених можливостей | Реактивні нагадування | Пр proactive alerts про постачальників високої цінності |

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

---

## Огляд архітектури

Нижче — схематична діаграма Mermaid, що ілюструє ключові компоненти та потоки даних AI‑двигуна рішень, тісно інтегрованого з існуючою платформою Procurize.

```mermaid
graph LR
    subgraph Data Ingestion
        A[""Real‑Time Vendor Signals""]
        B[""Policy Repository""]
        C[""Threat Intel Feed""]
        A --> D[""Event Stream (Kafka)""]
        B --> D
        C --> D
    end

    subgraph Risk Scoring
        D --> E[""Feature Store (Delta Lake)""]
        E --> F[""Hybrid GNN + Bayesian Model""]
        F --> G[""Risk Score (0‑100)""]
    end

    subgraph Prioritization Scheduler
        G --> H[""Reinforcement Learning Agent""]
        H --> I[""Priority Queue""]
        I --> J[""Task Dispatcher (Procurize)""]
    end

    subgraph Feedback Loop
        J --> K[""User Action & Feedback""]
        K --> L[""Reward Signal (RL)""]
        L --> H
    end
```

*Усі підписи вузлів взяті в подвійні лапки, як вимагає синтаксис Mermaid.*

### Ключові елементи

1. **Event Stream** – Apache Kafka (або Pulsar) захоплює кожну зміну: нові аудиторські звіти, сповіщення про вразливості, оновлення контрактів.  
2. **Feature Store** – Централізований Delta Lake містить інженерні ознаки (наприклад, вік постачальника, зрілість контролів, рівень експозиції).  
3. **Гібридна GNN + Bayesian‑модель** – GNN поширює ризик по графу знань контролів, а Bayesian‑компонент вносить регуляторні пріоритети.  
4. **RL‑планувальник** – Алгоритм багаторукового бандита навчається, які корекції пріоритету призводять до швидшого *закриття угод* або *зниження ризику*, використовуючи реальні нагороди з петлі зворотного зв’язку.  
5. **Task Dispatcher** – За допомогою API Procurize двигун надсилає високопріоритетні завдання безпосередньо у панель відповідального співробітника.

---

## Збір даних у реальному часі

### 1. Сигнали постачальника

- **Артфакти відповідності**: звіти SOC 2 Type II, сертифікати ISO 27001, атестації DPO згідно GDPR.  
- **Оперативна телеметрія**: CloudTrail‑логи, повідомлення SIEM, інвентаризація активів.  
- **Зовнішня розвідка**: потоки CVE, монітори темної мережі, оцінки ризику третіх сторін.

Усі сигнали нормалізуються у **канонічну JSON‑схему** та публікуються у Kafka‑топіки `vendor.signals`, `policy.updates`, `threat.intel`.

### 2. Інженерія ознак

Spark Structured Streaming постійно збагачує сирі події:

```python
from pyspark.sql import functions as F

# Приклад: обчислення кількості днів з останнього аудиту
df = spark.readStream.format("kafka").option("subscribe", "vendor.signals").load()
parsed = df.selectExpr("CAST(value AS STRING) as json").select(F.from_json("json", schema).alias("data"))
features = parsed.withColumn(
    "days_since_audit",
    F.datediff(F.current_date(), F.col("data.last_audit_date"))
)
features.writeStream.format("delta").option("checkpointLocation", "/tmp/checkpoints").start("/mnt/feature-store")
```

Отримана **таблиця Delta Lake** стає джерелом для ризикової моделі.

---

## AI‑модуль оцінки ризику

### Гібридна графова нейронна мережа

Граф знань «постачальник‑контроль» зв’язує сутності:

- **Vendor → Controls** (наприклад, “Vendor X implements Encryption‑at‑Rest”).  
- **Control → Regulation** (наприклад, “Encryption‑at‑Rest satisfies GDPR Art. 32”).  
- **Control → Evidence** (наприклад, “Evidence #1234”).

За допомогою **PyG** (PyTorch Geometric) двошарова GCN поширює ризик:

```python
import torch
from torch_geometric.nn import GCNConv

class RiskGNN(torch.nn.Module):
    def __init__(self, in_dim, hidden_dim, out_dim):
        super().__init__()
        self.conv1 = GCNConv(in_dim, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, out_dim)

    def forward(self, x, edge_index):
        x = torch.relu(self.conv1(x, edge_index))
        x = torch.sigmoid(self.conv2(x, edge_index))
        return x
```

Вектор `x` — це **нормалізована оцінка ризику** для кожного вузла постачальника.

### Bayesian‑пріор

Регуляторні експерти задають **пріори** (наприклад, “всі постачальники, що працюють з PHI, мають базовий ризик 0.65”). Bayesian‑оновлення поєднує ці пріори з постеріорами GNN:

\[
P(Risk | Data) = \frac{P(Data | Risk) \cdot P(Risk)}{P(Data)}
\]

Реалізація через `pymc3` генерує **додатковий інтервал довіри** до точкової оцінки.

---

## Планувальник пріоритетів із підкріплювальним навчанням

### Формулювання багаторукового бандита

Кожна **рука** відповідає пріоритетному рівню (наприклад, **Терміново**, **Високий**, **Середній**, **Низький**). Агент обирає рівень для конкретної анкети, спостерігає **нагороду** (закриття угоди, зниження ризику, задоволеність аналітика) та оновлює свою політику.

```python
import numpy as np

class BanditAgent:
    def __init__(self, n_arms=4):
        self.n = n_arms
        self.counts = np.zeros(n_arms)
        self.values = np.zeros(n_arms)

    def select_arm(self):
        epsilon = 0.1
        if np.random.rand() > epsilon:
            return np.argmax(self.values)
        else:
            return np.random.randint(0, self.n)

    def update(self, chosen_arm, reward):
        self.counts[chosen_arm] += 1
        n = self.counts[chosen_arm]
        value = self.values[chosen_arm]
        self.values[chosen_arm] = ((n - 1) / n) * value + (1 / n) * reward
```

**Сигнал нагороди** агрегує кілька KPI:

- **Time‑to‑Answer (TTA)** — скорочення часу відповіді.  
- **Risk‑Score Alignment** — наскільки відповідь зменшує розрахований ризик.  
- **User‑Feedback Score** — оцінка аналітика щодо релевантності завдання.

### Безперервне навчання

Кожні 5 хвилин агент переучується на останньому батчі нагород, збережених у таблиці `reward` Delta Lake. Оновлена політика миттєво застосовується до **Priority Queue**, змінюючи розподіл наступних завдань.

---

## Інтеграція з Procurize

Procurize вже надає API:

- **`/api/v1/questionnaires`** – список, створення, оновлення анкет.  
- **`/api/v1/tasks/assign`** – призначення анкети користувачу/команді.  
- Webhook‑и для подій завершення завдань.

AI‑двигун взаємодіє через легку обгортку **FastAPI**:

```python
import httpx

async def dispatch_task(vendor_id, priority):
    payload = {
        "vendor_id": vendor_id,
        "priority": priority,
        "due_date": (datetime.utcnow() + timedelta(days=2)).isoformat()
    }
    async with httpx.AsyncClient() as client:
        await client.post("https://api.procurize.com/v1/tasks/assign", json=payload, headers=auth_header)
```

Коли анкета позначається **виконаною**, вебхук Procurize оновлює таблицю нагород, завершуючи петлю зворотного зв’язку.

---

## Бізнес‑переваги

| Показник | До впровадження двигуна | Через 30 днів після впровадження |
|----------|------------------------|-----------------------------------|
| Середній TTA на анкету | 4,3 дня | **1,2 дня** |
| % високоризикових постачальників, оброблених протягом 48 годин | 22 % | **68 %** |
| Задоволеність аналітика (1‑5) | 3,1 | **4,6** |
| Прискорення угод (Won‑rate) | 31 % | **45 %** |

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

---

## План впровадження (12‑тижневий спринт)

| Тиждень | Важливе досягнення |
|--------|--------------------|
| 1‑2 | Налаштування Kafka‑топіків, визначення схеми сигналів постачальника |
| 3‑4 | Побудова Feature Store у Delta Lake, написання стрім‑джоб |
| 5‑6 | Розробка GNN‑моделі, навчання на історичних даних анкет |
| 7 | Додавання Bayesian‑пріор, калібрування інтервалів довіри |
| 8‑9 | Реалізація планувальника‑бандита, збір сигналу нагород |
| 10 | Підключення до API Procurize, тестування енд‑ту‑енд диспетчеризації |
| 11 | A/B‑пілот з підмножиною аналітиків з відповідності |
| 12 | Глобальний реліз, налаштування моніторингу та дешбордів |

Ключові критерії успішності: **затримка моделі < 500 мс**, **збіжність планувальника за 200 взаємодій**, **якість даних у Feature Store ≥ 80 %**.

---

## Перспективи розвитку

1. **Розширення на федеративне навчання** — дозволити кільком SaaS‑партнерам спільно підвищувати модель ризику без обміну сирими даними.  
2. **Шар пояснювального ШІ** — автоматично генерувати природномовні обґрунтування (наприклад, “Vendor X отримав високий бал через недавнє CVE‑2024‑1234”).  
3. **Інтеграція Zero‑Trust** — поєднати двигун з Zero‑Trust‑мережею для автоматичного надання мінімальних прав доступу до доказів.  
4. **Цифровий двійник регуляторів** — симулювати майбутні регуляторні сценарії та проактивно коригувати пріоритети.

AI‑двигун стане «мозком» проактивної екосистеми відповідності, переміщуючи фокус з реактивного заповнення анкет на передбачуване управління ризиком.

---

## Висновок

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

Впровадження цього двигуна надбудови над спільним простором Procurize дає змогу командам безпеки, юридичним та продажам працювати синхронно, швидше укладати угоди та залишатися попереду постійно змінюваних регуляторних вимог. У світі, де секунди мають значення, AI‑драйвований, ризик‑орієнтований список пріоритетів — це наступний обов’язковий шар сучасної автоматизації відповідності.

---

## Дивіться також

- [NIST SP 800‑53 Rev 5 – Risk Management Framework](https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final)  
- [ISO/IEC 27001:2022 – Information Security Management](https://www.iso.org/standard/73906.html)  
- [Google Cloud Blog: Building Real‑Time ML Pipelines with Kafka and Vertex AI](https://cloud.google.com/blog/topics/inside-google-cloud/building-real-time-ml-pipelines)