Zenei streaming szolgáltatás vásárlói lemorzsolódásának előrejelzése az Apache Spark Machine Learning Library (MLlib) segítségével

Ebben az összefüggésben a lemorzsolódás arra utal, hogy az ügyfelek abbahagyják a szolgáltatás használatát. Az ügyfelek magas szintű lemorzsolódása káros lehet a vállalkozás számára. A probléma megoldásának egyik módja a gépi tanulás segítségével előre jelezni, mely ügyfelek távoznak valószínűleg, és proaktív lépéseket tesznek, például ösztönzőket kínálnak, hogy megpróbálják megtartani őket. Ez a megközelítés mind a vállalkozás, mind az ügyfél számára előnyös lehet.

Bevezetés

A Sparkify egy kitalált induló vállalkozás, amely zenei streaming szolgáltatásokat nyújt az Egyesült Államokban élő felhasználók számára. A felhasználók egy ingyenes rétegen keresztül érhetik el a szolgáltatást, amely a dalok közötti hirdetéseket tartalmazza, vagy egy prémium előfizetési modellen keresztül, ahol a hirdetésmentes streamelésért havi átalánydíjat fizetnek. Minden alkalommal, amikor a felhasználó interakcióba lép a szolgáltatással, például lejátszik egy dalt vagy kedveli azt, az adatokat generál, amelyek felhasználhatók a felhasználói élmény javítására és a Sparkify üzleti sikerének támogatására. Ezeket az adatokat a rendszer egy naplófájlban tárolja, amely minden felhasználói interakcióhoz 18 mezőt tartalmaz, például a felhasználó azonosítóját és a lejátszott dal nevét. A Sparkify az Apache Spark elosztott fájlrendszert használja ezen adatok tárolására és elemzésére. Az Apache Spark egy nyílt forráskódú keretrendszer, amely gyors és könnyen használható elemzést biztosít, és úgy tervezték, hogy hatékonyabb legyen, mint a Hadoop MapReduce.

Problémanyilatkozat

Célunk az, hogy azonosítsuk azokat a felhasználókat, akiket a lemorzsolódás veszélye fenyeget, akár a prémium szintről az ingyenes szintre való visszaminősítéssel, akár a szolgáltatásuk teljes lemondásával. A felhasználók bármikor módosíthatják előfizetéseiket. Azáltal, hogy pontosan azonosítja azokat a felhasználókat, akik valószínűleg távoznak, a Sparkify kedvezményeket és ösztönzőket kínálhat nekik, hogy megkísérelje megtartani őket, és potenciálisan több millió dolláros bevételt takarítson meg a cégnek. Fontos azonban elkerülni, hogy tévesen jósolják meg a lemorzsolódást azoknak a felhasználóknak, akik valószínűleg hűségesek maradnak, mivel a kedvezmények és ösztönzők felkínálása költséges lehet.

A folyamatot a következő lépésekbe szerveztem:

  1. Adatok betöltése és tisztítása: Ebben a szakaszban azonosítom és kezelem a hiányzó vagy véletlenszerű értékeket, megértem az adatkészlet szerkezetét, meghatározom az oszlopok adattípusait, és azonosítom a hasznos funkciókat.
  2. EDA: Megvizsgálom azokat a funkciókat, amelyek véleményem szerint a legnagyobb hatással lesznek a projektre.
  3. Funkciótervezés: Új funkciókat választok ki és hozok létre az előző fázisok alapján, és egyetlen adatkeretbe egyesítem őket.
  4. Modellálás:Négy gépi tanulási algoritmust fogok használni – logisztikai regresszió, véletlenszerű erdőosztályozó, gradiens-növelt faosztályozó és lineáris támogatási vektorgép –, és összehasonlítom őket a pontosság és az F1-metrikák alapján.
  5. Modell értékelése és érvényesítése: Ebben a lépésben a modell teljesítményét fogom tárgyalni.

I. Adatok betöltése és tisztítása:

Az Udacity kedvesen biztosított egy részhalmaz adatkészletet (128 MB) JSON-fájl formájában, és egy Spark Session létrehozása és az adatok hozzáadása után elkezdhettem a tisztítási folyamatot. Ez az adattudósok gyakori feladata. Miután eltávolítottam az üres felhasználói azonosítókat az adatokból, 278 154 adatsor maradt, amelyek egy ügyfél interakciós előzményeit reprezentálják a Sparkify alkalmazással.

A tisztítási lépés során eltávolítottam azokat a rekordokat, amelyek nem rendelkeztek felhasználói azonosítóval vagy munkamenet-azonosítóval. Azt is észrevettem, hogy a felhasználói azonosító oszlopban üres karakterlánc-értékek vannak.

II. Feltáró adatelemzés (EDA)

Kezdésként meg kellett határoznom, mit jelent a felhasználó számára a Sparkify-ból való lemondás. A lemorzsolódást úgy definiáltam, mint egy felhasználó, aki megszünteti a fiókját, amit úgy határoztam meg, hogy ellenőriztem, hogy az adatok között szerepel-e a „Lemondás megerősítése” oldal. Ha ez az oldal megjelent, akkor a felhasználót levert felhasználónak tekintettem. Létrehoztam egy jelzőt annak jelzésére, hogy egy felhasználó lemorzsolódott-e úgy, hogy 1 értéket rendeltem a lemorzsolódott felhasználókhoz és 0 értéket a nem leállított felhasználókhoz. Ezt a jelzőt használták egy új „churn” nevű oszlop létrehozására, amelyet a modellezés céloszlopaként használnak majd.

A fent látható diagram alapján az adatkészletben szereplő 173 egyedi felhasználó közül 52 törölte Sparkify-fiókját. Ez 23%-os lemorzsolódási arányt jelent a Sparkify ügyfeleinek ezen részében. Fontos megjegyezni, hogy ez egy kiegyensúlyozatlan adatkészlet, amelyet figyelembe kell venni a jövőbeni elemzés során.

A fenti grafikon azt mutatja, hogy azok a felhasználók, akik az alkalmazás ingyenes verzióját használták, nagyobb valószínűséggel hagyták abba, mint azok, akik fizettek érte. Szintén figyelembe kell venni a „szint” oszlopot, amely azt jelzi, hogy a felhasználó az ingyenes verziót használja-e hirdetésekkel vagy a fizetős, hirdetésmentes verziót.

A diagramon látható, hogy a lemorzsolódási arányt tekintve kis különbség van az ingyenes és a fizetős felhasználók között. Az ingyenes verzió lemorzsolódási aránya valamivel magasabb, mint a fizetős verzióé, de még nem világos, hogy ez jelentős különbség-e. Továbbra is folytatom az egyéb funkciók felfedezését, hogy további betekintést nyerjek.

A grafikon szerint a Sparkify-ról leszóló felhasználók átlagosan kevesebb dalt hallgatnak meg munkamenetenként.

A Windows és a Mac a két legnagyobb felhasználói bázissal rendelkező operációs rendszer.

A Chrome volt a legnépszerűbb böngésző, míg a Firefox volt a legmagasabb, a Trident pedig a legalacsonyabb. Úgy tűnik, hogy bizonyos böngészőkkel nincs olyan probléma, amely miatt az ügyfelek elhagyják, ezért ez nem fog szerepelni modellünkben.

A legtöbb felhasználó kaliforniai volt, míg Michiganben, Kentuckyban és Ohióban többen távoztak, mint ahányan maradtak. Nehéz lehet ezen információk felhasználása modellezési célú, értelmes funkció létrehozására.

Ez az információ hasznos volt a funkciótervezési folyamatban.

III. Funkciótervezést

Az adatok alapos áttekintése után fontos olyan funkciók kiválasztása és létrehozása, amelyek hasznosak lesznek a modell betanításában.

„A következő funkciókat választottuk ki az elakadt felhasználók azonosítására:

  • Művészek száma
  • A felhasználók neme (férfi vagy nő)
  • A dalok száma munkamenetenként
  • A dalok hossza munkamenetenként
  • Szint (fizetős vagy ingyenes)
  • Az egyes műveletek száma: Roll Advert, "Tetszik", "Tetszik", "Ismerősök meghívása", "Leminősítések"
  • Felhasználói fiók életkora

Ezekkel a funkciókkal fogok létrehozni egy 'churn' nevű címkét, és ezt használom elemzésünk célpontjaként. Az eredményül kapott adatkeretben minden egyedi felhasználóhoz tartozik egy sor, és az adott felhasználóra vonatkozó információkat is tartalmazni fog. Mielőtt ezt az adatkeretet gépi tanulási algoritmusokkal használnám, vektorizálom és szabványosítom. A kategorikus változókat számértékekké konvertálom, hogy előkészítsem az adatokat a modellezéshez.

Az összes funkció létrehozása és kombinálása után fontos az adatok előfeldolgozása, mielőtt a modell betanítására használnák őket.

Minden oszlopot lebegő adattípusra konvertálok.

Mielőtt a funkciókat a modell betanításához használná, azokat vektorokká kell konvertálni, hogy a skálázó feldolgozhassa őket. Ez előnyös a gépi tanulási modell számára, mert megakadályozza, hogy a legmagasabb értékű attribútumok dominálják az eredményeket.

Az adatok vektorizálása után egységesíteni tudom az értékeket, hogy azok egységesek legyenek. Ez azért fontos, mert ha bizonyos funkciók nem normál eloszlást követnek, előfordulhat, hogy a gépi tanulási becslések nem teljesítenek jól. Az értékek szabványosítása biztosítja, hogy minden funkció azonos léptékű legyen, és segíti a modell hatékonyabb konvergálását.

A gépi tanulási modellek teljesítményének értékeléséhez fontos, hogy a teljes adatkészletet oktatási, tesztelési és érvényesítési készletekre ossza fel. Többféle gépi tanulási módszert kipróbálok és értékelem azok pontosságát, szükség szerint módosítva a paramétereket. Ezt követően kiválasztom a nyertes modellt annak pontossága alapján a tesztkészleten, és beszámolok az eredményekről a validációs halmazon. Mivel a lemorzsolódott felhasználók száma viszonylag kicsi, hasznos lehet az F1 pontszámot használni az optimalizálás mérőszámaként.

IV. Modellezést

A funkciótervezés segítségével létrehoztam egy új adatkeretet, az úgynevezett „assemble_df”, amely csak numerikus változókat tartalmaz. A teljes adatkészletet képzési, tesztelési és érvényesítési készletekre is felosztottam. Ezeket az adatokat arra fogom használni, hogy kiértékeljek több gépi tanulási osztályozási algoritmust annak előrejelzésére, hogy a felhasználók lemorzsolódnak-e (1) vagy maradnak-e (0) egy bizonyos időkereten belül. Az általam tesztelt algoritmusok közé tartozik a Logistic Regression, a Random Forest Classifier, a GBTClassifier és a LinearSVC.

Kiértékelem a modellek pontosságát és szükség szerint módosítom a paramétereket. A teszt pontossága alapján kiválasztom a legjobb modellt, és bemutatom az eredményeket a validációs halmazon. Mivel a lemorzsolódott felhasználók száma viszonylag kicsi, az F1-es pontszámot fogom használni az optimalizálás mérőszámaként. Az F1 pontszám a modell pontosságának mértéke egy adatkészleten, és általában az általam itt értékelthez hasonló bináris osztályozási rendszerek teljesítményének értékelésére szolgál. Egyesíti a precizitást és a felidézést, hogy átfogóbb értékelést nyújtson a helytelenül besorolt ​​példákról, és jobban fel van szerelve az olyan kiegyensúlyozatlan osztályok kezelésére, mint amilyenek nálam vannak.

V. Modellértékelés és érvényesítést

Logisztikus regresszió

A logisztikai regresszió egyfajta statisztikai modell, amelyet általában osztályozási feladatokhoz használnak. Ez egy lineáris modell, amelyet a bináris eredmény előrejelzésére használnak (pl. 0 vagy 1, igen vagy nem, igaz vagy hamis). A modell megbecsüli annak valószínűségét, hogy egy példa egy adott osztályhoz tartozik (pl. annak a valószínűsége, hogy az ügyfél lemorzsolódik) egy adott beviteli jellemzők (például nem, lejátszott dalok száma, lejátszott dalok hossza) alapján. A megjósolt valószínűséget ezután egy küszöbértéket használó bináris előrejelzéssé alakítják át (pl. ha a megjósolt valószínűség nagyobb, mint 0,5, az előrejelzés 1, ellenkező esetben 0). A logisztikai regresszió kiterjeszthető a többosztályos osztályozási feladatok kezelésére az egy-mindegy vagy egy-versus-pihenő megközelítéssel, ahol minden osztályhoz külön modellt képeznek.

Eredmények:

Training LogisticRegression takes 1415.0573139190674 seconds
Correct Predictions Count: 17
Total Number of Predictions: 19
F1-score: 0.8804824561403509
Accuracy: 0.8947368421052632

Véletlenszerű erdőosztályozó

A Random Forest Classifier egyfajta csoportos tanulási módszer, amelyet osztályozási feladatokhoz használnak. Döntési fák gyűjteménye, amelyek a betanítási adatok rendszerbetöltéses mintáival és a szolgáltatások véletlenszerű részhalmazával vannak betanítva. A betanítási folyamat során minden döntési fa előrejelzést készít a bemeneti jellemzők alapján, és a végső előrejelzés az összes fa előrejelzésének összesítésével (pl. többségi szavazattal) készül. A többszörös döntési fa használata és a jellemzők véletlenszerű kiválasztása segít csökkenteni a túlillesztést és javítani a modell általánosítási teljesítményét. A Random Forest Classifier egy hatékony és széles körben használt gépi tanulási módszer, amely képes kezelni a nagy adatkészleteket és a nagy dimenziós jellemzőtereket. A hiányzó értékeket és kategorikus jellemzőket natív módon is tudja kezelni.

Eredmények:

Training RandomForestClassifier takes 1136.4520161151886 seconds
Correct Predictions Count: 17
Total Number of Predictions: 19
F1-score: 0.8804824561403509
Accuracy: 0.8947368421052632

GBTClassifier

A GBTClassifier (Gradient Boosting Tree Classifier) ​​egyfajta csoportos tanulási módszer, amelyet osztályozási feladatokhoz használnak. Ez egy iteratív folyamattal betanított döntési fák sorozata, ahol minden fát úgy terveztek, hogy kijavítsa az előző fa által elkövetett hibákat. A betanítási folyamat magában foglalja egy gradiens süllyedés-optimalizáló függvény illesztését a döntési fához, és a fa paramétereinek beállítását a veszteségfüggvény minimalizálása érdekében. A végső előrejelzés az összes fa előrejelzésének összesítésével (például a többségi szavazat megszerzésével) történik. A GBTClassifier egy hatékony és széles körben használt gépi tanulási módszer, amely képes kezelni nagy adatkészleteket és nagy dimenziós jellemzőtereket. Zajra is robusztus, és képes kezelni a hiányzó értékeket és a kategorikus jellemzőket. Azonban érzékenyebb a túlillesztésre, és a jó teljesítmény elérése érdekében gondos hiperparaméter-hangolást igényel.

Eredmények:

Training GBTClassifier takes 2826.877682685852 seconds
Correct Predictions Count: 17
Total Number of Predictions: 19
F1-score: 0.894736842105263
Accuracy: 0.8947368421052632

LinearSVC

A LinearSVC (Linear Support Vector Classification) egyfajta támogatási vektorgép (SVM), amelyet osztályozási feladatokhoz használnak. Ez egy lineáris modell, amelyet a csuklóvesztés funkció egy változatával képeznek ki, amely lehetővé teszi a hatékony optimalizálást a gradiens süllyedéssel. A modell egy döntési határt hoz létre, amely maximálisan elválasztja az osztályokat azáltal, hogy megkeresi azt a hipersíkot, amelynél az osztályok közötti maximális margó (távolság) van. A LinearSVC képes kezelni a nagy dimenziós jellemzőtereket, de érzékeny a bemeneti jellemzők léptékére, és megköveteli, hogy a képzés előtt szabványosítsák őket. Érzékeny a kiugró értékekre is, és a túlillesztés elkerülése érdekében rendszeresítésre lehet szükség. A LinearSVC egy széles körben használt gépi tanulási módszer, amely különösen alkalmas nagyszámú szolgáltatást és korlátozott számú betanítási példát tartalmazó feladatokhoz.

Eredmények:

Training LinearSVC takes 5712.711784601212 seconds
Correct Predictions Count: 15
Total Number of Predictions: 19
F1-score: 0.696594427244582
Accuracy: 0.7894736842105263

Mivel a Random Forest Classifier a legjobb eredményeket adja, és a képzési idő a legrövidebb, ezt a modellt fogjuk használni a tesztadatokhoz.]

Eredmények:

Correct Predictions Count: 26
Total Number of Predictions: 33
F1-score: 0.7529411764705882
Accuracy: 0.7878787878787878

Következtetés

A kísérletet egy 128 MB-os kis adatkészlettel és 225 egyedi ügyféllel kezdtem. Az adatok betöltése és tisztítása után hasznos funkciókat kerestem a lemorzsolódás előrejelzésére, és kifejlesztettem a legígéretesebbeket. A funkciókat ezután előfeldolgozták, és különféle gépi tanulási módszerekkel használták.

A gépi tanulási modellezés segítségével meg tudta jósolni, hogy mely ügyfelek fognak valószínűleg leiratkozni, és azt tapasztalta, hogy az összes modell jó eredménnyel zárult. A GBTClassifier, a Logistic Regression és a Random Forest különösen jól teljesített, de a Logistic Regression modellnek volt a legrövidebb a képzési ideje. Érdemes azonban megfontolni a többi modell paramétereinek módosítását a túlillesztés csökkentése érdekében.

Fejlesztés

Számos lehetséges módja van a jelenlegi eredmények javításának: az adatkészlet méretének növelése a teljes 12 GB-os adatkészlet használatával, kísérletezés a kiválasztott modellek különböző paramétereivel, és további funkciók, például az ügyfél helyének hozzáadása. Egyes helyeken különböző tényezők miatt magasabb lehet a lemorzsolódás, míg más helyeken az ellenállóbb populáció miatt alacsonyabb lehet.

A modell teljesítménye potenciálisan javítható, ha jobban összpontosítunk a felhasználók kohorsz elemzésére. Ez a fajta elemzés, amely a felhasználók életciklusát vizsgálja, betekintést nyújthat a lemorzsolódási döntés időzítésébe, és segíthet jobban megérteni az azt befolyásoló tényezőket.

Ezenkívül érdemes lehet megfontolni az XGBoost és a LightGBM használatát felügyelt tanulási megközelítésként a következő próbálkozáshoz. Egy másik lehetőség lehet az összes felügyelt tanulási modell egyedi együttes modellbe történő kombinálása.

Projektem GitHub linkje: https://github.com/IAMTOIR/thoaipm-DS_capstoe

Referenciák