All Posts By

Réka Palotay

DIY filmajánló

By | Data Science, Python | No Comments

Az elmúlt néhány évben az ajánlórendszerek egyre nagyobb teret foglalnak el az életünkben, szinte bármilyen online tevékenységet végzünk jelen vannak. Ott vannak az online kereskedelemben, a hirdetésekben és az ajánlórendszerek segítenek a filmek, zenék kiválasztásában is. Ezen rendszerek célja, hogy releváns elemeket javasoljon a felhasználónak. Data Scientist-ként is előfordulnak olyan feladatok, amelyeket ajánlórendszerek segítségével tudunk megoldani. Most a két hónapos otthon tartózkodásom alatt, nem a munkám kapcsán merült fel ez a problémakör. Miután véletlenszerűen rábukkantam egy filmes adatbázisra, úgy döntöttem építek egy egyszerű ajánlórendszert magamnak, amivel újabb filmeket javasolhatok, a már megnézett filmek értékelése alapján.

Adatbázis

Ezekben a feladatokban sokszor a megfelelő adatbázis hiánya okozza a legnagyobb problémát. Előfordul, hogy adott egy jó feladat, de sajnos nem található hozzá megfelelő mennyiségű vagy minőségű adat. Ennek oka lehet, hogy az adatok nem publikusak, vagy az adatkészlet megszerzése költségesebb, mint a projekt várható haszna. Abba a problémába is sokszor beleütközünk, hogy az adatok nem megfelelő minőségűek, hiányosak vagy nem konzisztensek. Olykor saját magunknak kell létrehozni az adatbázist, ami időigényes és költséges lehet. Szerencsére én rátaláltam egy 2013 óta épülő adatbázisra.

Az általam használt adatbázis a MovieTweetings, egy olyan adatkészlet, amely twitter felhasználók filmes értékeléseit tartalmazza. Naponta gyűjti össze az információt a Twitterről, az olyan jól strukturált tweetek alapján, amelyek tartalmazzák az „I rated #IMDb” kifejezést. Ez az adatkészlet Simon Dooms által végzett kutatás eredménye, amelyet a MovieTweetings: a Movie Rating Dataset Collected From Twitter tanulmány mutat be.

Miután az adatbázis rendelkezésre állt, először is ellenőriztem a használhatóságát. Ehhez megnéztem, hogy egy-egy filmet hányan értékeltek. A legtöbbet értékelt film a Gravity, amely 3086 szavazatot kapott. Ez lényegesen elmarad az IMDb értékelések számától. Sok olyan film is volt, ami nagyon kevés szavazattal rendelkezett, ezért leszűrtem a filmeket azokra, amelyek legalább 100 értékelést kaptak, és így 1644 film maradt az adatbázisomban. Ezután leellenőriztem, hogy hogyan viszonyulnak ezeknek a filmeknek az átlagos pontszámai egymáshoz, amit a Twitteren, illetve az IMDb-n kaptak. A következő táblázatban és ábrán jól látható, hogy érdekes módon az 1644 filmből csak 10 olyan volt, ami esetén nagyobb mint 1 az eltérés az átlagos pontszámok között, holott az IMDb-n nagyságrendekkel többen értékelik a filmeket.

filmek értékelése táblázatban

a Twitter és az IMDb filmértékelések összehasonlítása

Így jól használhatónak fogadtam el ezt az adatbázist és ezzel dolgoztam tovább. Kiszűrtem továbbá azokat a felhasználókat, akik kevesebb, mint 20 filmre adtak értékelést. Így a felhasználók száma 6883 maradt. A kezdeti tábla (twitterdataframe) a következőket tartalmazta: felhasználó (user_id), film (movie_title), értékelés (rating).

Ajánlórendszerek

Az ajánlórendszereknek három fő típusát különböztetjük meg: Az együttműködés alapú, a tartalom alapú és a hibrid módszert, amely az előző két megoldás keveréke.

Az együttműködés alapú megközelítés kizárólag a felhasználók és az elemek közötti korábbi kölcsönhatásokon alapul, új ajánlások előállítása érdekében. Ennek a módszernek a fő gondolata az, hogy a múltbeli felhasználó-elem-interakciók elegendőek a hasonló felhasználók és hasonló elemek megtalálásához és a számolt közelségek alapján a javaslatok elkészítéséhez. Az együttműködési megközelítés fő előnye, hogy nem igényel plusz információt a felhasználókról vagy az elemekről, és ezért sok helyzetben felhasználható. Sőt minél több felhasználó értékeli az elemeket, annál pontosabbak lesznek az új ajánlások.

Ellentétben az előző a módszerrel, a tartalom alapú megközelítés esetén kiegészítő információkra is szükség van a felhasználókról és az elemekről. Ilyen információ lehet az életkor, a nem vagy bármilyen más személyes adat a felhasználóról, valamint a kategória, a rendező, az időtartam vagy egyéb jellemzők a filmekről (elemekről).

Tekintve, hogy jelen helyzetben csak annyi információ áll rendelkezésre, hogy egy-egy felhasználó milyenre értékelte a filmeket, így az együttműködés alapú módszerrel dolgoztam.

Modell

Az együttműködés alapú módszer több fajtája közül a user-user megközelítéssel foglalkoztam. Annak érdekében, hogy új ajánlást nyújtson az adott felhasználónak, megpróbálja azonosítani a leginkább hasonló ízléssel rendelkező többi felhasználót. Ezt a módszert „user központúnak” nevezik, mivel a felhasználókat ábrázolja az elemekkel való interakcióik alapján, és méri a köztük lévő távolságot. Ezután kiszámol egy „hasonlóságot” az adott felhasználó és minden más felhasználó között. Ez a hasonlósági mutató közelinek tekint két felhasználót, akiknek azonos interakciói vannak ugyanazon elemekkel. Miután kiszámította a hasonlóságokat, megtalálja a felhasználóhoz legközelebbi szomszédokat, majd a szomszédok értékelései alapján ajánlja az új elemeket.

Ebben a feladatban új filmeket szerettem volna javasolni egy adott felhasználó számára. Ehhez először, minden felhasználót ábrázoltam a különféle filmekre adott értékeléseik vektoraként. A táblából (twitterdataframe) a vektorokat a pandas.DataFrame.pivot csomaggal hoztam létre, és a hiányzó értékeket kitöltöttem nullával.

felhasználók értékelése a filmekre

Ezek után megkerestem a szomszédokat a K legközelebbi szomszéd (K-nn) módszerével. Az algoritmus célja, hogy a film értékelések alapján megtalálja az adott felhasználóhoz legközelebb álló K számú legközelebbi szomszédot, azaz felhasználót. A szomszédok száma tetszőlegesen választható, figyelembe véve az alapbázis méretét és a feladat célját. Minél nagyobbra választjuk ezt a számot, annál távolabbi felhasználók is bekerülnek, így egyre kevésbé releváns elemeket fog javasolni a rendszer, viszont, ha nagyon kicsire állítjuk ezt a számot, akkor olyan filmeket is javasolhat, amit esetleg csak egy ember értékelt jóra. Itt a szomszédok számát 100-ra állítottam, hogy tényleg jó, de még releváns filmeket javasoljon a rendszer. A szomszédok kereséséhez az sklearn NearestNeighbors csomagját használtam. Alkalmaztam a modellt az adott felhasználóra, így megkaptam a legközelebbi 100 szomszédját.

Miután megtaláltam a legközelebbi szomszédokat, valamilyen módszerrel ki kellett választani a legnépszerűbb filmeket, majd azokat javasolni a felhasználónak, amiket még nem látott. A kiválasztás a céltól függ. Ki lehet választani azokat a filmeket, amiket a legtöbben 10-esre értékeltek, de lehet átlagos pontszám alapján is javaslatot adni. Én a következőképpen súlyoztam a pontszámokat: a rossz értékeléseket bűntettem, az átlagos értékeléseket figyelmen kívül hagytam, a jó értékeléseket pedig jutalmaztam. Ezután a kapott pontokat összegeztem minden filmre. Az így kialakult sorrendből az első 10 filmet javasoltam, amit a felhasználó még nem látott.

Ajánlás

Miután elkészült a modell, teszteltem a működését az általam értékelt filmeken. A következő táblázat azt a 20 filmet és pontszámot tartalmazza, ami alapján a legközelebbi szomszédokat kereste meg a rendszer.

az általam értékelt filmek

Az ajánló az alábbi filmeket javasolta nekem megnézésre:

Knives Out (2019), Avengers: Endgame (2019), Captain Phillips (2013), The Wolf of Wall Street (2013), The Shawshank Redemption (1994), Hacksaw Ridge (2016), American Hustle (2013), The Imitation Game (2014), Prisoners (2013), The Gentlemen (2019)

Mivel csak 20 filmet értékeltem előzőleg, így akadtak olyan filmek az ajánlatok között, melyeket már láttam, ennek köszönhetően tesztelni tudtam a javaslatokat. A remény rabjai (The Shawshank Redemption) és a Kódjátszma (The Imitation Game) kifejezett kedvenceim és a Phillips kapitányt is jó szívvel ajánlanám másoknak, ezért elégedett vagyok a rendszer működésével. Szerencsére azért akadt egy-két újdonság is a javaslatok között.

Felmerült problémák

A legtöbb ajánlási algoritmusban rendkívül óvatosnak kell lenni, hogy elkerüljük a népszerű termékek „gazdagabbá válását”. Más szóval, hogy rendszerünk csak népszerű elemeket javasoljon, és a felhasználók ​​csak olyan ajánlásokat kapjanak, amelyek rendkívül közel állnak azokhoz, amelyeket már kedveltek, ezáltal nincs esélyük megismerni új elemeket. Ennek elkerülésére növelhetjük a szomszédok számát, vagy az adott felhasználó értékelési listáját bővíthetjük változatosabb filmekkel.

A másik probléma, ami felmerült miután több kollégámnak is ajánlottam filmeket, hogy az egyik kollégám az 1644 filmből 1354-et látott és értékelt. Mivel az adatbázisban a következő legtöbbet értékelt felhasználó 869 filmet látott és 500-nál több filmet csak 13 felhasználó értékelt, így a szomszéd keresésnél csak egészen távoli szomszédokat talált hozzá az algoritmus. Valamint az ajánlható filmek listája nála lecsökkent 290-re, ezért nem biztos, hogy a legrelevánsabb filmeket ajánlja neki a rendszer. Ennek a problémának a megoldására az adatbázis növelése lenne a megoldás, ami költséges és időigényes lenne, de szerencsére ez ritka eset.

Tényleg jobb lett a levegő a karantén miatt?

By | Big Data News, Data Science | No Comments

António Guterres ENSZ-főtitkár a minap felhívást intézett a világ vezetőihez, hogy használják fel a koronavírus-járvány teremtette helyzetet a világ jobbá tételére és együttműködésükkel olyan más globális fenyegetésekkel is szálljanak szembe, mint a klímaváltozás. Mivel mi magunk, a United Consult munkatársai is elkötelezettek vagyunk a zöldebb jövő mellett, saját eszközeinkkel igyekeztünk utánajárni, hogy milyen konkrét összefüggések vannak a pandémia és a légszennyezettség csökkenése között.

 

Az MTI beszámolója szerint az ENSZ-főtitkár a Petersbergi Klímadialógus című kétnapos tanácskozás keretében szólalt fel videón keresztül. Guterres szerint a járvány rávilágított, hogy mennyire ki vannak szolgáltatva társadalmaink és gazdaságaink az ilyen jellegű sokkhatásoknak. Mint mondta, az egyedüli válasz ebben a helyzetben a bátor, jövőképpel rendelkező és együttműködő vezetés. „Ugyanilyen vezetésre van szükség a klímaváltozás egzisztenciális fenyegetése esetében is” – hangoztatta Guterres, aki szerint jelentős ára lesz annak, ha nem cselekszünk a klímaváltozás feltartóztatása ügyében, ugyanakkor – mint fogalmazott – a technológia a mi oldalunkon áll.

Húszéves múltra visszatekintő IT-cégként bátran megerősíthetjük az ENSZ-főtitkár szavait. A technológia valóban a jelen és a jövő szolgálatában áll, olyannyira, hogy kollégáink például már nem először hívták segítségül az adatokat és az adatelemzés módszerét a járványhelyzet kapcsán. Néhány hete arra kerestük a választ, hogy lehet-e Magyarországon adatokkal védekezni a járvány ellen, ezúttal pedig a Covid 19-járvány miatti kijárási korlátozások és légszennyezettség állapotának összefüggéseit vizsgáltuk meg.

NO2 és a hőmérséklet kapcsolata

A koronavírus-járvány kapcsán már sokat emlegetett légszennyezettség-csökkenés lehetséges okainak jártunk utána. Kíváncsiak voltunk arra, hogy a sok negatív hatással szemben ezt a pozitív változást át tudjuk-e menteni a vírus utáni időszakra.

A légszennyezettséget a levegő NO2 (nitrogén-dioxid) koncentrációján keresztül vizsgáltuk. A NO2 elsősorban a járművek üzemanyagának égéstermékeiből, valamint energia-termelésből és fűtésből származik. Ebből adódóan a hőmérséklet és a NO2 koncentráció természetesen erős kapcsolatot mutat. Mint a következő ábrán is jól látszik, a téli időszakban, amikor csúcson jár a fűtési szezon, mindig magasabb a légszennyezettség, és ahogy melegszik az idő, csökkennek az értékek.

 

Forrás: European Environment Agency, National Centers for Environmental Information

Mivel a koronavírus éppen ebben az amúgy is leszálló ágban ért el minket, az elemzés során figyelembe kellett vennünk az időjárási változásokat is. Ennek érdekében megnéztük, hogy tavalyhoz képest az idei tavasz gyorsabban vagy lassabban ért-e el minket. Azt tapasztaltuk, hogy a vizsgált városokban nincs szignifikáns különbség a tavalyi és az idei hőmérséklet alakulások között, így összehasonlíthattuk a tavalyi és idei NO2 értékeket.

A korlátozások hatása a légszennyezettségre

De akkor mi okozhatta mégis hirtelen a légszennyezettségi mutatók javulását a legtöbb koronavírussal sújtott országban? Nem kérdés, hogy a megbetegedéseken és az azokra adott társadalmi reakciókon túl a különböző vészhelyzeti intézkedések komoly hatással voltak minden ország működésére, ezek nyomán pedig visszaesett a közlekedés és ipari tevékenységek nagy része.

Vizsgálatunk során kísérletet tettünk arra, hogy egy időskálán bemutassuk, hogyan szigorodtak a korlátozások öt európai fővárosban. Egy 10-es skálán kategorizáltuk be az adott napi intézkedéseket az alábbi szempontok szerint:

A következőkben láthatjuk a NO2 és a korlátozások kapcsolatát. Az ábrákon feltűntettük a tavalyi és az idei év NO2 koncentrációját januártól kezdve és ezzel párhuzamosan mellé tettük, hogy a különböző városokban mikor, milyen erős korlátozások léptek érvénybe. Jól látható, hogy azokban a városokban, ahol a korlátozások erőssége elérte a legerősebb, 10-es szintet, ott jelentős csökkenést tapasztalunk a tavalyi NO2 koncentrációhoz képest.


Az eredményekből az is kitűnik, hogy bár Budapesten és Berlinben – ahol a korlátozások egyelőre megálltak a 7-es szinten és a hírek szerint nem is várható további szigorítás – is volt egy kezdeti csökkenés, hamar visszaállt a koncentráció az ilyenkor megszokott szintre.

A döntések gazdasági hatásai

Ezek a megfigyelések megerősítették, hogy a járvány miatt hozott döntések nem csupán egészségügyi, hanem komoly környezeti hatásokkal is bírnak. Mindemellett fontos szempont persze – és a döntéshozóknak természetesen ezt is mérlegelni kell –, hogy a korlátozások nem csupán a vírus terjedésének sebességét és intenzitását, illetve a légszennyezettséget befolyásolják. Az ilyen intézkedések a gazdaságra is komoly, jellemzően negatív hatással vannak. Kivételt talán csak az online kereskedelemmel, illetve bizonyos egészségügyi eszközök gyártásával és forgalmazásával összefüggő üzleti területek jelenthetnek.

A GDP adatok a márciusi-áprilisi időszakra vonatkozóan még nem álltak rendelkezésünkre, ezért a gazdasági hatások alakulásának vizsgálatára az úgynevezett PMI (beszerzési menedzser index) mutatót fogjuk használni, mely egy megkérdezésen alapuló mutató. Vállalatok vezetői nyilatkoznak az új megrendelések, készletek állománya, termelés, szállító teljesítések és a foglalkoztatási környezet változásairól. Ha a PMI értéke 50 feletti szám, akkor az gazdasági növekedést, az 50 alatti érték szűkülést, míg a kerek 50 változatlanságot vetít előre az előző hónaphoz képest.

 

Forrás: Investing.com

A fentebbi ábrán jól látható, hogy a gazdaságra éppoly drasztikus, ha nem erősebb hatása lesz hosszú távon „karanténban töltött” időszaknak, mint a légszennyezettségre. Összességében tehát elmondhatjuk, hogy igen komoly döntések előtt állnak a világ kormányainak vezetői: most ugyanis – ahogyan az ENSZ-főtitkár is hangsúlyozta – fontos lépéseket tehetnének a klímaváltozás ellen, nem mindegy azonban, hogy mindezt milyen áron teszik meg. Egyelőre a jövő kérdése, hogy a világ vezetői – például a COVID 19 nyomán csökkenő légszennyezettséget látva – megtalálják-e azokat az ideális intézkedéseket, melyek hosszú távon nem teszik tönkre a gazdaságot, de mégis látható javulást hoznak a környezeti mutatókra.