
# AI-päätösmotor reaaliaikaiseen toimittajakyselyiden priorisointiin ja riskiarviointiin

Turvallisuuskyselyt, noudattamisauditoinnit ja toimittajaarvioinnit ovat olennaisia portinvartijoita jokaisessa B2B SaaS -kaupassa. Kuitenkin sisääntulevien pyyntöjen manuaalinen triage aiheuttaa usein piilotetun kustannuksen: viivästyneitä kauppoja, fragmentoitunutta riskinäkökulmaa ja ylikuormitettuja noudattamistiimejä. **Procurize** tarjoaa jo yhtenäisen keskuksen kyselyjen järjestämiseen, mutta seuraava evoluutiovaihe on *päätöksentekokerros*, joka tietää **mitä** kyselyä käsitellä **milloin**, ja **kuinka** riskialtis kukin toimittaja todella on.

Tässä artikkelissa käydään läpi **AI-päätösmotorin** suunnittelu, toteutus ja liiketoimintavaikutus, joka:

1. **Saapuu** toimittajasignaalit reaaliajassa ([SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2) -raportit, [ISO 27001](https://www.iso.org/standard/27001) -sertifikaatit, [GDPR](https://gdpr.eu/) DPO‑todistukset).  
2. **Arvioi** riskin käyttäen hybridimallia, graafineuroverkkoa (GNN) + Bayesilaista mallia.  
3. **Priorisoi** kyselytehtävät vahvistusoppimiseen perustuvan ajastimen avulla.  
4. **Syöttää** päätökset takaisin Procurizen yhteistyöympäristöön sujuvaa toteutusta varten.

Lopuksi ymmärrät, miten muuttaa valtava määrä pyyntöjä dataohjautuvaksi, jatkuvasti optimoiduksi työnkuluksi, joka lyhentää vastejaksoa jopa **70 %** samalla kun vastausten tarkkuus kasvaa.

---

## Miksi reaaliaikainen priorisointi on tärkeää

| Kipupiste | Perinteinen lähestymistapa | AI‑pohjainen muutos |
|------------|----------------------------|----------------------|
| **Volyymin piikit** rahoituskierrosten tai tuotelanseerauksien aikana | Ensimmäinen tuleva, ensimmäinen palvellaan -jono | Dynaaminen kuormitustietoista ajoitusta |
| **Riskisokeat kohdat** – tiimit kohtelevat kaikkia toimittajia yhtäläisesti | Manuaalinen riskiarviointi (usein vanhentunutta) | Jatkuva riskin arviointi reaaliaikaisilla tiedoilla |
| **Resurssien tuhlaus** – juniorianalyytikot vastaavat vähämerkityksellisiin kyselyihin | Sääntöihin perustuva tehtävänjako | Taitojen perusteella kohdennettu tehtävämääritys |
| **Kauppaprosessin kitka** – hitaat vastaukset aiheuttavat menetettyjä mahdollisuuksia | Reaktiivinen seuranta | Ennaltaehkäisevät hälytykset korkean arvon toimittajille |

## Arkkitehtuurin yleiskatsaus

Alla on korkean tason Mermaid-kaavio, joka havainnollistaa AI-päätösmotorin keskeisiä komponentteja ja tietovirtoja, tiiviisti integroituna olemassa olevaan Procurize-alustaan.

```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
```

*Kaikki solmutunnisteet on ympäröity kaksoislainausmerkkeihin Mermaid‑syntaksin vaatimusten mukaisesti.*

### Keskeiset elementit

1. **Tapahtumavirta** – Apache Kafka (tai Pulsar) tallentaa jokaisen muutoksen: uudet auditointiraportit, haavoittuvuusilmoitukset, sopimuspäivitykset.  
2. **Ominaisuustallennus** – Keskitetty Delta Lake sisältää käsitellyt ominaisuudet (esim. toimittajan ikä, ohjausjärjestelmän kypsyys, altistustaso).  
3. **Hybrid GNN + Bayesilainen malli** – GNN levittää riskiä tietämyspuuhun, jossa on toisiinsa kytkettyjä hallintatoimia, kun taas Bayes‑komponentti lisää ennakkosääntelyn säädösten tietoa.  
4. **RL‑ajastin** – Monivärinen bandiittialgoritmi oppii, mitkä prioriteettimuutokset johtavat nopeimpaan *kaupan sulkemiseen* tai *riskin vähentämiseen*, käyttäen todellisia palkintoja palautesilmukasta.  
5. **Tehtävien jakaja** – Hyödyntäen Procurizen API:a, moottori työntää korkean prioriteetin kyselypyynnöt suoraan asianomaisen sidosryhmän hallintapaneeliin.

## Reaaliaikainen tietojen syöttö

### 1. Toimittajasignaalit

- **Noudattamisartifaktit**: [SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2)‑raportit, [ISO 27001](https://www.iso.org/standard/27001)‑sertifikaatit, [GDPR](https://gdpr.eu/) DPO‑todistukset.  
- **Operatiivinen telemetria**: CloudTrail‑lokit, SIEM‑hälytykset, laiteinventaariot.  
- **Ulkoinen tiedustelu**: CVE‑syötteet, dark‑web‑vuotoraportit, kolmannen osapuolen riskipisteet.

Kaikki signaalit normalisoidaan **kanoniseen JSON‑skeemaan** ja julkaistaan Kafka‑aiheisiin `vendor.signals`, `policy.updates` ja `threat.intel`.

### 2. Ominaisuuksien luonti

Spark Structured Streaming -työ rikastuttaa jatkuvasti raakatapahtumia:

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

# Example: calculate days since last audit
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")
```

Tuloksena oleva **Delta Lake -taulu** toimii riskimallin lähteenä.

## AI Risk Scoring Engine

### Hybrid Graph Neural Network

Toimittaja‑ohjaus tietämyspuussa yhdistetään entiteettejä:

- Toimittaja → Hallintatoimet  
- Hallintatoimi → Sääntely  
- Hallintatoimi → Todiste  

```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
```

Ulostulovektori `x` edustaa **normeerattua riskiä** jokaiselle toimittajasolmulle.

### Bayesian Prior Layer

Regulaatioasiantuntijat tarjoavat **priorit** (esim. “Kaikilla PHI‑käsittelevillä toimittajilla on lähtöriski 0,65”). Bayesilainen päivitys yhdistää nämä priorit GNN‑posterioriin:

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

```python
import pymc3 as pm

with pm.Model() as model:
    prior = pm.Normal('prior', mu=0.65, sigma=0.1)
    likelihood = pm.Bernoulli('likelihood', p=gnn_output, observed=observations)
    posterior = pm.sample(2000, tune=1000)
```

Implementation käyttää `pymc3`‑kirjastoa posteriorijakaumien näytteenottoon, tarjoten **luottamusvälin** pistearvion ohella.

## Prioritization Scheduler with Reinforcement Learning

### Multi‑Armed Bandit Formulation

Jokainen **vipu** vastaa prioriteettitasoa (esim. **Kiireellinen**, **Korkea**, **Keskitaso**, **Matala**).

```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
```

**Palkkisignaali** kerää useita KPI‑mittareita:

- **Vastausnopeus (TTA)**‑lyhennys.  
- **Riskipisteiden yhtenevyys** (kuinka hyvin vastaus lieventää laskettua riskiä).  
- **Käyttäjä‑palautepisteet** (analyytikon arvio tehtävän merkityksellisyydestä).

### Reaaliaikainen oppiminen

Jokaisen 5 minuutin välein RL‑agentti uudelleenkouluttaa käyttäen viimeisintä palkkioiden erää **Delta Lake -palkkio‑taulussa**. Päivitetty politiikka lähetetään sitten **Prioriteettijonon** palveluun, vaikuttaen välittömästi seuraavaan tehtävien erään.

## Integration with Procurize

Procurize tarjoaa jo:

- **`/api/v1/questionnaires`** – listaa, luo, päivitä kyselyitä.  
- **`/api/v1/tasks/assign`** – osoita kysely käyttäjälle/tiimille.  
- Webhookit tehtävien valmistumistapahtumille.

```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)
```

Kun kysely on merkitty **valmiiksi**, Procurizen webhook käynnistää päivityksen palkkio‑tauluun, sulkien palautesilmukan.

## Business Benefits

| Mittari | Ennen moottoria | Moottorin jälkeen (30 päivää) |
|--------|-----------------|------------------------------|
| Keskimääräinen TTA per kysely | 4,3 päivää | **1,2 päivää** |
| % korkean riskin toimittajista käsitelty 48 tunnin sisällä | 22 % | **68 %** |
| Analyytikon tyytyväisyys (1‑5) | 3,1 | **4,6** |
| Kaupan nopeuden kasvu (voittoprosentti) | 31 % | **45 %** |

**Yhdistetty vaikutus** nopeampien vastausten, paremman riskin yhtenevyyden ja tyytyväisempien analyytikoiden ansiosta näkyy mitattavana liikevaihdon kasvuna ja pienentyneenä noudattamiskustannuksena.

## Implementation Roadmap (12‑Week Sprint)

| Viikko | Virstanpylväs |
|--------|---------------|
| 1‑2 | Aseta Kafka‑aiheet, määritä toimittajasignaalien skeema |
| 3‑4 | Rakenna Delta Lake -ominaisuustallennus, kirjoita streaming‑työt |
| 5‑6 | Kehitä GNN‑malli, kouluta historiallisilla kyselytiedoilla |
| 7 | Lisää Bayesilainen priori‑kerros, kalibroi luottamusrajoja |
| 8‑9 | Toteuta bandiitti‑ajastin, integroi palkkioiden keruu |
| 10 | Yhdistä Procurize‑API:en, testaa alusta‑loppuun -jakelu |
| 11 | Suorita A/B‑pilotti valikoidulla noudattamisanalyyttikoiden ryhmällä |
| 12 | Käynnistä maailmanlaajuisesti, luo valvonta‑ ja hälytysdashboardit |

Keskeiset menestyskriteerit sisältävät **mallin viive < 500 ms**, **ajastimen konvergenssi 200 vuorovaikutuksen sisällä**, ja **≥ 80 % tietojen laatu** ominaisuustallennuksessa.

## Future Outlook

1. **Federated Learning -laajennus** – Mahdollistaa useiden SaaS‑kumppaneiden yhteisen riskimallin parantamisen ilman raakatietojen jakamista.  
2. **Selitettävän AI‑kerros** – Tuottaa luonnolliseen kieleen perustuvia perusteluja (esim. “Toimittaja X sai korkean pisteen johtuen viimeaikaisesta CVE‑2024‑1234‑altistuksesta”).  
3. **Zero‑Trust‑integraatio** – Yhdistää päätösmotorin Zero‑Trust‑verkkoon automaattisesti tarjoamaan vähiten oikeuksia vaativan pääsyn todistusaineiston hakemiseen.  
4. **Sääntely‑digitaalinen kaksonen** – Simuloi tulevaisuuden sääntelytilanteita ja ennakoivasti uudelleenpriorisoi kyselyt.

Päätösmotorista tulee **aivot** proaktiivisessa noudattamisekosysteemissä—siirtyen reaktiivisesta vastausten tuottamisesta ennakoivaan riskinhallintaan.

## Conclusion

Kyselyvastausten automatisointi on vain puolet taistelusta. Todellinen kilpailuetu löytyy **tietäen, mikä kysely vastataan ensin ja miksi**. Yhdistämällä reaaliaikaisen tietojen syötön, graafipohjaisen riskiarvioinnin ja vahvistusoppimiseen perustuvan priorisoinnin, AI-päätösmotori muuttaa noudattamisfunktion pullonkaulasta strategiseksi kiihdyttämiseksi.

Toteuttamalla tämä moottori Procurizen yhteistyöalustan päälle, turva‑, oikeus‑ ja myyntitiimit voivat työskennellä synkronoidusti, sulkea kauppoja nopeammin ja pysyä kehityksessä muuttuvien sääntelyvaatimusten edellä. Maailmassa, jossa sekunnit ovat tärkeitä, AI‑ohjattu, riskitietoinen prioriteettijono on seuraava oleellinen kerros nykyaikaisessa noudattamisautomaatiossa.

## See Also

- [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)