putinei predicție

fotografie de Mantas hesthaven pe Unsplash

putinei client, de asemenea, cunoscut sub numele de uzura clientului, apare atunci când clienții nu mai face afaceri cu o companie. Companiile sunt interesate să identifice segmente ale acestor clienți, deoarece prețul pentru achiziționarea unui client nou este de obicei mai mare decât păstrarea celui vechi. De exemplu, dacă Netflix ar cunoaște un segment de clienți care riscă să se agite, ar putea să-i angajeze proactiv cu oferte speciale în loc să-i piardă pur și simplu.

în acest post, vom crea un simplu model de predicție putinei client folosind Telco client putinei set de date. Am ales un arbore de decizie pentru a modela clienții churned, panda pentru crunching de date și matplotlib pentru vizualizări. Vom face toate acestea mai sus în Python.
codul poate fi folosit cu un alt set de date cu câteva ajustări minore pentru a instrui modelul de bază. De asemenea, oferim câteva referințe și oferim idei pentru noi caracteristici și îmbunătățiri.

puteți rula acest cod descărcând acest notebook Jupyter.

iată câteva link-uri care v-ar putea interesa:

- 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

unele dintre link-urile de mai sus sunt link-uri afiliate și dacă treceți prin ele pentru a face o achiziție, voi câștiga un comision. Rețineți că conectez cursurile datorită calității lor și nu datorită comisionului pe care îl primesc din achizițiile dvs.

folosim panda pentru a citi setul de date și a-l preprocesa. Setul de date Telco are un client pe linie cu multe coloane (caracteristici). Nu există rânduri cu toate valorile sau duplicatele lipsă (acest lucru se întâmplă rar cu seturile de date din lumea reală). Există 11 eșantioane care au TotalCharges setat la””, ceea ce pare a fi o greșeală în date. Eliminăm aceste eșantioane și setăm Tipul la numeric (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)

primele câteva probe în Telco client putinei set de date

analiza datelor exploratorii

avem 2 tipuri de caracteristici în setul de date: categorică (două sau mai multe valori și fără nici o ordine) și numerică. Cele mai multe dintre numele de caracteristici sunt auto-explicative, cu excepția:

  • Partner: dacă clientul are un partener sau nu (da, nu),
  • dependenti: dacă clientul are sau nu persoane aflate în întreținere (Da, Nu),
  • OnlineBackup: dacă clientul are sau nu o copie de rezervă online (Da, Nu, Nu serviciu de internet),
  • Titularizare: numărul de luni în care clientul a rămas la companie,
  • MonthlyCharges: suma percepută lunar clientului,
  • TotalCharges: suma totală percepută clientului.

există 7032 de clienți în setul de date și 19 Caracteristici Fără customerID (non-informativ) și coloana putinei (variabila țintă). Majoritatea caracteristicilor categorice au 4 sau mai puține valori unice.

set de date rezumat

combinăm caracteristicile în două liste, astfel încât să le putem analiza împreună.

categorical_features = 
numerical_features =
target = "Churn”

distribuția caracteristicilor numerice

tehnici numerice de rezumare (medie, deviație standard etc.) nu ne arătați vârfuri, forme de distribuții și este greu să observăm valori aberante cu ea. Acesta este motivul pentru care folosim histograme.

df.describe()

Rezumatul caracteristicilor numerice

la prima vedere, nu există valori aberante în date. Niciun punct de date nu este deconectat de la distribuție sau prea departe de valoarea medie. Pentru a confirma că ar trebui să calculăm intervalul interquartil (IQR) și să arătăm că valorile fiecărei caracteristici numerice se încadrează în IQR 1.5 din prima și a treia quartilă.

am putea converti caracteristici numerice la intervale ordinale. De exemplu, mandatul este numeric, dar de multe ori nu ne pasă de diferențele numerice mici și, în schimb, grupăm mandatul clienților cu mandat pe termen scurt, mediu și lung. Un motiv pentru a converti ar fi pentru a reduce zgomotul, de multe ori fluctuații mici sunt doar zgomot.

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

histograme de caracteristici numerice

ne uităm la distribuțiile de caracteristici numerice în raport cu variabila țintă. Putem observa că TotalCharges mai mare și mandatul sunt mai puțin este probabilitatea de putinei.

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)

caracteristici numerice în raport cu variabila țintă

distribuția categorică a caracteristicilor

pentru a analiza caracteristicile categorice, folosim diagrame de bare. Observăm că persoanele în vârstă și clienții fără servicii telefonice sunt mai puțin reprezentați în date.

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)

distribuția caracteristicilor categorice

următorul pas este să analizăm caracteristicile categorice în raport cu variabila țintă. Facem acest lucru numai pentru caracteristica contractului. Utilizatorii care au un contract de la o lună la alta au mai multe șanse să producă decât utilizatorii cu contracte pe termen lung.

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

caracteristica contractului în raport cu variabila țintă

distribuția variabilei țintă

distribuția variabilei țintă arată că avem de-a face cu o problemă dezechilibrată, deoarece există mult mai mulți utilizatori care nu se amestecă ca utilizatori. Modelul ar obține o precizie ridicată, deoarece ar prezice în cea mai mare parte utilizatorii de clasă majoritară care nu au trecut în exemplul nostru.

câteva lucruri pe care le putem face pentru a minimiza influența set de date dezechilibrat:
– reeșantiona date (dezechilibrat-să învețe),
– Colecta mai multe probe,
– utilizarea de precizie și amintesc ca metrici de precizie.

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

distribuție variabilă țintă

caracteristici

setul de date telco este deja grupat de CustomerID, astfel încât este dificil să adăugați noi caracteristici. Când lucrăm la predicția putinei, obținem de obicei un set de date care are o intrare pe sesiune de client (activitatea clientului într-un anumit timp). Apoi am putea adăuga caracteristici cum ar fi:

  • numărul de sesiuni înainte de a cumpăra ceva,
  • timpul mediu pe sesiune,
  • diferența de timp între sesiuni (client frecvent sau mai puțin frecvent),
  • este un Client doar într-o singură țară.

uneori avem chiar și date despre evenimentele clienților, ceea ce ne permite să găsim modele de comportament ale clienților în raport cu rezultatul (putinei).

caracteristici de codificare

pentru a pregăti setul de date pentru modelarea putinei, trebuie să codificăm caracteristici categorice la numere. Aceasta înseamnă codificarea „Da”, ” Nu ” la 0 și 1, astfel încât algoritmul să poată funcționa cu datele. Acest proces se numește codificare onehot.

unul fierbinte caracteristici categorice codificate

clasificator

folosim sklearn, o bibliotecă de învățare automată în Python, pentru a crea un clasificator.
modul sklearn este de a utiliza conducte care definesc procesarea caracteristicilor și clasificatorul. În exemplul nostru, conducta ia un set de date în intrare, preprocesează caracteristicile și antrenează clasificatorul.
când este instruit, este nevoie de aceeași intrare și returnează predicții în ieșire.

în conductă, procesăm separat caracteristici categorice și numerice. Noi onehot codifica caracteristici categorice și caracteristici numerice scară prin eliminarea medie și scalarea lor la varianța unității.
am ales un model de arbore de decizie datorită interpretabilității sale și am setat adâncimea maximă la 3 (arbitrar).

conducta are un set de date în intrare, acesta preprocese caracteristici și trenuri clasificatorul

formarea modelului

am împărțit setul de date pentru a instrui (75% probe) și de testare (25% probe).
antrenăm (potrivim) conducta și facem predicții. Cu classification_report vom calcula precizie și rechemare cu valori reale și prezise.

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)

testarea modelului

cu clasification_report calculăm precizia și rechemarea cu valorile reale și prezise.

pentru clasa 1 (Utilizatorii churned) model atinge 0.67 precizie și 0.37 rechemare. Precizia ne spune câți utilizatori churned au prezis corect clasificatorul nostru. Pe de altă parte, amintesc spune-ne cât de mulți utilizatori churned a ratat.

în termeni simpli, clasificatorul nu este foarte precis pentru utilizatorii churned.

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

raport de clasificare pentru modelul arborelui decizional

model interpretability

modelul arborelui decizional utilizează caracteristici contract, monthlycharges, internetservice, totalcharges și posesiune pentru a lua o decizie dacă un client va putinei sau nu. Aceste caracteristici separă clienții churned de alții bine pe baza criteriilor divizate din arborele de decizie.

fiecare eșantion de client traversează arborele și nodul final dă predicția.
De exemplu, dacă Contract_Month-to-month este:

  • egal cu 0, continuați să traversați arborele cu ramură adevărată,
  • egal cu 1, continuați să traversați arborele cu ramură falsă,
  • nedefinit, acesta emite clasa 0.

aceasta este o abordare excelentă pentru a vedea cum modelul ia o decizie sau dacă s-au strecurat caracteristici în modelul nostru care nu ar trebui să fie acolo.

interpretarea model arbore de decizie

lecturi suplimentare

  1. manipularea dezechilibrului clasei în predicția putinei clienților — cum putem gestiona mai bine dezechilibrul clasei în predicția putinei.
  2. un sondaj privind Predicția putinei clienților folosind tehnici de învățare automată] — această lucrare analizează cei mai populari algoritmi de învățare automată folosiți de cercetători pentru prezicerea putinei.
  3. Telco client putinei pe analiza Kaggle — putinei pe Kaggle.
  4. WTTE-RNN-Hackless-putinei-modelare — eveniment bazat putinei predicție.

înainte de a merge

Urmați-mă pe Twitter, unde am tweet în mod regulat despre știința datelor și învățarea automată.

fotografie de Courtney hedger pe Unsplash

Lasă un răspuns

Adresa ta de email nu va fi publicată.