analyse af Telco kunde Churn datasæt

Okay! Lad os gøre det..

så jeg forberedte denne historie for at gøre mig lidt mere bekendt med ubalancedata.

datasættet er tilgængeligt i følgende link:

så lad os dykke lige ind i det.

det endelige mål vil være evaluere forskellige modeller for at forudsige, om en kunde vil “Churn” eller ej.

for ikke velkendt churn udtrykkes oftest som procentdelen (eller antallet) af serviceabonnenter, der afbryder deres abonnementer inden for en given tidsperiode.

lad os starte med at gøre vores EDA (sonderende dataanalyse)

datatyperne syntes at være ok, med undtagelse af ældre, der også skulle være en faktor. (Tjek i tvivl datasætlinket, og det er bibliotek)

lad os visualisere resumeet af datasættet

der er nogle NaN ‘ er i kolonnen TotalCharges, så vi vil grave lidt længere på disse rækker

da antallet af rækker med Nan-værdier er meget lille (1,5% af dataene) og under hensyntagen til, at alle de er churn= “nej”, som er overrepræsenteret i dataene. Vi vil bare slette disse rækker fra arbejdsdataene

lad se barplotterne for fordelingen af de kategoriske kolonner

lad os nu plotte for den afhængige variabel

som nævnt før kan vi nu se ubalancen af dataene for den afhængige variabel. Vi bliver nødt til at håndtere det senere inden modellering.

lad os nu plotte boksplotterne for de kvantitative variabler.

kasseplottet viser ingen outliers i distributionen.

lad os nu se korrelationen for de kvantitative variabler:

der er en høj positiv sammenhæng mellem de samlede gebyrer og månedlige gebyrer og de samlede gebyrer og uopsigelighed.

lad os nu plotte nogle histogrammer i betragtning af churn-funktionen for de kvantitative funktioner:

billedet ovenfor viser, at churn-satsen falder, når ansættelsesforholdet stiger, hvilket er en god indikation af, at virksomheden er i stand til at beholde langvarige kunder.👏👏👏

plottene ovenfor giver os nogle antydninger til funktioner såsom:

  • tilsyneladende har sådanne køn, telefontjeneste og flere linjer ikke rigtig stor effekt på Churn;
  • der synes ikke at være meget forskel mellem funktionerne Streaming TV og Streaming film;
  • Online sikkerhed, enhed beskyttelse og teknisk Support har meget lignende histogrammer og Churn ikke Churn relation.

for yderligere at grave ned i en bi-variate analyse, herunder de kvantitative funktioner (uopsigelighed, månedlige gebyrer og samlede afgifter) lad os omdanne dem til faktorer ved at dividere i 5 forskellige niveauer, for hver funktioner, ifølge der 20.percentil.

som nævnt før procentdelen af churn falder med antallet af måneder, hvilket indikerer, at gamle kunder er mindre vanskelige at vedligeholde

dette søjleplot viser, at jo højere de samlede gebyrer, der er foretaget til en kunde, er der et fald i churn-procentdelen. Hvilket det giver mening, hvis du tror, at lang tid klienter vil have en højere “Total Charge” og som vi set før, lang tid klienter har lavere churn procent

denne barplot er lidt mere intuitiv og viser, at højere månedlige afgifter har tendens til at have højere churn procent.

modellering

nu hvor vi har en bedre forståelse af dataene, lad os begynde at forberede os på modellering for at forudsige fremtidig kundekurn.

lad os opdele denne proces i trin i henhold til de øjeblikkelige problemer, vi tackler:

  1. beskæftiger sig med ubalancen
  2. definition af vores algoritmer og Metrics
  3. test af vores algoritmer
  4. håndtering af funktionsvalg
  5. endelige resultater

håndtering af ubalancen Krish

som vi har set før vores afhængige variabel er ubalanceret. Vi har mange alternativer til at tackle dette problem:

  • Overprøvetagning
  • Underprøvetagning
  • brug af forskellige vægtomkostninger
  • osv.

her vil vi prøve under, over-sampling og SMOTE teknik.

under Stikprøvebalancering af dataene

over sampling balancering af data

definition af vores algoritmer og Metrics

Nå, da vi har at gøre med et klassificeringsproblem, dvs. i slutningen af dagen kan vi kun forudsige enten “Churn” eller “not Churn”, derfor skal vi vælge en algoritme under dette specifikke “rige”. Det giver os nogle muligheder som:

  • Naive-Bayes
  • logistisk Regression
  • beslutningstræer (eller tilfældig Skov)
  • SVM
  • GBM

for at vælge metrikken fik vi at forstå problemet. For eksempel,

  • “har falske positive eller falske negativer mere skadelige konsekvenser?”🤔

i vores tilfælde ser det ikke ud til at være forskellige vægte for falske positive eller falske negativer, derfor bruger vi nøjagtighed som vores sammenligningsmetrik.

test af vores algoritmer

vi vil implementere 5 algoritmer (Naive-Bayes, logistisk regression, tilfældig Skov, SVM og LightGBM). Vi vil bruge 10-Cross fold validering og køre hver algoritme 10 gange og beregne resultaterne.

vi gentager denne metode for alle 3 data (afbalanceret ved hjælp af Underprøvetagning, Overprøvetagning og slag).

med resultaterne fra algoritmerne konstruerer vi en enkelt Nøjagtighedsdataframe

nøjagtighed Dataframe struktur

vi nu projekt boksplots for hver algoritme og hver afbalanceret data

boksplot af nøjagtigheden for 10-CV gentaget 10 gange

billedet ovenfor viser, at både Random Forest for over-sample balancerede data og for SMOTE balancerede data præsenterede de bedste resultater : 87% nøjagtighed.

håndtering af funktionsvalg

nu hvor vi har algoritmerne og afbalancerede data, der viste de bedste resultater, lad os prøve at forbedre nøjagtigheden eller forenkle algoritmen ved at udføre funktionsvalg.

så jeg vælger at arbejde med SMOTE balance data.

lad os bruge varImp-funktionen til at se de funktioner, der bedst repræsenterer churn i tilfældig skovalgoritme

de første fire funktioner virkede ret intuitive i betragtning af de visualiseringer, vi har set under EDA.

så vi opretter 2 andre dataframmer, en med de første 4 funktioner og en med alle topfunktioner op til Sreaming TV.

lad os nu køre den tilfældige skov med 10-cv gentaget 10 gange.

lad os nu oprette en ny boksplot med nøjagtighedsfordelingen for hver af de 3 dataframmer.

så resultaterne for mid_features og fulde data ser ud til at være bedre. Lad os teste, om de er væsentligt forskellige

så den statistiske test afviser nulhypotesen, så nøjagtighedsfordelingen fra full_data og fra mid_features_data er signifikant forskellige.

så vi afslutter dette funktionsvalg, der faktisk opretholder alle kolonnerne. Da der stadig er et betydeligt tab af nøjagtighed ved at fjerne funktionerne.

endelige resultater

lad os sammenfatte vores endelige forudsigelsesmodel. Vi opnåede en gennemsnitlig nøjagtighed på 87% ved hjælp af SMOTE som en måde at afbalancere dataene på og udføre gentagne 10 Cross-fold valideringer i 10 gange ved hjælp af Random Forest som vores algoritme.

vi har også fanget nogle interessante aspekter fra vores kundedata, såsom:

  • virksomheden ser ud til at gøre “ok” med at holde gamle kunder. Energi skal være mere fokus i implementeringen af strategier for de nye kunder.
  • måned-til-måned kontrakttype har større churn-sats selv for høje månedlige gebyrer sammenlignet med andre typer kontrakter.

  • fiberoptik har højere churning satser end DSL for de kunder, der har internet service.

  • mens fiberoptik, har højere churning satser, de leverer også de højere samlede afgift tæller. Derfor er en bedre undersøgelse af, hvorfor klienterne ikke er tilfredse med fiberoptiktjenesten, vigtig.

Ja, vi klarede det! Jeg håber, du nyder turen, og jeg er glad for at høre dine tanker.

fremtidige trin

som en påmindelse er der stadig mange andre ting, du kan gøre i dette datasæt, såsom:

  • prøv nye algoritmer
  • Optimer nogle tunningsparametre for at se, om du kan forbedre nøjagtigheden.

tak igen!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.