sobota, 4 maja 2024

KPI w projektach Data Science/Machine Learning (dokładność modelu, precision i recall)

Ten wpis, podobnie jak cała zawartość bloga, odzwierciedla moje zainteresowania rozwojem w dziedzinie informatyki. Główne cele tego przedsięwzięcia to dzielenie się wiedzą, demonstracja moich umiejętności oraz chęć poznawania nowych zagadnień, co może zainteresować potencjalnych współpracowników zarówno w sferze zawodowej, jak i poza nią. Blog ten jest również okazją do samodzielnego przetwarzania zdobytej wiedzy i tworzenia osobistych notatek. Jako że sam jestem w trakcie nauki, zachęcam do niezależnego myślenia i, jeśli tematyka wpisów wpisuje się w zakres Twoich zainteresowań, do dalszej eksploracji i weryfikacji podanych przeze mnie informacji.

W tym wpisie postaram się w prostych słowach przedstawić temat wskaźników KPI (Key Performance Indicators) w kontekście projektów związanych z uczeniem maszynowym. KPI to narzędzia, które pozwalają mierzyć efektywność oraz wpływ implementowanych rozwiązań Machine Learning na osiąganie celów biznesowych.

Oto przykłady KPI, które mogą być stosowane w projektach z zakresu Data Science i Machine Learning:

  1. Dokładność modelu (Accuracy)

Dokładność modelu (Accuracy) to najprostszy sposób na zmierzenie jego wydajności. Accuracy oblicza ilość poprawnych predykcji względem wszystkich przypadków. Im wyższy wynik, tym wyższa dokładność modelu, co sugeruje jego większą wydajność. Ocena wydajności modelu w ten sposób ma swój ogólny sens, jednak trzeba pamiętać, że wiąże się to z pewnymi poważnymi wadami.

Załóżmy, że mamy model, który analizuje aktywność użytkowników na blogu – co robią, w co klikają, jak długo zostają na stronie. Na tej podstawie model ma za zadanie klasyfikować użytkowników na zainteresowanych tematem i tych, którzy trafili tu przypadkowo. Gdyby dokładność tego modelu wynosiła 95% (co uznalibyśmy za bardzo dobry wynik), to wciąż nie wystarczyłoby to do obiektywnej oceny jego skuteczności. 

Załóżmy, że wiemy, iż 95% odwiedzających to osoby zainteresowane tematem. W takim przypadku, aby osiągnąć dokładność na poziomie 95%, wystarczyłoby, że model oznaczałby każdego użytkownika jako osobę zainteresowaną tematem, a nikogo jako osobę, która weszła na blog przypadkowo. To oznacza, że mimo bardzo dobrej dokładności (95%), model jest nieskuteczny, gdyż „przepuszcza jak sitko” wszystkie przypadki osób trafiających przypadkowo. 

Przy tak znaczącej różnicy w proporcjach przypadków, jak 95% do 5%, samo używanie Accuracy do mierzenia wydajności modelu nie daje nam rzetelnych informacji o jego faktycznej użyteczności.

Wzór na wyliczenie Accuracy wyglądałby następująco:

  1. True Positives (TP): liczba użytkowników poprawnie zidentyfikowanych jako "zainteresowani."
  2. True Negatives (TN): liczba użytkowników poprawnie zidentyfikowanych jako "niezainteresowani."
  3. False Positives (FP): liczba użytkowników błędnie zidentyfikowanych jako "zainteresowani."
  4. False Negatives (FN): liczba użytkowników błędnie zidentyfikowanych jako "niezainteresowani."

Accuracy = (TP + TN) / (TP + TN + FP + FN)

  1. Precision i Recall

Precision mierzy, jaki procent przypadków zaklasyfikowanych przez model jako pozytywne faktycznie jest pozytywny. Innymi słowy, ocenia trafność decyzji modelu tylko wśród tych przypadków, które uznał za pozytywne. Natomiast Recall określa, jaki procent wszystkich rzeczywistych pozytywów został poprawnie zidentyfikowany przez model jako pozytywne przypadki. Oznacza to, że Recall mierzy zdolność modelu do wykrywania wszystkich pozytywnych przypadków w zbiorze danych. 

W skrócie, Precision koncentruje się na dokładności przewidywań pozytywnych, a Recall na kompletności w wykrywaniu wszystkich pozytywów.

Jeśli miałbym odnieść Precision i Recall do poprzedniego przykładu z hipotetycznym modelem, który zajmowałby się identyfikacją użytkowników na moim blogu, to mógłbym przedstawić to w następujący sposób... Oczywiście jest to pewne uproszczenie, aby przedstawić zasadę, gdyż rzeczywista praca nad takim modelem i ocenianie jego wydajności byłaby procesem bardziej złożonym:

Założenia:

  • Model ma zakwalifikować użytkowników wchodzących na blog jako zainteresowanych treścią i przypadkowych.
  • W zbiorze testowym mamy 100 przypadków, gdzie 90 to użytkownicy zainteresowani tematem, a 10 to przypadkowi wchodzący.

Przykładowe scenariusze:

  1. Model zakwalifikował 80 przypadków jako użytkowników zainteresowanych treścią, z czego 70 było faktycznie zainteresowanych treścią.
  2. Z 90 zainteresowanych użytkowników ze zestawu danych model prawidłowo zakwalifikował 70 jako zainteresowanych treścią.

Precision i Recall modelu:

  • Precision = (liczba poprawnie zidentyfikowanych jako zainteresowani) / (wszystkie osoby zaklasyfikowane jako zainteresowani) = 70 / 80 = 0,875. (odnosi się to do punktu nr.1 ze scenariuszu).
  • Recall = (liczba poprawnie zidentyfikowanych jako zainteresowani) / (rzeczywista liczba zainteresowanych) = 70 / 90 = 0,778. (odnosi się to do punktu nr.2 ze scenariuszu).

Jak zinterpretować te wyniki?

  • Precision wynosi w przybliżeniu 88% - ze wszystkich wskazań przez model osób zainteresowanych blogiem, 88% z nich było poprawnych. Oznacza to, że model całkiem nieźle radzi sobie w oznaczaniu osób faktycznie zainteresowanych zawartością bloga.
  • Recall wynosi w przybliżeniu 78% - z całej puli 90 przypadków osób zainteresowanych blogiem tylko 78% z nich zostało uznanych przez model jako zainteresowanych treścią. To pokazuje, że model „nie docenia” użytkowników zainteresowanych blogiem i przypisuje ich do zbioru użytkowników, którzy znaleźli się na blogu przypadkowo.

Jednym z wniosków jaki możemy wysnuć, to to, że taka sytuacja z pewnością wymaga przyjrzeniu się całemu procesowi trenowania modelu, gdyż może to prowadzić do mylnego przekonania, że osoby wchodzące na blog nie są wystarczająco zainteresowane treścią, podczas gdy w rzeczywistości zawartość jest dość popularna wśród większości czytelników.

Mam nadzieję, że w pewnym stopniu zainteresowałem Cię zagadnieniami związanymi z KPI. Mierzenie wydajności to oczywiście znacznie więcej niż przedstawione tu trzy wskaźniki, co będę dalej poznawał i omawiał w przyszłych wpisach na tym blogu. Jednakże, warto znać te wskaźniki, rozumieć ich znaczenie i stosować je, gdy zajdzie taka potrzeba.

Brak komentarzy:

Prześlij komentarz

Analiza sentymentów - wpisy na mediach społecznościowych (podział danych)

Ten wpis zaczniemy od stworzenia DataFrame z danymi treningowymi train_df = pd.read_csv('train.csv', encoding='ISO-8859-1')....