- Aflați cum de a instrui un model de arbore de decizie pentru putinei predicție.
- analiza datelor exploratorii
- distribuția caracteristicilor numerice
- distribuția categorică a caracteristicilor
- distribuția variabilei țintă
- caracteristici
- caracteristici de codificare
- clasificator
- formarea modelului
- testarea modelului
- model interpretability
- lecturi suplimentare
- înainte de a merge
Aflați cum de a instrui un model de arbore de decizie pentru putinei predicție.
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)
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.
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()
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))
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))
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
- manipularea dezechilibrului clasei în predicția putinei clienților — cum putem gestiona mai bine dezechilibrul clasei în predicția putinei.
- 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.
- Telco client putinei pe analiza Kaggle — putinei pe Kaggle.
- 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