Kiedy ufać modelom ML?
Modele uczenia maszynowego długo były postrzegane jako “czarne skrzynki”. Wprowadzamy mu dane, a model na ich podstawie zwraca nam odpowiedź. Następnie jeżeli metryki są wystarczająco dobre, to przyjmujemy, że model jest dobry. Dla entuzjastów uczenia maszynowego dobra metryka wystarczała, natomiast osoby bardziej sceptyczne twierdziły, że jednak wolą klasyczne metody, gdzie widzą wprost co determinuje model. No właśnie… ufać “w ciemno” maszynom czy może niczym na drodze zachować zasadę ograniczonego zaufania?
Żeby odpowiedzieć na to pytanie rozważymy 2 modele i spróbujemy odpowiedzieć na pytanie z którym jest coś nie tak i właściwie co takiego? Ale najpierw… Parę słów o wyjaśnialności modeli 😊
Czym jest wyjaśnialność modeli (XAI)?
Kilka lat temu zrobiło się głośno o modelu, który z ponad 90% skutecznością rozróżniał Husky od wilka. Zaskakujący wynik – jak na tak duże podobieństwo!
Zaskakująca skuteczność (stosunkowo prostego modelu – to była jakaś nieskomplikowana sieć neuronowa) wzbudziła poruszenie zwłaszcza wśród sceptyków zaufania modelom. Postanowiono zgłębić się w temat. Wynik był zaskakujący! Okazało się, że na zdecydowanej większości zdjęć gdzie występował Husky, pojawiła się trawa a na zdjęciach z wilkami – śnieg. Model okazał się wspaniałym detektorem śniegu!
Wróćmy na chwilę na początek, gdzie powiedzieliśmy, że modele uczenia maszynowego długo były postrzegane jako “czarne skrzynki”. Wyjaśnialność modeli pomaga nam zrozumieć, co determinuje wynik predykcji (jak np. w przypadku omawianych wyżej wilków i Husky). Nadal część modeli to są czarne skrzynki, ale wyjaśnialność ich wskazuje nam, w jakim stopniu poszczególne zmienne przyczyniły się do ostatecznego wyniku. W przypadku obrazu będą to istotne fragmenty obrazu (jak na obrazku wyżej), a w przypadku tekstu – kluczowe słowa. Dzięki temu możemy stwierdzić, czy model podejmuje decyzję na podstawie racjonalnych przesłanek.
Dzięki wyjaśnialności modeli, zmienił się sposób postrzegania modeli uczenia maszynowego. Z patrzenia na nie jak na modele typu “czarna skrzynka” przeszliśmy do umiejętności zrozumienia co determinuje wyniki predykcji zwracanej przez wspomnianą “czarną skrzynkę”. Pamiętajmy jednak, wiele modeli to wciąż “czarna skrzynka” a my jedynie potrafimy zrozumieć co ją determinuje a nie dlaczego akurat to ją determinuje!
Rozróżnia się wiele metod wyjaśnialności modeli w zależności od tego jaki jest cel, jak skomplikowany jest model, który chcemy wyjaśnić czy też z jakim typem danych mamy do czynienia. Dziś skupimy się na wyjaśnialności globalnej oraz lokalnej.
Wyjaśnialność globalna vs. wyjaśnialność lokalna
Wśród algorytmów wyjaśniających modele rozróżnia się algorytmy wyjaśnialności lokalnej oraz globalnej. Wyjaśnialność globalna służy do ogólnej analizy. Na podstawie całego zbioru (zaleca się korzystanie ze zbioru testowego) algorytmy wskazują istotność poszczególnych zmiennych. Daje to nam informację, które zmienne są bardziej wpływowe na ostateczny wynik. Z kolei wyjaśnialność lokalna służy do analizy konkretnych przypadków. Wówczas algorytmy zwracają nam informację w jakim stopniu poszczególne zmienne determinują ten konkretny przypadek.
Wyjaśnialność globalna dobrze się sprawdza, gdy robimy coś na bardzo dużą skalę i przyglądanie się przypadkom lokalnie mogłoby być zbyt czasochłonne. Z kolei wyjaśnialność lokalna może pomóc wyłapać “bias” w danych, co niejednokrotnie może zostać pominięte przez algorytmy wyjaśnialności globalnej (o czym za chwilę przekonamy się na naszym przykładzie).
Postawmy sobie problem
Będziemy bazować na ogólnodostępnych danych http://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients. Nauczymy 2 identyczne modele, ale wykorzystamy inne dane do uczenia. W jednym modelu będziemy działać na oryginalnym zbiorze, a w drugim na tym zbiorze okrojonym o pewne obserwacje – zbiór obciążony (w końcu gdy dostajemy dane do analizy, to nie są one idealne. Problem obciążonych danych możemy spotkać w rzeczywistej analizie).
Niezależnie od wykorzystywanych danych, cel jest taki sam – chcemy zbudować model, który pomoże zidentyfikować osoby mające problemy z płatnością za należności. Osoby należące do grupy “1”, to osoby, które w rozważanym miesiącu mają problem z płatnością. Rozważmy sobie las losowy.
Przyjrzyjmy się bliżej metrykom, które otrzymaliśmy. Nie wzbudzają żadnych podejrzeń, są prawie identyczne. Jak się przyjrzymy metrykom przypisanym do grupy “1”, to możemy nawet zauważyć, że model po prawej otrzymał na zbiorze testowym nieco lepsze wyniki.
Co jest nie tak z modelem (i z którym)?
No dobra, od samego początku mówimy, że jest coś nie tak z jednym z modeli, a póki co różnic nie widać. Skąd mamy wiedzieć w trakcie modelowania, że coś jest nie tak z naszym modelem i jak to sprawdzić, gdy metryki wydają się być w porządku? Życie byłoby zbyt piękne gdybyśmy mieli wszystko podane na tacy. Niestety musimy sami pamiętać o ograniczonym zaufaniu do modeli. Z pomocą przychodzi nam XAI, czyli wyjaśnialność modeli (Explainable AI).
Gini importance
Zacznijmy próby wyjaśnienia naszych modeli od algorytmu potocznie zwanego Gini Importance. Jest to wyjaśnialność globalna wykorzystywana w algorytmach drzewiastych. Bazuje na kryterium stosowanym przy podziale w drzewie losowym (stąd też nazwa, ponieważ kryterium to w przypadku klasyfikacji nazywa się “gini” i najprościej mówiąc jest to prawdopodobieństwo błędnej klasyfikacji jeśli zostanie przyjęty jakis podzial, np. wypłata <= 5000). Oto jak przedstawia się istotność 10 zmiennych uznanych za najistotniejsze (posortowane od najistotniejszych do najmniej istotnych):
Żadna spośród 10 najistotniejszych dla modelu zmiennych nie wzbudza podejrzeń. Wszystkie te zmienne mają sensowne uzasadnienie dlaczego mogą być istotne. Powiedzieliśmy wcześniej jednak, że na pewno coś jest nie tak z jednym z modeli. Spróbujmy zatem kolejną metodę 😄
Permutation feature importance
Jest to wyjaśnialność globalna, która może być stosowana na dowolnym algorytmie. Istotność każdej zmiennej sprawdzamy poprzez losowe wymieszanie jej i sprawdzenie jak to wpłynie na metryki (bez ponownego uczenia modelu), dzięki czemu jest ona dość szybka. Im bardziej metryki się pogorszą po takim wymieszaniu, tym bardziej istotna jest zmienna.
Tym razem rzuca się w oczy jedna “podejrzana” zmienna. No bo dlaczego niby płeć ma być istotna w kwestii tego czy opłacimy rachunki? Naturalnie nasze nawyki finansowe nie zależą od płci! W tym miejscu powinna zapalić się czerwona lampka w głowie mówiąca, że nasz model jest obciążony i nieracjonalny (na potrzeby analizy pomijamy fakt, że tworząc prawdziwe algorytmy scoringowe płeć nie może być nawet rozważana jako potencjalna zmienna). Jednak zanim wyciagniemy ostatnie wnioski zobaczmy jak prezentuje się wyjaśnialność jeżeli wykorzytamy jakąś lokalną metodę.
LIME (Local Interpretable Model-agnostic Explanations)
LIME, w odróżnieniu od wcześniej omawianych algorytmów, służy do wyjaśnialności lokalnej. Tak jak wspomnieliśmy wcześniej, takie algorytmy skupiają się na wyjaśnieniu jednego konkretnego przypadku, zamiast patrzeć na całość ogółem. Dzięki temu nawet jeśli ogólne zasady (np. Podziału na klasy) są skomplikowane, to algorytm z łatwością może dopasować wyjaśnialny model w otoczeniu rozważanego punktu (może to być np. model liniowy albo w przypadku obrazów np. prosty klasyfikator badający występowanie ciągu bardzo podobnych pikseli).
Dzięki takiemu podejściu, możemy uzyskać bardzo dokładne wyjaśnienie, które prawdopodobnie “wyłapie” nieścisłości występujące w modelu, których nie widać patrząc na same metryki. Również czasami algorytmy wyjaśnialności globalnej mogą pominąć aspekty, które zostaną wyłapane przez algorytmy lokalne. Przyjrzyjmy się naszym modelom za pomocą LIME.
Analiza modeli za pomocą LIME nie pozostawia złudzeń. Zmienna “płeć” okazała się być bardzo wpływowa w modelu obciążonym.
Podsumowanie
Krótko podsumujmy wszystko co zostało powiedziane.
- Algorytmy obciążone mogą na pozór (na podstawie samych metryk) wydawać się dobre.
- Warto jest korzystać z wyjaśnialności modeli, aby mieć pewność dlaczego model podejmuje takie a nie inne decyzje.
- Modele możemy wyjaśniać lokalnie lub globalnie w zależności od problemu z którym się mierzymy.
Jeśli jesteś zainteresowana_y kodem, to link do kodu znajdziesz na moim githubie: https://github.com/kingagla/explainable_AI
Pamiętaj również, że obciążoność danych można wykryć przy pomocy odpowiedniej analizy danych przed przystąpieniem do modelu! Ten temat omówimy jednak przy kolejnej okazji.
Dziękuję, że tu jesteś 😉 Mam nadzieję, że przyda Ci się do czegoś ta wiedza. Koniecznie zostaw po sobie znak w komentarzu! 😊😊😊
Bardzo dobry artykuł! Dziękuję.
Zastanawiam się nad istotnościa tego procesu. Skoro zakładamy z góry ze jakaś zmienna nie może być brana pod uwagę do podjęcia decyzji przez model to raczej ja wykluczamy na etapie modelowania. Więc co najwyżej możemy się posłużyć tym rozwiązaniem żeby wytłumaczyć dana decyzję aniżeli skorygować model. No chyba że po konsultacji z biznesem zakwestionujemy kolejne zmienne.
W tym przypadku z góry wiemy, ponieważ przykład miał na celu obrazować potencjalne problemy z jakimi się mierzymy budując modele. Wyjaśnialność służy przede wszytkim po to, aby mieć większe zaufanie do modeli. Aktualnie buduje się np. modele wspierające lekarzy. Jeżeli model “wyrzuci” odpowiedź typu “pacjent jest przeziębiony, bo ma gorączkę, kaszle i ma katar” to chętniej mu lekarz zaufa niż gdy model wyrzuci jedynie informację, że pacjent jest przeziębiony. Oczywiście tak jak wspomniałeś może zdarzyć się sytuacja, gdzie pokazujemy biznesowi jakie zmienne są istotne w modelu i powiedzą nam, że występuje tam zmienna, której być nie powinno a do potencjalnych zmiennych trafiła zupełnym przypadkiem.
Mam nadzieję, że udało mi się wyjaśnić istotność wyjaśnialności 😊
Super, bardzo lubię czytać Twoje artykuły 🙂