„Gyakorlati oktatóanyagok”

Anomáliák észlelése folyamatvezérlő adatokban gépi tanulással

Bemutatjuk az anomáliák észlelését a saját asztaláról generált adatokkal a Temperature Control Lab eszközön

Az anomália-észlelés a gépi tanulás hatékony alkalmazása valós helyzetekben. A csalárd tranzakciók észlelésétől az összetevő meghibásodásának előrejelzéséig betaníthatunk egy gépi tanulási modellt annak meghatározására, ha valami szokatlan történik.

Ami a gépi tanulást illeti, nagy szószólója vagyok a kísérleti tanulásnak. A gépi tanulási modellek mögött rejlő tényleges matematika egy kicsit fekete doboz lehet, de ez nem akadályozza meg, hogy hasznos legyen; sőt, úgy érzem, hogy ez a gépi tanulás egyik előnye. Ugyanazokat az algoritmusokat alkalmazhatja a problémák teljes skálájának megoldására. Néha a tanulás legjobb módja, ha valódi adatokat kezel, és megnézi, mi történik velük.

Ebben a példában valódi adatokat generálhatunk a Temperate Control Lab eszközzel, és betaníthatunk egy felügyelt osztályozót az anomáliák észlelésére. A TCLab egy nagyszerű kis eszköz valódi adatok generálására egy egyszerű plug-and-play Arduino eszközzel. Ha saját adatokat szeretne létrehozni ehhez, nagyszerű bevezető forrásokat talál "itt"; egyébként a saját TCLab-eszközömön generált adatokat felvettem a Github-tárba. Ha saját maga szeretné futtatni ezeket a példákat, letöltheti és követheti az itt található kódot.

Probléma keretrendszer

A TCLab egy egyszerű Arduino eszköz, két fűtőtesttel és két hőmérséklet-érzékelővel. Ez egy egyszerű plug and play eszköz, egy csatlakozóval a fűtőtestek tápellátására és egy USB-porttal a számítógéppel való kommunikációhoz. A fűtőelem szintje Python szkriptben állítható be (feltétlenül pip install tclab), és a hőmérséklet-érzékelő segítségével leolvasható az egyes fűtőelemek körüli hőmérséklet. Ebben a példában megtartjuk az alapszintet, és csak egy fűtőtestet és érzékelőt használunk, de ugyanezek az elvek alkalmazhatók a 2 fűtőelemes rendszerre is, vagy akár bonyolultabb rendszerekre is, mint például a vegyi finomítókban.

A problémát így képzelhetjük el: van egy fűtőtestünk a garázsműhelyünkhöz, egyszerű be/ki beállítással. A fűtőtestet beállíthatjuk úgy, hogy minden nap bizonyos időre be- vagy kikapcsoljon, hogy a hőmérséklet kényelmes szinten maradjon. Természetesen vannak kifinomultabb vezérlőrendszerek is, amelyeket használhatnánk; ez azonban a gépi tanulással történő anomália-észlelés bevezetéseként készült, ezért a nyers adatokat egyelőre egyszerűnek tartjuk.

Normál körülmények között ez egy elég egyszerű gyakorlat annak ellenőrzésére, hogy a fűtőberendezés be van kapcsolva, és működik-e – csak nézze meg a hőmérsékletet, és nézze meg, hogy emelkedik-e. De mi van akkor, ha vannak olyan külső tényezők, amelyek megnehezítik az értékelést? Lehet, hogy a garázsajtó nyitva maradt, és huzatot enged be, vagy egyes berendezései túlmelegedni kezdenek. Vagy ami még rosszabb, mi van akkor, ha kibertámadás éri a hőmérséklet-szabályozót, és azt a támadók eltakarják? Van mód arra, hogy megnézzük az általunk gyűjtött adatokat, és megállapítsuk, ha valami baj van? Ez az anomáliák észlelésének lényege.

Egy felügyelt osztályozóval megtekinthetjük az érzékelő adatait, és megtaníthatjuk arra, hogy osztályozza a fűtés be- vagy kikapcsolt állapotát. Mivel azt is tudjuk, hogy a fűtőelemnek mikor kell be- vagy kikapcsolnia, alkalmazhatjuk az osztályozót minden újonnan érkező adatra, és megállapíthatjuk, hogy a viselkedés összhangban van-e a látott adatokkal.Ha a kettő nem egyezik, tudjuk, hogy valamilyen anomália van, és tovább vizsgálhatjuk.

Adatok generálása

Ennek a forgatókönyvnek a szimulálásához adatfájlt generálunk a TCLab-ból, és különböző időközönként kapcsoljuk be és ki a fűtőtestet. Ha problémái vannak a TCLab beállításával, „itt” talál néhány nagyszerű hibaelhárítási forrást.

Kezdésként felállítunk néhány tömböt az adatok tárolására, amelyeket 1 másodperces időközönként gyűjtünk össze. A fűtés be-/kikapcsolása egyelőre meglehetősen egyszerű lesz, elég csak teljesen be- vagy kikapcsolni, és hagyni néhány percig. Egy órán keresztül futunk, hogy megbizonyosodjunk arról, hogy sok adatunk van a betanításra és az érvényesítésre.

A TCLab bemenetek egyszerűek, a lab.Q1 értékét be- vagy kikapcsolva állítjuk be, attól függően, hogy mit generáltunk. A túlmelegedés elkerülése érdekében csak 70%-ra kapcsoljuk be a fűtést, majd lab.T1-tól kezdődően minden időpontban rögzítjük a hőmérsékletet. Végül hagyja, hogy a hurok 1 másodpercig késleltessen.

A rendellenes adatok lényegében ugyanígy jönnek létre, csak 20 perc alatt. A nagy különbség az, hogy egy ventilátort fújok át a fűtőberendezésen meghatározott időpontban, szimulálva a huzatot a garázsban. A ventilátor konvekciója természetesen lehűti a rendszert, ellensúlyozva azt, amit a fűtőtest próbál tenni. Mivel ez nem várt, látnunk kell, hogy az osztályozó felveszi ezt – talán azt jelzi, hogy a fűtés ki van kapcsolva, ha tudjuk, hogy be van kapcsolva. Menjünk előre, és megtudjuk, működik-e!

Adatok előfeldolgozása

A gépi tanulás egyik kulcsa annak vizsgálata, hogyan lehet az adatokat a modell számára hasznos keretbe foglalni. Amikor bármilyen gépi tanulási projektet végzek, gyakran ez a legidőigényesebb lépés. Ha jól értem, a modell bűbájként működik; Ellenkező esetben órákat vagy akár napokat is csalódottan tölthetek azzal, hogy vajon miért nem fog működni a modellem.

Mindig méreteznie kell adatait a gépi tanulási alkalmazásokhoz, és ez könnyen megtehető a scikit-learn MinMaxScaler-jával. Ezenkívül ellenőrizze, hogy az adatok formátuma megfelelő-e a modellhez (például egy tömb alakja megfelel-e az osztályozó elvárásainak? Ha nem, akkor valószínűleg figyelmeztetést kap). Lássuk, hogy néz ki ez eddig. Vegye figyelembe, hogy nem skálázzuk az y adatokat, mert már csak 0-k és 1-ek.

Észre fogja venni, hogy a bemenetünk csak a hőmérséklet, a kimenet pedig, amelyet megpróbálunk megjósolni, a fűtés állapota (be vagy ki). Ez hatásos? Az osztályozó csak a hőmérséklet alapján tudja megmondani, hogy a fűtés be vagy ki van-e kapcsolva? Szerencsére a scikit-learn segítségével a képzés és a felügyelt osztályozóval való előrejelzés csak néhány sornyi kód. A logisztikai regressziós osztályozót is használni fogjuk, de „sok más felügyelt osztályozó is használható”.

Az eredmények ábrázolása a következőt kapja:

A válasz arra, hogy csak a nyers hőmérsékletet használhatjuk-e bemenetként, egy hangsúlyos nem. Ennek intuitív értelme van – például 35°C-on a fűtés be- vagy kikapcsolt állapotban van. A hőmérséklet változása azonban sokat elárulna arról, hogy mit csinál a fűtőberendezés.

Feature Engineering

Ez bemutatja a funkciótervezés birodalmát, amely egy másik fontos része a gépi tanulással kapcsolatos probléma felállításának. A már meglévőkből további funkciókat is létrehozhatunk. Milyen egyéb adatokat gyűjthetünk ki pusztán a nyers hőmérsékletből? Megkaphatjuk az 1. és 2. derivált, az elmúlt néhány leolvasás szórását, és még a hosszú távú különbségi trendeket is megnézhetjük. Egy másik trükk, amelyet érdemes kipróbálni, az adatok naplózása, különösen, ha naplózásban vannak elosztva. Ezek mind új funkciók, és némelyikük jó teljesítményt nyújthat az osztályozóba!

Ismét bizonyos tartományi ismeretek és az adott probléma megérzése valóban hasznos a funkciótervezésben. Kezdjük azzal, hogy megvizsgáljuk a hőmérséklet változását. Van egy kis szenzorzaj, így a hőmérséklet gördülő átlagát véve szebb grafikont kapunk, ami valószínűleg jobb teljesítményt eredményez.

Lássuk, hogyan működik ez. Az egyetlen különbség az, hogy létrehozzuk az dT oszlopot az adatkeretünkben, és azt használjuk bemeneti szolgáltatásként. Ezenkívül el kell dobnunk minden NaN értékkel rendelkező adatot.

Az eredmény… nagyon jó! Van néhány hiányosság, de ezek mindig a szélén vannak, amikor a fűtés éppen be- vagy kikapcsolt. Több olyan funkciót is megvizsgálhatnánk, mint például a 2. származék, amely segíthet ebben, de egyelőre úgy tűnik, ez meg fogja tenni a trükköt.

Az osztályozó érvényesítése új adatokon

A bevált gyakorlat a betanított osztályozó használatának megkezdése előtt megköveteli a teljesítmény érvényesítését olyan adatokon, amelyeket soha nem látott. Én személy szerint szeretem eleinte az eredeti edzési adatokon kipróbálni, csak bélellenőrzésként; ha ott nem működik, akkor új adatokon sem fog működni. Láttuk azonban, hogy a fenti adatokon jól működött, ezért most végezzük el ezt az ellenőrzést egy új adatkészleten. Létrehozhat egy új anomáliamentes adatfájlt a TCLab-ból, vagy használhatja a train_test_split from scikit-learn fájlt. Ne feledje, hogy csak a transform funkciót használjuk az adatskálázáshoz, mivel már illesztettük a skálázót, és ezt a skálázást használtuk az osztályozó betanításához.

Íme az eredmények diagramja:

Kivizsgálja. Ismét vannak olyan esetek, amikor a fűtés be- vagy kikapcsol. Megvizsgálhatnánk az osztályozóba betáplálható további funkciókat, vagy akár módosíthatnánk az osztályozó hiperparamétereit, de egy egyszerű bemutatóhoz ez is elegendő.

Anomália észlelése a betanított osztályozóval

Itt éri a gumi az utat. Tudjuk, hogy az osztályozó jól működik, hogy megmondja, mikor van be- vagy kikapcsolva a fűtés. Meg tudja mondani, ha valami váratlan történik?

A folyamat valóban ugyanaz. Az egyetlen különbség az, hogy most anomáliánk van az adatokban. Létrehozzuk az új funkciót (hőmérséklet változása, a simított gördülő átlag felhasználásával), skálázzuk az adatokat, és betápláljuk az osztályozóba az előrejelzéshez.

Íme az eredmények:

Ez úgy néz ki, hogy jól sikerült! Azt látjuk, hogy a jóslat szerint a fűtés kikapcsolt, amikor a ventilátor jár, és ha a valóságban a fűtés be van kapcsolva, akkor csak egy rendellenes esemény van. A rendszer még a ventilátor leállása után is újra kiegyensúlyozódik, így van némi eltérés a között, hogy valójában mi történik a fűtőberendezéssel, és amit az osztályozó előre jelez. Ha egy kezelő a beérkező adatokat nézi, összehasonlíthatja, hogy mit vár a fűtőtől, és mit jósol az osztályozó; az esetleges eltérések kivizsgálható anomáliát jeleznek.

További ötletek

Ez egy ügyes kísérlet volt csak egyfajta anomáliával, olyan adatok felhasználásával, amelyeket itt, az asztalunkon generáltunk! Természetesen egyszerű, de az ilyen jellegű problémák gyorsan bonyolulttá válhatnak. A vezérelvek azonban ugyanazok.

Milyen egyéb rendellenes események történhetnek? A rendellenes külső hőt szimulálhatjuk a 2. fűtés bekapcsolásával. Hidegebb környezeti hőmérsékletet szimulálhatunk, ha a TCLab-t egy hidegebb helyiségben futtatjuk. Van egy ügyes trükk is ezeknél az eszközöknél: ha az érzékelő közelében telefonálunk, a hullámok megzavarják a jelet, és teljesen új típusú anomáliát kaphatunk. Milyen funkciók lennének hasznosak ezen egyéb típusú rendellenességek észleléséhez? Hangolhatnánk a hiperparamétereket a teljesítmény javítása érdekében?

Végül talán a kedvenc stratégiám az osztályozók terén az, hogy több különböző osztályozót tanítok, majd összesített pontszámot veszek. Próbáljon ki néhány más típusú osztályozót a scikit-learn-ből. Melyik működik jól? Melyik nem? Ha úgy találja, hogy 4 vagy 5 elég jól működik, akkor mindegyiket betaníthatja, és csak akkor jelölhet meg valamit anomáliának, ha az osztályozók többsége eltérést mutat.

Ez hasznos volt? Tetszett, hogy létrehozhatta saját adatait? Milyen egyéb ötleteket talált hasznosnak az anomáliák felderítésére? Köszönöm, hogy elolvasta, és remélem, hogy ez a bevezető új ötleteket nyitott saját projektjeihez.