Kereslettervezés mély neurális hálózatok és szövegelemzés alkalmazásával

SmartLab AI
8 min readJun 29, 2017

--

Benyó Máté laborunkban készítette el MSc diplomamunkáját a fenti témában. A postot Máté írta, melyben összefoglalja munkáját és eredményeit. Szép munka, gratulálunk!

TL;DR Mély neurális hálózatokkal az egyéb (ARIMA, linreg, Random Forrest, XGBoost, stb.) modellekhez hasonló, vagy jobb pontosságot lehet elérni termékkereslet numerikus előrejelzésében. A megoldást mély tanulás alapú szövegelemzéssel is lehetséges bővíteni. Link a teljes munkára és a kapcsolódó Python forráskódra a post végén.

Ebben a posztban a tapasztalataimat osztom meg egy olyan témával kapcsolatban, ami a diplomatervem alapját képezte. Ez nem más, mint a kereslettervezés, másnéven kereslet előrejelzés. Véleményem szerint, ha maga az üzleti folyamat nem is igazán érdekli az olvasót, akkor is található a bejegyzésben pár hasznos információ neurális hálózatokkal, vagy gépi tanulással kapcsolatban. A cikk során nem kívánok kitérni minden egyes részletre, és az egyes modellek működését sem ismertetem alapjaiban, inkább egy átfogóbb képet szeretnék csak nyújtani a témában. A munkám bemutatása során igyekszem hasznos linkekkel is ellátni az olvasót, ami azon kívül, hogy segíti a megértést, nagy szolgálatot tehet saját projektek megvalósítása esetén is.

A kereslet előrejelzés nem más, mint a jövőbeli vevői igény meghatározása. Ennek módszere a múltbeli tendenciák megfigyelése, és a jelen állapotra való megfeleltetése. Ez az üzleti folyamat szerves részét képezi a termelő vállalatok életének. Feladata: egyensúlyban tartani a keresletet és kínálatot. Képzeljük el mi történik, ha adott termékből a kelleténél több terméket gyártunk le. Ekkor túlkészletezünk és többlet költségekkel kell számolnunk, mivel például a feleslegesen legyártott termékeket tárolnunk kell, vagy egyéb nem kívánt tevékenységet kell végeznünk. Ellenkező esetben viszont adott termékből nem termelünk eleget, és a vevő igényeket nem tudjuk kielégíteni raktárról. Ez esetben az ügyfélnek várnia kell, megnövekedett átfutási idővel kell számolnia, ami elégedetlenséghez vezet. A tervezési folyamata az ellátási lánc több szereplőjénél is jelen van. Az érték teremtés és értékesítés során a következő tagok alkotnak láncot:

Ami érdekesség, hogy bár a neurális hálózatok egyre szélesebb körben éreztetik hatásukat, és bizonyítják eredményességüket (pl. szöveg/kép felismerés/szintézis stb.), a kereslettervezés területén még nem figyelhető meg ilyen dominancia. Ennek racionális magyarázata az lehet, hogy a neurális hálózatok „black box” modellként viselkednek, azaz működésük kevésbé intuitív és megmagyarázható, mint egy regressziós modellnek. Éppen emiatt a vállalatok validációs folyamatain nehezen megy át, mivel itt az eredményesség mellett a transzparens működésre is nagy hangsúlyt fektetnek. Azonban amennyiben a neurális hálózatok folytatják szárnyalásukat, előbb utóbb az ilyen modellek is egyre inkább helyet kapnak a nagyvállalatok palettáján is.

Mivel a neurális hálózatok empirikus úton működnek nehéz jóságukat értékelni önmagukban. Ezért a kutatásom során sok különböző modellt implementáltam, aminek köszönhetően összemérhettem az egyes modellek előrejelzési képességét a témát illetően. Ezenkívül a becslés pontosságának javítása céljából megalkottam egy szentiment elemzést végző modult is, ami nyelvfeldolgozó eljárást használ Twitter bejegyzéseken. Annak érdekében, hogy ennek a két megközelítésnek az előnyeit kihasználhassam a két végső modellt egy harmadikba aggregáltam és hajtottam végre együttes (ensemble) tanítást. Az előbb felvázolt architektúrára látható a képen:

Amit érdemes tudni, hogy egy privát adathalmazon volt szerencsém dolgozni, így a céget nem is nevezhetem meg, ezért a továbbiakban ABC vállalatként hivatkozok rá. Az ABC vállalat amúgy egy multinacionális cég, több millió dolláros éves bevétellel. Az adathalmaz pedig vevői rendeléseket tartalmazott napi bontásban. A különböző modellek illesztése előtt elvégeztem a szükséges átalakításokat és az adatok megfelelő előkészítését. Erre nem térek ki külön, ez többé-kevésbé megegyezett a hasonló adatbányászati és egyéb feladatok során elvégzendő preprocessing lépéssel. A feladatokról átfogó képet adhat ez az ábra:

Az ábrán a folyamatokon kívül ábrázoltam a felhasznált könyvtárakból is párat. Észrevehető, hogy Python nyelvet használtam az implementáció során. Amit kiemelnék a neurális hálózatokra való tekintettel a Keras szoftvercsomag, ami magasszintű, gyors megvalósítást eredményez, valamint a Pandas nevű könyvtár, amit bátran ajánlok, mert nagyon megkönnyíti az adatok kezelését. Szintén nélkülözhetetlen modulnak tartom a Hyperopt csomagot is, ami a megfelelő hiperparaméterek megtalálásában segít.

Az adathalmazról, hogy legyen egy kis rálátása az olvasónak, készítettem egy összegző táblázatot:

A fentiek alapján látható, hogy nagy hangsúlyt fektettem új attribútumok létrehozására. Majd empirikus módon választottam ki a fontosnak vélteket. Az attribútumokat illetően nincsenek meghatározott szabályok, minél több lehetőséget tesztelni kell.

A neurális hálózatokat illetően 3 alap architektúrát használtam:

1. Előrecsatolt (FC, fully connected): Ez a legegyszerűbb topológia, ahol az adott rejtett réteg összes neuronja összeköttetésben áll az őt megelőző és őt követő réteg összes neuronjával.

2. LSTM (Long Short Term Memory): Ez egy, a rekurrens hálózatok közé tartozó modell, ami mostanában a leginkább elterjedt a családjában. Részletesebb leírás itt található róla: http://colah.github.io/posts/2015-08-Understanding-LSTMs/.

3. Konvolúciós hálózat (CNN, Convolutional Neural Network): Elsőre a kép felismerés juthat eszünkbe a kifejezés hallatán, azonban nagyon sok más problémára is szép eredményeket ad, és használható, mint például esetemben idősor jellegű adatokra. Típusát illetően se csak a széleskörben ismert 2D konvolúciós változata létezik, hanem 1D és 3D is. Egy nagyon érdekes összefoglaló taláható ezen a címen: http://cs231n.github.io/convolutional-networks/.

4. Beágyazási réteg (EE, entity embedding): Bár kicsit kilóg a sorból, de hasznos módszernek tartom a kategorikus változók reprezentálását beágyazási réteg segítségével. Ez a sok értéket felvehető attribútumok esetén lehet előnyös, és a nyelv feldolgozás területéről ismeretes word2vec alapon működik. Erre egy példa esetemben a terméktípus (ITEM_ID) jellemző, amiből több mint 1.000 fajtát különböztet meg az ABC vállalat. Alap esetben ezeket címkékkel láthatom el pl. 0,1,2..N-1, ez esetben azonban semmilyen információ nem lesz az egyes termékek viszonyáról, valamint azt se szeretnénk, hogy a modell úgy kezelje ezt, mint egy folytonos változót, és olyan összefüggésekre építsen, mint hogy, ha összeadunk két terméket, akkor megkapunk egy harmadikat (pl. 2+3 = 5). Ennek kiküszöbölésére szokták alkalmazni az 1-az-N-ből (one-hot/dummy encoding) kódolást, ami viszont annyi új attribútumot vezet be, ahány értéket felvehet az adott jellemző, ami esetünkben, több mint 1.000 új jellemzőt jelentene. Ennek hátránya a megnövekedett adathalmaz mellett az, hogy ritka mátrixot kapunk, ami erősen redundáns. Összefoglalva a beágyazási réteg is neurális hálózati technika, ami során dimenzió redukciót végez a modell, és olyan összefüggések is interpretálhatók, mint, ami a következő képen látható:

Mindeddig nem tértem ki a szentiment modellre. Elsősorban a szentiment elemzéssel érdemes megismerkedni. Ezt az eljárást többek között érzelem detekciónak, hangulat felismerésnek is hívják. Lényege, hogy valamilyen szöveges tartalom elemzése révén információhoz jussunk egy adott réteg, vagy ember véleményét, érzelmi állapotát illetően. A megvalósítása többféleképpen is történhet, én ehhez is neurális hálózatot használtam. A kimenetet figyelembe véve is megkülönböztethetünk módszereket. Feladattól függően elég lehet egy bináris célváltozó (pozitív, negatív), egyéb esetben a semleges hangulat egy újabb érték lehet, de tetszőleges skálát is alkalmazhatunk (pl. boldog, szomorú, ideges, dühös). Én a megoldásom során a Twitter portálról származó bejegyzéseket elemeztem, és ebből próbáltam előrejelzést adni a jövőbeli termék iránti igényekre. A bejegyzések összegyűjtése után meg kellett találnom a szavak megfelelő reprezentációját. Ebben nekem a GloVe (Global Vectors for Word Representation) segített, ami a szavak együttes előfordulásán alapuló eljárással alkotja meg a adott dimenziószámú térben a szavakhoz tartozó vektorokat. Az eredmény hasonló a word2vec kimenetéhez. Ezzel az átalakítással a szavakat 25 hosszú vektorként tudtam ábrázolni. Továbbá egy nap 100 bejegyzést vettem figyelembe, valamint egy bejegyzés 20 szó hosszú volt, ami megegyezik az átlagos hosszúsággal. Minderre egy példát mutatok lent:

A fenti képen az látható, hogy a mesterségesen létrehozott „Ajánlom az ABC terméket” bejegyzés hogyan feleltethető meg vektoroknak, valamint leolvasható a szentiment bemenet dimenzióinak alakulása. A GloVe-ról ismertető a saját oldalukon is található, ez szerintem elég részletes, ugyanakkor lényegre törő: https://nlp.stanford.edu/projects/glove/. Szintén egy érdekes bejegyzés a témában a következő is: https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/.

A bejegyzés elején említettem, hogy sok modell összehasonlítása révén tudtam értékelni a neurális hálózatok előrejelzési képességét. Ezek a modellek a működésük kifejtése nélkül a következők:

1. ARIMA
2. Eltolás modell
3. Lineáris regresszió
4. Lasso regresszió
5. Ridge regresszió
6. Döntési fa
7. Random forest
8. XGBoost

Amit fontos tudni, hogy minden modellnél végeztem bizonyos mértékű hiperparaméter optimalizációt. A modellek többségéhez Scikit-learn könyvtárat használtam, valamint a modellek között szerepelnek olyanok is, amikkel pár éve még a legrangosabb adatbányászati versenyeken első helyezést is el lehetett érni (Random forest, XGBoost). Ezenkívül különbséget jelentett, hogy miként illesztettem a modelleket. Bizonyos esetekben, amikor annak volt értelme az adathalmazt termékenként is felosztottam, és így futtattam a tanuló eljárásokat, máskor viszont a terméktípus csak mint egy attribútum szerepelt az adatok között.

Elérkeztünk a kiértékeléshez és az eredmények ismertetéséhez. Először nézzünk meg egy részletet a legeredményesebb 5 modell becsléséről:

Talán érzékelhető, hogy egyes modellek sokszor egész jól lekövetik a tényleges rendelési mennyiségben beállt változásokat (pl. 40–45 körüli szakasz), azonban vannak nagy tévedések is, mint ahogy az LSTM előrejelzésén is látszik a megfigyelések elején. Összességében elég nehéz összehasonlítani a modelleket vizuálisan, ezért számszerűsíteni kellett a különbségeket. Ehhez négy hibafüggvényt használtam, amikkel mértem a hiba mértéket modellenként:

A négy hiba metrika a MAE, RMSE, MAPE és MASE. Ezekről annyit érdemes tudni, hogy az eltérést mérik valamilyen módon, így a legkisebb a legjobb minden esetben. A táblázatban nem szerepel mind a 18 modell, csak párat választottam ki, hogy szemléltessem az eredményeket. Bal oldali oszlopban található az egyes modellek megnevezése, és kék színnel jelöltem metrikánként a legjobb értéket. Ami megfigyelhető, hogy négyből három esetben valamelyik neurális hálózat modell becsült a legkisebb hibával. Ezenkívül, érdekes mód, közülük is a legegyszerűbbnek mondható Előrecsatolt háló tűnt a legideálisabbnak. Legalul látható az Aggregált modell, ami az előbb említett előrecsatolt, valamint szentiment modelleket fogja egybe és tanítja tovább. A kiértékelés szerint ez a módszer nem feltétlen volt eredményesebb a többi neurális hálózatnál, illetve MAPE hibafüggvény szerint kiemelkedő volt mégis csak. További megfigyelésem, hogy nem okozott javulást, ha terméktípusonként külön modellt illesztettem, azzal szemben, mint mikor az összes terméket tartalmazó adathalmazt vettem alapul. További érdekesség, hogy sokszor más-más modellek voltak eredményesek termékenként. Egy példát alapul véve (MAPE), figyeljük meg a következő ábrát:

Az ábra azt szemlélteti, hogy egyes modellek hány terméktípusnál becsültek legkisebb hibával MAPE mutató szerint az 5 legeredményesebb modell körében. Így érdekes mód az Előrecsatolt (FC) háló csak a termékek 14%-ánál volt első, azonban összességében, kiegyensúlyozott működésének köszönhetően összesítve láttuk, hogy ez adta a legjobb eredményeket.

Végezetül elmondható, hogy a neurális hálózatoknak a termékkereslet előrejelzés területén is van létjogosultságuk a méréseim alapján. A szentiment elemzés megítélése jelen esetben kérdéses, itt valószínűleg több szöveges tartalomra és részletesebb szöveg előkészítésre lenne szükség az egyértelmű javulás eléréséhez. Továbbá a fenti cikkdiagrammra alapozva érdekes lehet megvizsgálni a termékeket az idősoruk jellege alapján, mivel valószínűleg a különböző jellegű idősoroknál különböző modellek teljesítenek jól. Ezenkívül kíváncsi lennék, hogy egyéb adatforrásokon, miként teljesítenének ugyanezek a modellek.

Linkek

Diplomamunka: http://smartlab.tmit.bme.hu/downloads/pdf/students/MSc-diplomamunka-Benyo-Mate-Kereslettervezes.pdf

Forráskód: https://github.com/BME-SmartLab-Education/msc-demandforecast

--

--

SmartLab AI
SmartLab AI

Written by SmartLab AI

Deep Learning and AI solutions from Budapest University of Technology and Economics. http://smartlab.tmit.bme.hu/

Responses (1)