analys av Telco kund Churn Dataset

okej! Nu gör vi det här..

så jag förberedde den här historien för att bekanta mig lite mer med obalansdata.

datasetet finns i följande länk:

så låt oss dyka rakt in i det.

det slutliga målet kommer att utvärdera olika modeller för att förutsäga om en kund kommer att “Churn” eller inte.

för inte bekant churn uttrycks oftast som procentandel (eller antal) serviceabonnenter som avbryter sina prenumerationer inom en viss tidsperiod.

Låt oss börja med att göra vår EDA (Exploratory Data Analysis)

datatyperna verkade vara ok, med undantag för äldre som också borde vara en faktor. (I tvivel kontrollera datauppsättningslänken och det är Bibliotek)

låt oss visualisera sammanfattningen av datasetet

det finns några NaN i kolumnen TotalCharges, så vi kommer att gräva lite längre på dessa rader

eftersom antalet rader med NaN-värden är mycket små (1,5% av data), och med hänsyn till att alla de är churn= “nej”, vilket är överrepresenterat i data. Vi tar bara bort dessa rader från arbetsdata

Låt se barplots för fördelningen av de kategoriska kolumnerna

låt oss nu plotta för den beroende variabeln

som tidigare nämnts kan vi nu se obalansen i data för den beroende variabeln. Vi måste ta itu med det senare innan vi modellerar.

låt oss nu rita rutanplottar för de kvantitativa variablerna.

boxplotten visar inga avvikelser i distributionen.

låt oss nu se korrelationen för de kvantitativa variablerna:

det finns en hög positiv korrelation mellan totala avgifter och månadsavgifter och totala avgifter och tjänstgöringstid.

låt oss nu plotta några histogram med tanke på churn-funktionen för de kvantitativa funktionerna:

bilden ovan visar att churnhastigheten minskar i takt med att besittningsperioden ökar, vilket är en bra indikation på att företaget kan behålla långvariga kunder.👏👏👏

tomterna ovan ger oss några tips om funktioner som:

  • tydligen har sådana kön, telefontjänst och flera linjer inte mycket effekt på Churn;
  • det verkar inte vara mycket skillnad mellan funktionerna som strömmar TV och strömmande filmer;
  • online-säkerhet, Enhetsskydd och teknisk Support har mycket liknande histogram och Churn x Non Churn relation.

för att ytterligare gräva ner i en bi-variate analys inklusive kvantitativa funktioner (besittningsrätt, månadsavgifter, och totala avgifter) låt oss omvandla dem till faktorer genom att dela in i 5 olika nivåer, för varje funktioner, enligt det 20: e percentilen.

som tidigare nämnts minskar andelen churn med antalet månader vilket indikerar att gamla kunder är mindre svåra att underhålla

denna stapeldiagram indikerar att ju högre de totala avgifterna som görs till en kund är det en minskning av churnprocenten. Vilket det är vettigt om du tror att lång tid kunder kommer att ha en högre “Total laddning” och som vi sett tidigare, lång tid kunder har lägre churn procent

denna barplot är lite mer intuitiv och visar att högre månadsavgifter tenderar att ha högre churnprocent.

modellering

nu när vi har en bättre förståelse av data låt oss börja förbereda för modellering för att förutsäga framtida kund churn.

Låt oss dela upp denna process i steg, beroende på det omedelbara problemet vi tar itu med:

  1. att hantera obalansen
  2. definiera våra algoritmer och mätvärden
  3. testa våra algoritmer
  4. hantera funktions val
  5. slutresultat

hantera obalansen Macau

som vi har sett tidigare är vår beroende variabel obalanserad. Vi har många alternativ för att ta itu med detta problem:

  • Överprovtagning
  • Underprovtagning
  • med olika viktkostnader
  • etc.

här kommer vi att försöka under, överprovtagning och slagteknik.

under Provbalansering av data

över provtagning balansering av data

definiera våra algoritmer och mätvärden

Tja, eftersom vi har att göra med ett klassificeringsproblem, dvs. i slutet av dagen kan vi bara förutsäga antingen “Churn” eller “not Churn”, därför måste vi välja en algoritm under detta specifika “rike”. Det lämnar oss med några alternativ som:

  • Naive-Bayes
  • logistisk Regression
  • beslutsträd (eller slumpmässig skog)
  • SVM
  • GBM

för att välja mätvärdet måste vi förstå problemet. Till exempel,

  • “har falska positiva eller falska negativa konsekvenser mer skadliga konsekvenser?”🤔

i vårt fall verkar det inte finnas olika vikter för falska positiva eller falska negativa, därför kommer vi att använda noggrannhet som vår jämförelsemetrisk.

testa våra algoritmer

vi kommer att distribuera 5 algoritmer (Naive-Bayes, Logistic regression, Random Forest, SVM och LightGBM). Vi kommer att använda 10-cross fold validering och köra varje algoritm 10 gånger och beräkna resultaten.

vi kommer att upprepa denna metod för alla 3 data (balanserad med Underprovtagning, Överprovtagning och slag).

med resultaten från algoritmerna konstruerar vi en enda noggrannhet Dataframe

noggrannhet Dataframe struktur

vi projicerar nu boxplots för varje algoritm och varje balanserad data

Boxplot av noggrannheten för 10-CV upprepade 10 gånger

bilden ovan visar att både slumpmässig skog för Överprovbalanserade data och för SLAGBALANSERADE data presenterade de bästa resultaten : 87% noggrannhet.

hantera funktionsval

nu när vi har algoritmerna och balanserade data som visade de bästa resultaten, låt oss försöka förbättra noggrannheten eller förenkla algoritmen genom att göra funktionsval.

så jag väljer att arbeta med SLAGBALANSDATA.

Låt oss använda varImp-funktionen för att se de funktioner som bäst representerar churn i den slumpmässiga skogsalgoritmen

de första fyra funktionerna verkade ganska intuitiva med tanke på de visualiseringar vi har sett under EDA.

så vi kommer att skapa 2 andra dataramar, en med de första 4 funktionerna och en med alla toppfunktioner upp till Sreaming TV.

låt oss nu köra den slumpmässiga skogen med 10-cv upprepade 10 gånger.

låt oss nu skapa en ny boxplot med noggrannhetsfördelningen för var och en av de 3 dataramarna.

så resultaten för mid_features och fullständiga data verkar vara bättre. Låt oss testa om de är väsentligt olika

så det statistiska testet avvisar nollhypotesen, så noggrannhetsfördelningen från full_data och från mid_features_data är signifikant olika.

så vi avslutar denna funktion val faktiskt upprätthålla alla kolumner. Eftersom det fortfarande finns en betydande förlust av noggrannhet genom att ta bort funktionerna.

slutresultat

Låt oss sammanfatta vår slutliga prediktionsmodell. Vi fick en genomsnittlig noggrannhet på 87%, med hjälp av SMOTE som ett sätt att balansera data och utföra upprepade 10 korsfällda valideringar i 10 gånger, med hjälp av Random Forest som vår algoritm.

dessutom har vi fånga några intressanta aspekter från våra kunddata, såsom:

  • företaget verkar göra “ok”med att hålla gamla kunder. Energi måste vara mer fokus i genomförandet av strategier för de nya kunderna.
  • månad till månad Typ av kontrakt har större churn rate även för höga månadsavgifter, jämfört med andra typer av kontrakt.

  • fiberoptik har högre spottar priser än DSL för de kunder som har internet-tjänst.

  • medan fiberoptik, har högre spottar priser, de levererar också högre totala Laddningsantal. Därför är en bättre undersökning om varför kunderna inte är nöjda med fiberoptiktjänsten viktig.

Ja, vi klarade det! Jag hoppas att du har njuta av åkturen och jag är glad att höra dina tankar.

framtida steg

som en påminnelse finns det fortfarande många andra saker du kan göra i denna dataset, till exempel:

  • Prova nya algoritmer
  • optimera vissa inställningsparametrar för att se om du kan förbättra noggrannheten.

tack igen!

Lämna ett svar

Din e-postadress kommer inte publiceras.