
Data Science: definiție și aplicații practice
Data science este un domeniu relativ recent, dar aflat în plină expansiune, cu multiple fațete, folosit în multe sfere. Utilizează diverse tehnici avansate de analiză și algoritmi de modelare predictivă pentru a extrage perspective relevante din date, ajutând la răspunsul unor întrebări strategice de business sau științifice. Data science combină o gamă largă de abilități, de la cele tehnice (programare, algebră liniară, statistici și modelare) la cele non-tehnice (reprezentarea eficientă și comunicarea rezultatelor). În plus, în funcție de industria în care este aplicată, este necesară o cunoaștere solidă a domeniului pentru a interpreta corect informațiile disponibile și insight-urile obținute.
Algoritmii de data science pot fi aplicați cu succes în contexte diverse în care se colectează sau se pot colecta multe date: finanțe, comerț, marketing, management de proiect, asigurări, medicină, educație, producție, HR, lingvistică, sociologie etc. Practic, orice industrie sau știință poate beneficia semnificativ de pe urma colectării, analizării și modelării datelor.
Ce este un caz de utilizare în Data Science?
Un caz de utilizare în data science este o sarcină concretă din lumea reală, de rezolvat folosind datele disponibile. În cadrul unei companii anume, multe variabile sunt analizate cu tehnici de data science în contextul industriei specifice a companiei. Cazurile de utilizare pot fi o problemă de rezolvat, o ipoteză de verificat sau o întrebare la care să se răspundă. În esență, a face data science înseamnă a rezolva cazuri reale de utilizare.
Deși conținutul fiecărui caz va fi probabil foarte diferit, există câteva aspecte comune de avut mereu în vedere:
- Planificarea unui caz de utilizare în data science înseamnă: definirea unui obiectiv clar și a rezultatelor așteptate, înțelegerea ariei de lucru, evaluarea resurselor disponibile, furnizarea datelor necesare, evaluarea riscurilor și definirea KPI ca măsură a succesului.
- Cele mai comune abordări pentru rezolvarea cazurilor de utilizare sunt: prognoza, clasificarea, detectarea tiparelor și a anomaliilor, recomandările și recunoașterea imaginilor.
- Unele cazuri de utilizare reprezintă sarcini tipice în diverse domenii și te poți baza pe abordări similare pentru a le rezolva, cum ar fi predicția churn-ului clienților, segmentarea clienților, detectarea fraudei, sistemele de recomandare și optimizarea prețurilor.
Cum rezolv un studiu de caz în Data Science?
Răspunsul este foarte specific cazului, determinat de strategia de business a companiei și dependent de miezul studiului de caz. Totuși, e util să schițăm un parcurs general aplicabil oricărui caz de utilizare:
- Formularea întrebării corecte. Acest prim pas este foarte important și include revizuirea literaturii și a studiilor de caz existente, trecerea în revistă a bunelor practici, elaborarea teoriilor relevante și a ipotezelor de lucru și completarea eventualelor lacune de expertiză de domeniu. Rezultatul ar trebui să fie o întrebare clară la care studiul de caz să răspundă.
- Colectarea datelor. În acest pas, facem un inventar și un proces de agregare a datelor. În viața reală, deseori avem date nereprezentative, incomplete, cu erori și nestructurate, adică departe de a fi un tabel complet, ușor de citit și gata de analizat. Prin urmare, trebuie să căutăm și să identificăm toate sursele posibile de date utile pentru subiectul nostru. Datele necesare pot fi găsite în arhivele companiei, obținute prin web scraping sau furnizate de un sponsor etc.
- Data wrangling. De regulă, aceasta este partea care consumă cel mai mult timp și resurse într-un proiect de data science. Se evaluează calitatea și reprezentativitatea datelor colectate și se face o explorare inițială. Datele sunt curățate, preprocesate, transformate, manipulate și mapate din forma brută într-un format mai potrivit.
- Analiza și modelarea datelor. Datele curățate sunt analizate din perspectiva stării lor actuale, apoi sunt încadrate într-un model predictiv statistic selectat. Se evaluează acuratețea modelului și, dacă nu este satisfăcătoare, se încearcă alte abordări de modelare. Procesul se repetă până se obține modelul cu cea mai mare precizie în prezicerea scenariilor viitoare. Așadar, acest proces, ca și cele anterioare, poate fi destul de iterativ.
- Comunicarea rezultatelor. În comparație cu pașii anteriori, acesta cere mai mult abilități de comunicare și soft skills, mai degrabă decât programare și expertiză tehnică. Include împărtășirea celor mai importante constatări și concluzii finale cu managementul, acționarii și alte părți implicate. Insight-urile sunt de obicei prezentate în rapoarte, articole și prezentări, conturând posibilele direcții de acțiune.
Cazuri de utilizare în Data Science pe industrii
Cazurile de utilizare în data science pot fi legate practic de orice industrie în care se acumulează sau se pot acumula volume mari de date. În acest capitol, discutăm câteva cazuri tipice din cele mai căutate domenii: logistică, sănătate și telecomunicații. Unele dintre cazurile analizate sunt interdisciplinare și se întâlnesc ușor și în multe alte sfere. Asta le face mai universale și aplicabile, deci merită cunoscută abordarea generală de rezolvare. În plus, pentru fiecare industrie selectată, vom evidenția și alte subiecte care pot fi modelate cu metode de data science.
Data Science în sănătate
În capitolele anterioare, am discutat cum metodele de data science pot ajuta companiile din diferite industrii să-și crească veniturile. În sănătate, nu doar marketerii pot beneficia de utilizarea și interpretarea corectă a datelor, ci și diagnosticul la timp al unor boli grave poate fi îmbunătățit, ajutând chiar la salvarea de vieți.
Furnizorii de servicii medicale și medicina, în general, colectează un volum uriaș de date din numeroase surse: sisteme de dosar electronic de sănătate (EHR), date din dispozitive purtabile, studii de cercetare medicală și documente de facturare. Valorificarea tehnicilor inovatoare de data science și analiză a datelor revoluționează treptat întreaga industrie a sănătății, oferind cele mai promițătoare și impactante soluții pentru dezvoltarea ei viitoare. În special, unele domenii foarte specializate, cum ar fi genetica, medicina reproductivă, oncologia, biotehnologia, radiografia, diagnosticul predictiv și farmaceutica, au trecut la un nivel cu totul nou datorită valorificării întregului potențial al datelor.
Pentru a înțelege mai bine cum poate fi utilă data science în medicină, să ne concentrăm pe unul dintre cazurile clasice.
Caz de utilizare în sănătate: predicția cancerului de sân
Conform World Cancer Research Fund International, cancerul de sân este cel mai frecvent tip de cancer la femei și al doilea cel mai frecvent per total. Diagnosticarea la timp a unei patologii mamare, fie benignă, fie malignă, este extrem de importantă deoarece crește semnificativ șansele de tratament reușit și rata de supraviețuire. Aici intervine data science.
Progresul metodelor de data mining, în combinație cu algoritmi de machine learning, a făcut posibilă prezicerea riscului de cancer de sân, detectarea oricărei anomalii în stadii incipiente, estimarea dinamicii acesteia și, astfel, dezvoltarea unui plan optim de combatere a bolii. În esență, este o problemă tipică de clasificare în învățarea automată. Partea bună este că, deoarece acest tip de oncologie este destul de răspândit, s-au realizat multe investigații minuțioase în întreaga lume și, ca urmare, s-au acumulat tone de date de la paciente din toată lumea.
Principala problemă la utilizarea unor astfel de seturi de date în clasificatori este că pot fi puternic dezechilibrate. De exemplu, în cazul în care rezultatul este reprezentat ca „cancer / fără cancer”, probabilitatea unei patologii (înregistrările ce aparțin clasei minoritare) este considerabil mai mică decât probabilitatea de a nu avea patologie (înregistrările ce aparțin clasei majoritare). Drept urmare, algoritmul tinde să clasifice cazurile noi ca nepatologice. Așadar, pentru a evalua mai eficient acuratețea unor astfel de modele, are sens folosirea scorului F1 ca metrică, deoarece estimează pozitivele false (eroarea de tip I) și negativele false (eroarea de tip II), mai degrabă decât cazurile clasificate corect.
Să aruncăm o privire la un set de date real despre cancerul de sân dintr-un stat al SUA. Caracteristicile sunt descrise detaliat în documentație, dar, pe scurt, reprezintă media, eroarea standard și cele mai mari valori ale atributelor din fiecare imagine digitalizată ce afișează nucleii celulari dintr-o masă mamară. Fiecare intrare corespunde unei femei cu o tumoră malignă sau benignă (adică toate femeile în cauză au un anumit tip de tumoră). Atributele includ raza celulei, textura, netezimea, compactitatea, concavitatea, simetria etc.
import pandas as pd
cancer_data = pd.read_csv('data.csv')
pd.options.display.max_columns = len(cancer_data)
print(f'Number of entries: {cancer_data.shape[0]:,}\n'
f'Number of features: {cancer_data.shape[1]:,}\n\n'
f'Number of missing values: {cancer_data.isnull().sum().sum()}\n\n'
f'{cancer_data.head(2)}')
Number of entries: 569
Number of features: 33
Number of missing values: 569
id diagnosis radius_mean texture_mean perimeter_mean area_mean \
0 842302 M 17.99 10.38 122.8 1001.0
1 842517 M 20.57 17.77 132.9 1326.0
smoothness_mean compactness_mean concavity_mean concave points_mean \
0 0.11840 0.27760 0.3001 0.14710
1 0.08474 0.07864 0.0869 0.07017
symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se \
0 0.2419 0.07871 1.0950 0.9053 8.589
1 0.1812 0.05667 0.5435 0.7339 3.398
area_se smoothness_se compactness_se concavity_se concave points_se \
0 153.40 0.006399 0.04904 0.05373 0.01587
1 74.08 0.005225 0.01308 0.01860 0.01340
symmetry_se fractal_dimension_se radius_worst texture_worst \
0 0.03003 0.006193 25.38 17.33
1 0.01389 0.003532 24.99 23.41
perimeter_worst area_worst smoothness_worst compactness_worst \
0 184.6 2019.0 0.1622 0.6656
1 158.8 1956.0 0.1238 0.1866
concavity_worst concave points_worst symmetry_worst \
0 0.7119 0.2654 0.4601
1 0.2416 0.1860 0.2750
fractal_dimension_worst Unnamed: 32
0 0.11890 NaN
1 0.08902 NaN
Hai să eliminăm ultima coloană, care conține doar valori lipsă:
cancer_data = cancer_data.drop('Unnamed: 32', axis=1)
Câte femei, în %, au un cancer confirmat (o tumoră mamară malignă)?
round(cancer_data['diagnosis'].value_counts()*100/len(cancer_data)).convert_dtypes()
B 63
M 37
Name: diagnosis, dtype: Int64
37% dintre respondente au cancer de sân, deci setul de date este de fapt destul de echilibrat.
Deoarece valorile variabilei diagnosis sunt categorice, trebuie să le codificăm numeric pentru folosirea ulterioară în machine learning. Înainte de asta, să împărțim datele în caracteristicile predictori și variabila țintă diagnosis:
X = cancer_data.iloc[:, 2:32].values
y = cancer_data.iloc[:, 1].values
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
Acum, să creăm seturile de antrenare și test, apoi să scalăm caracteristicile:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Pentru a modela datele, să aplicăm următorii algoritmi cu parametrii lor prestabiliți: cei mai apropiați k vecini (KNN) și regresia logistică:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
# KNN
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
knn_predictions = knn.predict(X_test)
# Logistic regression
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr_predictions = lr.predict(X_test)
Am văzut mai devreme că setul nostru de date este destul de echilibrat, așa că putem folosi acuratețea ca metrică de evaluare pentru a identifica modelul cel mai precis:
from sklearn.metrics import accuracy_score
print(f'Accuracy scores:\n'
f'KNN model:\t\t {accuracy_score(y_test, knn_predictions):.3f}\n'
f'Logistic regression model: {accuracy_score(y_test, lr_predictions):.3f}')
Accuracy scores:
KNN model: 0.956
Logistic regression model: 0.974
Pe baza datelor noastre, regresia logistică are performanța cea mai bună în prezicerea unei tumori mamare maligne/benigne pentru o femeie cu o patologie mamară detectată de orice natură.
Ca direcții de continuare, având în vedere că algoritmul de regresie logistică nu are parametri critici de ajustat, putem experimenta cu diferite abordări de împărțire train/test și/sau diverse tehnici de modelare predictivă.
Alte cazuri comune de utilizare în sănătate:
- monitorizarea în timp real a datelor din wearables
- analitică predictivă
- analiza imaginilor medicale
- descoperirea de medicamente
- cercetare în genetică
- asistenți virtuali
- managementul datelor clienților
Data Science în transport și logistică
Logistica înseamnă organizarea procesului de livrare a produselor dintr-un punct în altul, în timp ce transportul presupune deplasarea clienților sau a mărfurilor. În funcție de profilul activității unei companii (de ex., livrare de prânz, servicii poștale, transport internațional, companii aeriene, servicii de taxi sau autobuz), sursele de date pot fi reprezentate de programe, fișe de pontaj, detalii despre rute, inventarul depozitelor, rapoarte, contracte, acorduri, documente legale și feedback-ul clienților. Datele pot fi structurate sau nestructurate și includ informații despre timp, itinerarii, rute, coordonate, date ale clienților, detalii despre mărfuri, costuri și prețuri.
Eficiența businessului în lanțul de aprovizionare și în transport nu este întotdeauna simplu de evaluat și depinde de numeroși factori: probleme neprevăzute de trafic, calitatea rutelor, condiții meteo, urgențe, fluctuații ale prețului combustibilului, lipsuri în stocurile depozitelor, defecțiuni tehnice, întârzieri de livrare din motive de securitate, reglementări și sancțiuni guvernamentale și multe altele. În plus, în ultimii ani au apărut multe companii noi pe piață, iar concurența a devenit destul de acerbă. Prin urmare, pentru a ține pasul cu competiția și a crește productivitatea operațională, a devenit obligatoriu pentru fiecare companie de logistică/transport să analizeze big data și să o transforme în insight-uri relevante.
Cum poate ajuta concret data science în transport și logistică? Iată o listă, departe de a fi completă, a aplicațiilor potențiale:
- urmărirea întregului proces de transport cap-coadă,
- automatizarea și transparentizarea completă a activităților,
- livrare la timp,
- optimizarea rutelor,
- prețuri dinamice,
- menținerea stocurilor de aprovizionare,
- protejarea bunurilor perisabile,
- monitorizarea stării vehiculelor,
- îmbunătățirea rețelelor de producție,
- îmbunătățirea serviciului pentru clienți.
Caz de utilizare în transport și logistică: identificarea poziționării optime a vehiculelor de taxi
Uber Technologies Inc., sau Uber, este o companie americană care oferă diverse servicii de logistică și transport. În acest studiu de caz, vom grupa datele GPS ale curselor Uber pentru a identifica poziționarea optimă a vehiculelor de taxi. În special, poate fi util pentru următoarele scopuri:
- Fiecărei cereri noi de cursă i se asociază cel mai apropiat cluster, astfel încât Uber trimite mașina cea mai apropiată din acel cluster la locația clientului.
- Analizând clusterele identificate din perspectiva încărcării lor, opțional pe oră sau pe zi a săptămânii, Uber poate redistribui mașinile în avans și le poate trimite în locațiile strategice cu cerere mai mare.
- În funcție de raportul cerere/ofertă din diferite clustere, compania poate ajusta dinamic tarifele.
Vom folosi un set de date de la FiveThirtyEight despre curse Uber în New York în aprilie 2014:
import pandas as pd
uber_data = pd.read_csv('uber-raw-data-apr14.csv')
print(f'Number of trips: {uber_data.shape[0]:,}\n\n'
f'{uber_data.head()}')
Number of trips: 564,516
Date/Time Lat Lon Base
0 4/1/2014 0:11:00 40.7690 -73.9549 B02512
1 4/1/2014 0:17:00 40.7267 -74.0345 B02512
2 4/1/2014 0:21:00 40.7316 -73.9873 B02512
3 4/1/2014 0:28:00 40.7588 -73.9776 B02512
4 4/1/2014 0:33:00 40.7594 -73.9722 B02512
Hai să vizualizăm schematic toate punctele de preluare, ținând cont că longitudinea corespunde axei x, iar latitudinea axei y:
import matplotlib.pyplot as plt
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.show()
Pentru a grupa aceste date, vom folosi un algoritm nesupravegheat de învățare automată numit k-means. Ideea este să împartă toate eșantioanele în câteva grupuri cu varianță similară. Practic, primește un număr de clustere n_clusters (8 implicit) și separă datele corespunzător. Pentru a găsi numărul optim de clustere, se folosește metoda grafică „cotul” (elbow). Aceasta include următorii pași:
- Antrenarea mai multor modele cu un număr diferit de clustere și colectarea valorilor WCSS (Within Cluster Sum of Squares) pentru fiecare, adică suma distanțelor pătrate ale observațiilor față de cel mai apropiat centroid al clusterului.
- Reprezentarea valorilor WCSS în funcție de numărul de clustere.
- Selectarea celui mai mic număr de clustere unde are loc o scădere semnificativă a WCSS.
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, random_state=1)
kmeans.fit(uber_data[['Lat', 'Lon']])
wcss.append(kmeans.inertia_)
plt.figure(figsize=(12, 5))
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method', fontsize=25)
plt.xlabel('Number of clusters', fontsize=18)
plt.ylabel('WCSS', fontsize=18)
plt.xticks(ticks=list(range(1, 11)),
labels=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
plt.show()

În cazul nostru, numărul cel mai potrivit de clustere pare a fi 7. Să folosim această valoare pentru a antrena un model și a prezice numărul clusterului pentru fiecare punct de preluare. De asemenea, vom ilustra din nou datele grafic, de data aceasta adăugând locațiile celor șapte centroizi:
kmeans = KMeans(n_clusters=7, random_state=1)
kmeans.fit_predict(df[['Lat', 'Lon']])
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.scatter(kmeans.cluster_centers_[:, 1], kmeans.cluster_centers_[:, 0], s=100, c='lime')
plt.show()
Acum, vom extrage coordonatele exacte pentru toți centroizii și le vom afișa separat, fără datele propriu-zise:
centroids = pd.DataFrame(kmeans.cluster_centers_)
centroids.columns = ['Lat', 'Lon']
print(centroids)
plt.scatter(centroids['Lon'], centroids['Lat'])
plt.show()
Lat Lon
0 40.688588 -73.965694
1 40.765423 -73.973165
2 40.788001 -73.879858
3 40.656997 -73.780035
4 40.731074 -73.998644
5 40.700541 -74.201673
6 40.971229 -73.611288
Ar fi mai ilustrativ să arătăm acești centroizi pe o hartă a orașului New York:
import folium
centroids_values = centroids.values.tolist()
nyc_map = folium.Map(location=[40.79659011772687, -73.87341741832425], zoom_start=50000)
for point in range(0, len(centroids_values)):
folium.Marker(centroids_values[point], popup=centroids_values[point]).add_to(nyc_map)
nyc_map

Folosind modelul nostru, putem prezice cel mai apropiat cluster pentru orice locație din New York exprimată în coordonate geografice. În termeni practici, înseamnă că Uber va trimite un taxi disponibil din locația cea mai apropiată și va servi clientul mai rapid.
Hai să găsim cel mai apropiat cluster pentru Lincoln Center for the Performing Arts din cartierul Manhattan:
lincoln_center = [(40.7725, -73.9835)]
kmeans.predict(lincoln_center)
array([1])
Și pentru Howard Beach din cartierul Queens:
howard_beach = [(40.6571, -73.8430)]
kmeans.predict(howard_beach)
array([3])
Ca direcții de continuare, putem lua în calcul aplicarea altor algoritmi de clustering, analizarea diferitelor secțiuni de date (pe oră/zi a săptămânii/lună), identificarea clusterelor cele mai și cel mai puțin încărcate sau investigarea relațiilor dintre clusterele identificate și variabila Base din dataframe.
Alte cazuri comune de utilizare în transport și logistică:
- prețuri dinamice în funcție de cerere-ofertă
- prognoza cererii
- automatizarea operațiunilor manuale
- vehicule autonome
- vizibilitate în lanțul de aprovizionare
- detectarea daunelor
- managementul depozitelor
- analiza sentimentului clienților
- chatboți pentru suport clienți
Data Science în telecom
În ultimele două decenii, tehnologiile de telecomunicații au evoluat într-un ritm incredibil și au intrat într-o nouă etapă de dezvoltare. Astăzi suntem înconjurați de dispozitive electronice de tot felul, iar mulți oameni au devenit literalmente dependenți de Internet, în special de rețele sociale și aplicații de mesagerie. Uneori, această dependență de dispozitive este criticată pentru înlocuirea comunicării față în față. Totuși, trebuie să recunoaștem că telecomul ne-a făcut viața semnificativ mai ușoară, permițându-ne să ne conectăm cu oameni din întreaga lume în doar câteva secunde.
Acest lucru a fost cu atât mai adevărat în perioada pandemiei de COVID-19, când multe companii și școli au adoptat scheme de lucru sau învățare la distanță. Într-o astfel de realitate în schimbare rapidă, calitatea și fluiditatea conectivității digitale au căpătat o importanță fără precedent în toate sferele. Perioadele de lockdown i-au făcut pe oameni să sune și să trimită mesaje colegilor, rudelor și prietenilor mult mai des decât înainte. Toate aceste tendințe au dus la o creștere imensă a volumelor de telecomunicații, ceea ce, la rândul său, a generat cantități vaste de date în această industrie.
Utilizarea metodelor de data science pentru a procesa datele acumulate poate ajuta industria telecom în multe feluri:
- raționalizarea operațiunilor,
- optimizarea rețelei,
- filtrarea spamului,
- îmbunătățirea transmisiilor de date,
- analitică în timp real,
- dezvoltarea de strategii de business eficiente,
- crearea de campanii de marketing reușite,
- creșterea veniturilor.
Să explorăm mai detaliat o sarcină comună din telecom, legată de detectarea și filtrarea mesajelor nedorite.
Caz de utilizare în telecom: construirea unui filtru de spam
Filtrarea spamului este o funcție vitală a tuturor canalelor moderne de comunicare scrisă, deoarece ne protejează de bombardamentul zilnic cu emailuri care încearcă să ne înșele de bani. Tehnic, este un alt exemplu de problemă de clasificare: pe baza datelor istorice, fiecare mesaj nou este etichetat ca ham (adică mesaj normal), caz în care ajunge direct la destinatar, sau ca spam, caz în care este blocat sau ajunge în folderul de spam.
Un algoritm popular de învățare automată supravegheată pentru acest scop este clasificatorul Naive Bayes. Se bazează pe teorema omonimă din teoria probabilităților, iar „naiv” provine din presupunerea de bază că toate cuvintele din fiecare mesaj sunt independente între ele. Această presupunere nu este exact corectă, deoarece ignoră existența inevitabilă a embedding-urilor naturale ale cuvintelor și a contextului. Totuși, în majoritatea sarcinilor de clasificare a textului cu puține date, această abordare funcționează bine și face predicții precise.
Există mai multe versiuni ale clasificatorului Naive Bayes, fiecare cu cazuri proprii de aplicabilitate: multinomial, Bernoulli, gaussian și flexible Bayes. Tipul cel mai potrivit pentru cazul nostru (detectarea spamului) este clasificatorul Naive Bayes multinomial. Se bazează pe numărări discrete ale frecvențelor pentru caracteristici categorice sau continue, reprezentând numărul de apariții ale cuvintelor în fiecare mesaj.
Să aplicăm filtrarea spamului cu Naive Bayes multinomial pe SMS Spam Collection Data Set din UCI Machine Learning Repository.
import pandas as pd
sms_data = pd.read_csv('SMSSpamCollection', sep='\t', header=None, names=['Label', 'SMS'])
print(f'Number of messages: {sms_data.shape[0]:,}\n\n'
f'{sms_data.head()}')
Number of messages: 5,572
Label SMS
0 ham Go until jurong point, crazy.. Available only ...
1 ham Ok lar... Joking wif u oni...
2 spam Free entry in 2 a wkly comp to win FA Cup fina...
3 ham U dun say so early hor... U c already then say...
4 ham Nah I don't think he goes to usf, he lives aro...
Sunt 5.572 de mesaje clasificate de oameni. Câte dintre ele (în %) sunt spam?
round(sms_data['Label'].value_counts()*100/len(sms_data)).convert_dtypes()
ham 87
spam 13
Name: Label, dtype: Int64
13% dintre SMS-uri au fost identificate manual ca spam.
Pentru a pregăti datele pentru clasificarea Naive Bayes multinomială, trebuie mai întâi să parcurgem următorii pași:
- Codificarea etichetelor din format text în format numeric. În cazul nostru, etichetele sunt binare, așadar le vom codifica 0/1.
- Extrage predictorii și variabila țintă.
- Împarte datele în seturi de antrenare și test.
- Vectorizează șirurile din coloana SMS a seturilor de antrenare și test pentru predictori pentru a obține matrici CSR (compressed sparse row).
Pasul 4 necesită o explicație mai detaliată. Aici creăm un obiect matrice, îl potrivim cu dicționarul de vocabular (toate cuvintele unice din toate mesajele setului de antrenare al predictorilor, cu frecvențele corespunzătoare), apoi transformăm seturile de antrenare și test în matrici. Rezultatul va fi două matrici pentru seturile de antrenare și test ale predictorilor, în care coloanele corespund fiecărui cuvânt unic din toate mesajele setului de antrenare al predictorilor, rândurile mesajelor propriu-zise, iar valorile din celule frecvenței cuvintelor pentru fiecare mesaj.
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
# Encoding labels
sms_data = sms_data.replace('ham', 0).replace('spam', 1)
X = sms_data['SMS'].values
y = sms_data['Label'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Vectorizing strings from the 'SMS' column
cv = CountVectorizer(max_df=0.95)
cv.fit(X_train)
X_train_csr_matrix = cv.transform(X_train)
X_test_csr_matrix = cv.transform(X_test)
În continuare vom construi un clasificator Naive Bayes multinomial cu parametrii prestabiliți și îi vom verifica acuratețea:
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, f1_score
clf = MultinomialNB()
clf.fit(X_train_csr_matrix, y_train)
predictions = clf.predict(X_test_csr_matrix)
print(f'Model accuracy:\n'
f'Accuracy score: {accuracy_score(y_test, predictions):.3f}\n'
f'F1-score: {f1_score(y_test, predictions):.3f}\n')
Model accuracy:
Accuracy score: 0.990
F1-score: 0.962
Rezultatul este un filtru de spam cu acuratețe ridicată.
Ca direcții de continuare, putem încerca alte metode de împărțire train/test, îmbunătăți procesul de vectorizare ajustând unii dintre numeroșii săi parametri (de ex., pragul pentru cuvinte prea frecvente atât în spam, cât și în ham) și verifica acele cazuri foarte rare în care clasificatorul a etichetat greșit un mesaj, încercând să înțelegem de ce s-a întâmplat. În plus, putem vizualiza cele mai frecvente cuvinte în mesajele de tip spam și ham folosind, de exemplu, un word cloud (după curățarea preliminară a datelor și excluderea stopword-urilor sau a cuvintelor puțin informative). În cele din urmă, putem aplica alți algoritmi de machine sau deep learning (mașini cu vectori de suport, arbori de decizie, rețele neuronale) și compara rezultatele cu abordarea Naive Bayes.
Alte cazuri comune de utilizare în telecom:
- segmentarea clienților
- dezvoltarea de produse
- analiza înregistrărilor detaliate ale apelurilor
- sisteme de recomandare
- predicția ratei de churn
- marketing targetat
- detectarea fraudei
- management și optimizare de rețea
- securitate sporită a rețelei
- optimizarea prețurilor
- predicția valorii pe viață a clientului
Studii de caz în Data Science: cursuri
Am parcurs deja un drum lung și am explorat în detaliu numeroase aplicații ale data science în diferite domenii. Dacă acum te simți inspirat să afli mai multe cazuri de utilizare bazate pe seturi de date reale și să poți aplica noile cunoștințe și abilități tehnice pentru a rezolva sarcini practice în propriul tău domeniu, îți pot fi utile următoarele cursuri scurte, pentru începători, pe diverse studii de caz:
- Studiu de caz: bugetarea școlară cu machine learning în Python. În acest curs bazat pe un studiu de caz dintr-o competiție de machine learning pe DrivenData, vei explora o problemă legată de bugetarea districtelor școlare și cum poate fi făcută mai ușoară și mai rapidă compararea cheltuielilor între școli. Aplicând tehnici de procesare a limbajului natural, vei pregăti bugetele școlare și vei construi un model care să clasifice automat elementele acestora, începând cu o versiune simplă și avansând treptat la una mai complexă. În plus, vei putea vedea și analiza soluția câștigătorului competiției, precum și vizualiza trimiterile celorlalți participanți.
- Analiza campaniilor de marketing cu pandas. Pandas este cea mai populară bibliotecă Python, iar dezvoltarea unor abilități solide cu acest toolkit este esențială pentru orice data scientist. În acest curs foarte practic, vei aprofunda elementele de bază Python și pandas (adăugare de coloane noi, îmbinare/segmentare de seturi de date, lucrul cu coloane de tip dată, vizualizarea rezultatelor în matplotlib) folosind un set de date fictiv de marketing pentru un business de abonamente online. Vei exersa traducerea întrebărilor tipice de marketing în valori măsurabile. Unele întrebări la care vei răspunde sunt: „Cum a performat această campanie?”, „De ce un anumit canal are performanțe slabe?”, „Care canal aduce cei mai mulți abonați?” etc.
- Analiza datelor recensământului SUA în Python. În acest curs, vei învăța cum să navighezi cu ușurință prin Recensământul decenal și sondajul anual American Community Survey și să extragi din ele diverse date demografice și socioeconomice, precum venitul gospodăriilor, naveta, rasa și structura familiei. Vei folosi Python pentru a solicita date pentru diferite zone geografice din API-ul Census și biblioteca pandas pentru a manipula datele colectate și a obține insight-uri relevante. În plus, vei exersa cartografierea cu biblioteca geopandas.
- Studiu de caz: analiză exploratorie a datelor în R. Acest curs scurt este ideal dacă ai deja cunoștințe de bază despre instrumente de manipulare și vizualizare a datelor în R. Parcurgând materialele, îți vei testa abilitățile pe un set de date real pentru a explora datele istorice privind voturile Adunării Generale a ONU. În special, vei analiza tendințe de vot între țări, în timp și pe teme internaționale. Acest studiu de caz îți va permite să realizezi o analiză exploratorie cap-coadă, să câștigi mai multă practică cu pachetele dplyr și ggplot2 și să înveți abilități noi.
- Analitică HR: explorarea datelor angajaților în R. R este cunoscut ca fiind mai bine adaptat pentru analiza statistică decât Python. În acest curs, vei valorifica acest avantaj al lui R pentru a manipula, vizualiza și efectua teste statistice într-o serie de studii de caz de analitică HR. Tehnicile de data science au apărut relativ recent în resurse umane. Totuși, astăzi reprezintă o direcție foarte promițătoare, deoarece multe companii se bazează tot mai mult pe departamentele HR pentru a furniza insight-uri acționabile și recomandări folosind baza de date a angajaților.
- Luarea deciziilor pe baza datelor în SQL. În acest curs, vei învăța cum să folosești SQL pentru a sprijini luarea deciziilor și a raporta rezultate către management. Studiul de caz se concentrează pe o companie de închiriere de filme online, cu o bază de date despre clienți, evaluări de filme, informații despre actori etc. Unele sarcini vor fi aplicarea interogărilor SQL pentru a studia preferințele clienților, implicarea acestora și evoluția vânzărilor. Vei învăța despre extensii SQL pentru procesare analitică online, care ajută la obținerea insight-urilor cheie din date multidimensionale complexe.
Indiferent dacă vrei să devii un expert de top în data science sau vrei doar să înveți abilități utile de programare pentru a extrage insight-uri valoroase bazate pe date în propriul domeniu de studiu, resursele de mai sus sunt un loc excelent de pornire.
Concluzie
Pe scurt, în acest articol am investigat ce este data science din mai multe unghiuri, cum diferă de data analytics, în ce sfere este aplicabilă, ce este un caz de utilizare și un parcurs general pentru a-l rezolva cu succes. Am discutat exact cum poate fi utilă data science pentru sarcini reale în câteva industrii cu cerere mare. În timp ce am conturat multe aplicații existente și potențiale, ne-am concentrat pe cele mai comune cazuri de utilizare în fiecare dintre aceste domenii populare și am demonstrat cum să le rezolvăm folosind algoritmi de data science și data analytics. Dacă vrei să afli mai multe despre cazuri de utilizare în alte industrii, aruncă o privire la articolele noastre despre cazuri de utilizare în bănci, marketing și vânzări. În cele din urmă, am trecut în revistă câteva cursuri online utile pentru a aprofunda alte studii de caz în data science.
O ultimă observație interesantă: niciunul dintre sectoarele pe care le-am analizat nu este cu adevărat nou. Unele, precum medicina și vânzările, există de secole. De-a lungul întregii lor istorii, cu mult înainte de noua noastră eră a digitalizării globale, datele din aceste industrii au fost de asemenea colectate într-o formă sau alta; scrise în cărți și documente și păstrate în arhive și biblioteci. Ceea ce s-a schimbat cu adevărat, dramatic, în ultimii ani, odată cu apariția noilor tehnologii, este înțelegerea fundamentală a potențialului imens ascuns în orice date și importanța vitală a înregistrării, colectării și stocării lor adecvate. Aplicarea acestor eforturi și îmbunătățirea constantă a sistemelor de management al datelor au făcut posibilă acumularea de big data în toate industriile pentru analize și prognoze ulterioare.


