lemorzsolódás előrejelzés

fotó: Mantas hesthaven on Unsplash

az ügyfelek lemorzsolódása, más néven vásárlói lemorzsolódás, akkor fordul elő, amikor az ügyfelek abbahagyják az üzleti tevékenységet egy céggel. A vállalatok azért érdekeltek ezen ügyfelek szegmenseinek azonosításában, mert az új ügyfél megszerzésének ára általában magasabb, mint a régi megtartása. Például, ha a Netflix ismerné az ügyfelek egy szegmensét, akiket fenyeget a kavarodás veszélye, proaktívan bevonhatják őket különleges ajánlatokkal, ahelyett, hogy egyszerűen elveszítenék őket.

ebben a bejegyzésben létrehozunk egy egyszerű ügyfél-lemorzsolódási előrejelzési modellt a Telco ügyfél-lemorzsolódási adatkészlet felhasználásával. Döntési fát választottunk a kavargó ügyfelek modellezésére, pandákat az adatok ropogására, matplotlib pedig a vizualizációkra. A fentieket Pythonban fogjuk megtenni.
a kód használható egy másik adatkészlettel, néhány kisebb módosítással az alapmodell kiképzéséhez. Néhány referenciát is adunk, és ötleteket adunk az új funkciókhoz és fejlesztésekhez.

ezt a kódot a Jupyter jegyzetfüzet letöltésével futtathatja.

íme néhány link, amely érdekelheti Önt:

- Labeling and Data Engineering for Conversational AI and Analytics- Data Science for Business Leaders - Intro to Machine Learning with PyTorch - Become a Growth Product Manager - Deep Learning (Adaptive Computation and ML series) - Free skill tests for Data Scientists & Machine Learning Engineers

a fenti linkek közül néhány affiliate link, és ha átmegy rajtuk, hogy vásároljon, jutalékot Keresek. Ne feledje, hogy a tanfolyamokat a minőségük miatt kapcsolom össze, nem pedig a vásárlásokból kapott jutalék miatt.

pandákat használunk az adatkészlet olvasásához és előfeldolgozásához. A Telco adatkészlet soronként egy ügyféllel rendelkezik, sok oszloppal (funkcióval). Nincsenek sorok az összes hiányzó értékkel vagy másolattal (ez ritkán fordul elő valós adatkészletekkel). 11 minta van összesen “” értékre állítva, ami hibának tűnik az adatokban. Ezeket a mintákat eltávolítjuk, és a típust numerikus (float) értékre állítjuk.

df = pd.read_csv('data/WA_Fn-UseC_-Telco-Customer-Churn.csv')df = df.dropna(how=”all”) # remove samples with all missing values
df = df # remove duplicatestotal_charges_filter = df.TotalCharges == " "
df = df
df.TotalCharges = pd.to_numeric(df.TotalCharges)

az első néhány minta a Telco ügyfél lemorzsolódási adatkészletében

feltáró Adatelemzés

az adatkészletben 2 típusú jellemző található: kategorikus (két vagy több érték, sorrend nélkül) és numerikus. A legtöbb funkciónév magától értetődő, kivéve:

  • Partner: függetlenül attól, hogy az ügyfélnek van-e partnere vagy sem (Igen, Nem),
  • eltartottak: függetlenül attól, hogy az ügyfélnek vannak-e eltartottjai vagy sem (Igen, Nem),
  • OnlineBackup: az ügyfélnek van-e online biztonsági mentése vagy sem (Igen, Nem, nincs internetszolgáltatás),
  • hivatali idő: az ügyfélnél töltött hónapok száma,
  • MonthlyCharges: az ügyfélnek havonta felszámított összeg,
  • TotalCharges: az ügyfélnek felszámított teljes összeg.

az adatkészletben 7032 ügyfél és 19 funkció található customerID (nem informatív) és Churn oszlop (célváltozó) nélkül. A kategorikus jellemzők többségének 4 vagy kevesebb egyedi értéke van.

adatkészlet összegzés

a funkciókat két listába egyesítjük, hogy közösen elemezhessük őket.

categorical_features = 
numerical_features =
target = "Churn”

numerikus jellemzők eloszlása

numerikus összefoglaló technikák (átlag, szórás stb.) ne mutasson nekünk tüskéket, eloszlások alakjait, és nehéz vele megfigyelni a kiugró értékeket. Ezért használunk hisztogramokat.

df.describe()

a numerikus jellemzők összefoglalása

első pillantásra az adatokban nincsenek kiugró értékek. Egyetlen adatpont sincs leválasztva az eloszlástól, vagy túl messze van az átlagértéktől. Annak megerősítéséhez, hogy ki kell számolnunk az interkvartilis tartományt (IQR), és meg kell mutatnunk, hogy az egyes numerikus jellemzők értékei az első és a harmadik kvartilis 1,5 IQR-jén belül vannak.

a numerikus jellemzőket rendes intervallumokká alakíthatjuk. Például a birtoklás numerikus, de gyakran nem törődünk a kis számbeli különbségekkel, és ehelyett a rövid, közép-és hosszú távú birtoklással rendelkező ügyfelekre csoportosítjuk a birtoklást. Az átalakítás egyik oka a zaj csökkentése lenne, gyakran a kis ingadozások csak zajok.

df.hist(bins=30, figsize=(10, 7))

a numerikus jellemzők hisztogramjai

a numerikus jellemzők eloszlását vizsgáljuk a célváltozóhoz viszonyítva. Megfigyelhetjük, hogy minél nagyobb az összdíjazás és a birtoklás, annál kisebb a lemorzsolódás valószínűsége.

fig, ax = plt.subplots(1, 3, figsize=(14, 4))
df.hist(bins=30, color="blue", alpha=0.5, ax=ax)
df.hist(bins=30, color="red", alpha=0.5, ax=ax)

numerikus jellemzők a célváltozóhoz viszonyítva

kategorikus jellemzőeloszlás

a kategorikus jellemzők elemzéséhez oszlopdiagramokat használunk. Megfigyeljük, hogy az időskorúak és a telefonszolgáltatással nem rendelkező ügyfelek kevésbé képviseltetik magukat az adatokban.

ROWS, COLS = 4, 4
fig, ax = plt.subplots(ROWS, COLS, figsize=(18, 18))
row, col = 0, 0
for i, categorical_feature in enumerate(categorical_features):
if col == COLS - 1:
row += 1
col = i % COLS
df.value_counts().plot('bar', ax=ax).set_title(categorical_feature)

a kategorikus jellemzők eloszlása

a következő lépés a kategorikus jellemzők vizsgálata a célváltozóhoz viszonyítva. Mi ezt csak a szerződés funkció. Azok a felhasználók, akik havi szerződéssel rendelkeznek, nagyobb valószínűséggel köpülnek, mint a hosszú távú szerződésekkel rendelkező felhasználók.

feature = ‘Contract’
fig, ax = plt.subplots(1, 2, figsize=(14, 4))
df.value_counts().plot(‘bar’, ax=ax).set_title(‘not churned’)
df.value_counts().plot(‘bar’, ax=ax).set_title(‘churned’)

szerződéses funkció a célváltozóhoz viszonyítva

célváltozó-Eloszlás

a célváltozó-Eloszlás azt mutatja, hogy kiegyensúlyozatlan problémával van dolgunk, mivel sokkal több nem kavargó felhasználó van. A modell nagy pontosságot érne el, mivel többnyire megjósolná azokat a többségi osztályfelhasználókat, akik példánkban nem kavarogtak.

néhány dolgot tehetünk a kiegyensúlyozatlan adatkészlet hatásának minimalizálása érdekében:
– Adatok újramintázása (kiegyensúlyozatlan-tanulás),
– több minta gyűjtése,
– pontosság és visszahívás használata pontossági mutatóként.

df.value_counts().plot('bar').set_title('churned')

célváltozó Eloszlás

jellemzők

a Telco adatkészlet már customerid szerint van csoportosítva, így nehéz új funkciókat hozzáadni. Amikor a lemorzsolódás előrejelzésén dolgozunk, általában olyan adatkészletet kapunk, amelynek ügyfél-munkamenetenként egy bejegyzése van (ügyféltevékenység egy bizonyos idő alatt). Ezután olyan funkciókat adhatunk hozzá, mint:

  • munkamenetek száma vásárlás előtt,
  • munkamenetenkénti átlagos idő,
  • időeltolódás a munkamenetek között (gyakori vagy kevésbé gyakori ügyfél),
  • csak egy országban van ügyfél.

néha még ügyfél-eseményadatokkal is rendelkezünk, amelyek lehetővé teszik számunkra, hogy megtaláljuk az ügyfél viselkedésének mintáit az eredményhez képest (lemorzsolódás).

kódolási jellemzők

az adatkészlet előkészítéséhez a lemorzsolódás modellezéséhez kategorikus jellemzőket kell kódolnunk számokra. Ez azt jelenti, hogy az “Igen”, “Nem” kódolást 0-ra és 1-re, hogy az algoritmus működjön az adatokkal. Ezt a folyamatot onehot kódolásnak hívják.

ódolt kategorikus jellemzők

osztályozó

a sklearn-t, a Python gépi tanulási könyvtárát használjuk osztályozó létrehozásához.
a sklearn módszer olyan csővezetékek használata, amelyek meghatározzák a szolgáltatásfeldolgozást és az osztályozót. Példánkban a folyamat egy adatkészletet vesz fel a bemenetben, előfeldolgozza a jellemzőket és betanítja az osztályozót.
amikor betanított, ugyanazt a bemenetet veszi fel, és előrejelzéseket ad vissza a kimeneten.

a folyamatban külön feldolgozzuk a kategorikus és numerikus jellemzőket. A onehot kategorikus jellemzőket és skálázható numerikus jellemzőket kódol az átlag eltávolításával és az egység varianciára méretezésével.
döntési fa modellt választottunk az értelmezhetőség miatt, és a maximális mélységet 3-ra állítottuk (önkényesen).

a csővezeték egy adatkészletet vesz fel a bemenetben, amely preprocesses jellemzők és vonatok az osztályozó

a modell betanítása

az adatkészletet felosztottuk a vonat (75% minták) és a teszt (25% minták).
kiképezzük (illesztjük) a csővezetéket, és előrejelzéseket készítünk. A classification_report segítségével kiszámítjuk a pontosságot és visszahívjuk a tényleges és előre jelzett értékeket.

from sklearn.model_selection import train_test_splitdf_train, df_test = train_test_split(df, test_size=0.25, random_state=42)pipeline.fit(df_train, df_train)
pred = pipeline.predict(df_test)

A modell tesztelése

a classification_report segítségével kiszámítjuk a pontosságot és visszahívjuk a tényleges és előre jelzett értékeket.

az 1.osztályú (kavargó felhasználók) modell 0,67 pontosságot és 0,37 visszahívást ér el. A pontosság megmondja, hogy hány kavargó felhasználó jósolta meg helyesen az osztályozónkat. A másik oldalon, visszahívás mondja el nekünk, hogy hány kavargó felhasználó hiányzott.

laikus szempontból az osztályozó nem túl pontos a kavargó felhasználók számára.

from sklearn.metrics import classification_reportprint(classification_report(df_test, pred))

osztályozási jelentés a döntési fa modellhez

a modell értelmezhetősége

a döntési fa modell szerződés, havi díjak, internetservice, totalcharges és tenure funkciókat használ annak eldöntéséhez, hogy az ügyfél lemorzsolódik-e vagy sem. Ezek a funkciók jól elkülönítik a kavargó ügyfeleket másoktól a döntési fa osztott kritériumai alapján.

minden ügyfélminta áthalad a fán, és a végső csomópont megadja az előrejelzést.
például, ha a Contract_Month-to-month értéke:

  • egyenlő 0-val, folytassa a fa bejárását valódi ággal,
  • egyenlő 1-vel, folytassa a fa bejárását hamis ággal,
  • nincs meghatározva, akkor a 0 osztályt adja ki.

Ez egy nagyszerű megközelítés annak megtekintéséhez, hogy a modell hogyan hoz döntést, vagy ha olyan funkciók lopakodtak a modellünkben, amelyeknek nem kellene ott lenniük.

öntési fa modell

további olvasmányok

  1. osztály egyensúlyhiány kezelése az ügyfél lemorzsolódásában — hogyan tudjuk jobban kezelni az osztály kiegyensúlyozatlanságát a lemorzsolódásban.
  2. a Survey on Customer Churn Prediction using Machine Learning Techniques] — ez a cikk áttekinti a legnépszerűbb gépi tanulási algoritmusokat, amelyeket a kutatók használnak a lemorzsolódás előrejelzéséhez.
  3. Telco ügyfél lemorzsolódás a Kaggle — lemorzsolódás elemzés Kaggle.
  4. WTTE-RNN-Hackless-lemorzsolódás-modellezés — esemény alapú lemorzsolódás előrejelzés.

mielőtt elmész

Kövess engem a Twitteren, ahol rendszeresen tweetelek az Adattudományról és a gépi tanulásról.

fotó: Courtney Hedger on Unsplash

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.