Medycyna i machine learning - algorytm do wspomagania decyzji lekarza

AI & ML
21.12.23

Wspomaganie decyzji przy pomocy machine learning

Technologia zmienia oblicze usług medycznych. Sztuczna inteligencja w medycynie ma potencjał, aby rozwiązać problem niedoboru specjalistów i zwiększyć szanse pacjentów na uzyskanie fachowej pomocy w krótkim czasie. W poniższym artykule przedstawimy proces powstawania systemu wyposażonego w moduł inteligentnego wnioskowania dla branży medycznej. Rozwiązuje on problem kolejki pacjentów oczekujących na specjalistyczne badanie medyczne.

Zadaniem modułu machine learning jest w tym wypadku sugerowanie zmian w kolejności osób. W toku tego artykułu przyjrzymy się procesowi jego rozwoju od początku do końca. Do uczenia modelu wykorzystamy dane pochodzące z dokumentacji medycznej byłych pacjentów.

Dzięki temu będziemy mogli wskazać osoby, które wymagają badania w pierwszej kolejności. Zredukuje to czas reakcji oraz zminimalizuje możliwość błędu operatora kolejki. Działający algorytm machine learning podejmie decyzję, mając „w pamięci” setki tysięcy przypadków, wykonując jedno zadanie w ułamku sekundy i odciążając operatora systemu.

Pamiętajmy, że użycie systemu wspomagania decyzji nie może zastąpić kontroli lekarskiej. Jak sama nazwa wskazuje, jest to system „wspomagania”, a nie podejmowania decyzji. Jego skuteczność będzie zdefiniowana jakością danych użytych do nauczenia, ich ilością oraz skutecznością narzędzi użytych do stworzenia takiego algorytmu. Właściwie na każdym etapie będzie potrzebna osoba dysponująca wiedzą i znajomością dziedziny, dzięki czemu sugestie modelu machine learning będą nadzorowane.

Opis problemu: kolejka do badania medycznego

Aby zilustrować problem, sięgnijmy po sytuację, w której szpital dysponuje specjalistycznym sprzętem badawczym. Taki sprzęt jest oczywiście bardzo drogi, co za tym idzie, jest go mało. W rezultacie kolejka do badań się wydłuża. Zakładamy, że omawiany sprzęt medyczny pozwala zdiagnozować chorobę kości – osteoporozę. Wiemy z badań, że choroba się rozwija i ma różne stadia. Nie jest chorobą dającą specyficzne, zerojedynkowe objawy. Wykrycie jej we wczesnym stadium pozwala na szybkie rozpoczęcie leczenia. To z kolei znacznie podnosi szanse odzyskania zdrowia lub zminimalizowanie potencjalnych szkód.

Oczywiście, w pierwszej kolejności będziemy chcieli skierować na badania tych pacjentów, u których wystąpienie choroby jest najbardziej prawdopodobne. Ale jak stwierdzić, że dana osoba jest bardziej narażona, niż inne? Dostęp do specjalistów, którzy dzięki swojej wiedzy i doświadczeniu są w stanie postawić taką diagnozę, jest mocno ograniczony. Dla lekarza czas poświęcony osobie, u której prawdopodobieństwo wystąpienia choroby jest znikome, jest czasem straconym.

Rozwiązaniem tego problemu może być maksymalna redukcja czasu pomiędzy skierowaniem na badanie a wizytą u specjalisty.

Przykładowy proces kwalifikacji do leczenia

Grupa docelowa do badania System wspomagania decyzji. Zebranie wymaganych informacji o pacjencie, filtrowanie przypadków obarczonych dużym ryzykiem rozwoju choroby Grupa po wprowadzeniu klasyfikacji Utworzenie kolejki o odpowiednim priorytecie, weryfikacja przez operatora Kolejka priorytetów do badań specjalistycznych Przeprowadzenie badań, wprowadzenie wyniku do systemu Wykrywanie choroba lub wysokie ryzyko zachorowania, skierowanie na leczenie Szkolenie systemowe na podstawie wyników badania

Lokalizacja aplikacji w procesie

Grupa docelowa do badania System wspomagania decyzji. Zebranie wymaganych informacji o pacjencie, filtrowanie przypadków obarczonych dużym ryzykiem rozwoju choroby Grupa po wprowadzeniu klasyfikacji Utworzenie kolejki o odpowiednim priorytecie, weryfikacja przez operatora Kolejka priorytetów do badań specjalistycznych Przeprowadzenie badań, wprowadzenie wyniku do systemu Wykrywanie choroba lub wysokie ryzyko zachorowania, skierowanie na leczenie Szkolenie systemowe na podstawie wyników badań Obszar zastosowania

Propozycja rozwiązania: model uczenia maszynowego

Obszarem, w którym najbardziej przyda się pomoc systemu, jest wstępna klasyfikacja. Tutaj zatem osadzimy nasz moduł. Na poniżej rozpisanym procesie, jest to krok numer 1.

Do rozpoczęcia pracy nad stworzeniem takiego modułu uczenia maszynowego niezbędne będą wyniki badań wraz z odpowiednimi pomiarami. Potrzebujemy wielu historycznych danych, które umożliwią nam nauczenie modelu. Jeśli wyniki uczenia będą zadowalające, na jego podstawie zostanie zakodowany algorytm klasyfikujący.
Prace nad projektem możemy podzielić na etapy.

Wprowadzanie danych pacjenta niezbędnych do przeprowadzenia symulacji Wynik symulacji, kontrola przez operatora, tworzenie kolejki priorytetów Przeprowadzanie badań, zbieranie wyników Wprowadzenie wyników badań do systemu uczenia algorytmów

Etapy prac nad algorytmem machine learning

Etap przygotowawczy.

Inżynier pracujący nad stworzeniem algorytmu musi zrozumieć problem, nad którym pracuje. Bez znajomości problemu, a co za tym idzie środowiska, w jakim występuje, trudno dojść do optymalnego rozwiązania.

Ważną częścią tego etapu jest zapoznanie się z literaturą oraz konsultacje ze specjalistą, który jest w stanie opisać zjawisko – w naszym przypadku prawdopodobnie z doktorem medycyny, innym badaczem lub pracownikiem medycznym.

Etap zbierania i analizy danych

Na tym etapie podejmujemy prace nad analizą danych dotyczących choroby. Powinniśmy móc wywnioskować jakie pomiary są standardowo wykonywane oraz jakimi dodatkowymi informacjami dysponujemy – np. o płci, wieku badanego.

Ocena jakości zbioru danych determinuje kolejne kroki. Jeśli okaże się, że nie dysponujemy zbiorem danych o wystarczającej jakości, trzeba będzie odsunąć w czasie uczenie modelu na rzecz zbierania danych o dobrej jakości. Żeby poprawnie sklasyfikować prawdopodobieństwo wystąpienia choroby, dane wejściowe muszą zawierać informacje o czynnikach wskazujących na jej wystąpienie. Bez możliwości parametryzacji danych zdrowotnych pacjenta nie stworzymy dobrze działającego klasyfikatora.

Jeśli jednak ilość danych medycznych oraz ich jakość jest zadowalająca, specjalista machine learning może przejść do kolejnego etapu – uczenia modelu klasyfikatora.

Badania eksploracyjne

Na tym etapie inżynier uczenia maszynowego bada które współczynniki korelują z rezultatem badania. Używamy w tym celu odpowiednich narzędzi matematycznych, porównujemy ich rezultaty i dobieramy te najlepiej rokujące. Kiedy zauważamy tendencję wyników, zapisujemy rezultaty i prezentujemy je w sposób graficzny, tak, aby były możliwe do przeanalizowania przez specjalistów z zakresu medycyny.

Etap ten jest najważniejszy w całym procesie. Pozwala na wyekstrahowanie ukrytych trendów dzięki analizie ogromnych ilości danych w różnych konfiguracjach. W ramach takich analiz jesteśmy w stanie odkryć, że zestawienie kilku konkretnych parametrów, posiadających odpowiednie progi, pozwala przewidzieć możliwość powstania choroby z prawdopodobieństwem na poziomie np. 80%.

Jeśli wyniki będą statystycznie istotne, możemy stwierdzić, że znaleźliśmy zmienne wskazujące na ryzyko wystąpienia choroby. Wykorzystanie znajomości tych zmiennych umożliwi nam stworzenie systemu rekomendacji kolejności do badania.

Tworzenie algorytmu

Po przeprowadzeniu badań i weryfikacji wyników oraz po otrzymaniu komentarza od specjalistów medycyny, możemy zadecydować o kontynuacji prac (posiadamy dostatecznie dużo wiedzy), lub cofnięciu się do etapu zbierania danych. Jeśli nasze analizy okazały się trafne, przystępujemy do stworzenia modelu. W tym celu używamy wyżej wspomnianych zmiennych. Dalej badamy kombinacje zmiennych, które tłumaczą największy procent wariancji. To umożliwia nam wybranie najbardziej odpowiedniego algorytmu klasyfikującego.
W tym celu używamy zestawu narzędzi i metod uczenia maszynowego, które zostaną przedstawione w kontynuacji tego artykułu.

Tak stworzony moduł poddajemy testom. Ze względu na powagę dziedziny, w jakiej system rekomendacji ma działać, model musi zostać przetestowany z maksymalną dokładnością.

Mechanizm douczania modelu

Podczas działania aplikacji zdobywamy kolejne wyniki pozwalające na uszczegółowienie ”wiedzy” naszego modelu machine learning. System zbiera dane – wiemy, jakie osoby zostały skierowane na badania z wyższym poziomem pewności dot. wystąpienia choroby, mamy również wynik samego badania. Daje nam to informację będącą sprzężeniem zwrotnym całego układu. Model może się rozwijać wraz z czasem swojego działania. Nabywa wiedzy, która jest wykorzystywana do modyfikacji jego parametrów za pomocą mechanizmu douczania.

Po każdym procesie ponownego nauczania modelu należy przeprowadzać serię dokładnych testów. Nadzorowanie rezultatów po kolejnych etapach uczenia pozwala szybko diagnozować anomalie będące wynikiem uszkodzonych danych uczących bądź innych zjawisk, np. przeuczenia.

Mamy algorytm, co dalej

Stworzony przez nas model nie musi być osobnym programem, który obudowany jest w wiele dodatkowych funkcjonalności. Model machine learning należy potraktować jako samoistny serwis, którego funkcją jest jedynie podawanie wyniku na podstawie wprowadzonych danych pacjenta. Traktujemy go jako osobną aplikację, którą można swobodnie osadzić w architekturze mikrousług lub hexagonalnej.

Wydzielenie algorytmu do osobnego serwisu pozwala inżynierom na prowadzenie prac nad jego rozwojem bez potrzeby ingerencji w inne części systemu. Jeśli dana jednostka medyczna posiada już system kolejkowy, taki serwis może zostać zaimplementowany do działającego systemu. Aby serwis mógł porozumiewać się z innymi częściami aplikacji, wyposażamy go w interfejsy.

Interfejs wejściowy oczekuje wymaganego kompletu danych o pacjencie, na wyjściu zaś daje wynik w postaci prawdopodobieństwa wystąpienia choroby.

Po stronie systemu do zarządzania kolejką jest decyzja co zrobi z informacją o prawdopodobieństwie wystąpienia choroby.

Input Output System do zarządzania kolejką Usługa sprawdzająca prawdopodobieństwo wystąpienia choroby

Podsumowanie

Powyżej opisaliśmy model machine learning, który jest w stanie istotnie poprawić skuteczność wykrycia osteoporozy na wczesnym etapie. To świetny przykład, jak uczenie maszynowe może polepszać jakość życia przeciętnego człowieka, choćby z punktu widzenia medycyny.

Powyższa treść stanowi wstęp do miniserii na temat procesowania danych. W kolejnych artykułach opiszemy jak zacząć tego typu projekt. Podzielimy się naszym doświadczeniem zarówno z zakresu zbierania wymagań, użycia narzędzi, jak i całościowego podejścia do tworzenia tego typu modeli. Jeśli interesuje cię sztuczna inteligencja w biznesie, nasz cykl z pewnością dostarczy ci inspiracji.

Pamiętajmy, że prezentowane przez nas treści nie stanowią przepisu na stworzenie projektu. Jest to zbiór doświadczeń i dobrych praktyk którymi, jako firma zajmująca się na co dzień podobnymi problemami, chcemy się podzielić.

Artykuł opracowali developerzy z zespołu Data Processing & AI w 4soft: Michał Będkowski i Bartosz Roguski.

Autorzy

Michał Będkowski

Michał jest architektem oprogramowania i CTO firmy 4soft. Z wykształcenia robotyk, od 15 lat pracuje w branży tworzącej specjalistyczne oprogramowanie. Doświadczenie zdobywał pracując przy szerokim wachlarzu projektów, od aplikacji medycznych dla merck po tworzenie systemów do analizy danych w branży gier.

Bartosz Roguski
Bartosz to Python developer w 4soft. Sam nazywa siebie “grafomanem zakochanym w machine learning i self-learning”. Ukończył Neurobiologię I stopnia na Uniwersytecie Jagiellońskim.