Analyse Av Telco Customer Churn Datasett
Ok! La oss gjøre dette..
Så jeg forberedte denne historien for å gjøre meg kjent med ubalansedata.
datasettet er tilgjengelig i følgende lenke:
Så la oss dykke rett inn i det.
det endelige målet vil være å evaluere ulike modeller for å forutsi om en kunde vil “Churn” eller ikke.
for ikke kjent churn er oftest uttrykt som prosentandel (eller antall) tjenesteabonnenter som avslutter abonnementene sine innen en gitt tidsperiode.
LA OSS starte med Å gjøre VÅR EDA (Exploratory Data Analysis)
datatypene syntes å være ok, med unntak Av Pensjonist Som bør være en faktor for. (I tvil sjekke datasettet linken og det er bibliotek)
la oss visualisere sammendraget av datasettet
Det er Noen NaN i TotalCharges-kolonnen, så vi vil grave litt lenger på disse radene
Siden antall rader Med nan-verdier er svært små (1,5% av dataene), og tatt i betraktning at alle de er churn=”NEI”, som er overrepresentert i dataene. Vi vil bare slette disse radene fra arbeidsdataene
La se barplots for fordelingen av de kategoriske kolonnene
la oss nå plotte for den avhengige variabelen
som nevnt før kan vi nå se ubalansen i dataene for den avhengige variabelen. Vi må håndtere det senere før modellering.
la Oss nå plotte boxplots for de kvantitative variablene.
boxplot viser ikke noen avvik i distribusjonen.
la Oss nå se korrelasjonen for de kvantitative variablene:
det er en høy positiv korrelasjon Mellom Totale Kostnader og Månedlige Kostnader og Totale kostnader og Tenure.
la Oss nå plotte noen histogrammer som vurderer churn-funksjonen for de kvantitative funksjonene:
bildet over viser at churn-frekvensen avtar etter hvert som tenure-økningen, noe som er en god indikasjon på at selskapet er i stand til å beholde langtidskunder.👏👏👏
tomtene ovenfor gir oss noen hint av funksjoner som:
- Tilsynelatende har slike Kjønn, Telefontjeneste og Flere Linjer egentlig ikke mye effekt På Churn;
- Det ser ikke ut til å være mye forskjell mellom funksjonene Streaming TV og Streaming Filmer;
- Nettsikkerhet, Enhetsbeskyttelse og Teknisk Støtte har svært like histogrammer og Churn X Non Churn-forhold.
for ytterligere å grave ned i en bi-variate analyse inkludert kvantitative funksjoner (Tenure, Månedlige Kostnader Og Totale Kostnader) la oss forvandle dem til faktorer ved å dele inn i 5 forskjellige nivåer, for hver funksjoner, i henhold til det 20. persentil.
som nevnt før prosentandelen av churn avtar med antall måneder som indikerer at gamle kunder er mindre vanskelig å vedlikeholde
dette bar-plottet indikerer at jo høyere de totale kostnadene som er gjort til en kunde, er det en nedgang i churn-prosentandelen. Som det er fornuftig hvis du tror at lang tid klienter vil ha en høyere “Total Kostnad” og som vi har sett før, lang tid kunder har lavere churn prosent
denne barploten er litt mer intuitiv og viser at høyere månedlige kostnader har en tendens til å ha høyere churn-prosentandel.
Modellering
nå som vi har en bedre forståelse av dataene, la oss begynne å forberede oss på modellering for å forutsi fremtidig kundefrafall.
la oss dele denne prosessen i trinn, i henhold til de umiddelbare problemene vi takler:
- Å håndtere Ubalansen
- Definere våre algoritmer Og Beregninger
- Teste Våre Algoritmer
- Håndtere funksjonsvalg
- Endelige resultater
Håndtere Ubalansen ⚖ ️
Som vi har sett før vår avhengige variabel er ubalansert. Vi har mange alternativer for å takle dette problemet:
- over-sampling
- under-sampling
- Ved hjelp av ulike vektkostnader
- etc.
her vil vi prøve under, over-sampling og SMOTE teknikk.
Definere Våre Algoritmer Og Beregninger
vel, siden vi har å gjøre med et klassifiseringsproblem, dvs. på slutten av dagen kan vi bare forutsi enten “Churn” eller “not Churn” , derfor må vi velge en algoritme under dette spesifikke “riket”. Det gir oss noen alternativer som:
- Naive-Bayes
- Logistisk Regresjon
- Beslutningstrær (Eller Tilfeldig Skog)
- SVM
- GBM
for å velge metriske må vi forstå problemet. For eksempel,
- “har falske positiver eller falske negativer mer skadelige implikasjoner?”🤔
I vårt tilfelle ser det ikke ut til å være forskjellige vekter for falske positiver eller falske negativer, derfor vil Vi bruke Nøyaktighet som vår sammenligningsmåling.
Testing Av Våre Algoritmer
vi vil distribuere 5 algoritmer(Naive-Bayes, Logistisk regresjon, Random Forest, SVM og LightGBM). Vi vil bruke 10-kryss fold validering og kjøre hver algoritme 10 ganger og beregne resultatene.
vi vil gjenta denne metoden for alle 3 data(Balansert Ved Hjelp Av Under-Sampling, Over-sampling og SMOTE).
med resultatene fra algoritmene vi konstruere en Enkelt Nøyaktighet Dataframe
vi nå prosjektet boxplots for Hver Algoritme og hver balansert data
bildet ovenfor viser at Både Tilfeldig Skog for Overprøvebalanserte data og FOR DE SMOTE balanserte dataene presenterte de beste resultatene: 87% nøyaktighet .
Håndtere funksjonsvalg
Nå som vi har algoritmer og balansert data som viste de beste resultatene, la oss prøve å forbedre nøyaktigheten eller forenkle algoritmen ved å gjøre funksjonsvalg.
så jeg velger å jobbe med SMOTE balanse data.
La oss bruke varImp-funksjonen til å se funksjonene som best representerer churn i random forest-algoritmen
De fire første funksjonene virket ganske intuitive med tanke på visualiseringene vi har sett under EDA.
Så vi vil lage 2 andre dataframes, en med de første 4 funksjonene og en med all toppfunksjon opp Til Sreaming TV.
La Oss nå kjøre tilfeldig skog med 10-cv gjentatt 10 ganger.
la Oss nå lage en ny boxplot med nøyaktighetsfordelingen for hver av de 3 dataframes.
så resultatene for mid_features og fulle data ser ut til å være bedre. La oss teste om de er vesentlig forskjellige
så den statistiske testen avviser nullhypotesen, så nøyaktighetsfordelingen fra full_data og fra mid_features_data er vesentlig forskjellig.
så vi avslutter dette funksjonsvalget faktisk opprettholde alle kolonnene. Siden det fortsatt er et betydelig tap av nøyaktighet ved å fjerne funksjonene.
Endelige resultater
la oss oppsummere vår endelige prediksjonsmodell. Vi oppnådde en gjennomsnittlig nøyaktighet på 87%, ved Å bruke SMOTE som en måte å balansere dataene på og utføre gjentatte 10 kryss-fold valideringer i 10 ganger, ved Hjelp Av Tilfeldig Skog som vår algoritme.
også, vi har fange noen interessante aspekter fra våre kundedata, for eksempel:
- selskapet ser ut til å gjøre ” ok ” med å holde gamle tidskunder. Energi må være mer fokus på implementering av strategier for de nye kundene.
- Måned-Til-Måned type kontrakt har større churn rate selv for høye månedlige kostnader, sammenlignet med andre typer kontrakter.
- Fiberoptikk har høyere churning priser enn DSL for klienter som har internett-tjeneste.
- Mens Fiberoptikk, har høyere churning priser, leverer de også høyere Total Kostnad teller. Derfor er en bedre undersøkelse av hvorfor klientene ikke er fornøyd med fiberoptikktjenesten viktig.
Ja, vi klarte det! Jeg håper du har nyte turen, og jeg er glad for å høre dine tanker.
Fremtidige trinn
som en påminnelse er det fortsatt mange andre ting du kan gjøre i dette datasettet, for eksempel:
- Prøv nye algoritmer
- Optimaliser noen tunningparametere for å se om du kan forbedre nøyaktigheten.
Takk igjen!