Churn prediction

figcaption> photo by Mantas hesthaven on Unsplash

customer churn, joka tunnetaan myös nimellä customer nuutuminen, tapahtuu, kun asiakkaat lopettavat asioimisen yrityksen kanssa. Yritykset ovat kiinnostuneita tunnistamaan näiden asiakkaiden segmenttejä, koska uuden asiakkaan hankkimisesta peritään yleensä korkeampi hinta kuin vanhan asiakkaan säilyttämisestä. Esimerkiksi, jos Netflix tiesi segmentti asiakkaita, jotka olivat vaarassa myllerrys he voisivat ennakoivasti sitoutua erikoistarjouksia sen sijaan, että vain menettää ne.

tässä viestissä luomme yksinkertaisen asiakkaan ennustusmallin käyttäen Telco: n Asiakastoimeksiantoaineistoa. Valitsimme päätöspuun mallintamaan kirnuilevia asiakkaita, pandat datan murskaamiseen ja matplotlib visualisointiin. Teemme kaiken edellä mainitun Pythonilla.
koodia voidaan käyttää toisen aineiston kanssa muutamin pienin muutoksin perusvaatimusmallin kouluttamiseksi. Tarjoamme myös muutamia suosituksia ja antaa ideoita uusia ominaisuuksia ja parannuksia.

voit suorittaa tämän koodin lataamalla tämän Jupyter-muistikirjan.

tässä muutama linkki, jotka saattavat kiinnostaa:

- 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

osa yllä olevista linkeistä on affiliate-linkkejä ja jos käyt niitä läpi tehdäksesi ostoksen, ansaitsen provision. Muista, että linkitän kursseja niiden laadun vuoksi eikä siksi, että saan provision ostoksistasi.

käytämme pandoja aineiston lukemiseen ja esikäsittelyyn. Telco dataset on yksi asiakas per rivi useita sarakkeita (ominaisuudet). Ei ole mitään rivejä, joissa on kaikki puuttuvat arvot tai kaksoiskappaleet (näin harvoin tapahtuu reaalimaailman datajoukoissa). On 11 näytettä, joiden kokonaishinnat on asetettu arvoon””, mikä tuntuu virheeltä tiedoissa. Poistamme näytteet ja asetamme tyypin numeeriseksi (float).

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)

/div>

ensimmäiset näytteet Telcon asiakaskirnatietokannassa

eksploratiivinen tietoanalyysi

aineistossa on 2 erilaista ominaisuutta: kategorinen (kaksi tai useampi arvo ja ilman järjestystä) ja numeerinen. Useimmat ominaisuusnimet ovat itsestään selviä, paitsi:

  • Partner: onko asiakkaalla kumppania vai ei (kyllä, ei),
  • : onko asiakkaalla huollettavia vai ei (kyllä, ei),
  • OnlineBackup: onko asiakkaalla online-varmuuskopiointi vai ei (kyllä, ei, ei internet-palvelua),
  • hallintaoikeus: niiden kuukausien lukumäärä, joina asiakas on oleskellut yrityksessä,
  • MonthlyCharges: asiakkaalta kuukausittain veloitettu summa,
  • kokonaismaksut: asiakkaalta veloitettu kokonaismäärä.

aineistossa on 7032 asiakasta ja 19 ominaisuutta ilman asiakasrekisteriä (ei-informatiivinen) ja Kirnusaraketta (kohdemuuttuja). Useimmat kategoriset ominaisuudet ovat 4 tai vähemmän ainutlaatuisia arvoja.

Dataset yhteenveto

yhdistämme ominaisuudet kahdeksi listaksi, jotta voimme analysoida niitä yhdessä.

categorical_features = 
numerical_features =
target = "Churn”

numeeristen ominaisuuksien jakauma

numeeristen yhteenvetotekniikoiden keskiarvo, keskihajonta jne.) älä näytä meille piikkejä, jakaumien muotoja ja sen kanssa on vaikea havaita poikkeamia. Siksi käytämme histogrammeja.

df.describe()

/div>

Yhteenveto numeerisista ominaisuuksista

ensisilmäyksellä tiedoissa ei ole poikkeamia. Mikään datapiste ei irtoa jakaumasta tai ole liian kaukana keskiarvosta. Vahvistaa, että meidän olisi laskettava interquartile range (IQR) ja osoittaa, että arvot kunkin numeerinen ominaisuus ovat sisällä 1.5 IQR ensimmäisestä ja kolmannesta kvartiili.

voisimme muuntaa numeeriset ominaisuudet ordinaalisiksi intervalleiksi. Esimerkiksi hallintaoikeus on numeerinen, mutta usein emme välitä pienistä numeerisista eroista, vaan ryhmittelemme hallintaoikeuden lyhyen, keskipitkän ja pitkän aikavälin hallintaoikeuden omaaville asiakkaille. Yksi syy muuntaa se olisi vähentää melua, usein pienet vaihtelut ovat vain melua.

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

numeeristen piirteiden histogrammit

tarkastelemme numeeristen piirteiden jakaumia suhteessa kohdemuuttujaan. Voimme todeta, että mitä suuremmat kokonaishinnat ja hallintaoikeudet ovat, sitä pienempi on kirnuamisen todennäköisyys.

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)

div>

numeeriset ominaisuudet suhteessa tavoitemuuttujaan

kategorisen ominaisuusjakauman

kategoristen ominaisuuksien analysointiin käytämme viivakaavioita. Havaitsemme, että ikäihmiset ja asiakkaat, joilla ei ole puhelinpalvelua, ovat vähemmän edustettuina tiedoissa.

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)

div>

kategoristen piirteiden jakautuminen

seuraava vaihe on tarkastella kategorisia piirteitä suhteessa tavoitemuuttujaan. Teemme tämän vain sopimusominaisuuden vuoksi. Käyttäjät, joilla on kuukausi-to-kuukausi sopimus, ovat todennäköisemmin Kirnu kuin käyttäjät, joilla on pitkäaikainen sopimus.

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’)

div>

sopimusominaisuus suhteessa tavoitemuuttujaan

tavoitemuuttujan jakauma

tavoitemuuttujan jakauma osoittaa, että kyseessä on epätasapainoinen ongelma, sillä kirnuttamattomia käyttäjiä on paljon enemmän. Malli saavuttaisi korkean tarkkuuden, koska se enimmäkseen ennustaisi enemmistön luokan käyttäjille, jotka eivät Kirnu esimerkissämme.

harvoja asioita, joita voimme tehdä epätasapainoisen aineiston vaikutuksen minimoimiseksi:
– resample data (epätasapainoinen-Opi),
– kerää lisää näytteitä,
– Käytä tarkkuutta ja takaisinkutsua tarkkuusmittareina.

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

tavoitemuuttujajakauma

ominaisuudet

telco-tietojoukko on jo ryhmitelty asiakkaan mukaan, joten uusien ominaisuuksien lisääminen on vaikeaa. Kun työskentelemme Kirnun ennustus saamme yleensä tietojoukko, joka on yksi merkintä per asiakas istunto (asiakkaan toiminta tiettynä aikana). Sitten voitaisiin lisätä ominaisuuksia, kuten:

  • istuntojen määrä ennen jonkin ostamista,
  • keskimääräinen aika per istunto,
  • Aikaero istuntojen välillä (usein tai harvemmin asiakas),
  • on asiakas vain yhdessä maassa.

joskus meillä on jopa asiakastapahtumatietoa, jonka avulla voimme löytää asiakaskäyttäytymisen malleja suhteessa lopputulokseen (churn).

Koodausominaisuudet

valmistellaksemme aineiston mallintamista varten meidän on koodattava kategoriset ominaisuudet numeroihin. Tämä tarkoittaa koodausta ”Kyllä”, ” Ei ” 0: lle ja 1: lle, jotta algoritmi voi toimia datan kanssa. Tätä prosessia kutsutaan onehot-koodaukseksi.

One hot koodatut kategoriset ominaisuudet

luokittelija

käytämme sklearnia, koneoppimisen kirjastoa Pythonissa, luokittajan luomiseen.
sklearnin tapa on käyttää piirteiden käsittelyä ja luokittelijaa määritteleviä putkistoja. Esimerkissämme putki ottaa datajoukko input, se esikäsittelee ominaisuuksia ja kouluttaa luokittelija.
koulutettuna se ottaa saman syötön ja palauttaa ennusteita tuotoksessa.

putkistossa käsitellään erikseen kategorisia ja numeerisia ominaisuuksia. Emme voi koodata kategorisia ominaisuuksia ja skaalata numeerisia ominaisuuksia poistamalla keskiarvon ja skaalaamalla ne yksikkövarianssiksi.
valitsimme ratkaisupuumallin sen tulkittavuuden vuoksi ja asetimme maksimisyvyyden 3: een (mielivaltaisesti).

putkisto ottaa datajoukon syötteeseen, se esiprosessoi luokittelijan ominaisuudet ja kouluttaa sen

mallin koulutus

jaamme aineiston koulutettavaksi (75% näytteitä) ja testattavaksi (25% näytteitä).
me treenaamme (fit) putkea ja teemme ennustuksia. Classification_report laskemme tarkkuuden ja takaisinkutsun todellisilla ja ennustetuilla arvoilla.

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)

testaamalla mallia

luokitus_raportilla laskemme tarkkuuden ja takaisinkutsun todellisilla ja ennustetuilla arvoilla.

luokan 1 (kirnuilla käyttäjät) mallilla saavutetaan 0,67 tarkkuutta ja 0,37 takaisinkutsua. Tarkkuus kertoo, kuinka monta kirnuilevaa käyttäjää luokittelijamme ennusti oikein. Toisella puolella, muistaa kertoa meille, kuinka monta kirnuili käyttäjiä se jäi.

maallikkotermein luokittelija ei ole kovin tarkka kirnuille käyttäjille.

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

div>

luokituskertomus päätöksentekopuumallista

malli tulkittavuus

päätöksentekopuumalli käyttää sopimus -, kuukausiharkinta -, internetpalvelu -, totalcharges-ja tenure-ominaisuuksia päätöksen tekemiseen, jos asiakas kirnuaa vai ei. Nämä ominaisuudet erottavat kirnusivat asiakkaat muista hyvin perusteella split kriteerit päätöksentekopuussa.

jokainen asiakasotos kulkee puun läpi ja lopullinen solmu antaa ennusteen.
esimerkiksi, jos Contract_Month-to-month on:

  • yhtä suuri kuin 0, jatka puun läpikulkua aidolla oksalla,
  • yhtä suuri kuin 1, jatka puun läpikulkua Valehaaralla,
  • Ei määritelty, se tuottaa luokan 0.

Tämä on hieno lähestymistapa nähdä, miten malli tekee päätöksen tai jos meidän malliin hiipii ominaisuuksia, joita ei pitäisi olla.

decision tree model

further reading

  1. handling class epätasapaino in customer chorn prediction — how can we better handle class epätasapaino in chorn prediction.
  2. a Survey on Customer Churn Prediction using Machine Learning Techniques] — tässä artikkelissa tarkastellaan suosituimpia koneoppimisen algoritmeja, joita tutkijat käyttävät churnin ennustamiseen.
  3. Telco customer churn on Kaggle — Churn-analyysi Kaggle.
  4. WTTE-RNN-Hackless-churn-modeling — Event based churn prediction.

ennen kuin menet

Seuraa minua Twitterissä, jossa twiittaan säännöllisesti Datatieteestä ja koneoppimisesta.

Photo by Courtney hedger on Unsplash

Vastaa

Sähköpostiosoitettasi ei julkaista.