Produkcyjne systemy ML: monitorowanie potoków

Gratulacje! Wdrożysz model jednorożca. Model powinien działać bez problemów przez całą dobę 7 dni w tygodniu. Aby to sprawdzić, musisz monitorować potok uczenia maszynowego.

Tworzenie schematu danych w celu weryfikacji danych nieprzetworzonych

Aby monitorować dane, należy stale porównywać je z oczekiwanymi wartościami statystycznymi, tworząc reguły, którym muszą one odpowiadać. Ta kolekcja reguł nazywa się schematem danych. Aby zdefiniować schemat danych, wykonaj te czynności:

  1. poznasz zakres i rozkład funkcji; W przypadku cech kategorialnych poznaj zestaw możliwych wartości.

  2. Spróbuj zakodować swoje wnioski w schemacie danych. Oto przykłady reguł:

    • Upewnij się, że oceny przesłane przez użytkowników zawsze mieszczą się w zakresie od 1 do 5.
    • Sprawdź, czy słowo the występuje najczęściej (w przypadku funkcji tekstowej w języku angielskim).
    • Sprawdź, czy każda cecha kategorialna ma ustawioną wartość z ustawionego zbioru możliwych wartości.
  3. Sprawdź, czy dane są zgodne ze schematem danych. Schemat powinien wykrywać błędy danych, takie jak:

    • Anomalie
    • Nieoczekiwane wartości zmiennych porządkowych
    • Nieoczekiwane rozkłady danych

pisać testy jednostkowe, aby weryfikować inżynierię funkcji;

Nieprzetworzone dane mogą być zgodne ze schematem danych, ale model nie uczy się na podstawie nieprzetworzonych danych. Model uczy się na danych, które zostały poddane przekształceniu cech. Na przykład model trenuje na podstawie unormowanych cech liczbowych, a nie na podstawie surowych danych liczbowych. Dane z przetworzonych cech mogą się znacznie różnić od nieprzetworzonych danych wejściowych, dlatego musisz sprawdzać dane z przetworzonych cech osobno od nieprzetworzonych danych wejściowych.

napisać testy jednostkowe na podstawie zrozumienia danych z zastosowanymi funkcjami, Możesz na przykład napisać testy jednostkowe, aby sprawdzić warunki takie jak:

  • Wszystkie cechy liczbowe są skalowane, np. w zakresie od 0 do 1.
  • Wektory zakodowane w postaci 1-hot zawierają tylko 1 wartość 1 i N-1 wartości 0.
  • rozkłady danych po przekształceniu są zgodne z oczekiwaniami; Jeśli na przykład znormalizujesz dane za pomocą wartości Z-score, średnia wartości Z-score powinna wynosić 0.
  • Występujące poza zakres wartości są odpowiednio przetwarzane, np. przez skalowanie lub przycinanie.

Sprawdzanie danych w przypadku ważnych przekrojów danych

Udane wyniki całości mogą czasem przysłonić nieudane wyniki podzbioru. Inaczej mówiąc, model o dobrych ogólnych wynikach może w pewnych sytuacjach generować fatalne prognozy. Na przykład:

Model jednorożca ogólnie dobrze sobie radzi, ale nie sprawdza się w przypadku prognozowania dla Sahary.

Jeśli jesteś inżynierem, który zadowala go ogólna wysoka wartość AUC, możesz nie zauważyć problemów modelu na pustyni w Saharze. Jeśli ważne jest, aby tworzyć dobre prognozy dla każdego regionu, musisz śledzić skuteczność w każdym z nich. Podzbiory danych, takie jak ten odpowiadający Saharze, nazywane są krojami danych.

Wybierz interesujące Cię segmenty danych. Następnie porównaj dane modelu dla tych wycinków danych z danymi dotyczącymi całego zbioru danych. Sprawdzanie, czy model dobrze działa na wszystkich przekrojach danych, pomaga wyeliminować stronniczość. Więcej informacji znajdziesz w artykule Umiarkowanie: sprawdzanie występowania stronniczości.

Korzystanie z danych rzeczywistych

Dane modelu niekoniecznie odzwierciedlają rzeczywisty wpływ modelu. Na przykład zmiana parametru może zwiększyć AUC modelu, ale jak ta zmiana wpłynęła na wrażenia użytkownika? Aby mierzyć rzeczywisty wpływ, musisz zdefiniować osobne dane. Możesz na przykład przeprowadzić ankietę wśród użytkowników modelu, aby potwierdzić, że naprawdę widzieli jednorożca, gdy model przewidział, że tak będzie.

Sprawdzanie zniekształcenia między trenowaniem a zastosowaniem praktycznym

Zniekształcenie między trenowaniem a zastosowaniem oznacza, że dane wejściowe podczas trenowania różnią się od danych wejściowych w sposobie ich wykorzystania. W tabeli poniżej opisano 2 ważne rodzaje zniekształceń:

Typ Definicja Przykład Rozwiązanie
Szerzenie schematu Dane wejściowe do treningu i wyświetlania reklam nie są zgodne z tym samym schematem. Format lub rozkład danych do wyświetlania zmienia się, a model nadal jest trenowany na podstawie starych danych. Używaj tego samego schematu do sprawdzania danych treningowych i danych służących do obsługi. Sprawdź osobno statystyki, których nie sprawdza Twój schemat, np. ułamek brakujących wartości.
Zniekształcenie funkcji Dane techniczne różnią się między trenowaniem a zastosowaniem praktycznym. Kod do tworzenia cech różni się między trenowaniem a wyświetlaniem, co powoduje, że generowane są różne dane. Podobnie jak w przypadku schematu, zastosuj te same reguły statystyczne do danych treningowych i danych do wyświetlania. Śledź liczbę wykrywanych cech o nieprawidłowej wartości oraz stosunek przykładów o nieprawidłowej wartości do poszczególnych cech.

Przyczyny zniekształcenia między trenowaniem a zastosowaniem mogą być subtelne. Zawsze zwróć uwagę na to, jakie dane są dostępne dla modelu w momencie prognozowania. Podczas szkolenia korzystaj tylko z funkcji, które będą dostępne podczas wyświetlania reklam.

Ćwiczenie: sprawdź swoją wiedzę

Załóżmy, że prowadzisz sklep internetowy i chcesz przewidzieć, ile zarobisz danego dnia. Twoim celem w ramach uczenia maszynowego jest przewidywanie dziennych przychodów na podstawie liczby klientów jako cechy.

Jaki problem może wystąpić?
Kliknij tutaj, aby zobaczyć odpowiedź

Sprawdzanie wycieku etykiet

Wyciek etykiet oznacza, że dane podstawowe, których etykiety chcesz przewidywać, zostały przypadkowo wprowadzone do funkcji trenowania. Uciekły etykiety są czasami bardzo trudne do wykrycia.

Ćwiczenie: sprawdź swoją wiedzę

Załóżmy, że tworzysz binarny model klasyfikacji, aby przewidzieć, czy nowy pacjent ma raka. Twój model korzysta z takich funkcji:

  • Wiek pacjenta
  • Płeć pacjenta
  • Dotychczasowe schorzenia
  • Nazwa szpitala
  • Parametry życiowe
  • Wyniki testów
  • Heredity

Etykieta:

  • Wartość logiczna: czy pacjent ma raka?

Musisz dokładnie podzielić dane, aby zbiór treningowy był dobrze odizolowany od zbioru walidacyjnego i testowego. Model działa bardzo dobrze na zestawie walidacyjnym i testowym, a wskaźniki są fantastyczne. Niestety w przypadku nowych pacjentów w rzeczywistym świecie model bardzo słabo się sprawdza.

Dlaczego model, który świetnie radził sobie na zbiorze testowym, nie sprawdzał się w rzeczywistych warunkach?
Kliknij tutaj, aby zobaczyć odpowiedź

Monitorowanie wieku modelu w całym strumieniu danych

Jeśli dane do wyświetlania zmieniają się z czasem, ale model nie jest regularnie ponownie trenowany, zauważysz spadek jakości modelu. Śledź czas od momentu przeszkolenia modelu na podstawie nowych danych i ustaw próg czasu dla alertów. Oprócz monitorowania wieku modelu w momencie obsługi, należy też monitorować jego wiek w całym procesie, aby wykrywać jego zastoje.

Sprawdź, czy wagi i dane wyjściowe modelu są stabilne pod względem liczbowy

Podczas trenowania modelu wagi i wartości wyjściowe warstwy nie powinny być wartościami NaN (nie jest liczbą) ani Inf (nieskończoność). Napisz testy, aby sprawdzić, czy w wyjściach wag i warstw nie występują wartości NaN i Inf. Dodatkowo sprawdź, czy więcej niż połowa wyjść warstwy nie jest równa 0.

Monitorowanie skuteczności modelu

Twój model przewidywania pojawienia się jednorożca okazał się bardziej popularny niż się spodziewaliśmy. Otrzymujesz wiele próśb o prognozę i jeszcze więcej danych do trenowania. Wszystko wydaje się świetne, dopóki nie zdasz sobie sprawy, że Twój model zajmuje coraz więcej pamięci i czasu na trenowanie. Zgłaszasz problemy z wydajnością modelu, wykonując te czynności:

  • śledzić wydajność modelu według wersji kodu, modelu i danych; Takie śledzenie umożliwia określenie dokładnej przyczyny spadku wydajności.
  • Przetestuj liczbę kroków treningu na sekundę w nowej wersji modelu w porównaniu z poprzednią wersją i stałym progiem.
  • Wykrywaj wycieki pamięci, ustawiając próg wykorzystania pamięci.
  • Monitoruj czasy odpowiedzi interfejsu API i ich odsetki. Czasy odpowiedzi interfejsu API mogą być poza Twoją kontrolą, ale ich spowolnienie może spowodować słabe wyniki w rzeczywistych warunkach.
  • Monitorowanie liczby zapytań obsługiwanych na sekundę.

Testowanie jakości modelu na żywo na podstawie danych serwowanych

Model został zweryfikowany. Co jednak, jeśli po zarejestrowaniu danych weryfikacyjnych zmienią się rzeczywiste scenariusze, takie jak zachowanie jednorożca? W przeciwnym razie jakość obsługiwanego modelu się pogorszy. Testowanie jakości wyświetlania reklam jest jednak trudne, ponieważ dane z prawdziwego świata nie zawsze są odpowiednio opisane. Jeśli dane o obsługiwaniu nie są opisane, przeprowadź te testy:

  • Generowanie etykiet za pomocą oceniających z grupy kontrolnej.

  • Sprawdź modele, które wykazują znaczne uprzedzenia statystyczne w prognozach. Zobacz Uczenie maszynowe: błąd doboru próby w prognozach.

  • Śledź statystyki swojego modelu w rzeczywistych warunkach. Jeśli na przykład klasyfikujesz spam, porównaj swoje prognozy z spamem zgłoszonym przez użytkowników.

  • Zminimalizuj potencjalne rozbieżności między danymi do trenowania a danymi do obsługi, stosując nową wersję modelu w przypadku części zapytań. Po sprawdzeniu nowego modelu wyświetlania stopniowo przenoś wszystkie zapytania do nowej wersji.

Podczas tych testów pamiętaj, aby sprawdzać zarówno nagłe, jak i powolne pogorszenie jakości prognoz.

Kolejność losowa

Utwórz odtwarzalny potok generowania danych. Załóżmy, że chcesz dodać cechę, aby sprawdzić, jak wpływa ona na jakość modelu. Aby eksperyment był rzetelny, zbiory danych powinny być identyczne, z wyjątkiem tej nowej funkcji. W tym duchu upewnij się, że losowanie w generowaniu danych może być deterministyczne:

  • Ustaw parametry generatorów liczb losowych. Dzięki temu RNG zwraca te same wartości w tej samej kolejności za każdym razem, gdy go uruchomisz, i ponownie tworzy zbiór danych.
  • Używaj niezmiennych kluczy haszujących. Szyfrowanie to typowy sposób dzielenia lub próbkowania danych. Możesz zaszyfrować każdy przykład i użyć otrzymanej liczby całkowitej, aby zdecydować, w którym podziale umieścić przykład. Dane wejściowe funkcji szyfrowania nie powinny się zmieniać przy każdym uruchomieniu programu generowania danych. Jeśli chcesz tworzyć hashe na żądanie, nie używaj w nich bieżącej godziny ani liczb losowych.

Powyższe podejścia dotyczą zarówno próbkowania, jak i dzielenia danych.

Uwagi dotyczące szyfrowania

Załóżmy, że ponownie zbierasz zapytania i używasz haszowania, aby uwzględniać lub wykluczać zapytania. Jeśli klucz skrótu zawierał tylko zapytanie, to w przypadku danych z kilku dni albo zawsze uwzględnisz to zapytanie, albo zawsze je wykluczysz. Zawsze uwzględnianie lub wykluczanie zapytania jest niekorzystne, ponieważ:

  • Twój zbiór treningowy będzie zawierał mniej zróżnicowane zapytania.
  • Twoje zestawy oceny będą sztucznie trudne, ponieważ nie będą się pokrywać z danymi treningowymi. W rzeczywistości w momencie wyświetlania reklam zobaczysz część ruchu na żywo w danych treningowych, dlatego ocena powinna to uwzględniać.

Zamiast tego możesz użyć haszowania na podstawie zapytania i daty, co spowoduje, że w każdym dniu będzie inny wynik.

 

Rysunek 7. Animowana wizualizacja pokazująca, jak szyfrowanie tylko zapytania powoduje, że dane trafiają każdego dnia do tego samego zasobnika, ale szyfrowanie zapytania wraz z czasem jego wykonania powoduje, że dane trafiają każdego dnia do różnych zasobników. Te 3 grupy to Trenowanie, Ocena i Zignorowane.
Rysunek 7. Hashowanie zapytania w porównaniu z hashowaniem zapytania i czasu jego wykonywania.