Najczęstsze błędy w projektach machine learning i jak ich uniknąć na starcie

0
40
4/5 - (2 votes)

Nawigacja:

Po co ten model? Najczęstszy błąd: brak jasno zdefiniowanego problemu

Z biznesowego „chcę AI” do konkretnego pytania

Typowy start projektu machine learning wygląda tak: ktoś z zarządu mówi „zróbmy coś z AI”. Zespół techniczny kiwa głowami, powstaje repozytorium, pierwsze notebooki… i po paru tygodniach nikt już dokładnie nie wie, po co model ma w ogóle istnieć. To klasyczny błąd: brak jasno zdefiniowanego problemu decyzyjnego.

Model ML nie jest ozdobą ani demonstratorem technologii. To narzędzie do podejmowania bardzo konkretnej decyzji, w bardzo konkretnym momencie, na podstawie dostępnych sygnałów. Różnica między ogólnym „użyjmy AI w sprzedaży” a precyzyjnym pytaniem typu „których klientów powinniśmy zadzwonić w ciągu tygodnia, aby zwiększyć ich szansę na przedłużenie umowy” jest gigantyczna. Od tej różnicy zależy:

  • jakie dane są potrzebne,
  • jaką przyjmiesz metrykę jakości,
  • jak będzie wyglądać integracja modelu z procesem biznesowym.

Dlatego pierwszy moment, w którym projekt machine learning może pójść w złą stronę, to etap rozmów z biznesem. Gdy padają sformułowania typu „chcemy jakiś model rekomendacji” lub „potrzebujemy scoringu klientów” – to jeszcze nie jest definicja problemu. To jedynie luźne hasło. Dopiero gdy zamienisz je na konkretne, mierzalne pytanie, możesz w ogóle rozważać sens budowy systemu ML.

Pomaga w tym prosta mapa: są cztery podstawowe typy zadań ML, które najczęściej pojawiają się w biznesie:

  • klasyfikacja – podejmujesz decyzję „tak/nie” albo przypisujesz do jednej z kilku klas (np. czy transakcja to fraud, czy klient odejdzie w ciągu 30 dni),
  • regresja – przewidujesz wartość liczbową (np. ile klient wyda w najbliższym miesiącu, jaka będzie cena nieruchomości),
  • ranking / scoring – sortujesz obiekty pod kątem atrakcyjności (np. które leady są najbardziej perspektywiczne do kontaktu handlowego),
  • rekomendacje – proponujesz użytkownikowi produkty/treści, które z największym prawdopodobieństwem go zainteresują.

Kiedy podczas rozmowy z interesariuszami udaje się przełożyć „potrzebujemy AI” na któryś z tych typów, od razu robi się jaśniej. Da się wtedy powiedzieć: „Ok, to brzmi jak klasyfikacja binarna, a decyzją jest: kontaktować się z klientem czy nie”. To już jest punkt zaczepienia dla całego projektu.

Dobre i złe definicje problemu ML

Zobrazujmy to na przykładach. Poniżej widać kilka typowych „złych” definicji problemu i ich przerobioną, sensowną wersję.

„Zła” definicjaLepsza, konkretna definicja
„Chcemy model churnu klientów.”„Chcemy przewidzieć, którzy aktywni klienci nie przedłużą umowy w ciągu najbliższych 30 dni, aby dział retention mógł zadzwonić do 10% najbardziej zagrożonych.”
„Potrzebujemy systemu fraud detection.”„Chcemy przewidzieć, które nowe transakcje kartowe mają wysokie ryzyko fraudu, żeby je oznaczyć do dodatkowej weryfikacji w czasie poniżej 1 sekundy.”
„Zróbmy rekomendacje produktów.”„Chcemy dla każdego klienta strony głównej wyświetlić 5 produktów z największym prawdopodobieństwem zakupu podczas tej samej wizyty.”

Różnica jest subtelna w słowach, ale ogromna w konsekwencjach. W dobrej definicji pojawia się:

  • kto jest jednostką przewidywania (klient, transakcja, sesja),
  • co dokładnie chcemy przewidzieć (odejście, fraud, zakup),
  • jaki horyzont czasu nas interesuje (30 dni, ta sama wizyta),
  • co realnie zrobimy z wynikiem (zadzwonimy, oznaczymy transakcję, pokażemy rekomendacje),
  • ograniczenia techniczne (czas odpowiedzi, limit liczby obsługiwanych przypadków).

Bez tego model będzie „liczył coś tam”, ale jego praktyczna wartość pozostanie mętna. I wtedy szybko pada zdanie, którego boi się każdy data scientist: „te predykcje są jakoś nieprzydatne”.

Co musi być policzalne, aby model miał sens

Kolejny częsty błąd na starcie projektów machine learning to brak jasności co do tego, jaka jest jednostka przewidywania. Brzmi abstrakcyjnie, ale to bardzo prozaiczne pytanie: model ma robić prognozę „na czym dokładnie” – na kliencie, na transakcji, na produkcie, na sesji użytkownika?

Jeśli model churnu ma przewidywać odejście klienta, to jednostką przewidywania jest klient na określony dzień lub okres (np. „klient 123 na dzień 2023-01-01”). Jeśli analizujesz fraudy, jednostką przewidywania jest zwykle pojedyncza transakcja w momencie jej autoryzacji. Przy rekomendacjach – użytkownik w konkretnej sesji. Gdy to się pomiesza, powstają sprzeczności w przygotowaniu danych i etykiet, a później trudne do naprawy błędy w ocenie modelu.

Drugi element to horyzont czasowy predykcji. Czy chcesz przewidzieć zdarzenie w ciągu 5 minut, 1 dnia, 30 dni, roku? Dla klienta e-commerce „nie wróci w ciągu 7 dni” oznacza coś zupełnie innego niż „nie wróci w ciągu 6 miesięcy”. Ten wybór wpływa na to, jak budujesz etykiety, jaką strukturę ma zbiór treningowy i jak oceniasz sukces modelu.

Trzeci składnik to dostępność danych w momencie predykcji. To, że masz historyczne dane, nie znaczy, że będziesz mieć identyczne informacje, gdy model będzie biegał na produkcji. Jeżeli etykietę budujesz z użyciem pól dostępnych dopiero po fakcie, wprowadzasz do modelu wiedzę z przyszłości. To typowy błąd powodujący nieuczciwie wysokie wyniki w walidacji.

Dobrym filtrem na starcie jest pytanie: „Czy jesteśmy w stanie jednoznacznie zapisać etykietę 0/1 lub wartość liczbową dla każdej jednostki przewidywania, używając tylko informacji, która byłaby dostępna w momencie podejmowania decyzji?”. Jeżeli nie – trzeba przeprojektować problem albo cofnąć się do etapu definicji.

Czy problem da się rozwiązać danymi

Nie każdy atrakcyjny z biznesowego punktu widzenia pomysł nadaje się na problem machine learning. Czasem zbyt słaba lub zbyt nieregularna sygnalizacja sprawia, że model „nie ma czego się nauczyć”. Kilka praktycznych pytań, które pomaga zadać na początku:

  • Czy w danych historycznych widać względnie stabilne wzorce powiązane z celem? (np. pewne zachowania poprzedzają churn, pewne cechy transakcji korelują z fraudem)
  • Czy mamy wystarczającą liczbę przykładów zarówno pozytywnych, jak i negatywnych? (problem przy bardzo rzadkich zdarzeniach, np. pojedyncze fraudy)
  • Czy proces generowania danych jest w miarę stały w czasie, czy wszystko zmienia się co miesiąc?
  • Czy rozumiemy, jak powstają etykiety i czy nie są obciążone systematycznym błędem? (np. fraud oznaczany tylko wtedy, gdy klient zadzwoni z reklamacją)

Jeżeli na większość z tych pytań odpowiedź brzmi „nie”, najrozsądniejszym krokiem bywa zatrzymanie projektu albo jego gruntowne przeprojektowanie. Czas spędzony na uczciwej analizie wykonalności to inwestycja: lepiej zakończyć projekt po tygodniu niż po pół roku walki z opornymi danymi i rozczarowanymi interesariuszami.

Prosty szablon definicji problemu ML

Dobre usystematyzowanie na starcie ratuje wiele godzin. Świetnie sprawdza się prosty szablon:

„Chcemy przewidzieć X, na podstawie Y, aby podjąć decyzję Z.”

Przykłady:

  • Chcemy przewidzieć czy klient odejdzie w ciągu 30 dni (X), na podstawie jego historii zakupów i interakcji z aplikacją z ostatnich 90 dni (Y), aby zdecydować, do którego 10% klientów zadzwoni dział utrzymania (Z).
  • Chcemy przewidzieć czy transakcja jest fraudem (X), na podstawie jej parametrów i profilu klienta w momencie autoryzacji (Y), aby zdecydować, czy przepuścić ją automatycznie, czy skierować do dodatkowej weryfikacji (Z).

Jeśli zespołowi nie udaje się wypełnić tego zdania w sposób zrozumiały dla osoby spoza IT, to mocny sygnał, że projekt zaczyna się od złej strony.

Napis FAIL na ziarnistym, czarno-białym tle
Źródło: Pexels | Autor: Ann H

Dane: za mało, za brudne, zbyt optymistycznie ocenione

Zbieranie i zrozumienie danych przed pierwszym notebookiem

Najczęstsze błędy w projektach machine learning rzadko mają źródło w „złym algorytmie”. Zazwyczaj wynikają z nieporozumień wokół danych. Dużo zespołów popełnia tę samą pomyłkę: zaczyna od importu Scikit-Learn i budowy pierwszego modelu, zamiast od audytu źródeł danych.

Rozsądna praktyka to traktowanie pierwszej fazy projektu jako śledztwa detektywistycznego. Zamiast od razu trenować model, warto najpierw ustalić:

  • jakie systemy generują dane (CRM, ERP, aplikacja mobilna, strona WWW, zewnętrzne API),
  • kto jest data ownerem każdego źródła – konkretną osobą lub zespołem, który rozumie, co znaczą kolumny,
  • jak wyglądają procesy, które za tym stoją (np. kiedy status zamówienia zmienia się na „zakończone”, kiedy klient dostaje etykietę „aktywny”).

Bez tego łatwo przeszacować jakość i przydatność danych. Zdarza się, że kolumna „data_aktywacji” ma w praktyce kilka różnych znaczeń w zależności od kanału sprzedaży, albo że status „closed” w systemie oznacza trzy różne typy zakończenia sprawy. Model będzie bez mrugnięcia okiem uczył się takich niespójności, ale ich nie zrozumie – jego predykcje będą przez to mniej stabilne i trudniejsze do interpretacji.

Dobrym nawykiem jest przygotowanie spisu źródeł danych w formie prostej tabeli:

ŹródłoZakres danychData ownerUwagi dot. jakości
CRMklienci, historia kontaktówManager CRMbrakujące pola telefonu, różne definicje „aktywnego” klienta
System płatnościtransakcje, chargebackiFinanseczęste korekty po kilku dniach, opóźnienia w oznaczaniu fraudów
Logi aplikacjizdarzenia w aplikacji mobilnejTeam Mobilezmiany schematów eventów w czasie, brak spójnego user_id

Taka prosta lista zmniejsza ryzyko, że po miesiącu prac ktoś odkryje „jeszcze jedno, ważniejsze źródło”, które całkowicie zmienia obraz danych albo ujawnia błędy w dotychczasowych wnioskach.

Typowe problemy z jakością danych

Prawie każdy projekt ML przechodzi przez etap „te dane nie wyglądają tak ładnie, jak myśleliśmy”. Braki i niespójności są normą, nie wyjątkiem. Warto więc na starcie nastawić się na szukanie i porządkowanie typowych problemów:

  • brakujące wartości – całe kolumny z dużym odsetkiem pustych pól, braki grupujące się w określonych segmentach (np. małe firmy nigdy nie podają NIP),
  • niespójne jednostki – złotówki i grosze, różne strefy czasowe, centymetry i metry,
  • duplikaty – powielone rekordy transakcji, zdublowani klienci, podwójne logi,
  • błędne etykiety – klient oznaczony jako „aktywny”, choć od dawna nie korzysta; transakcje „fraud” oznaczone dopiero po miesiącu.

Szczególnie groźnym przeciwnikiem jest data leakage, czyli wyciek informacji z przyszłości do danych treningowych. W praktyce bywa „ukryty” w kolumnach, które z pozoru wydają się całkiem niewinne. Klasyczny przykład:

Ukryty wyciek informacji w „niewinnych” kolumnach

Klasyczny scenariusz to kolumna typu „status_sprawy” lub „data_zamknięcia”. Przy prognozowaniu, czy klient odejdzie, czasem do cech trafia pole „data_dezaktywacji” – bo „ładnie koreluje z churnem”. Nic dziwnego, że koreluje: w momencie predykcji ta data po prostu nie istnieje. Model dostaje więc luksusową podpowiedź z przyszłości i osiąga kosmiczne wyniki na walidacji, które rozsypują się w produkcji.

Inny przykład: projektujesz model rekomendujący limit kredytowy i używasz w cechach informacji o rzeczywistym poziomie spłat z kolejnych miesięcy. Z punktu widzenia kodu wszystko się zgadza, ale z punktu widzenia czasu – model widzi zachowania, które wydarzą się dopiero po przyznaniu limitu. Na papierze jest genialny, w realu – losowy.

Dobrym nawykiem jest proste ćwiczenie myślowe: dla każdej kolumny w danych zadać sobie pytanie „czy w momencie predykcji system naprawdę to już wie?”. Jeżeli odpowiedź brzmi „nie” lub „to zależy”, trzeba taką cechę wyrzucić albo odpowiednio przesunąć w czasie (np. obciąć dane do dnia decyzji kredytowej).

Ocena ilości danych a złudzenie „mamy tego mnóstwo”

Często w pierwszej rozmowie pada zdanie: „Mamy miliony rekordów, danych na lata!”. Po bliższym przyjrzeniu się okazuje się jednak, że:

  • 80% rekordów to ruch techniczny lub szum (np. pingowania API, wewnętrzne testy, spam),
  • zdecydowana większość przykładów pochodzi z ostatnich tygodni, a starsze dane mają zupełnie inną strukturę,
  • etykiety występują tylko dla części przypadków (np. fraud oznaczony tylko, gdy klient zgłosi reklamację).

W efekcie liczba użytecznych przykładów mocno topnieje. Nagle zamiast miliona „prawdziwych” transakcji fraudowych zostaje kilkaset, a zamiast głębokiej historii zachowań klientów – pół roku chaotycznych logów.

Dobrym podejściem jest policzenie kilku prostych rzeczy na samym początku:

  • liczby unikalnych jednostek przewidywania (klientów, sesji, transakcji) z poprawnymi etykietami,
  • liczby pozytywnych i negatywnych przykładów w czasie (np. w podziale na miesiące),
  • procentu braków w kluczowych polach, od których będzie zależeć jakość cech.

Takie „policzenie na kolanie” często ratuje przed budowaniem zbyt ambitnej architektury na dane, które ledwo wystarczą do prostego baseline’u.

Konserwatywne założenia jakościowe zamiast hurraoptymizmu

Na starcie wszyscy lubią wierzyć, że dane są „wystarczająco dobre” i „jak coś, to się doczyści w locie”. Tylko że każdy brak, każde przesunięcie w czasie, każdy błąd etykiety kumulują się i w pewnym momencie przekraczają granicę, za którą model uczy się głównie zakłóceń. Lepiej zakładać wersję pesymistyczną i później mile się zaskoczyć niż odwrotnie.

Przy pierwszym przeglądzie możesz wprost założyć sobie kilka konserwatywnych reguł, np.:

  • kolumny z ponad 50% braków w kluczowych segmentach traktujemy jako kandydatów do usunięcia, a nie jako „da się zainterpolować”,
  • okresy, w których proces biznesowy zmienił się radykalnie (np. nowy regulamin, zmiana systemu billingowego), rozważamy jako osobne zbiory, a nie mieszamy w ciemno z resztą danych,
  • wszystkie etykiety, które pojawiają się z dużym opóźnieniem (np. chargebacki po kilku miesiącach), wymagają specjalnego traktowania w konstrukcji zbioru treningowego.

Zespół szybciej wtedy zobaczy, czy „dziury” da się załatać sensownymi heurystykami, czy konieczna jest zmiana definicji problemu lub dodatkowy strumień danych.

Kafle Scrabble z napisem Fail but do not quit na białym tle
Źródło: Pexels | Autor: Brett Jordan

Błąd w projektowaniu zestawów train/validation/test i wyciek informacji

Losowe dzielenie danych przy problemach czasowych

Jednym z najczęstszych grzechów jest losowe dzielenie danych na train/test w problemach, w których czas ma krytyczne znaczenie: prognozy popytu, churn, zachowania użytkowników, ryzyko kredytowe. Jeżeli w takim przypadku zrobisz zwykły train_test_split(random_state=42), to tak jakbyś uczył model na przyszłości, a testował na przeszłości.

W prawdziwym świecie model zawsze działa „do przodu”: widzi historię do dziś i ma przewidzieć jutro. Dlatego w problemach sekwencyjnych i czasowych podstawowym ustawieniem powinno być dzielenie wzdłuż osi czasu. Przykładowo:

  • trening: dane do końca czerwca,
  • walidacja: lipiec–sierpień,
  • test: wrzesień–październik.

Dzięki temu model jest oceniany w warunkach zbliżonych do produkcyjnych, a ryzyko ukrytego wycieku z przyszłości dramatycznie maleje. Jeśli wyniki nagle stają się znacznie gorsze niż przy losowym podziale – to dobry sygnał, że projekt dotąd patrzył na rzeczywistość zbyt optymistycznie.

Leakage między klientami, sesjami i transakcjami

Nawet jeśli czas został zaprojektowany poprawnie, wyciek może pojawić się „poziomo”, między jednostkami przewidywania. Typowy scenariusz: budujesz model churnu na poziomie klienta, ale zbiór dzielisz na train/test na poziomie pojedynczych zdarzeń (np. sesji). W rezultacie ten sam klient trafia częściowo do treningu, a częściowo do testu.

Model w takiej sytuacji uczy się indywidualnych wzorców klienta (np. ID zakodowane w cechach, charakterystyczne zachowania), a potem błyszczy na testowym secie, bo w praktyce „rozpoznaje znajomego”. Na produkcji trafi jednak na zupełnie nowych ludzi i magia pryska.

Prosta zasada: dziel według jednostki przewidywania. Jeżeli celem jest klient, to klient nie może pojawić się jednocześnie w train i w test. Jeżeli celem jest produkt, to cały jego „lifecycle” powinien siedzieć w jednej części danych. To bywa niewygodne przy implementacji, ale bardzo oszczędza nerwy później.

Cross‑validation bez świadomości struktury danych

Krzyżowa walidacja (k‑fold CV) często bywa stosowana „z automatu”, bez refleksji nad strukturą danych. Tymczasem w wielu projektach to proszenie się o leakage. Przykłady:

  • w danych masz wielu klientów, z których każdy generuje dziesiątki transakcji,
  • dla każdego pacjenta występuje kilka badań w czasie,
  • dla każdej firmy – miesięczne raporty.

Przy zwykłym k‑foldzie próbki z tego samego klienta lub pacjenta trafiają zarówno do treningu, jak i walidacji. Wynik CV bywa wtedy nadmiernie optymistyczny, a model „nie czuje” prawdziwej różnorodności populacji.

Rozsądnym krokiem jest użycie wariantów grupujących, np. GroupKFold lub walidacji blokowej w czasie, gdzie grupą jest klient, pacjent czy firma. Walidacja staje się bardziej wymagająca, ale w zamian dostajesz estymator jakości znacznie bliższy rzeczywistości produkcyjnej.

Test set jako „święta” próbka, a nie poligon doświadczalny

Kolejna pułapka: nadmierne „podglądanie” wyników na teście. Zdarza się, że zespół kilka–kilkanaście razy optymalizuje cechy i hiperparametry, za każdym razem sprawdzając wynik na test secie. Formalnie train/test są rozdzielone, ale w praktyce test zaczyna pełnić funkcję rozszerzonej walidacji, a cały proces jest dostrojony do konkretnego zbioru i jego szumu.

Bezpieczniejszy schemat to:

  1. odłożenie test setu na bok i zamrożenie go na czas eksperymentów,
  2. iterowanie na podziale train/validation (np. z użyciem CV lub walidacji czasowej),
  3. po zakończeniu prac – pojedyncze, „ceremonialne” uruchomienie oceny na teście.

Taki rytuał zmusza zespół do opierania decyzji na walidacji, a nie na „łapaniu kolejnych dziesiątych procenta” na znanym już zbiorze testowym.

Segmentacja danych a sprawiedliwa ocena modelu

Przy projektowaniu podziałów łatwo przeoczyć jeszcze jeden aspekt: różnorodność segmentów. Jeśli model ma działać na różnych rynkach, kanałach sprzedaży czy typach klientów, zbiór testowy powinien te grupy realistycznie odzwierciedlać. Inaczej oceniasz model głównie na „łatwym” segmencie, a trudniejsze przypadki odkładasz w nieświadomość.

Prostym zabiegiem jest przygotowanie tabeli, która pokazuje udział kluczowych segmentów w train/validation/test. Jeżeli widzisz, że np. nowy kanał sprzedaży prawie nie występuje w treningu, a dominuje w teście, masz dwie opcje: osobny model dla tego kanału lub dodatkowe dosampling danych. O wiele lepiej, gdy wyjdzie to podczas projektowania splitu niż po wdrożeniu.

Stara maszyna do pisania z napisem Machine Learning na kartce
Źródło: Pexels | Autor: Markus Winkler

Złe lub bezsensowne metryki: gdy model optymalizuje nie to, co trzeba

Accuracy przy danych niezbalansowanych

Najbardziej klasyczna pułapka: obserwujesz problem z rzadkim zdarzeniem (fraud, awaria, churn), a mimo to za główną metrykę przyjmujesz accuracy. Jeżeli fraudów jest 1%, model, który zawsze mówi „brak fraudu”, osiąga 99% accuracy i na papierze wygląda świetnie. Biznes jednak nie dostaje ani jednej poprawnej detekcji.

Przy silnie niezbalansowanych danych metryki typu precision, recall, F1 lub metryki obszaru (AUC‑PR zamiast AUC‑ROC) dużo lepiej oddają realną użyteczność modelu. Często bardziej sensowne jest też raportowanie wyników przy konkretnych progach decyzyjnych (np. „dla 5% najwyższych skorów wykrywamy X% fraudów”) niż uśredniona metryka po całej populacji.

ROC AUC w świecie limitów operacyjnych

ROC AUC jest popularne, bo ładnie wygląda w prezentacji i jest niezależne od progu. Problem w tym, że w wielu zastosowaniach operacyjnych system działa w bardzo wąskim zakresie czułości. Przykładowo: dział windykacji może zadzwonić najwyżej do 3% klientów miesięcznie, a manualna weryfikacja może objąć najwyżej 1% transakcji.

W takich warunkach liczy się jakość modelu właśnie w tym wąskim „ogonku” rozkładu – a nie to, jak radzi sobie przy progach, których nigdy nie użyjesz. Dlatego przy projektach z ograniczonym capacity warto patrzeć na:

  • precision@k% – precyzję wśród top k% najwyżej ocenionych przypadków,
  • recall@k% – jaki odsetek wszystkich pozytywów wychwytujesz, patrząc tylko na top k%,
  • krzywe „lift” i „gain”, które pokazują, jak bardzo model koncentruje pozytywne przypadki w górnej części rankingów.

Takie metryki dużo łatwiej powiązać z realnymi ograniczeniami operacyjnymi działu sprzedaży, windykacji czy fraud.

Średni błąd regresji bez związku z decyzją biznesową

Przy modelach regresyjnych typową domyślną metryką jest MSE lub RMSE. Same w sobie mówią niewiele: „średni błąd to 4,7” – i co z tego wynika? Dopiero gdy osadzisz błąd w kontekście decyzji, zyskujesz sens.

Załóżmy, że prognozujesz popyt. Dla magazynu nadwyżka o 10 sztuk to niewielki koszt, ale niedoszacowanie o 10 może oznaczać niewysłane zamówienia. Średnia z tych błędów może wyglądać fajnie, a mimo to strategia jest dla firmy nieoptymalna. W takim wypadku metryki powinny lepiej odzwierciedlać asymetrię kosztów, np.:

  • ważony błąd, gdzie niedoszacowania są karane mocniej niż przeszacowania,
  • prosta symulacja kosztu / zysku przy określonej polityce zamawiania (np. wyliczenie średniego kosztu magazynowania i utraconej sprzedaży).

Model może mieć gorsze RMSE, ale lepszy wynik finansowy – i z perspektywy biznesu to on jest zwycięzcą.

Metryki techniczne oderwane od „use case’u”

Często ustalenie metryk kończy się na tym, co zwraca biblioteka ML albo co jest standardem w zespole. Tymczasem punkt wyjścia powinien brzmieć: co konkretnie system ma zmienić w decyzjach ludzi lub maszyn?

Jeśli model ma selekcjonować leady do działu sprzedaży, bardziej interesuje cię:

  • ile dodatkowego przychodu generuje top 10% leadów wskazanych przez model,
  • jak bardzo poprawia się conversion rate w porównaniu z dotychczasowym sposobem priorytetyzacji.

Jeśli model ma filtrować spam zgłoszeń do supportu, liczy się liczba ręcznie obsłużonych zgłoszeń, które można było bezpiecznie zautomatyzować, oraz odsetek fałszywych blokad. Tego nie pokaże sama AUC; potrzebna jest metryka powiązana z procesem, choćby prosta: „czas pracy konsultantów zaoszczędzony w tygodniu”.

Brak rozbicia metryk na kluczowe segmenty

Jedna liczba to za mało: metryki globalne vs. metryki per segment

Na poziomie slajdu kusi, żeby mieć jedną, piękną liczbę: „nasz model ma AUC = 0,87”. Problem zaczyna się wtedy, gdy ta liczba uśrednia rzeczywistości, które diametralnie się od siebie różnią. Model może świetnie działać na dużych, stabilnych klientach, a kompletnie gubić się przy małych firmach czy nowych użytkownikach – a średnia nadal wygląda przyzwoicie.

Prosty krok, który potrafi uratować projekt, to policzenie metryk osobno dla kilku kluczowych segmentów, np.:

  • nowi vs. powracający użytkownicy,
  • małe vs. duże firmy,
  • różne kraje lub regiony,
  • różne kanały pozyskania (organik, płatne kampanie, partnerzy).

Często dopiero takie rozbicie ujawnia, że np. recall w jednym segmencie spada dramatycznie, choć ogólna metryka wygląda „zielono”. Z biznesowego punktu widzenia może być ważniejsze, by model był stabilny we wszystkich kluczowych segmentach, niż by bił rekordy średniej AUC.

Asymetria ryzyka i różne priorytety interesariuszy

Nie każdy dział w firmie patrzy na metryki tak samo. Dla fraudu kilka fałszywych alarmów jest akceptowalne, jeśli prawdziwe fraudy są łapane skutecznie. Dla obsługi klienta każdy niepotrzebnie zablokowany „niewinny” klient jest problemem wizerunkowym. Gdy oba te światy łączy jeden model, konflikt priorytetów jest nieunikniony.

Tu przydaje się świadome projektowanie zestawu metryk: jedna niech odzwierciedla podejście ostrożne (np. bardzo wysoka precision), druga – ofensywne (wysoki recall). Dopiero patrząc na obie strony równocześnie można sensownie rozmawiać o kompromisie. Czasem prowadzi to do naturalnej decyzji o rozdzieleniu zadania na dwa modele lub dwa różne progi decyzyjne dla różnych zastosowań.

Metryki stabilności i „zdrowia” modelu

Model, który ma świetną metrykę na starcie, ale szybko się „psuje”, jest jak samochód, który genialnie przyspiesza, ale psuje się co tydzień. Same metryki jakości predykcji (AUC, F1, RMSE) nie mówią nic o tym, jak model zachowuje się w czasie i w kontakcie z kolejnymi porcjami danych.

Przy projektach, które mają żyć dłużej niż kilka tygodni, przydają się dodatkowe wskaźniki:

  • stabilność rozkładu skorów – czy rozkład predykcji nie przesuwa się nagle z miesiąca na miesiąc,
  • drift cech – miary pokazujące, jak bardzo zmienił się rozkład wejściowych zmiennych między treningiem a produkcją,
  • stabilność rangowa – czy ranking top-k klientów/transakcji nie „skacze” dramatycznie przy niewielkich zmianach danych.

Tego typu metryki często wychodzą poza klasyczne „score z walidacji”, ale to one decydują, czy model jest przewidywalnym elementem procesu, czy kapryśnym eksperymentem, którego wszyscy się boją.

Metryki „proxy”, które żyją własnym życiem

Czasem prawdziwego celu nie da się mierzyć bezpośrednio albo jest odłożony w czasie. Wtedy zespoły sięgają po metryki zastępcze (proxy). Dla satysfakcji klienta – liczba kliknięć. Dla jakości leadów – odsetek otwartych maili. Dla produktywności handlowca – liczba wykonanych połączeń.

Nie ma w tym nic złego, dopóki regularnie sprawdzasz, czy związek między proxy a celem nadal istnieje. Zdarza się bowiem, że model lub ludzie nauczą się „grać pod metrykę”: optymalizują kliknięcia, a nie prawdziwą sprzedaż. Jeżeli nie ma okresowego „uziemienia” mierników proxy w twardym wyniku biznesowym, projekt zaczyna dryfować.

Brak metryk z perspektywy użytkownika końcowego

Zespół data science może być dumny z metryk, produkt – z nowego modułu, a użytkownik końcowy wciąż będzie niezadowolony. Dla konsultanta w call center liczy się, czy podpowiedzi modelu są zrozumiałe i czy ułatwiają rozmowę, a nie czy F1 wzrosło z 0,71 do 0,74.

Dobrą praktyką jest uzupełnienie zestawu metryk o te „miękkie”, ale konkretne z punktu widzenia użytkownika, np.:

  • średni czas obsługi sprawy po wdrożeniu modelu,
  • odsetek sugestii modelu, które użytkownik akceptuje, a nie ignoruje,
  • ocena użyteczności funkcji wspieranej modelem w krótkiej ankiecie.

Takie wskaźniki często brutalnie obnażają projekty, w których model jest „obcy” dla procesu i ludzi. I odwrotnie – potrafią obronić model, który nie jest perfekcyjny technicznie, ale realnie pomaga w pracy.

Metryki, które nie uwzględniają opóźnienia efektu

Niektóre modele wpływają na wynik z dużym opóźnieniem. Kampania retencyjna przynosi efekt po kilku miesiącach, zmiana polityki cenowej – po kolejnych cyklach billingowych, a rekomendacje treści – po zbudowaniu nawyku użytkownika. Jeśli oceniasz taki system tylko krótkoterminowymi metrykami, łatwo uznać dobry kierunek za porażkę.

Przy takich przypadkach przydają się dwie warstwy oceny:

  • krótkoterminowa – czy wczesne sygnały (np. kliknięcia, pierwsze odpowiedzi) idą w dobrą stronę,
  • długoterminowa – czy po pełnym cyklu widać poprawę w metrykach docelowych (retencja, przychód, CLV).

Projektując metryki już na starcie, warto zaplanować, jak i kiedy będziesz w stanie ocenić ten „prawdziwy”, opóźniony efekt. Inaczej grozi ciągłe przełączanie strategii zanim zdąży ona zadziałać.

Brak progów „go/no‑go” i strefy niepewności

Sam fakt, że nowy model ma lepszą metrykę niż baseline, nie odpowiada na pytanie: czy to już moment, żeby go wdrożyć? Różnica F1 o 0,01 może być statystycznie nieistotna lub po prostu nie mieć znaczenia dla biznesu. Bez ustalonych progów decyzje stają się uznaniowe.

O wiele czytelniejszy jest układ, w którym jeszcze przed eksperymentami definiujesz:

  • minimalny akceptowalny poziom – poniżej którego model jest od razu odrzucany,
  • poziom „wdrożeniowy” – powyżej którego wdrożenie jest domyślną decyzją,
  • strefę niepewności – gdzie potrzebne są dodatkowe testy A/B, analizy segmentowe lub pilotaż.

Taki prosty „system świateł” (czerwone–żółte–zielone) pomaga unikać sytuacji, w której na bazie tej samej tabelki metryk dwóch menedżerów dochodzi do dokładnie przeciwnych wniosków.

Metryki a eksperymenty A/B i efekt „observer’s paradox”

Gdy model realnie ingeruje w zachowanie użytkowników, sam akt wdrożenia może zmieniać rozkład danych. Personalizowane rekomendacje przyciągają inną publikę, nowy scoring kredytowy zmienia strukturę akceptowanych klientów. Oceniając model tylko offline, patrzysz na świat „tak jak było”, a nie „tak jak będzie”.

Dlatego przy poważniejszych zastosowaniach trudno uciec od eksperymentów A/B lub przynajmniej testów pilotażowych. Kluczowe jest tu spójne spięcie metryk offline z tymi online: jeżeli offline optymalizujesz precision@5%, to online nie oceniaj wyłącznie CTR-u banerów, ale także to, jak zmienił się odsetek „trafionych” decyzji w tej samej górnej części rankingu.

Bez takiego spięcia można odnieść złudne wrażenie, że model działa świetnie (bo CTR wzrósł), podczas gdy np. jakość pozyskanych klientów spadła, a churn za pół roku wystrzeli w górę.

Ignorowanie niepewności szacunków metryk

Metryka, którą widzisz, zawsze jest tylko estymacją prawdziwej jakości modelu. Przy małych próbach lub bardzo rzadkich zdarzeniach rozrzut tej estymacji może być ogromny. Dwa modele, które różnią się F1 o 0,02, w praktyce mogą być nieodróżnialne pod względem jakości – tyle że drobny przypadek zadecydował, który wygrał na walidacji.

Na etapie projektowania dobrze jest przewidzieć, jak będziesz oceniać nie tylko samą wartość metryki, lecz także jej stabilność. W praktyce oznacza to np.:

  • patrzenie na rozkład wyników z różnych foldów lub z powtarzanych eksperymentów,
  • szacowanie przedziałów ufności metryk (nawet prostymi metodami bootstrapowymi),
  • preferowanie modeli, które są nieco słabsze średnio, ale dużo stabilniejsze między foldami.

Dla biznesu często ważniejsze jest to, by model działał „tak samo dobrze” w kolejnych kampaniach, niż by w jednej kampanii zadziałał spektakularnie, a w kolejnej się posypał.

Najczęściej zadawane pytania (FAQ)

Jak dobrze zdefiniować problem dla projektu machine learning?

Na start potrzebne jest jedno proste zdanie: „Chcemy przewidzieć X, na podstawie Y, aby podjąć decyzję Z”. Jeśli X, Y i Z są konkretne (mierzalny cel, jasne dane wejściowe, realna decyzja), to znaczy, że definicja idzie w dobrym kierunku.

Przykład: zamiast „model churnu” lepiej powiedzieć „Chcemy przewidzieć, którzy aktywni klienci nie przedłużą umowy w ciągu 30 dni, na podstawie ich aktywności z ostatnich 90 dni, aby dział retention mógł zadzwonić do 10% najbardziej zagrożonych”. Od razu widać, kogo model dotyczy, jaki jest horyzont czasowy i co biznes zrobi z wynikiem.

Jakie są najczęstsze błędy na starcie projektu machine learning?

Najczęściej wszystko zaczyna się od hasła „zróbmy coś z AI”, bez jasnej decyzji, którą model ma wspierać. Z tego rodzi się kilka kolejnych potknięć: brak precyzyjnej definicji problemu, pomieszanie jednostki przewidywania (klient vs transakcja vs sesja) i ignorowanie horyzontu czasowego predykcji.

Drugim klasykiem jest „ucieczka w technikalia” przy kompletnie nieprzemyślanym procesie biznesowym: świetny model powstaje w notebooku, ale nikt nie wie, gdzie go podpiąć i jak na podstawie jego wyniku zmieni się działanie firmy. Efekt? Predykcje są, ale decyzje nadal zapadają „na czuja”.

Czym jest jednostka przewidywania i dlaczego jest taka ważna?

Jednostka przewidywania to odpowiedź na pytanie: „dla czego dokładnie model robi prognozę?”. Może to być klient na dany dzień, pojedyncza transakcja, sesja użytkownika albo konkretny produkt. Jeśli tu jest bałagan, to cały pipeline danych zaczyna się sypać.

Przykładowo: w modelu churnu jednostką jest zwykle „klient w danym okresie”, a w modelu fraudowym – „transakcja w momencie autoryzacji”. Mieszanie tego (np. cechy z poziomu klienta, etykieta z poziomu transakcji) prowadzi do błędnych etykiet, nieuczciwej walidacji i modelu, który na produkcji zachowuje się „magicznie inaczej” niż w eksperymentach.

Jak wybrać odpowiedni typ zadania ML: klasyfikacja, regresja, ranking czy rekomendacje?

Najpierw trzeba sprowadzić problem do rodzaju decyzji. Jeśli chodzi o odpowiedź „tak/nie” (odejdzie / nie odejdzie, fraud / nie fraud), to klasyfikacja. Gdy celem jest liczba (kwota, czas, prawdopodobieństwo) – wchodzimy w regresję. Kiedy liczy się kolejność obiektów według „atrakcyjności”, wchodzi ranking lub scoring. A jeśli chcemy podsunąć użytkownikowi kilka najlepszych opcji – to najczęściej system rekomendacyjny.

Dobra praktyka: wypowiedz na głos decyzję, którą ma podjąć biznes. „Do których 10% klientów zadzwonić?”, „Które transakcje zablokować?”, „Jakie 5 produktów pokazać na stronie głównej?”. Sama forma zdania podpowiada, z jakim typem zadania masz do czynienia.

Skąd wiedzieć, czy mam odpowiednie dane do zbudowania modelu ML?

Trzeba sprawdzić trzy rzeczy. Po pierwsze: czy w historii da się zauważyć sensowne wzorce powiązane z celem (np. pewne zachowania poprzedzają churn). Po drugie: czy masz wystarczająco dużo przykładów zarówno pozytywnych, jak i negatywnych, a nie pojedyncze przypadki na cały rok. Po trzecie: czy proces generowania danych jest względnie stabilny w czasie, a nie zmienia się co miesiąc o 180 stopni.

Dobrym testem jest też pytanie: „Czy potrafię zbudować etykietę (0/1 albo wartość liczbową) używając wyłącznie informacji, które byłyby dostępne w momencie podejmowania decyzji?”. Jeśli do etykiety przemyca się dane z przyszłości, model będzie miał świetne wyniki na walidacji i fatalne na produkcji.

Jak określić właściwy horyzont czasowy predykcji w projekcie ML?

Horyzont czasowy to odpowiedź na pytanie „na jak długo do przodu przewidujemy?”. Czy interesuje Cię, że klient odejdzie w ciągu 7 dni, 30 dni czy roku? Dla sklepu internetowego „nie kupił przez 7 dni” może oznaczać standardową przerwę, ale „nie kupił przez 6 miesięcy” to już silny sygnał odejścia.

Horyzont powinien wynikać z procesu biznesowego: jak szybko możesz zareagować i jak długo dana informacja jest użyteczna. Jeśli dział sprzedaży jest w stanie zadzwonić do klienta w ciągu kilku dni, to model churnu z horyzontem 30 dni będzie o wiele praktyczniejszy niż taki przewidujący odejście „kiedyś w przyszłości”.

Kiedy lepiej NIE zaczynać projektu machine learning, mimo że pomysł brzmi dobrze?

Jeśli w danych nie widać żadnych stabilnych wzorców, zdarzenia pozytywne są ekstremalnie rzadkie, etykiety są losowe lub mocno zniekształcone (np. fraud oznaczany tylko wtedy, gdy klient zadzwoni z reklamacją), to model nie będzie miał się czego „nauczyć”. Wtedy lepiej zainwestować czas w uporządkowanie procesu zbierania danych niż budować model na siłę.

Drugim sygnałem stop jest sytuacja, w której nie da się sensownie dokończyć szablonu „Chcemy przewidzieć X, na podstawie Y, aby podjąć decyzję Z” w sposób zrozumiały dla osoby spoza IT. Jeśli zespół kręci się w kółko wokół buzzwordów, ale nie potrafi wskazać konkretnej decyzji i danych dostępnych w momencie tej decyzji, to projekt ML będzie tylko drogą demonstracją technologii.

Kluczowe Wnioski

  • Model ML musi odpowiadać na jedno, jasno określone pytanie decyzyjne – zamiast ogólnego „chcemy AI w sprzedaży” potrzebujesz konkretu typu: „którym klientom zadzwonić w ciągu tygodnia, żeby zwiększyć szansę przedłużenia umowy”.
  • Hasła w stylu „model churnu”, „fraud detection” czy „rekomendacje” to tylko etykietki; dopiero doprecyzowanie, co dokładnie przewidujesz, w jakim czasie i co z wynikiem zrobisz, tworzy prawdziwą definicję problemu.
  • Dobra definicja zawiera: jednostkę przewidywania (np. klient, transakcja, sesja), zdarzenie lub wartość do prognozy, horyzont czasu, planowaną akcję po stronie biznesu oraz ograniczenia techniczne (np. czas odpowiedzi, limity wolumenów).
  • Już na etapie rozmów z biznesem trzeba przetłumaczyć „chcemy AI” na konkretny typ zadania: klasyfikację, regresję, ranking/scoring albo rekomendacje – wtedy od razu klarują się wymagane dane, metryki i sposób wdrożenia.
  • Jednym z najboleśniejszych błędów jest brak jednoznacznej jednostki przewidywania; jeśli mieszają się poziomy typu „klient” i „transakcja”, dane i etykiety stają się niespójne, a wyniki modelu trudne do zinterpretowania.
  • Horyzont czasowy predykcji musi być jasno ustalony, bo „odejdzie w ciągu 7 dni” to zupełnie inne zachowanie niż „odejdzie w ciągu 6 miesięcy” – od tego zależy budowa zbioru treningowego i miara sukcesu.