Pozdrav svima. 

 

Zadnji članak koji sam napisao bio je na temu aplikacije za prepoznavanje parkirnih mjesta uz pomoć umjetne inteligencije – https://exact-byte.com/hr/prepoznavanje-parkirnih-mjesta-uz-pomoc-umjetne-inteligencije/

 

Program o kojem danas pričam je razvijen besplatno te služi za automatsku detekciju i obaviještanje odgovornih osoba ukoliko nastane kvar u postrojenju, prije nego se sustav zaustavi. Drugim riječima, kada padne kapacitet sustava da sustav ne radi na optimalnom nivou i time sustav ne radi jednako dobro kao i prije. 

 

Nudim svoj program i svoje vrijeme besplatno svima koji imaju podatke sa kojima bi mogli ovaj program iskoristiti, a primjena je u automatici bilo koje vrste.

 

Program prepozna kada padne kapacitet sustava i javi odgovornim osobama da je sustav prestao raditi optimalno te da je potrebna intervencija. Algoritam koji to prepoznaje generalan je algoritam te, bez dodatne intervencije stručnjaka, može sam prepoznati kada se sustav prestane ponašati optimalno i intervenirati prije nego prestane raditi.

 

Program koji to radi, koristi umjetnu inteligenciju i sam “uči” ponašanje sustava. Jednom kada se program nauči na većoj količini podataka, on sam nauči raspoznavati koje je ponašanje “normalno” i koje nije, te uz to ponašanje vraća i vjerojatnost da se sustav ponaša “normalno”. Drugim riječima, ne samo da javi da se sustav ponaša abnormalno, već i javlja da se sustav ponaša abnormalno sa vjerojatnošću od 90% (9 od 10 puta ovo je greška) ili 80% (8 od 10 puta ovo je greška).

 

Program koji je izrađen učen je na podatcima jednog postrojenja (hotela) koje ima centralno grijanje i sobe u koje je potrebno dovesti toplu vodu (za tuševe). Program je uspio prepoznati pad kapaciteta sustava za grijanje i jasno pokazati kada sustav prestaje raditi optimalno.

 

Ali, za početak, krenimo sa konkretnim primjerom.

Za sve zainteresirane, video prezentacija ispod je moja na tu istu temu i nešto je lakša za pratiti.

Koji problem riješavamo?

Problem koji riješavamo lako možemo pokazati na slici ispod.

Imamo jedan bojler koji grijemo na određenu temperaturu, S0. Taj bojler centralni je dio centralnog grijanja pošto on služi da se toplina iz njega prenosi u ostale sobe u tuš kabine ljudi kojima je potrebna topla voda.

 

Taj centralni bojler sa vodom na temperaturi S0, odvodi se pomoću elektromotora u druge sobe. U sobu 1 dolazi pomoću elektromotora koji jačinom PWM1 (Pulse With Modulation) dovodi toplu vodu u tuš temperaturom S1. Drugim riječima, svaka soba ima svoj elektromotor, senzor za njegovu snagu i senzor za temperaturu tuša. Soba 2 ima jačinu elektromotora PWM2 i temperaturu tuša S2. Soba 3 ima jačinu elektromotora PWM3 i temperaturu tuša S3. I tako dalje. Sve do sobe 16, koliko jedan ovakav sustav poslužuje soba sa jednim bojlerom.

Ovo je tipičan primjer sustava koji automatski radi. Podesi se temperatura na kotlu/bojleru i sustav održava tu temperaturu te automatski pali elektromotor kada temperatura tuša u pojedinoj sobi padne. Time sustav pokušava automatski održavati ugodnu temperaturu koja izlazi iz tuš kabine kako bi gosti hotela mogli tuširati se sa toplom vodom.

 

Naravno, sustav, kao i svaki drugi, sastavljen je od pojedinih dijelova. Svaki dio tog sustava radi određeno vrijeme i nakon toga počinje raditi sve lošije i lošije. Kako dijelovi sustava prestaju raditi jednako dobro kao i na početku, sam sustav prestaje raditi jednako dobro kao i na početku.

 

Naravno, degradacija sustava je većinom progresivna, pošto su dijelovi velikih sustava napravljeni da budu robusni, otporni na greške. Samim time, ako imamo dovoljno podataka kojim možemo vidjeti kako sustav radi slabije i degradira, pomoću senzora. 

Primjer podataka

Podatke koje smo dobili za koristiti su podatci koji su došli direktno iz postrojenja hotela. Primjer takvih podataka možemo vidjeti na slici ispod.

Vidljivo je da imamo vrijeme (datum i vrijeme) i mjerenja za sobu 1. Dakle imamo temperaturu kotla, S0, temperaturu na tušu, S1, te imamo jačinu propusnosti elektromotora PWM1 sa kojim se regulira količina tople vode koja iz kotla odlazi u tuš sobe broj 1.

 

Možemo vidjeti u primjeru gore da tek u 15:42 elektromotor počinje lagano raditi pošto je temepratura koju održavamo na tuš kabinama 55 °C, te se sustav trudi da zadrži tu temperaturu. Da li temperatura kotla/bojlera padne ili počinje opadati temperatura na tuš kabini, sustavu nije bitno, te on pokušava zadržati temperaturu tuša na 55 °C.

 

Naravno, moguće je da se stvori kamenac ili da grijači malo izgube kapacitet, kao što je i moguće da padne temperatura okoline, čine sustav, neovisno o tome, pokušava zadržati temperaturu na zadanih 55 °C.

 

Pogledajmo te iste podatke na grafu sa vremenskom osi.

Primjer podataka je iz 2017. godine te stoji od početka sezone 29.04.2017. do 23.07.2017. Na X osi, ovo lijevo-desno, stoji vrijeme, na lijevo stoji prošlost, na desno budućnost. Na Y osi, ovo gore-dolje, stoji temperatura sobe 1, S1, koja vidljivo varira. Mijenja se kroz vrijeme. Boja predstavlja treću dimenziju ovog grafa, što je temperatura kotla. Temperatura kotla vidljiva je označena bojom na desnoj strani grafa, te predstavlja nižu temperaturu tamnijom, a veću temperaturu svijetlijom bojom.

Sa time možemo vidjeti sva očitanja temperature za sobu 1, S0 temperaturu kotla/bojlera i S1, temperaturu tuša sobe.

Što možemo poboljšati u postojećem sustavu?

Ono što možemo poboljšati je kvaliteta usluge/rada, pošto možemo prije samog kvara i potpunog zastoja sustava intervenirati. Program nam prije same greške javi da je kapacitet sustava pao i da je potrebno intervenirati. 

Isto tako, možemo uštedjeti vrijeme, što je prilično važan faktor, pogotovo ako se dogodi da dijelovi sustava prestaju raditi u isto vrijeme. Možemo kupiti rezervne dijelove prije vremena ili uposliti tehničare da budu u pripravnosti pošto sustav ne radi jednako dobro.

I naravno, sve to se prevodi u nešto svima opipljivo – novac.

Koje su moguće implementacije programa?

Program koji može automatski dojaviti kada se sustav više ne ponaša kako treba možemo napraviti na više načina, naravno.

Ono što nas zanima je generalni algoritam, koji može, bez detalja o samom sustavu, sam procjeniti kada sustav prestaje raditi ispravno. U ovom slučaju, algoritam koji sam “nauči” kada temperatura u sobi više nije dobra, te može obavijestiti ljude da je došlo do greške.

 

Isto tako, potrebno je imati algoritam koji može predviđati buduće stanje na temelju prošlog stanja, te takav algoritam spada u grupu algoritma za vremenske serije. 

 

Želimo da taj algoritam može sam prepoznati anomaliju bez dodatne ljudske intervencije. Ali opet, želimo da imamo mogućnost dodavanje znanja ljudskog stručnjaka u problem i da to nije teško napraviti. Znači želimo da algoritam sam napravi predviđanje anomalije, a da onda možemo to predviđanje dodatno precizirati sa znanjem kojeg ima ljudski stručnjak, u ovom slučaju tehničar.

 

Ono što želimo nije samo rezultat. Ne želimo sustav koji može reći da li sustav radi ili ne radi, već i sa kolikom vjerojatnošću sustav radi ili ne radi. Želimo dobiti rezultat da li je došlo do greške u sustavu sa vjerojatnošću od 90% ili 80%, te sa time proporcionalno dati do znanja nadređenima koliko je ozbiljna situacija.

 

Različite implementacije koje ovdje mogu spomenuti koje se mogu koristiti su:

  • ARIMA
  • VAR
  • Autoencoders
  • LSTM

 

Ima puno izbora kojeg možemo odabrati za takav jedan algoritam, ali niti jedan sam po sebi ne zadovoljava sve ove kriterije koje smo naveli gore.

 

Tako da sam se na kraju odlučio koristiti probabilistic programming (ne znam neki pametan hrvatski prijevod) kao granu umjetne inteligencije, a implementaciju izveo u PyMC3 pomoću Gaussian process aditivnim modela – Generalized additive model (GAM). 


Ali prije nego krenemo u (neke) detalje, hajde da se malo fokusiramo na samu ideju iza probabalistic programming.

Probabilistic programming

Ono što je važno ovdje imati na umu da je ključna razlika između ove grane i ostalih što je svaki rezultat vjerojatnost, a ne samo broj.

 

Drugim riječima, ako pitamo program koja će biti temperatura za sat vremena sa podatcima koje imamo, dobiti ćemo ne samo rezultat 30 °C, već i vjerojatnost od 84% da će biti toliko temperatura. Ključna ideja iza ovoga je termin “reasoning under uncertanty”. Jedan od dobitnika Turingove nagrade (Nobelova nagrada za informatiku) za umjetnu inteligenciju u svojim se istraživanjima i fokusima bavio točno ovime i govori o tome koliko je to bitno u samom svijetu umjetne inteligencije. Ja bi se složio sa njime. Lijepo je imati super fancy veliku LSTM Autoencoder arhitekturu neuralnih mreža, ali time ne vidimo direktno i sigurnost same mreže da nam da odgovor. Naravno, možemo uvijek dohvatiti nešto slično, ali nije uvijek potrebno ubaciti neuralnu mrežu u svaki problem. Svaki problem zahtjeva svoj alat.

 

Nije bitno samo da li će temperatura biti 30 °C, već i koliko je sustav siguran da će ta temperatura biti. Ovdje govorimo o numeričkim podatcima, znači regresiji, ne govorimo o klasifikaciji. U recimo neuralnim mrežama, moguće je sotfmax aktivacijskom funkcijom dobiti vjerojatnosti pojedine klase u klasifikaciji.

Ako gledamo recimo linearnu regresiju nad postojećim podatcima iz hotela, moguće je vidjeti ne samo mjerenja tuš kabine, što predstavlja Y os, već i točke u vremenu, što predstavlja X os.

 

Svaki ovaj X je jedno mjerenje u vremenu. Ova žuta linija je linearna regresija dobivena “čistom računicom” i jedina je “točna” linearna regresija. Ali, kako smo rekli, ne tražimo samo odgovor, već i sigurnost u sam odgovor.

 

Ako koristimo algoritme za predviđanje linije linearne regresije (nećemo ulaziti u distribucije sada), onda možemo vidjeti ove crne linije. Svaka od ovih crnih linija potencijalna je linearna regresija. Na takav način rade algoritmi u ovoj grani. Ne daju točne odgovore, već daju više odgovora (distribuciju odgovora, da) i samim time, vjerojatnost da će pojedini odgovor biti više ili manje točan. Uzmimo sve ove crne linije i sa njima možemo formirati interval sigurnosti – što su linije gušče, što su češće, vjerojatnije je da se odgovor nalazi tamo. Što su rijeđe, manje je vjerojatno da se odgovor tamo nalazi.

Što je rezultat?

I što je na kraju svega ovoga rezultat? Pa sustav koji je uspio detektirati anomaliju u trenutku kada su senzori dojavili informacije. Ako pogledamo graf, moguće je vidjeti crne točke. Te crne točke su mjerenja tuš kabine te pokazuju jedan manji podskup podataka. Imamo mjerenja svake minute u zadnje 4 godine, te bi to bilo stvarno previše podataka za prikazati na grafu. Ono što možemo prikazati je manji podskup podataka.

 

Ovo što je obojano u zeleno je interval sigurnosti i služi da obujmi regije za koje program misli da su se dogodile ispravno u 99% slučajeva. Ono što je van njega, nalaze se rijetki događaji koji se događaju jako rijetko (ako pričamo o distribucijama, rijeđe od 2 sigma).

 

Ove žute točke su anomalije i možemo vidjeti prvu koja se pojavljuje tamo negdje pred kraj 2018. godine, pri kraju sezone. Temperatura je odjednom bila na visokih 60+ °C, dok su inače temperature (te sezone) bile između 40-55 °C. 

Slažem se sa sustavnom, ovo je čudno.

 

Da bi pokazali pravu “magiju” pogledajmo 2020. godinu i sezonu i kako je program odmah intervenirao kada je pronašao čudna mjerenja. Žutom bojom obojane točke, mjerenja temperature između 20 °C i 30 °C. Program je točno to predvidio kao anomaliju, a da je tehničar imao ovaj program, mogao je intervenirati prije nego sam gost primijeti anomaliju.

Zaključak

Drugim riječima, program ispravno pronalazi anomalije, čak i na manjem podskupu podataka. Ako počnemo uključivati više podataka, program će biti sve više precizan, a ako uključimo i domensko znanje (znanje stručnjaka/tehničara), onda će program postati još i precizniji.

 

Pa zašto ne bi u svojim sustavima imali ovakav program koji bi vam mogao javiti kada sustav gubi kapacitet i počinje neispravno raditi?

 

Nudim svoj program i svoje vrijeme besplatno svima koji imaju podatke sa kojima bi mogao pomoći, automatika bilo koje vrste.