1. Omówienie
W tym module dowiesz się, jak utworzyć model prognozowania ciągów czasowych za pomocą TensorFlow, a także jak wdrożyć te modele przy użyciu Vertex AI.
Czego się dowiesz
Poznasz takie zagadnienia jak:
- Przekształć dane, aby można było ich używać w modelu ML
- Wizualizacja i eksploracja danych
- Utwórz model prognozowania ciągu czasowego za pomocą BigQuery ML
- Utwórz model prognozowania ciągów czasowych za pomocą TensorFlow z użyciem architektur LSTM i CNN
2. Wprowadzenie do prognozowania ciągów czasowych
Tematem tego ćwiczenia w Codelabs jest stosowanie technik prognozowania ciągów czasowych za pomocą Google Cloud Platform. Nie jest to ogólny kurs prognozowania ciągu czasowego, ale krótka prezentacja zagadnień może się przydać naszym użytkownikom.
Dane ciągu czasowego
Po pierwsze, czym jest ciąg czasowy? Jest to zbiór danych, który zawiera dane rejestrowane w regularnych odstępach czasu. Zbiór danych ciągów czasowych zawiera zarówno czas, jak i co najmniej 1 zmienną zależną od czasu.
Komponenty
Ciągi czasowe można rozłożyć na komponenty:
- Trend: przesuwa się w górę lub w dół w przewidywalny sposób.
- Sezonowe: powtarzanie w określonym przedziale czasu, np. dniu, tygodniu, miesiącu, sezonie itd.
- Losowe: wahania resztowe.
Sezonowość może się składać z kilku warstw. Na przykład w konkretnych dniach tygodnia i w poszczególnych miesiącach liczba połączeń z centrum obsługi telefonicznej może się zmieniać. Tę wartość można wyjaśnić innymi zmiennymi, nie tylko czasem.
Statacja
Aby uzyskać najlepsze wyniki prognozowania, dane ciągów czasowych powinny być stacjonarne, gdzie właściwości statystyczne, takie jak średnia i wariancja, są stałe w czasie. W przypadku nieprzetworzonych danych można zastosować takie techniki jak różnicowanie i poniżanie.
Na przykład wykres stężenia CO2 poniżej pokazuje powtarzający się roczny wzorzec z trendem wzrostowym. ( Źródło)
Po usunięciu trendu liniowego dane są bardziej odpowiednie do prognozowania, ponieważ mają teraz stałą średnią.
Używanie danych serii czasowej na potrzeby systemów uczących się
Aby w zadaniu z systemem uczącym się użyć danych ciągów czasowych, trzeba je przekształcić tak, aby wcześniejsze wartości mogły zostać użyte do prognozowania przyszłych wartości. Ta tabela przedstawia przykład tworzenia zmiennych opóźnionych, które ułatwiają przewidywanie wartości docelowej.
Omówiliśmy już podstawy, więc możemy zacząć poznawać dane i prognozowanie.
3. Skonfiguruj środowisko notatnika
Po krótkim omówieniu danych możemy teraz skonfigurować środowisko programistyczne modelu.
Krok 1. Włącz interfejsy API
Oprogramowanie sprzęgające BigQuery używa interfejsu BigQuery Storage API. Wyszukaj w konsoli interfejs BigQuery Storage API i włącz go, jeśli jest obecnie wyłączony.
Krok 2. Utwórz notatnik Vertex AI Workbench
W konsoli Cloud przejdź do sekcji Vertex AI Workbench i kliknij Nowy notatnik. Następnie wybierz najnowszy typ notatnika TensorFlow Enterprise 2.x bez GPU:
Użyj opcji domyślnych i kliknij Utwórz. Po utworzeniu instancji wybierz Otwórz JupyterLab:
Następnie utwórz w JupyterLab notatnik w języku Python 3:
Krok 3. Pobierz materiały do modułu
Utwórz nowe okno terminala w interfejsie JupyterLab: Plik -> Nowe -> Terminal.
Następnie skopiuj materiał źródłowy za pomocą tego polecenia:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
4. Eksploruj i wizualizuj dane
W tej sekcji:
- Tworzenie zapytania, które grupuje dane w ciągi czasowe
- Uzupełnij brakujące wartości
- Wizualizacja danych
- Rozłóż ciągi czasowe na składowe trendów i sezonowych
Krok 1
W Vertex AI Workbench przejdź do folderu training-data-analyst/courses/ai-for-time-series/notebooks
i otwórz 01-explore.ipynb
.
Krok 2
Wyczyść wszystkie komórki w notatniku (Edytuj > Wyczyść wszystkie dane wyjściowe), zmień ustawienia regionu, projektu i zasobnika w jednej z kilku pierwszych komórek, a następnie „Uruchamiaj komórki” po kolei.
Krok 3
W tej sekcji zaimportujesz dane i zwizualizujesz ich różne wymiary. Teraz gdy masz już jaśniejszy obraz danych, możesz przejść do modelowania za pomocą uczenia maszynowego na ich podstawie.
5. Tworzenie modelu na podstawie prognozowania ciągu czasowego BigQuery
W tej sekcji:
- Importowanie danych wejściowych ciągu czasowego do tabeli BigQuery
- Utwórz model ciągu czasowego przy użyciu składni BQML
- Dowiedz się, jak oceniać parametry modelu i dokładność
- Prognozowanie przy użyciu modelu
Krok 1
Utworzymy tabelę BigQuery z nieprzetworzonymi danymi z przed chwilą zbadanego pliku CSV. Zacznij od pobrania pliku CSV ze środowiska notatników.
W katalogu training-data-analyst/courses/ai-for-time-series/notebooks/data
kliknij prawym przyciskiem myszy folder cta_ridership.csv
i Pobierz go do swojego środowiska lokalnego.
Krok 2
Następnie prześlemy te dane do tabeli BigQuery.
Przejdź do BigQuery w konsoli (wyszukaj lub użyj tego linku):
Możesz dodać tę tabelę do nowego lub istniejącego zbioru danych, co spowoduje grupowanie powiązanych tabel. Jeśli nie masz jeszcze utworzonego zbioru danych, możesz go kliknąć w lewym dolnym rogu, a następnie wybrać Utwórz zbiór danych w prawym dolnym rogu.
Wybierz dowolną nazwę, na przykład demo
, zaakceptuj wartości domyślne i przejdź dalej.
Po wybraniu tego zbioru danych kliknij Create Table (Utwórz tabelę) w prawym dolnym rogu, aby utworzyć nową tabelę.
Jako opcje tworzenia tabeli wybierz:
- Utwórz tabelę z: Prześlij
- Wybierz plik: cta_ridership.csv
- Nazwa tabeli: cta_ridership
- Schemat: zaznacz pole, aby automatycznie wykrywać schematy i parametry wejściowe.
Krok 3
Teraz czas utworzyć nasz model. BigQuery ML udostępnia prostą składnię podobną do SQL, która pozwala tworzyć różne typy modeli.
W edytorze zapytań wklej lub wpisz to zapytanie, zastępując fragment demo nazwą swojego zbioru danych w obu miejscach:
CREATE OR REPLACE MODEL `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA', TIME_SERIES_TIMESTAMP_COL='service_date', TIME_SERIES_DATA_COL='total_rides', HOLIDAY_REGION='us') AS SELECT service_date, total_rides FROM `demo.cta_ridership`
Przyjrzyjmy się najważniejszym elementom składni, które ułatwiają zrozumienie treści:
| Ta instrukcja tworzy model. To twierdzenie występuje w różnych jego wariantach, np. |
| Tutaj definiuje się opcje modelu, przy czym pierwsza opcja jest typem modelu. Wybranie opcji ARIMA spowoduje utworzenie modelu prognozowania ciągu czasowego. |
| Kolumna z informacjami o dacie i godzinie |
| Kolumna danych |
| Ten opcjonalny parametr pozwala nam uwzględnić w modelu święta. Ponieważ nasza eksploracja danych w poprzednim kroku wykazała, że liczba pasażerów była mniejsza w dni świąteczne, a dane pochodzą z Chicago w stanie Illinois w USA, uwzględniamy w modelu święta w USA. |
| W tej sekcji wybierasz dane wejściowe, których będziemy używać do trenowania modelu. |
Do zapytania możesz dodać wiele innych opcji, na przykład zdefiniować kolumnę w przypadku wielu ciągów czasowych lub wskazać, czy chcesz automatycznie wykrywać parametry modelu ARIMA. Więcej informacji znajdziesz w dokumentacji składni instrukcji CREATE MODEL dla modeli ciągów czasowych.
Krok 4
Dowiedzmy się więcej o naszym modelu. Gdy trenowanie dobiegnie końca, wykonajmy kolejne zapytanie, w razie potrzeby ponownie zastępując fragment demo:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
Przeanalizujmy wyniki. W każdym wierszu zobaczysz model kandydujący z jego parametrami i statystykami oceny. Wyniki są zwracane w kolejności rosnącej według AIC (kryterium informacyjnego Akaikego), co stanowi względny wskaźnik jakości modelu. Model w pierwszym wierszu ma więc najniższy wskaźnik AIC i jest uważany za najlepszy.
Będzie można zobaczyć parametry p, d i q modelu ARIMA, a także sezonowość wykrytą w modelu. W tym przypadku główny model uwzględnia sezonowość zarówno tygodniową, jak i roczną.
Krok 5
Teraz możemy tworzyć prognozy za pomocą funkcji ML.FORECAST
.
Wklej lub wpisz poniższy ciąg (zastępując w razie potrzeby prezentację):
SELECT * FROM ML.FORECAST(MODEL `demo.cta_ridership_model`, STRUCT(7 AS horizon))
To zapytanie po prostu prognozuje 7 dni za pomocą naszego modelu. Widać tutaj siedem zwróconych wierszy. Prognoza obejmuje też przedział ufności o wartości domyślnej 0,95, który można skonfigurować w zapytaniu.
Dobra robota: utworzyliśmy model ciągu czasowego za pomocą zaledwie kilku zapytań BQML.
6. Utwórz niestandardowy model prognozowania
W tej sekcji:
- Usuń z danych wyjątki
- Prognozowanie wieloetapowe
- Uwzględnij dodatkowe funkcje w modelu ciągu czasowego
- Dowiedz się więcej o architekturach sieci neuronowych do prognozowania ciągów czasowych: LSTM i CNN
- Poznaj modele statystyczne, w tym wygładzanie Holta-Wintersa
- Modele złożone
Krok 1
W Vertex AI Workbench przejdź do folderu training-data-analyst/courses/ai-for-time-series/notebooks
i otwórz 02-model.ipynb
.
Krok 2
Wyczyść wszystkie komórki w notatniku (Edytuj > Wyczyść wszystkie dane wyjściowe), zmień ustawienia regionu, projektu i zasobnika w jednej z kilku pierwszych komórek, a następnie „Uruchamiaj komórki” po kolei.
Krok 3
W notatniku możesz teraz zapoznać się z kilkoma architekturami modeli: LSTM, CNN i modelami statystycznymi. W przypadku każdego modelu możesz sprawdzić jego skuteczność w porównaniu z danymi testowymi:
7. Trenowanie i prognozowanie w chmurze
W tej sekcji:
- Przygotowywanie danych i modeli do trenowania w chmurze
- Wytrenuj model i monitoruj postęp zadania za pomocą trenowania AI Platform
- Prognozowanie przy użyciu modelu z prognozami AI Platform
Krok 1
W Vertex AI Workbench przejdź do folderu training-data-analyst/courses/ai-for-time-series/notebooks
i otwórz 03-cloud-training.ipynb
.
Krok 2
Wyczyść wszystkie komórki w notatniku (Edytuj > Wyczyść wszystkie dane wyjściowe), zmień ustawienia regionu, projektu i zasobnika w jednej z kilku pierwszych komórek, a następnie „Uruchamiaj komórki” po kolei.
Krok 3
W poprzedniej sekcji wytrenowaliśmy model i zastosowaliśmy do niego prognozę, a wszystko to w notatniku Workbench. W tej sekcji zademonstrowaliśmy, jak używać pakietu Python SDK for Vertex AI z Twojego notatnika do korzystania z usług Vertex AI do trenowania i wdrażania.
8. Wyzwanie
W tej sekcji wykorzystasz zdobytą wiedzę w nowym zbiorze danych.
Nie znajdziesz tu szczegółowych instrukcji, tylko kilka wskazówek (jeśli ich potrzebujesz).
Celem jest prognozowanie 311 żądań usługi z Nowego Jorku. Żądania inne niż nagłe obejmują skargi dotyczące hałasu, problemów ze światłami itp.
Krok 1
Zacznijmy od zrozumienia zbioru danych.
Najpierw uzyskaj dostęp do zbioru danych City of New York 311 Service Request.
Aby lepiej poznać dane, wypróbuj kilka przykładowych zapytań wymienionych w opisie zbioru danych:
- Ile jest 311 żądań dotyczących ciężarówek z lodami?
- W które dni otrzymujemy najwięcej 311 próśb dotyczących stron?
W interfejsie BigQuery wybierz Utwórz zapytanie, aby dowiedzieć się, jak uzyskać dostęp do zbioru danych. Zwróć uwagę, że instrukcja select wysyła zapytanie do funkcji bigquery-public-data.new_york_311.311_service_requests
.
Krok 2
Zaczynamy. W tej sekcji zmodyfikuj notatnik Eksploruj i wizualizuj, aby móc pracować z tymi danymi.
Wskazówki
- Skopiuj notatnik
01-explore.ipynb
i rozpocznij pracę na jego podstawie. - Aby przejrzeć dane, spróbuj wykonać to zapytanie:
from google.cloud import bigquery as bq
sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""
client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()
df.head()
- Aby uzyskać liczbę incydentów według miesiąca, użyj tego zapytania:
SELECT
COUNT(unique_key) as y,
DATE_TRUNC(DATE(created_date), month) as ds
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
- Zaktualizuj zmienne kolumny w sekcji stałych. W powyższym zapytaniu kolumna docelowa to y, a kolumna daty to ds. Nie ma żadnych dodatkowych funkcji.
- Rozważ zmianę nazwy pliku, w którym eksportujesz dane do użycia w następnym module.
- Wyeksportuj dane za pomocą:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
Krok 3
Utwórzmy teraz model ciągu czasowego z danymi miesięcznymi.
Wskazówki:
- Skopiuj notatnik
02-model.ipynb
i rozpocznij pracę na jego podstawie. - Zaktualizuj parametry zbioru danych:
- Zaktualizuj parametry
target_col
its_col
, aby pasowały do nowego zbioru danych. - Zaktualizuj parametry modelu:
- Częstotliwość względem miesiąca (kod początku miesiąca to „MS”)
- Kroki wprowadzania: 12 (okres ważności to 12 miesięcy)
- Kroki wyjściowe: 3 (prognoza: 3 miesiące do przodu)
- Sezony: 12 (sezon trwa 12 miesięcy)
- zmień nazwę pliku wejściowego, jeśli została zmieniona w poprzednim notatniku.
- Jeśli uruchomisz zapytanie w połowie miesiąca, łączna kwota miesięczna za ostatni miesiąc będzie znacznie niższa od oczekiwanej. Na potrzeby tego modułu usuńmy ostatni miesiąc ze zbioru danych za pomocą polecenia
df = df[:-1]
- W danych nie ma żadnych wyraźnych odchyleń, więc pomiń je lub skomentuj.
- Dostosuj jednostki LSTM, filtry CNN i rozmiar jądra dla tego nowego modelu.
9. Czyszczenie
Jeśli chcesz nadal korzystać z tego notatnika, zalecamy wyłączenie go, gdy nie jest używany. W interfejsie Workbench w konsoli Cloud wybierz notatnik, a następnie kliknij Zatrzymaj:
Jeśli chcesz usunąć wszystkie zasoby utworzone w tym module, po prostu usuń notatnik, zamiast go zatrzymywać.
Za pomocą menu nawigacyjnego w konsoli Cloud przejdź do Cloud Storage i usuń oba zasobniki utworzone do przechowywania zasobów modelu (OSTRZEŻENIE: zrób to tylko wtedy, gdy nowe zasobniki zostały utworzone tylko na potrzeby tego modułu).