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:
- att hantera obalansen
- definiera våra algoritmer och mätvärden
- testa våra algoritmer
- hantera funktions val
- 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.
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
vi projicerar nu boxplots för varje algoritm och varje balanserad data
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!