man, work, desk-597178.jpg

Model benchmarkowy – dlaczego go potrzebujesz i jak go stworzyć?

Model benchmarkowy ogólnie to model, który jest używany do porównania wydajności innych modeli. Może to być model dotychczas najlepszy na danym zbiorze i celem jest pobicie jego wyników przez autorów nowej architektury. Jednak w tym artykule mam na myśli prosty model, który sam tworzysz, zaczynając pracę nad nowym projektem, który będzie punktem odniesienia przy dalszych pracach.

Jaki powinien być benchmark

Aby spełnił swoje zadanie, model benchmarkowy musi spełnić kilka cech:

  • być bardzo łatwy w uruchomieniu,
  • być prosty w budowie i interpretacji, aby wiadomo było dokładnie, dlaczego zwraca dane wyniki,
  • jeśli wymaga treningu, powinien być bardzo szybki,
  • powinien być dość sensowny, dobrze dobrany do celu zadania i zwracać jak najlepsze wyniki.

Poniżej przedstawię kilka prostych sposobów na tworzenie benchmarków.

Trywialne modele z użyciem sklearn

Biblioteka scikit-learn w Pythonie, jak wszyscy wiemy, posiada mnóstwo użytecznych narzędzi do pracy w Machine Learningu, takich jak pokaźny zbiór algorytmów do klasyfikacji i regresji, zaimplementowane różne metryki, narzędzia do preprocessingu danych, czy niezwykle uniwersalny moduł Pipeline.

Posiada jednak również dwie proste klasy, które mogą posłużyć do stworzenia trywialnych benchmarków:

Dummy Regressor

Model DummyRegressor zwraca stałą wartość predykcji. Można wybrać średnią, medianę lub kwantyl ze zbioru treningowego lub dowolną stałą.

Dummy Classifier

Model DummyClassifier dokonuje trywialnej klasyfikacji. Zwraca najczęstszą klasę ze zbioru treningowego, losową wartość według rozkładu wielomianowego ważonego częstościami klas ze zbioru treningowego, losową wartość z rozkładu jednostajnego na klasach lub stałą klasę wskazaną przez użytkownika.

Te dwie klasy modeli, mimo swej prostoty, mogą być niezwykle użyteczne, aby uzyskać pierwsze wartości metryk, do których będziemy porównywać nasz docelowy model.

Regresja

Dobrym pomysłem na pierwszy benchmark, w przypadku uczenia nadzorowanego, gdzie mamy ustrukturyzowane (czyli tabelaryczne) dane, jest regresja liniowa (lub logistyczna, dla klasyfikacji).

Zaskakująco często ta najprostsza metoda statystyczna zwraca całkiem dobre wyniki, które czasem są trudne do pobicia nawet przez bardziej wyrafinowane algorytmy, jak sieci neuronowe lub XGBoost (w takich sytuacjach jest to z reguły informacja, że pewnie należy zastosować Data Centric Approach).

Pamiętajmy, że jeśli chcemy interpretować wagi regresji jako skala ważności cech, dane powinny być znormalizowane.

Implementacja intuicyjnych heurystyk

Jeśli mamy do czynienia z praktycznym zastosowaniem naszych algorytmów, często ich celem jest poprawienie lub automatyzacja tego, co w danym momencie wykonuje człowiek.

Przykłady można mnożyć, np.:

  • ocena zdolności kredytowej klienta banku,
  • wyznaczanie optymalnej dawki leku dla pacjenta,
  • rekomendacje leczenia na podstawie objawów,
  • przewidywanie wielkości sprzedaży danego produktu,
  • rekomendacja produktu dla klienta,
  • przewidywanie opóźnienia pociągów.

W każdych z tych sytuacji ekspert na podstawie swojej wiedzy (mniej lub bardziej zaawansowanej) i doświadczenia podejmuje jakieś decyzje, które mogą być wspomagane lub zastąpione przez algorytmy uczenia maszynowego.

Do zbudowania prostej heurystyki kluczowe jest zrozumienie, na jakiej podstawie obecnie człowiek podejmuje decyzję. Oczywiście w większości przypadków proces decyzyjny jest złożony i nieoczywisty, jednak osoba budująca model ML powinna móc się dowiedzieć, na jakie aspekty człowiek najczęściej zwraca uwagę. Tych czynników z reguły jest najwyżej kilka-kilkanaście.

Przykładowo: sprzedawca rekomendujący produkt dla klienta zapewne z reguły proponuje to, co się obecnie najczęściej sprzedaje, a także jakie produkty kupili klienci o podobnych cechach do obecnego klienta.

Zrozumienie sposobu działania człowieka pozwoli nam zbudować pierwszy algorytm, który będzie wprost implementował pewne reguły stosowane przez człowieka. Będzie to model prosty do zrozumienia, a zarazem może być bardzo mocny w predykcji.

Użycie niewielkiego podzbioru wszystkich cech

Jeśli wejściem do docelowego modelu mają być dane z wielu miejsc, być może przechowywane w wielu tabelach, dobrym pomysłem będzie rozpoczęcie od użycia tylko kilku podstawowych cech, najlepiej przechowywanych w jednej tabeli (pamiętajmy, że na produkcji nasz model musi wyliczać cechy na bieżąco, więc każde łączenie różnych źródeł danych może być bardzo kosztowne).

Dzięki temu model będzie mógł być dużo mniejszy i szybszy, a także prostszy w interpretacji.

Benchmarki w przetwarzaniu języka naturalnego (NLP)

Poza dość uniwersalnymi zagadnieniami z ML-a, których dotyczą wcześniejsze metody, chciałbym wyodrębnić bardziej specyficzne zastosowanie, jakim jest NLP. Jeśli mamy tutaj do czynienia z klasyfikacją lub regresją, możemy użyć sposobów wspomnianych powyżej.

Jednak w NLP mamy też być inne rodzaje zadań, dla których mogą nie sprawdzić się powyższe sposoby. Przykładowo:

  1. Analiza sentymentu.
  2. Streszczanie tekstów.
  3. Klasyfikacja rodzaju dokumentu.

Niestety każdy z tych problemów może wymagać innego algorytmu heurystycznego. Tutaj podam jednak kilka sposobów, aby Cię zainspirować:

Ad. 1. Benchmarkiem może być model, który wyłapuje pewne słowa kluczowe. Wystarczy zbudować zbiór np. pozytywnych i negatywnych przymiotników, a następnie wyszukiwać je w analizowanym tekście, by przybliżyć, czy dana opinia jest pozytywna, czy negatywna.

Ad. 2. Jako benchmarkowe streszczenie często bierze się po prostu pierwsze kilka zdań ze streszczanego tekstu.

Ad. 3. Tutaj (jak również w wielu innych zagadnieniach z NLP) dobrym benchmarkiem będą algorytmy oparte o częstość występowania słów, np. TF-IDF (łatwe do użycia w Sklearn).

Dlaczego w ogóle potrzebuję benchmarku?

Przy lekturze poprzednich sekcji mogła pojawić się u Ciebie wątpliwość – dlaczego właściwie potrzebuję modelu benchmarkowego? Czy nie mogę od razu użyć bardziej zaawansowanych modeli, aby “wymaksować” metryki?

Z mojego doświadczenia wynika, że z reguły jest to błędne podejście.

Po pierwsze, kiedy mamy projekt z Machine Learningu i jakiś zakładany cel (przed pracą trzeba znać KPI, które chcesz osiągnąć), kluczowe jest zorientowanie się, czy jest on łatwy, czy trudny w osiągnięciu. Tak naprawdę dopiero po zbudowaniu pierwszych modeli jesteśmy w stanie się zorientować, ile czasu potrzebujemy, by zrealizować projekt.

Po drugie, pamiętaj, że w praktycznym ML-u najważniejsze nie jest osiągnięcie jak najwyższych metryk. Może to się wydawać dziwne, jednak przy wdrożeniu modelu są dziesiątki różnych innych czynników, które decydują o tym, który model jest lepszy (np. czas treningu, czas predykcji, czas wyliczania cech, czy interpretowalność). Z biznesowego punktu widzenia nie jest tak istotne, czy “pod spodem” jest bardzo zaawansowany algorytm State-Of-The-Art, tylko czy spełnione są założenia biznesowe.

Trzeci powód – benchmark służy jako punkt odniesienia dla bardziej zaawansowanych modeli. Uwierz mi, że jeśli zaczniesz od głębokiej sieci neuronowej, możesz być potem mocno zaskoczony, gdy ktoś Ci pokaże, że nie działa ona lepiej niż regresja liniowa. Lepiej to sprawdzić samemu.

Ostatnim powodem jest to, że benchmark przydaje się to testowania pipelinów produkcyjnych, gdzie chcesz szybko dostać jakieś wyniki, niekoniecznie najwyższej jakości, aby sprawdzić, czy cały system dobrze działa.

Podsumowanie

W tym wpisie podzieliłem się z Tobą moim podejściem do tworzenia benchmarków. A jakie Ty masz doświadczenia z benchmarkami? Czy stosujesz jakieś inne podejścia? A może nie zgadzasz się z czymś, co opisałem? Daj mi koniecznie znać w komentarzu!

Tworzenie benchmarków jest jednym z 10 kroków do budowy skutecznego modelu AI. Chcesz poznać pozostałe? Zachęcam Cię do pobrania darmowego e-booka.