
Data science: definicja i praktyczne zastosowania
Data science to stosunkowo nowa, ale szybko rozwijająca się i wieloaspektowa dziedzina wykorzystywana w wielu obszarach. Korzysta z zaawansowanych technik analitycznych i algorytmów modelowania predykcyjnego, aby wydobywać z danych istotne wnioski, które pomagają odpowiadać na strategiczne pytania biznesowe lub naukowe. Data science łączy szeroki wachlarz umiejętności – od technicznych (programowanie, algebra liniowa, statystyka i modelowanie) po nietechniczne (skuteczna prezentacja i komunikacja wyników). Dodatkowo, w zależności od branży, w której stosuje się data science, konieczna jest solidna wiedza dziedzinowa, by prawidłowo interpretować dostępne informacje i uzyskane wnioski.
Algorytmy data science można z powodzeniem stosować w wielu kontekstach, w których gromadzi się lub można gromadzić duże ilości danych: finanse, handel, marketing, zarządzanie projektami, ubezpieczenia, medycyna, edukacja, produkcja, HR, językoznawstwo, socjologia itd. W praktyce niemal każda branża czy dziedzina nauki może znacząco skorzystać na zbieraniu, porządkowaniu, analizie i modelowaniu swoich danych.
Czym jest use case w data science?
Use case w data science to konkretne, rzeczywiste zadanie do rozwiązania przy użyciu dostępnych danych. W ramach danej firmy wiele zmiennych analizuje się technikami data science w kontekście specyfiki branży. Use case może być problemem do rozwiązania, hipotezą do sprawdzenia lub pytaniem do rozstrzygnięcia. W gruncie rzeczy uprawianie data science oznacza rozwiązywanie rzeczywistych use case’ów.
Choć treść każdego use case’u będzie prawdopodobnie inna, są pewne kwestie, o których zawsze warto pamiętać:
- Planowanie use case’u data science obejmuje: wyznaczenie jasnego celu i oczekiwanych rezultatów, zrozumienie zakresu prac, ocenę dostępnych zasobów, zapewnienie wymaganych danych, ocenę ryzyk oraz zdefiniowanie KPI jako miary sukcesu.
- Najczęstsze podejścia do rozwiązywania use case’ów to: prognozowanie, klasyfikacja, wykrywanie wzorców i anomalii, rekomendacje oraz rozpoznawanie obrazów.
- Niektóre use case’y stanowią typowe zadania w różnych dziedzinach i można je rozwiązywać podobnymi metodami, jak przewidywanie churnu klientów, segmentacja klientów, wykrywanie nadużyć, systemy rekomendacyjne czy optymalizacja cen.
Jak rozwiązać case study z data science?
Odpowiedź na to pytanie jest silnie zależna od przypadku, uwarunkowana strategią biznesową firmy i samym sednem zadania. Pomocne będzie jednak nakreślenie ogólnej mapy działań dla każdego use case’u:
- Sformułowanie właściwego pytania. Ten pierwszy krok jest kluczowy i obejmuje przegląd literatury i istniejących case studies, analizę dobrych praktyk, opracowanie odpowiednich teorii i hipotez roboczych oraz uzupełnienie ewentualnych luk w wiedzy dziedzinowej. Finalnie powinniśmy uzyskać jasne pytanie do rozstrzygnięcia w analizowanym case study.
- Zbieranie danych. Na tym etapie przeprowadzamy inwentaryzację i gromadzenie danych. W praktyce często mamy do czynienia z danymi niereprezentatywnymi, niepełnymi, wadliwymi i niestrukturyzowanymi – dalekimi od kompletnej, czytelnej tabeli gotowej do analizy. Dlatego trzeba wyszukać i zidentyfikować wszystkie możliwe źródła danych przydatnych dla naszego tematu. Niezbędne dane mogą pochodzić z archiwów firmy, web scrapingu, od sponsora itp.
- Porządkowanie danych (data wrangling). To zwykle najbardziej czasochłonna i zasobochłonna część każdego projektu data science. Oceniamy jakość i reprezentatywność zebranych danych oraz prowadzimy wstępną eksplorację. Dane są czyszczone, wstępnie przetwarzane, transformowane, modyfikowane i mapowane z postaci surowej do bardziej odpowiedniego formatu.
- Analiza i modelowanie. Oczyszczone dane analizuje się pod kątem ich aktualnego stanu, a następnie dopasowuje do wybranego modelu statystycznego predykcyjnego. Oceniamy dokładność modelu i – jeśli nie jest satysfakcjonująca – próbujemy innych podejść. Powtarzamy to, aż uzyskamy model najlepiej przewidujący przyszłe scenariusze. Ten proces, podobnie jak poprzednie, może być dość iteracyjny.
- Komunikacja wyników. W porównaniu z wcześniejszymi etapami ten wymaga więcej umiejętności komunikacyjnych i miękkich niż programistycznych i technicznych. Obejmuje dzielenie się najważniejszymi ustaleniami i wnioskami z zarządem, udziałowcami i innymi interesariuszami. Wnioski zwykle przedstawia się w raportach, artykułach i prezentacjach, wskazując potencjalne kierunki dalszych działań.
Zastosowania data science w różnych branżach
Use case’y data science mogą dotyczyć praktycznie każdej branży, w której gromadzi się lub można gromadzić duże ilości danych. W tym rozdziale omówimy typowe przykłady z najbardziej poszukiwanych obszarów: logistyki, ochrony zdrowia i telekomunikacji. Część rozpatrywanych przypadków jest interdyscyplinarna i łatwo spotykana także w innych sferach. Czyni je to bardziej uniwersalnymi i przydatnymi, więc warto znać ogólne podejście do ich rozwiązywania. Dodatkowo dla każdej z wybranych branż wskażemy inne możliwe tematy, które można modelować metodami data science.
Data science w ochronie zdrowia
W poprzednich trzech rozdziałach omówiliśmy, jak metody data science pomagają firmom z różnych branż zwiększać przychody. W przypadku ochrony zdrowia poprawne wykorzystanie i interpretacja dostępnych danych przydaje się nie tylko marketerom tego sektora – może też umożliwić terminową diagnozę poważnych chorób, a nawet ratować ludzkie życie.
Medycyna i świadczeniodawcy ochrony zdrowia gromadzą ogromne ilości danych z licznych źródeł: systemów elektronicznej dokumentacji medycznej (EHR), urządzeń wearables, badań naukowych i dokumentów rozliczeniowych. Wykorzystanie innowacyjnych technik data science i analizy danych stopniowo rewolucjonizuje cały sektor zdrowia, oferując obiecujące i wpływowe rozwiązania na przyszłość. Szczególnie wyspecjalizowane dziedziny, jak genetyka, medycyna rozrodu, onkologia, biotechnologia, radiografia, diagnostyka predykcyjna i farmacja, weszły na nowy poziom dzięki pełniejszemu wykorzystaniu potencjału swoich danych.
Aby lepiej zrozumieć wartość data science w medycynie, przyjrzyjmy się jednemu z klasycznych use case’ów.
Use case w ochronie zdrowia: przewidywanie raka piersi
Zgodnie z danymi World Cancer Research Fund International rak piersi to najczęstszy nowotwór wśród kobiet i drugi najczęstszy ogółem. Terminowe rozpoznanie patologii piersi, zarówno łagodnej, jak i złośliwej, jest niezwykle ważne, ponieważ znacząco zwiększa szanse skutecznego leczenia i przeżycia. Tu z pomocą przychodzi data science.
Postęp metod eksploracji danych w połączeniu z algorytmami uczenia maszynowego umożliwił przewidywanie ryzyka raka piersi, wykrywanie potencjalnych anomalii na wczesnym etapie, szacowanie dynamiki choroby i opracowanie optymalnego planu leczenia. W istocie to typowy problem klasyfikacyjny w uczeniu maszynowym. Dobrą wiadomością jest to, że ponieważ ten typ onkologii jest dość powszechny, na całym świecie przeprowadzono wiele wnikliwych badań i zgromadzono ogromne ilości danych od pacjentek z różnych krajów.
Głównym problemem przy użyciu takich zbiorów w klasyfikatorach jest silna niezrównoważoność. Na przykład, gdy wynik ma postać rak / brak raka, prawdopodobieństwo wystąpienia patologii (wpisy należące do klasy mniejszościowej) jest znacznie niższe niż prawdopodobieństwo jej braku (wpisy klasy większościowej). W efekcie algorytm ma tendencję do klasyfikowania nowych przypadków jako niepatologicznych. Dlatego do oceny dokładności takich modeli sensowne jest użycie miary F1, ponieważ uwzględnia ona fałszywe pozytywy (błąd I rodzaju) i fałszywe negatywy (błąd II rodzaju), a nie tylko przypadki poprawnej klasyfikacji.
Spójrzmy na rzeczywisty zbiór danych Breast Cancer z jednego ze stanów USA. Cechy opisane są szczegółowo w dokumentacji; w skrócie są to wartości średnie, błędy standardowe i wartości największe atrybutów z każdego zcyfryzowanego obrazu przedstawiającego jądra komórkowe w guzie piersi. Każdy wpis odpowiada kobiecie z guzem złośliwym lub łagodnym (tj. wszystkie badane kobiety mają jakiś guz). Atrybuty obejmują promień komórki, teksturę, gładkość, zwartość, wklęsłość, symetrię itd.
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
Usuńmy ostatnią kolumnę, która zawiera wyłącznie braki:
cancer_data = cancer_data.drop('Unnamed: 32', axis=1)
Ile kobiet, w %, ma potwierdzony nowotwór (złośliwy guz piersi)?
round(cancer_data['diagnosis'].value_counts()*100/len(cancer_data)).convert_dtypes()
B 63
M 37
Name: diagnosis, dtype: Int64
37% wszystkich respondentek ma raka piersi, więc zbiór jest w gruncie rzeczy dość zrównoważony.
Ponieważ wartości zmiennej diagnosis są kategoryczne, musimy zakodować je numerycznie do dalszego użycia w uczeniu maszynowym. Zanim to zrobimy, podzielmy dane na cechy predyktora i zmienną docelową 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)
Teraz utwórzmy zbiory treningowy i testowy, a następnie przeskalujmy cechy:
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)
Do modelowania danych zastosujmy algorytmy z domyślnymi parametrami: k‑najbliższych sąsiadów (KNN) oraz regresję logistyczną:
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)
Widzieliśmy wcześniej, że zbiór danych jest dość zrównoważony, więc możemy użyć miary accuracy, by wskazać najdokładniejszy model:
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
Na podstawie naszych danych model regresji logistycznej najlepiej przewiduje złośliwy/łagodny charakter guza piersi u kobiety z wykrytą patologią.
Potencjalne dalsze kroki: ponieważ w regresji logistycznej nie ma krytycznych parametrów do strojenia, można poeksperymentować z różnymi podejściami do podziału train/test i/lub z innymi technikami modelowania predykcyjnego.
Inne typowe use case’y data science w ochronie zdrowia:
- monitorowanie danych z urządzeń wearables w czasie rzeczywistym
- analityka predykcyjna
- analiza obrazów medycznych
- odkrywanie leków
- badania genetyczne
- wirtualni asystenci
- zarządzanie danymi klientów
Data science w transporcie i logistyce
Logistyka to organizacja procesu dostarczenia produktu z punktu A do B, a transport to sam przewóz osób lub towarów. W zależności od profilu działalności firmy (np. dostawa posiłków, poczta, przesyłki międzynarodowe, linie lotnicze, usługi taksówkowe lub autobusowe) źródła danych mogą obejmować rozkłady, karty czasu pracy, szczegóły tras, stany magazynowe, raporty, umowy, dokumenty prawne i opinie klientów. Dane mogą być ustrukturyzowane lub nie i zawierać informacje o czasie, trasach, itinerariach, współrzędnych, danych klientów, szczegółach towarów, kosztach i cenach.
Efektywność biznesu w łańcuchu dostaw i transporcie nie zawsze jest oczywista i zależy od wielu czynników: nieprzewidzianych korków, jakości tras, pogody, sytuacji awaryjnych, wahań cen paliw, braków magazynowych, awarii technicznych, opóźnień związanych z bezpieczeństwem, regulacji i sankcji rządowych itp. Dodatkowo w ostatnich latach pojawiło się wiele nowych firm, a konkurencja w branży stała się ostra. Dlatego, by dotrzymać kroku konkurencji i zwiększyć produktywność operacyjną, każda firma logistyczna/transportowa musi analizować big data i przekładać je na wartościowe wnioski.
Jak konkretnie data science może pomóc w transporcie i logistyce? Oto niepełna lista potencjalnych zastosowań:
- śledzenie całego procesu przewozu end‑to‑end,
- pełna automatyzacja i transparentność działań,
- dostawy na czas,
- optymalizacja tras,
- dynamiczne ustalanie cen,
- utrzymanie zapasów,
- ochrona towarów łatwo psujących się,
- monitorowanie stanu pojazdów,
- usprawnianie sieci produkcyjnych,
- poprawa obsługi klienta.
Use case w transporcie i logistyce: identyfikacja optymalnego rozmieszczenia taksówek
Uber Technologies Inc., czyli Uber, to amerykańska firma świadcząca różne usługi logistyczne i transportowe. W tym case study będziemy klastrować dane GPS z przejazdów współdzielonych Ubera, aby zidentyfikować optymalne rozmieszczenie pojazdów. Może to być przydatne m.in. w następujących celach:
- Każde nowe żądanie przejazdu przypisuje się do najbliższego klastra, więc Uber wysyła do klienta najbliższy samochód z tego klastra.
- Analizując obciążenie zidentyfikowanych klastrów, opcjonalnie wg godziny lub dnia tygodnia, Uber może z wyprzedzeniem redystrybuować auta i kierować je w najbardziej strategiczne, częściej wybierane lokalizacje.
- W zależności od relacji popytu do podaży w różnych klastrach firma może dynamicznie korygować taryfy.
Użyjemy zbioru danych z FiveThirtyEight dotyczącego przejazdów Ubera w Nowym Jorku w kwietniu 2014 r.:
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
Zwizualizujmy schematycznie wszystkie punkty podjęcia pasażerów, pamiętając, że długość geograficzna to oś X, a szerokość – oś Y:
import matplotlib.pyplot as plt
plt.scatter(uber_data.iloc[:, 2], uber_data.iloc[:, 1])
plt.show()
Do klastrowania użyjemy niesuperwizyjnego algorytmu uczenia maszynowego k‑means. Polega on na podziale próbek na kilka grup o zbliżonej wariancji. W praktyce przyjmuje liczbę klastrów n_clusters (domyślnie 8) i dzieli dane odpowiednio. Aby ustalić optymalną liczbę klastrów, stosuje się graficzną metodę łokcia, która obejmuje:
- trenowanie kilku modeli z różną liczbą klastrów i zebranie wartości WCSS (Within Cluster Sum of Squares) dla każdego, czyli sumy kwadratów odległości obserwacji od najbliższego centroidu klastra,
- wykres wartości WCSS względem liczby klastrów,
- wybór najmniejszej liczby klastrów, przy której następuje istotny spadek 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()

W naszym przypadku najbardziej odpowiednia liczba klastrów to 7. Użyjmy tej wartości do dopasowania modelu i przewidzenia numeru klastra dla każdego punktu podjęcia. Zobrazujemy też dane ponownie, tym razem dodając lokalizacje siedmiu centroidów:
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()
Wyodrębnijmy teraz dokładne współrzędne wszystkich centroidów i wyświetlmy je osobno, bez danych:
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
Bardziej poglądowe będzie naniesienie tych centroidów na mapę Nowego Jorku:
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

Korzystając z naszego modelu, możemy przewidzieć najbliższy klaster dla dowolnej lokalizacji w Nowym Jorku wyrażonej współrzędnymi geograficznymi. W praktyce oznacza to, że Uber wyśle dostępne taxi z najbliższej lokalizacji i szybciej obsłuży klienta.
Znajdźmy najbliższy klaster dla Lincoln Center for the Performing Arts na Manhattanie:
lincoln_center = [(40.7725, -73.9835)]
kmeans.predict(lincoln_center)
array([1])
A teraz dla Howard Beach w dzielnicy Queens:
howard_beach = [(40.6571, -73.8430)]
kmeans.predict(howard_beach)
array([3])
Potencjalne dalsze kroki: zastosowanie innych algorytmów klastrowania, analiza różnych przekrojów danych (wg godziny/dnia tygodnia/miesiąca), identyfikacja najbardziej i najmniej obciążonych klastrów lub zbadanie zależności między klastrami a zmienną Base z ramki danych.
Inne typowe use case’y w transporcie i logistyce:
- dynamiczne dopasowanie cen do popytu i podaży
- prognozowanie popytu
- automatyzacja operacji manualnych
- pojazdy autonomiczne
- widoczność łańcucha dostaw
- wykrywanie uszkodzeń
- zarządzanie magazynem
- analiza nastrojów klientów
- chatboty obsługi klienta
Data science w telekomunikacji
W ostatnich dekadach technologie telekomunikacyjne rozwijały się w niezwykle szybkim tempie i weszły w nowy etap rozwoju. Dziś otaczają nas wszelkiego rodzaju urządzenia elektroniczne, a wiele osób stało się wręcz zależnych od Internetu, w szczególności mediów społecznościowych i komunikatorów. Czasem krytykuje się to uzależnienie od urządzeń za zastępowanie bezpośrednich kontaktów. Trzeba jednak przyznać, że telekomunikacja znacznie ułatwiła życie, pozwalając łączyć się z ludźmi na całym świecie w kilka sekund.
Było to szczególnie widoczne w okresie pandemii COVID‑19, gdy wiele firm i szkół przeszło na tryb zdalny. W tak szybko zmieniającej się rzeczywistości jakość i płynność łączności cyfrowej nabrały bezprecedensowego znaczenia. Lockdown sprawił, że ludzie musieli dzwonić i pisać do współpracowników, rodziny i znajomych znacznie częściej niż wcześniej. Te nowe tendencje doprowadziły do ogromnego wzrostu wolumenu usług telekomunikacyjnych, co z kolei przełożyło się na generowanie olbrzymich ilości danych w tej branży.
Zastosowanie metod data science do przepracowania zgromadzonych danych może wesprzeć telekomunikację na wiele sposobów:
- usprawnienie operacji,
- optymalizacja sieci,
- filtrowanie spamu,
- poprawa transmisji danych,
- analityka w czasie rzeczywistym,
- rozwijanie skutecznych strategii biznesowych,
- tworzenie udanych kampanii marketingowych,
- zwiększanie przychodów.
Przyjrzyjmy się bliżej częstemu zadaniu w telekomunikacji – wykrywaniu i filtrowaniu niechcianych wiadomości.
Use case w telekomunikacji: budowa filtra spamu
Filtrowanie spamu to kluczowa funkcja wszystkich nowoczesnych kanałów komunikacji pisemnej, ponieważ chroni nas przed codziennym zalewem wiadomości próbujących wyłudzić pieniądze. Technicznie to kolejny przykład problemu klasyfikacyjnego: na podstawie danych historycznych każda nowa wiadomość jest oznaczona jako ham (czyli normalna) i trafia bezpośrednio do odbiorcy, lub jako spam – i jest blokowana albo ląduje w folderze spam.
Popularnym algorytmem nadzorowanego uczenia maszynowego do tego celu jest klasyfikator Naiwnego Bayesa. Opiera się on na twierdzeniu Bayesa, a „naiwny” odnosi się do założenia, że słowa w każdej wiadomości są wzajemnie niezależne. Założenie to nie jest w pełni prawdziwe, bo ignoruje istnienie naturalnych powiązań między słowami i kontekstu. Jednak w większości zadań klasyfikacji tekstu z małą ilością danych podejście to sprawdza się i daje trafne prognozy.
Istnieje kilka wariantów klasyfikatora Naiwnego Bayesa, każdy do innych zastosowań: multinomial, Bernoulliego, Gaussa i flexible Bayes. W naszym przypadku (wykrywanie spamu) najlepszy jest multinomial Naive Bayes. Bazuje on na dyskretnych zliczeniach częstości cech kategorycznych lub ciągłych reprezentujących liczby wystąpień słów w każdej wiadomości.
Zastosujmy multinomial Naive Bayes do SMS Spam Collection Data Set z 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...
Mamy 5572 wiadomości sklasyfikowane przez ludzi. Ile z nich (w %) to spam?
round(sms_data['Label'].value_counts()*100/len(sms_data)).convert_dtypes()
ham 87
spam 13
Name: Label, dtype: Int64
13% SMS-ów zidentyfikowano ręcznie jako spam.
Aby przygotować dane do klasyfikacji multinomial Naive Bayes, najpierw wykonajmy następujące kroki:
- Zakoduj etykiety ze stringów do formatu numerycznego. U nas etykiety są binarne, więc zakodujemy je jako 0/1.
- Wyodrębnij zmienne predyktora i docelową.
- Podziel dane na zbiory treningowy i testowy.
- Zwektoryzuj ciągi tekstowe z kolumny SMS w zbiorach treningowym i testowym predyktora, aby uzyskać macierze CSR (compressed sparse row).
Czwarty krok wymaga krótkiego wyjaśnienia. Tworzymy obiekt wektoryzatora, dopasowujemy go do słownika (wszystkie unikalne słowa ze wszystkich wiadomości w zbiorze treningowym wraz z częstościami), a następnie transformujemy zbiory treningowy i testowy predyktora do macierzy. W efekcie otrzymamy dwie macierze, w których kolumny odpowiadają unikalnym słowom ze zbioru treningowego, wiersze – poszczególnym wiadomościom, a wartości w komórkach – liczbie wystąpień danego słowa w danej wiadomości.
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)
Następnie zbudujemy klasyfikator multinomial Naive Bayes z domyślnymi parametrami i sprawdzimy jego dokładność:
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
W efekcie uzyskaliśmy bardzo dokładny filtr spamu.
Potencjalne dalsze kroki: wypróbowanie innych metod podziału train/test, udoskonalenie wektoryzacji poprzez strojenie jej licznych parametrów (np. progi dla zbyt częstych słów w spamie i ham), sprawdzenie rzadkich przypadków błędnej klasyfikacji i zrozumienie ich przyczyn. Dodatkowo można zwizualizować najczęstsze słowa w spamie i ham, np. chmurą słów (po wstępnym czyszczeniu danych i wykluczeniu stop-słów oraz mało informacyjnych słów). Na koniec warto zastosować inne algorytmy uczenia maszynowego lub głębokiego (SVM, drzewa decyzyjne, sieci neuronowe) i porównać wyniki z podejściem Bayesowskim.
Inne typowe use case’y w telekomunikacji:
- segmentacja klientów
- rozwój produktów
- analiza rekordów połączeń (CDR)
- systemy rekomendacyjne
- przewidywanie churnu klientów
- marketing ukierunkowany
- wykrywanie nadużyć
- zarządzanie i optymalizacja sieci
- zwiększone bezpieczeństwo sieci
- optymalizacja cen
- prognozowanie wartości życia klienta (CLV)
Case studies z data science: kursy
Przeszliśmy długą drogę i szczegółowo poznaliśmy liczne zastosowania data science w różnych dziedzinach. Jeśli teraz czujesz, że chcesz poznać więcej use case’ów opartych na rzeczywistych zbiorach danych i zastosować nową wiedzę oraz umiejętności techniczne do rozwiązywania praktycznych zadań w swojej dziedzinie, poniższe krótkie kursy dla początkujących o różnych case studies z data science mogą być pomocne:
- Case Study: School Budgeting with Machine Learning in Python. W tym kursie opartym na case study z konkursu machine learning na DrivenData poznasz problem związany z budżetowaniem dzielnic szkolnych i to, jak ułatwić i przyspieszyć szkołom porównywanie swoich wydatków z innymi. Zastosujesz techniki przetwarzania języka naturalnego, przygotujesz budżety szkół i zbudujesz model automatycznie klasyfikujący ich pozycje – zaczynając od prostej wersji, stopniowo przechodząc do bardziej zaawansowanej. Dodatkowo zobaczysz i przeanalizujesz rozwiązanie zwycięzcy konkursu oraz zgłoszenia innych uczestników.
- Analyzing Marketing Campaigns with pandas. Pandas to najpopularniejsza biblioteka Pythona i solidna znajomość jej narzędzi jest niezbędna dla każdego data scientist. W tym mocno praktycznym kursie rozwiniesz podstawy Pythona i pandas (dodawanie kolumn, łączenie/cięcie zbiorów, praca z datami, wizualizacja w matplotlib) na fikcyjnym zbiorze marketingowym biznesu subskrypcyjnego online. Poćwiczysz przekładanie typowych pytań marketingowych na mierzalne wartości. Odpowiesz m.in. na pytania: „Jak wypadła ta kampania?”, „Dlaczego dany kanał ma słabe wyniki?”, „Który kanał przyprowadza najwięcej subskrybentów?” itp.
- Analyzing US Census Data in Python. W tym kursie nauczysz się sprawnie poruszać po spisie powszechnym (Decennial Census) i corocznym American Community Survey oraz pozyskiwać z nich różne dane demograficzne i społeczno‑ekonomiczne, takie jak dochody gospodarstw domowych, dojazdy, rasa czy struktura rodziny. Użyjesz Pythona do pobierania danych dla różnych obszarów z Census API i biblioteki pandas do manipulacji danymi i wyciągania wniosków. Poćwiczysz też mapowanie z geopandas.
- Case Study: Exploratory Data Analysis in R. Ten krótki kurs będzie idealny, jeśli masz już podstawy manipulacji i wizualizacji danych w R. Przećwiczysz swoje umiejętności na rzeczywistym zbiorze, badając historyczne wyniki głosowań Zgromadzenia Ogólnego ONZ. Przeanalizujesz tendencje w głosowaniach między krajami, w czasie i w kwestiach międzynarodowych. To case study pozwoli Ci przeprowadzić kompletną eksploracyjną analizę danych, zdobyć więcej praktyki z dplyr i ggplot2 oraz nauczyć się nowych umiejętności.
- Human Resources Analytics: Exploring Employee Data in R. R słynie z lepszego dostosowania do analiz statystycznych niż Python. W tym kursie wykorzystasz tę przewagę, by manipulować, wizualizować i prowadzić testy statystyczne na serii case studies z analityki HR. Techniki data science pojawiły się w HR stosunkowo niedawno, ale dziś to bardzo obiecujący kierunek, bo wiele firm coraz bardziej liczy na działy HR w dostarczaniu wniosków i rekomendacji opartych na bazach danych pracowników.
- Data-Driven Decision Making in SQL. W tym kursie nauczysz się używać SQL do wspierania podejmowania decyzji i raportowania wyników zarządzaniu. Case study dotyczy internetowej wypożyczalni filmów z bazą danych o klientach, ocenach filmów, informacjach o aktorach itd. Zadania obejmą stosowanie zapytań SQL do badania preferencji klientów, ich zaangażowania i rozwoju sprzedaży. Poznasz rozszerzenia SQL dla przetwarzania analitycznego online, które pomagają pozyskiwać kluczowe wnioski z złożonych danych wielowymiarowych.
Niezależnie od tego, czy chcesz zostać ekspertem data science, czy po prostu nauczyć się przydatnych umiejętności kodowania, by wydobywać cenne wnioski w swojej dziedzinie, powyższe zasoby to świetny punkt wyjścia.
Podsumowanie
Podsumowując, w tym artykule zbadaliśmy, czym jest data science z wielu perspektyw, czym różni się od analityki danych, w jakich sferach znajduje zastosowanie, czym jest use case data science oraz ogólną mapę działań prowadzących do jego skutecznego rozwiązania. Omówiliśmy, jak dokładnie data science może pomóc w zadaniach z życia wziętych w kilku poszukiwanych branżach. Przedstawiając wiele istniejących i potencjalnych zastosowań, skupiliśmy się na najczęstszych use case’ach w każdej z tych popularnych dziedzin i pokazaliśmy, jak je rozwiązywać za pomocą algorytmów data science i analityki danych. Jeśli chcesz poznać use case’y w innych branżach, zajrzyj do naszych artykułów o zastosowaniach w bankowości, marketingu i sprzedaży. Na koniec przedstawiliśmy kilka przydatnych kursów online, które pomogą Ci głębiej wejść w inne case studies z data science.
Jeszcze jedna ciekawa obserwacja: żadna z omawianych tu branż nie jest zupełnie nowa. Niektóre, jak medycyna czy sprzedaż, istnieją od stuleci. Przez całą ich historię, na długo przed erą globalnej cyfryzacji, dane z tych sektorów również były zbierane w takiej czy innej formie; zapisywane w księgach i dokumentach, przechowywane w archiwach i bibliotekach. To, co naprawdę zmieniło się w ostatnich latach wraz z rozwojem nowych technologii, to fundamentalne zrozumienie ogromnego potencjału ukrytego w każdych danych oraz kluczowego znaczenia ich właściwego rejestrowania, gromadzenia i przechowywania. Dzięki tym wysiłkom i ciągłemu doskonaleniu systemów zarządzania danymi możliwe stało się gromadzenie big data we wszystkich branżach do dalszej analizy i prognozowania.


