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.
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
Lokalizacja aplikacji w procesie
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.
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.
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.
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.
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ą.
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.
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.
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.
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.