1. Przegląd
Z tego modułu dowiesz się, jak utworzyć model prognozowania szeregów czasowych za pomocą TensorFlow, a potem wdrożyć go w Vertex AI.
Czego się nauczysz
Poznasz takie zagadnienia jak:
- przekształcać dane, aby można było ich używać w modelu ML;
- Wizualizowanie i przeglądanie danych
- Tworzenie modelu prognozowania ciągów czasowych za pomocą BigQuery ML
- Tworzenie modelu prognozowania ciągów czasowych w TensorFlow przy użyciu architektur LSTM i CNN
2. Wprowadzenie do prognozowania ciągów czasowych
Ten przewodnik skupia się na tym, jak stosować techniki prognozowania szeregów czasowych za pomocą Google Cloud Platform. Nie jest to ogólny kurs prognozowania szeregów czasowych, ale krótkie wprowadzenie do tych zagadnień może być przydatne dla naszych użytkowników.
Dane szeregów czasowych
Najpierw wyjaśnijmy, czym jest szereg czasowy. Jest to zbiór danych z informacjami rejestrowanymi w regularnych odstępach czasu. Zbiór danych szeregów czasowych zawiera zarówno czas, jak i co najmniej 1 zmienną zależną od czasu.

Komponenty
Szereg czasowy można podzielić na komponenty:
- Trend: rośnie lub maleje w dość przewidywalny sposób.
- Sezonowe: powtarzające się w określonym czasie, np. w ciągu dnia, tygodnia, miesiąca, sezonu itp.
- Losowe: pozostałe wahania
Może występować wiele warstw sezonowości. Na przykład centrum obsługi telefonicznej może zauważyć wzorzec w liczbie połączeń w określone dni tygodnia i miesiące. Resztę można wyjaśnić za pomocą innych zmiennych niż czas.

Stacjonarność
Aby uzyskać najlepsze wyniki prognozowania, dane szeregów czasowych powinny być stacjonarne, czyli właściwości statystyczne, takie jak średnia i wariancja, powinny być stałe w czasie. Aby dane pierwotne były bardziej stacjonarne, można zastosować techniki takie jak różnicowanie i usuwanie trendu.
Na przykład wykres stężenia CO₂ poniżej pokazuje powtarzający się roczny wzorzec z tendencją wzrostową. ( Źródło)

Po usunięciu trendu liniowego dane lepiej nadają się do prognozowania, ponieważ mają teraz stałą średnią.

Wykorzystanie danych szeregów czasowych w uczeniu maszynowym
Aby używać danych szeregów czasowych w problemie uczenia maszynowego, należy je przekształcić tak, aby poprzednie wartości można było wykorzystać do prognozowania przyszłych wartości. Ta tabela pokazuje przykład tworzenia zmiennych opóźnionych, które pomagają przewidywać wartość docelową.

Omówiliśmy już podstawy, więc zacznijmy analizować dane i prognozować.
3. Konfigurowanie środowiska notatnika
Po krótkim wprowadzeniu do danych skonfigurujmy teraz środowisko programistyczne modelu.
Krok 1. Włącz interfejsy API
Oprogramowanie sprzęgające BigQuery korzysta z interfejsu BigQuery Storage API. Wyszukaj w konsoli BigQuery Storage API i włącz go, jeśli jest wyłączony.

Krok 2. Utwórz notatnik Vertex AI Workbench
Przejdź do sekcji Vertex AI Workbench w konsoli Cloud i kliknij Nowy notatnik. Następnie wybierz najnowszy typ notatnika TensorFlow Enterprise 2.x bez procesorów graficznych:
Użyj opcji domyślnych, a następnie kliknij Utwórz. Po utworzeniu instancji wybierz Otwórz JupyterLab:

Następnie utwórz notatnik Python 3 w JupyterLab:

Krok 3. Pobierz materiały do ćwiczeń
Utwórz nowe okno terminala w interfejsie JupyterLab: Plik –> Nowy –> Terminal.
Następnie sklonuj materiał źródłowy za pomocą tego polecenia:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
4. Przeglądanie i wizualizowanie danych
W tej sekcji:
- Tworzenie zapytania, które grupuje dane w serię czasową
- Uzupełnianie brakujących wartości
- Wizualizacja danych
- Rozkładanie szeregów czasowych na komponenty trendu i sezonowości
Krok 1
W Vertex AI Workbench kliknij 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 pierwszych komórek, a następnie uruchamiaj komórki pojedynczo.
Krok 3
W tej sekcji zaimportowano dane i wizualizowano różne ich wymiary. Teraz, gdy masz już jaśniejszy obraz danych, możesz przejść do modelowania uczenia maszynowego z ich użyciem.

5. Tworzenie modelu za pomocą prognozowania ciągów czasowych w BigQuery
W tej sekcji:
- Importowanie danych wejściowych szeregów czasowych do tabeli BigQuery
- Tworzenie modelu ciągu czasowego za pomocą składni BQML
- Dowiedz się, jak ocenić parametry i dokładność modelu.
- Prognozowanie za pomocą modelu
Krok 1
Utworzymy tabelę BigQuery z danymi pierwotnymi z pliku CSV, który właśnie sprawdziliśmy. Zacznijmy od pobrania pliku CSV ze środowiska notatnika.
W katalogu training-data-analyst/courses/ai-for-time-series/notebooks/data kliknij prawym przyciskiem myszy plik cta_ridership.csv i pobierz go do środowiska lokalnego.
Krok 2
Następnie prześlemy te dane do tabeli BigQuery.
Otwórz BigQuery w konsoli (wyszukując lub korzystając z tego linku):

Możesz dodać tabelę do nowego lub istniejącego zbioru danych, który grupuje powiązane tabele. Jeśli nie masz jeszcze utworzonego zbioru danych, możesz kliknąć projekt w lewym dolnym rogu, a następnie w prawym dolnym rogu wybrać Utwórz zbiór danych.

Wybierz dowolną nazwę, np. demo, zaakceptuj ustawienia domyślne i kontynuuj.
Po wybraniu tego zbioru danych kliknij Utwórz tabelę w prawym dolnym rogu, aby utworzyć nową tabelę.

W przypadku opcji tworzenia tabeli wybierz:
- Utwórz tabelę z: Prześlij
- Wybierz plik: cta_ridership.csv
- Nazwa tabeli: cta_ridership
- Schemat: zaznacz pole, aby automatycznie wykrywać schemat i parametry wejściowe.

Krok 3
Czas utworzyć model. BigQuery ML udostępnia prostą składnię podobną do SQL, która umożliwia tworzenie wielu różnych typów modeli.
W edytorze zapytań wklej lub wpisz to zapytanie, zastępując w razie potrzeby ciąg demo nazwą 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ę kluczowym elementom składni, aby ją zrozumieć:
| Ta instrukcja tworzy model. Istnieją warianty tej instrukcji, np. |
| Tutaj definiujemy opcje modelu, przy czym pierwszą opcją jest typ modelu. Wybranie opcji ARIMA spowoduje utworzenie modelu prognozowania ciągów czasowych. |
| Kolumna z informacjami o dacie i godzinie |
| Kolumna danych |
| Ten opcjonalny parametr umożliwia uwzględnienie w modelu świąt. W ramach eksploracji danych w poprzednim kroku zauważyliśmy, że w dni świąteczne liczba przejazdów była mniejsza. Dane pochodzą z Chicago w stanie Illinois w USA, więc uwzględniamy w modelu amerykańskie święta. |
| W tej sekcji wybieramy dane wejściowe, których użyjemy do trenowania modelu. |
Do zapytania możesz dodać wiele innych opcji, np. zdefiniować kolumnę, jeśli masz wiele szeregów czasowych, lub wybrać, czy parametry modelu ARIMA mają być wykrywane automatycznie. Więcej informacji znajdziesz w dokumentacji składni instrukcji CREATE MODEL w przypadku modeli szeregów czasowych.
Krok 4
Dowiedzmy się więcej o naszym modelu. Po zakończeniu trenowania uruchommy kolejne zapytanie, ponownie zastępując w razie potrzeby słowo demo:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
Zinterpretujmy wyniki. W każdym wierszu zobaczysz model kandydujący wraz z jego parametrami i statystykami oceny. Wyniki są zwracane w kolejności rosnącej według kryterium informacyjnego Akaike (AIC), które jest względnym wskaźnikiem jakości modelu. Model w pierwszym wierszu ma najniższą wartość AIC i jest uważany za najlepszy.
Zobaczysz parametry p, d i q modelu ARIMA, a także sezonowość wykrytą w modelu. W tym przypadku najlepszy model uwzględnia sezonowość tygodniową i roczną.

Krok 5
Teraz możemy prognozować za pomocą funkcji ML.FORECAST.
Wklej lub wpisz poniższy tekst (w razie potrzeby zastąp demo):
SELECT
*
FROM
ML.FORECAST(MODEL `demo.cta_ridership_model`,
STRUCT(7 AS horizon))
To zapytanie po prostu prognozuje dane na 7 dni do przodu przy użyciu naszego modelu. Poniżej widzimy 7 zwróconych wierszy. Prognoza zawiera też przedział ufności, który domyślnie wynosi 0,95, ale można go skonfigurować w zapytaniu.

Świetna robota: utworzyliśmy model szeregów czasowych za pomocą zaledwie kilku zapytań BQML.
6. Tworzenie niestandardowego modelu prognozowania
W tej sekcji:
- Usuwanie wartości odstających z danych
- Przeprowadzanie prognoz wieloetapowych
- Uwzględnianie dodatkowych cech w modelu szeregów czasowych
- Informacje o architekturach sieci neuronowych do prognozowania szeregów czasowych: LSTM i CNN
- Więcej informacji o modelach statystycznych, w tym o wygładzaniu wykładniczym Holt-Winters
- Modele zespołowe
Krok 1
W Vertex AI Workbench kliknij 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 pierwszych komórek, a następnie uruchamiaj komórki pojedynczo.
Krok 3
W notatniku zapoznaliśmy 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
- Trenowanie modelu i monitorowanie postępów zadania za pomocą AI Platform Training
- Prognozowanie przy użyciu modelu za pomocą AI Platform Prediction
Krok 1
W Vertex AI Workbench kliknij 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 pierwszych komórek, a następnie uruchamiaj komórki pojedynczo.
Krok 3
W poprzedniej sekcji wytrenowaliśmy model i wykonaliśmy za jego pomocą prognozę, a wszystko to w notatniku Workbench. W tej sekcji pokazaliśmy, jak używać pakietu Python SDK do Vertex AI w notatniku, aby korzystać z usług Vertex AI do trenowania i wdrażania.

8. Wyzwanie
W tej sekcji spróbujesz zastosować poznane koncepcje do nowego zbioru danych.
Nie podamy szczegółowych instrukcji, tylko kilka wskazówek (jeśli chcesz!).
Celem jest przewidywanie zgłoszeń do numeru 311 z Nowego Jorku. Te zgłoszenia nie dotyczące sytuacji awaryjnych obejmują skargi na hałas, problemy z oświetleniem ulicznym itp.
Krok 1
Zacznijmy od zrozumienia zbioru danych.
Najpierw otwórz zbiór danych City of New York 311 Service Requests.
Aby lepiej poznać dane, wypróbuj kilka przykładowych zapytań wymienionych w opisie zbioru danych:
- Ile zgłoszeń do numeru 311 dotyczyło furgonetek z lodami?
- W które dni jest najwięcej zgłoszeń do numeru 311 dotyczących imprez?
W interfejsie BigQuery kliknij Utwórz zapytanie, aby dowiedzieć się, jak uzyskać dostęp do zbioru danych. Zwróć uwagę, że instrukcja select wysyła zapytanie z bigquery-public-data.new_york_311.311_service_requests.
Krok 2
Możemy zaczynać. W tej sekcji zmodyfikuj notatnik Explore and Visualize, aby pracować z tymi danymi.
Wskazówki
- Zduplikuj
01-explore.ipynbnotatnik i zacznij z niego korzystać. - Aby zbadać dane, wypróbuj 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 kolumn w sekcji stałych. W powyższej kwerendzie kolumna docelowa to y, a kolumna daty to ds. Brak dodatkowych funkcji.
- W kolejnym module możesz zmienić nazwę pliku, do którego eksportujesz dane.
- Wyeksportuj dane za pomocą:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
Krok 3
Teraz utwórzmy model szeregu czasowego z danymi miesięcznymi.
Wskazówki:
- Zduplikuj
02-model.ipynbnotatnik i zacznij z niego korzystać. - Zaktualizuj parametry zbioru danych:
- Zaktualizuj parametry
target_colits_col, aby pasowały do nowego zbioru danych. - Zaktualizuj parametry modelu:
- Częstotliwość miesięczna (kod początku miesiąca to „MS”)
- Kroki wejściowe: 12 (okres wsteczny to 12 miesięcy)
- Kroki wyjściowe: 3 (prognoza na 3 miesiące)
- Sezony: 12 (sezonowość wynosi 12 miesięcy)
- Jeśli nazwa pliku wejściowego została zmieniona w poprzednim notatniku, zmień ją.
- Jeśli zapytanie zostanie uruchomione w połowie miesiąca, miesięczna suma za ostatni miesiąc będzie znacznie niższa od oczekiwanej. Dlatego na potrzeby tego modułu usuńmy z zbioru danych ostatni miesiąc, używając tego kodu:
df = df[:-1] - W danych nie ma żadnych oczywistych wartości odstających, więc pomiń te komórki lub dodaj do nich komentarz.
- Dostosuj jednostki LSTM oraz filtry i rozmiar jądra CNN w tym nowym modelu.
9. Czyszczenie
Jeśli chcesz nadal korzystać z tego notebooka, zalecamy wyłączanie 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 platformy roboczej zamiast go zatrzymywać.
W menu nawigacyjnym w konsoli Cloud przejdź do sekcji Pamięć i usuń oba utworzone zasobniki do przechowywania zasobów modelu (OSTRZEŻENIE: zrób to tylko wtedy, gdy utworzono nowe zasobniki specjalnie na potrzeby tego modułu).
