Jednostka 10 / 11

Wyciek danych i odtwarzalność: ciche katastrofy i dyscyplina

Zyski:

  • Możliwość rozpoznawania rodzajów wycieku danych (cel, czas, przetwarzanie wstępne, pogrupowane wiersze) i sprawdzania wyniku „zbyt piękne, aby mogło być prawdziwe” jako alarmu
  • Możliwość zapobiegania wyciekom poprzez wczesne rozdzielenie zestawu testowego, rurociągu i prawidłowy podział (chronologiczny/pogrupowany)
  • Możliwość zapewnienia powtarzalności analizy przy użyciu stałych nasion, kontroli wersji i usuwania ręcznych kroków

Istnieją dwa błędy, które marnują najwięcej wysiłku w nauce danych, i oba są podstępne, ponieważ prowadzą do katastrofy właśnie wtedy, gdy wszystko „wydaje się być w porządku”. Pierwszym z nich jest wyciek danych: model działa świetnie na zestawie testowym, ale ulega awarii w produkcji. Drugim jest niepowtarzalność: przeprowadzasz analizę sześć miesięcy później i otrzymujesz zupełnie inny wynik. Celem tej jednostki jest dogłębne poznanie i unikanie tych dwóch pułapek. Sztuczna inteligencja może zwiększyć oba rodzaje ryzyka (szybko je generuje, sugeruje ukryte wycieki, ułatwia podejmowanie ręcznych kroków), ale może również je zmniejszyć, jeśli zostanie właściwie zastosowana. Różnica polega na dyscyplinie.

Wyciek danych: model jasnowidzenia

Wyciek danych ma miejsce wtedy, gdy model podczas uczenia otrzymuje informacje, których nie będzie miał w momencie faktycznego przewidywania. Model „oszukuje” tymi informacjami, wyglądając świetnie na zestawie testowym, ale bez tych informacji zawiesza się w produkcji. Objaw wycieku jest prawie zawsze taki sam: zbyt piękne, aby mogło być prawdziwe. Zanim będziesz się cieszyć, gdy zobaczysz 99% dokładności, powinieneś poszukać przecieków.

Główne rodzaje wycieków to:

1. Wyciek celu: Cecha jest wynikiem celu. W prognozie „została anulowana” kolumny „data anulowania” lub „kwota zwrotu” są wynikiem wartości docelowej; Zostaną one wypełnione dopiero wtedy, gdy wynik będzie jasny.

2. Przeciek czasu: przenoszenie przyszłych informacji do przeszłości. Przy obliczaniu „średniej z ostatnich 30 dni” należy uwzględnić dni następujące po dniu prognozy lub losowo podzielić szereg czasowy.

3. Wyciek przetwarzania wstępnego: transformacje uczenia się, takie jak skalowanie, wypełnianie, kodowanie ze wszystkich danych przed partycją uczącą/testującą. Uśrednianie danych testowych zakłóca trening.

4. Nieszczelność zduplikowanych/zgrupowanych wierszy: Wiersze należące do tej samej osoby są obecne zarówno podczas szkolenia, jak i badania (dwie wizyty tego samego pacjenta w różnych zestawach). Model zapamiętuje osobę.

Rodzaj wycieku

Jak się rodzi

Jak zapobiegać

docelowy wyciek

Kolumna będąca wynikiem celu

Test „Czy mam go w momencie przewidywania”.

wyciek czasu

Przeniesienie przyszłości w przeszłość

Podział chronologiczny, sterowanie okienne

Wyciek przetwarzania wstępnego

Konwersja przed podziałem

Rurociąg, sprawny dopiero po treningu

Zgrupowany wyciek z rzędu

Ta sama jednostka w dwóch zestawach

Podziel według grupy (GroupKFold)

Jedyna dyscyplina zapobiegająca wyciekom

Wspólne rozwiązanie wszystkich typów wycieków sprowadza się do jednego zdania: odizoluj zestaw testowy tak wcześnie, jak to możliwe, aby odzwierciedlić prawdziwą przyszłość, i nie „ucz” go niczego. W praktyce oznacza to: najpierw podziel, potem naucz się wszystkich transformacji dopiero na szkoleniu i zastosuj je w potoku (strukturze skupiającej wszystkie kroki w jednym łańcuchu). Dla każdej cechy zadaj pytanie „czy mam te informacje w momencie prognozowania?” Jeśli jest czas, podziel go chronologicznie; Jeśli ta sama jednostka się powtarza, podziel ją według grup.

Uwaga: najbardziej niebezpiecznym aspektem wycieku jest to, że przedstawia się on jako sukces. Zły model oczywiście przyniesie słabe wyniki i zostanie zauważony; Model, który wyciekł, działa świetnie, podoba się wszystkim i trafia do produkcji – od tego zaczyna się upadek. Dlatego „bardzo dobry” wynik jest powodem do niepokoju, a nie radości.

Powtarzalność: uzyskanie tego samego wyniku dwa razy

Powtarzalność to możliwość uzyskania tego samego wyniku po ponownym uruchomieniu analizy w innym czasie, na innej maszynie. Bez tego twoja analiza ma charakter przypadkowy, a nie naukowy. Główne przyczyny i rozwiązania pogarszające odtwarzalność:

Kroki ręczne: Ręczna zmiana komórki w Excelu, ręczna edycja wykresu. Rozwiązanie: umieść każdy krok w kodzie.

Nieustalona losowość: uczenie modelu, próbkowanie i dzielenie obejmują losowość. Rozwiązanie: napraw losowe ziarno (początkową wartość generatora losowego) (random_state=42).

Zmiany wersji: wynik może się zmienić w przypadku zmiany wersji biblioteki. Rozwiązanie: napraw zależności (requirements.txt, plik środowiska).

Brak prowadzenia rejestrów: nie jest jasne, jakie dane, jaki kod i jaki parametr zostały użyte. Rozwiązanie: kontrola wersji (Git – system zapisujący wszystkie wersje kodu) i wersjonowanie danych.

„Działa tylko na moim komputerze”: Rozwiązanie: udokumentuj środowisko, jeśli to możliwe, użyj kontenerów (Docker).

trzy mini etui

Przypadek 1 — Docelowy wyciek. Analiza stanu zdrowia uwzględniała kolumnę „leki podawane po wypisie ze szpitala”, w której można było przewidzieć, „czy pacjent zostanie ponownie przyjęty”. Kolumnę tę napełniono dopiero po wypisaniu pacjenta. Model dał 96%, w produkcji 61%. 8-tygodniowy projekt był śmieciem. Lekcja: zapytaj każdą cechę „czy jest obecna w momencie przewidywania?”

Przypadek 2 — Wyciek podczas przetwarzania wstępnego. Jeden zespół przeskalował wszystkie dane, a następnie je podzielił. W skalowaniu brano pod uwagę średnią danych testowych. Wynik CV 89%, rzeczywista produkcja 76%. Fałszywy sukces zniknął, gdy przeniosłam się do Pipeline, a o przemianach dowiedziałam się dopiero ze szkoleń. Lekcja: najpierw podziel, później przekształć.

Przypadek 3 – Brak reprodukcji. Analityk chciał zaktualizować wykres, który przedstawił kierownictwu trzy miesiące później, ale nie pamiętał, jak go sporządził; wiele kroków wykonano ręcznie w programie Excel. Wynik nie zadziałał, a zaufanie zostało zachwiane. Lekcja: żadnych ręcznych kroków, wszystko jest w kodzie i Git.

Cztery szablony do kopiowania

1) Kontrola szczelności:

Twoja rola: inspektor nieszczelności. Cel: „rezygnacja” (0/1), data odniesienia prognozy: record_date. Dam ci tę listę funkcji. Dla KAŻDEJ cechy: (a) czy jest to konsekwencja celu, (b) czy jest dla mnie dostępna w momencie przewidywania, (c) czy okno czasowe obejmuje przyszłość? Oznacz go jako „niebezpieczny/podejrzany/wyciek” i podaj powód. Funkcje: [lista]

2) Szczelny rurociąg:

Skonfiguruj sklearn Pipeline: pierwszy podzielony pociąg/test (warstwowy, nasiono = 42), NASTĘPNIE dopasuj całe przetwarzanie wstępne (przypisanie, skalowanie, kodowanie) do potoku TYLKO z treningu. Wyjaśnij, dlaczego kod jest szczelny i który krok został nauczony, gdzie.

3) Kod listy kontrolnej powtarzalności:

Chcę, aby moja analiza była powtarzalna. Zaproponuj kod/strukturę, która dodaje: (1) twarde ziarno dla całej losowości, (2) używane wersje bibliotek drukujących, (3) znacznik daty/wersji dla danych i wyników. Daj mi także listę kontrolną, aby upewnić się, że nie ma żadnych ręcznych kroków.

4) Zgrupowana partycja (ten sam wyciek jednostki):

W danych ten sam identyfikator klienta występuje w wielu wierszach. Dokonaj podziału (GroupKFold lubGroupShuffleSplit, grupa = id_klienta), który ZABEZPIECZA uczestnictwo tego samego klienta zarówno w szkoleniu, jak i testowaniu. Dołącz kod, aby sprawdzić, czy po podziale nie ma klientów w obu zestawach.

Słaba zachęta/silna zachęta

Słaba zachęta:

Mój model zwrócił dokładność na poziomie 98%, czy to nie wspaniałe? Zoptymalizuj kod.

Świętowanie 98% ukrywa wyciek. Przed optymalizacją należy zadać sobie pytanie, czy ten wynik jest prawdziwy, czy nie.

Potężny monit:

Twoja rola: inspektor nieszczelności. Mój model zwraca 98% dokładności na zestawie testowym, co wydaje mi się „zbyt piękne, aby mogło być prawdziwe”. Sprawdź: (1) czy jakiekolwiek cechy wynikają z celu, (2) czy konwersje zostały wykonane przed podziałem, (3) czy są to te same jednostki w dwóch zestawach, (4) czy są jakieś przecieki czasowe. Wymień wszystkie podejrzane punkty; Skoncentruj się na znalezieniu wycieku, a nie naprawianiu wyniku.

W tym przypadku wysoki wynik traktowany jest jako sygnał, który należy kwestionować, a nie świętować.

Typowe błędy

  • Świętujemy „bardzo dobry” wynik. Wynik zbyt dobry, aby był prawdziwy, jest ostrzeżeniem o wycieku, a nie osiągnięciem.
  • Uczenie się transformacji ze wszystkich danych przed podziałem. Najczęstszy wyciek; Najpierw podziel za pomocą potoku.
  • Losowe dzielenie szeregów czasowych. Model widzi przyszłość; Podział chronologiczny jest koniecznością.
  • Pozostawienie tej samej jednostki w dwóch zestawach. Model zapamiętuje osobę; Podziel według grupy.
  • Nie wchodząc ręcznie i nie pisząc do kodu. Analiza staje się niepowtarzalna; wszystko powinno być w kodzie i Git.
Wskazówka: na początku projektu napisz dwuzdaniowe „przyrzeczenie honorowe”: „Nie dotknąłem w żaden sposób zestawu testowego, zanim nie zobaczyłem go na produkcji. Każdy krok jest zapisany w kodzie, a materiał siewny jest naprawiony”. Jeżeli nie potrafisz uczciwie podpisać tych dwóch zdań, Twój wynik nie jest jeszcze wiarygodny.

Podsumowując

Wyciek danych i brak odtwarzalności to dwa najkosztowniejsze ciche błędy w nauce o danych. Wyciek jest wizją przyszłości modelki i przedstawia się jako fałszywy sukces; Rozwiązaniem jest wcześniejsze podzielenie zbioru testowego, nauczenie się transformacji dopiero na podstawie treningu (potok), zadanie każdej funkcji pytania „Czy mam ją w momencie przewidywania” i dokonanie prawidłowego podziału (chronologicznego/pogrupowanego). Powtarzalność to możliwość uzyskania tego samego wyniku dwa razy; jego rozwiązaniem jest ręczne usunięcie kroków, przypięcie materiału siewnego, zamrożenie wersji i przechowywanie wszystkiego w Git. Sztuczna inteligencja może zwiększyć lub zmniejszyć to ryzyko; To twoja dyscyplina decyduje.

Zadanie aplikacji

Weź listę funkcji zbudowanego przez siebie modelu (lub hipotetycznego) i zadaj każdej funkcji pytanie „czy mam te informacje w momencie prognozowania?” na piśmie; Znajdź przynajmniej jednego kandydata do wycieku. Następnie wypełnij listę kontrolną, aby Twoja analiza była powtarzalna: czy materiał siewny został naprawiony, czy istnieją ręczne kroki, czy wersje są zarejestrowane, czy są w Git. Napraw braki.

lista kontrolna

  • [ ] Czy wynik „zbyt piękne, aby było prawdziwe” został podany jako ostrzeżenie o wycieku?
  • [ ] Czy nauczyłem się wszystkich przemian po rozstaniu tylko na szkoleniu?
  • [ ] Czy podzieliłem według struktury czasowej/grupowej (chronologiczna/grupowaKFold)?
  • [ ] Czy zapewniłem powtarzalność całej losowości przy stałym ziarnie?
  • [ ] Czy usunąłem czynności ręczne i zachowałem wszystko w kodzie i kontroli wersji?