תחזיות של סדרת זמנים באמצעות Vertex AI ו-BigQuery ML

1. סקירה כללית

בשיעור ה-Lab הזה תלמדו איך לפתח מודל חיזוי לסדרה על זמן באמצעות TensorFlow, ואז תלמדו איך לפרוס את המודלים האלה באמצעות Vertex AI.

מה לומדים

נסביר לכם איך:

  • טרנספורמציה של נתונים כדי שניתן יהיה להשתמש בהם במודל למידת מכונה
  • הצגה חזותית וחקירה של נתונים
  • שימוש ב-BigQuery ML כדי ליצור מודל חיזוי לסדרות זמן
  • פיתוח מודל חיזוי לפי סדרת זמנים באמצעות TensorFlow באמצעות ארכיטקטורות LSTM ו-CNN

2. מבוא לחיזוי לפי סדרת זמנים

המטרה של Codelab הזו היא איך להחיל שיטות חיזוי של סדרות זמנים באמצעות Google Cloud Platform. זה לא קורס כללי לחיזוי סדרות זמנים, אבל סיור קצר של העקרונות האלה יעזור למשתמשים שלנו.

נתונים על סדרת זמנים

ראשית, מהי סדרת זמנים? זהו מערך נתונים עם נתונים שמתועדים במרווחי זמן קבועים. מערך נתונים של סדרת זמנים מכיל גם זמן וגם לפחות משתנה אחד שתלוי בזמן.

85af6a1ff05c69f2.png

רכיבים

אפשר לפרק סדרה של זמנים לרכיבים:

  • מגמה: זזים למעלה או למטה לפי דפוס סביר של צפי
  • עונתי: חוזר על פני תקופה ספציפית, כמו יום, שבוע, חודש, עונה וכו'.
  • אקראי: תנודות שיוריות

יכולות להיות כמה שכבות של עונתיות. לדוגמה, מוקד טלפוני עשוי לראות דפוס בנפח השיחות בימים מסוימים בשבוע וגם בחודשים נתונים. ייתכן שניתן להסביר את השאריות באמצעות משתנים אחרים מלבד זמן.

6e8d45bbbc388ec.png

תחנה

כדי לקבל את התוצאות הטובות ביותר בחיזוי, צריך להפוך את הנתונים של סדרות זמנים לתחנות, שבהן המאפיינים הסטטיסטיים כמו ממוצע ושונות נשארים קבועים לאורך זמן. אפשר להשתמש בטכניקות כמו הבדלות ופירוט, כדי להפוך את הנתונים האלה לנייחים יותר.

לדוגמה, בתרשים שמתחת לריכוז הפחמן הדו-חמצני מוצג דפוס שנתי חוזר עם מגמת עלייה. ( מקור)

ab82857e2e7d0b89.png

אחרי שמסירים את המגמה הלינארית, הנתונים מתאימים יותר לחיזוי, כי עכשיו יש להם ממוצע קבוע.

c936381ab1095528.png

שימוש בנתונים של סדרת זמנים ללמידת מכונה

כדי להשתמש בנתונים של סדרות זמנים בבעיה של למידת מכונה, צריך לשנות אותם כך שאפשר יהיה להשתמש בערכים קודמים לחיזוי ערכים עתידיים. בטבלה הזו מוצגת דוגמה לאופן שבו נוצרים משתנים באיחור כדי לעזור בחיזוי היעד.

d667a941dbd470f5.png

אחרי שעסקנו בכמה יסודות, בואו נתחיל לחקור נתונים ותחזיות!

3. הגדרת סביבת ה-notebook

עכשיו, אחרי שעברנו על מבוא קצר של הנתונים, נגדיר עכשיו את סביבת פיתוח המודלים שלנו.

שלב 1: הפעלת ממשקי API

המחבר של BigQuery משתמש ב-BigQuery Storage API. מחפשים את BigQuery Storage API במסוף ומפעילים את ה-API אם הוא מושבת כרגע.

9895a2fd3cdf8f8c.png

שלב 2: יצירת notebook ב-Vertex AI Workbench

עוברים לקטע Vertex AI Workbench במסוף Cloud ולוחצים על New Notebook. לאחר מכן בוחרים את סוג ה-notebook העדכני ביותר מסוג TensorFlow Enterprise 2.x ללא מעבדי GPU:

4e7b73eabf2bc061.png

משתמשים באפשרויות ברירת המחדל ואז לוחצים על יצירה. אחרי שיוצרים את המכונה, בוחרים באפשרות Open JupyterLab:

18c9f3c462aafaee.png

לאחר מכן יוצרים notebook מסוג Python 3 מ-JupyterLab:

58523671a252b95a.png

שלב 3: הורדת החומרים לשיעור ה-Lab

יצירת חלון Terminal חדש מממשק JupyterLab: File -> חדש -> טרמינל.

משם, משכפלים את חומר המקור באמצעות הפקודה הבאה:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. לחקור ולהציג נתונים

בקטע הזה:

  • יצירת שאילתה שמקובצת נתונים לסדרת זמנים
  • מילוי הערכים החסרים
  • המחשת נתונים
  • פירוק סדרות זמנים לטרנד ולרכיבים עונתיים

שלב 1

ב-Vertex AI Workbench, עוברים אל training-data-analyst/courses/ai-for-time-series/notebooks ופותחים את 01-explore.ipynb.

שלב 2

מנקים את כל התאים ב-notebook (עריכה > ניקוי כל הפלט), משנים את הגדרות האזור, הפרויקט והקטגוריה באחד מהתאים הראשונים, ואז מריצים את התאים אחד אחרי השני.

שלב 3

בקטע הזה ייבאתם את הנתונים וביצעתם הצגה חזותית של מאפיינים שונים שלהם. עכשיו, אחרי שתקבלו תמונה ברורה יותר של הנתונים, תוכלו להמשיך לבנות מודלים של למידת מכונה שמבוססים על הנתונים האלה.

55839e7bc0427915.png

5. יצירת מודל באמצעות תחזיות על סדרת זמנים של BigQuery

בקטע הזה:

  • ייבוא נתוני קלט של סדרת זמנים לטבלת BigQuery
  • יצירת מודל של סדרת זמנים באמצעות תחביר BQML
  • איך להעריך את הפרמטרים ואת רמת הדיוק של המודל
  • תחזית לפי המודל שלך

שלב 1

ניצור טבלת BigQuery עם הנתונים הגולמיים מקובץ ה-CSV שנבדק. נתחיל בהורדה של קובץ ה-CSV מסביבת ה-notebook.

מהספרייה training-data-analyst/courses/ai-for-time-series/notebooks/data, לוחצים לחיצה ימנית על cta_ridership.csv ואז מורידים אותו לסביבה המקומית שלכם.

שלב 2

בשלב הבא נעלה את הנתונים האלה לטבלת BigQuery.

כדי לעבור ל-BigQuery במסוף (באמצעות חיפוש או שימוש בקישור הזה):

649e7ab1c44b75e8.png

אפשר להוסיף את הטבלה למערך נתונים חדש או קיים, כדי לקבץ טבלאות קשורות. אם עדיין לא יצרתם מערך נתונים, תוכלו ללחוץ על הפרויקט בפינה הימנית התחתונה ולבחור באפשרות Create Dataset (יצירת מערך נתונים) בפינה הימנית התחתונה.

281b97020cd52f29.png

בוחרים שם לבחירתכם, למשל demo, מאשרים את אפשרויות ברירת המחדל וממשיכים.

כשמערך הנתונים שנבחר, בוחרים באפשרות יצירת טבלה בפינה השמאלית התחתונה כדי ליצור טבלה חדשה.

ad47810d44cfb289.png

באפשרויות ליצירת טבלה, בוחרים באחת מהאפשרויות הבאות:

  • יצירת טבלה מ: Upload
  • בחירת קובץ: cta_ridership.csv
  • שם הטבלה: cta_ridership
  • סכימה: מסמנים את התיבה כדי לזהות באופן אוטומטי פרמטרים של סכימה וקלט.

213e4177e9e79544.png

שלב 3

זה הזמן ליצור את המודל שלנו! ל-BigQuery ML יש תחביר פשוט שדומה ל-SQL, שמאפשר ליצור מגוון רחב של סוגי מודלים.

בעורך השאילתות, מדביקים או מקלידים את השאילתה, אם צריך, מחליפים את demo בשם מערך הנתונים בשני המקומות:

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`

כדי להבין, נעבור על אלמנטים מרכזיים בתחביר:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

ההצהרה הזו יוצרת את המודל. יש גרסאות שונות של ההצהרה הזו, למשל: CREATE MODEL, אבל בחרנו להחליף כאן מודל קיים באותו שם.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

כאן אנחנו מגדירים את אפשרויות המודל, והאפשרות הראשונה היא סוג המודל. בחירה באפשרות ARIMA תיצור מודל חיזוי של סדרת זמנים.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

העמודה עם פרטי התאריך והשעה

TIME_SERIES_DATA_COL=‘total_rides'

עמודת הנתונים

HOLIDAY_REGION=‘us'

הפרמטר האופציונלי הזה מאפשר לנו לכלול במודל את החגים. ניתוח הנתונים בשלב הקודם הראה שמספר הנוסעים היה נמוך יותר בחגים, והנתונים מגיעים משיקגו, אילינוי בארה"ב, ואנחנו כוללים במודל חגים בארה"ב.

AS SELECT ... FROM ...

בקטע הזה נבחר את נתוני הקלט שנשתמש בהם כדי לאמן את המודל.

יש עוד כמה אפשרויות שאפשר להוסיף לשאילתה, למשל הגדרת עמודה אם יש לכם כמה סדרות זמנים, או בחירה אם לגלות באופן אוטומטי את הפרמטרים של מודל ARIMA. תוכלו לקבל פרטים נוספים בחומר העזר על התחביר CREATE MODEL למודלים של סדרות זמנים.

שלב 4

בואו נלמד יותר פרטים על המודל שלנו. בסיום האימון, נריץ שאילתה נוספת. אם צריך, מחליפים את הדגמה שוב:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

בואו נפרש את התוצאות. בכל שורה יוצג המודל המועמד, עם הפרמטרים והנתונים הסטטיסטיים של ההערכה שלו. התוצאות מוחזרות בסדר עולה לפי AIC, או קריטריון למידע על Akaike, שמייצג מדד יחסי של איכות המודל. לכן, למודל בשורה הראשונה יש את מדד ה-AIC הנמוך ביותר, והוא נחשב למודל הטוב ביותר.

תוכלו לראות את הפרמטרים p, d ו-q של מודל ARIMA, וגם את העונתיות שהתגלתה במודל. במקרה הזה, המודל המוביל כולל גם עונתיות וגם שבועית.

5b5b1e129c70a340.png

שלב 5

עכשיו אנחנו מוכנים ליצור תחזיות באמצעות הפונקציה ML.FORECAST.

מדביקים או מקלידים את הפרטים הבאים (מחליפים את הדגמה (דמו) במקרה הצורך):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

השאילתה הזו פשוט יוצרת תחזיות ל-7 ימים באמצעות המודל שלנו. אפשר לראות את שבע השורות שהוחזרו למטה. התחזית כוללת גם רווח בר-סמך שברירת המחדל שלו היא 0.95, אבל ניתן להגדיר אותו בשאילתה.

b8a7f22657dc2d27.png

עבודה מצוינת: יצרנו מודל של סדרת זמנים באמצעות כמה שאילתות BQML.

6. בניית מודל תחזית בהתאמה אישית

בקטע הזה:

  • הסרת חריגים מהנתונים
  • ביצוע תחזית מרובת שלבים
  • הכללת תכונות נוספות במודל של סדרת זמנים
  • מידע על ארכיטקטורות של רשתות נוירונים לצורך חיזוי סדרות זמנים: LSTM ו-CNN
  • מידע על מודלים סטטיסטיים, כולל החלקה מעריכית (Holt-Winters)
  • הרכבת מודלים

שלב 1

ב-Vertex AI Workbench, עוברים אל training-data-analyst/courses/ai-for-time-series/notebooks ופותחים את 02-model.ipynb.

שלב 2

מנקים את כל התאים ב-notebook (עריכה > ניקוי כל הפלט), משנים את הגדרות האזור, הפרויקט והקטגוריה באחד מהתאים הראשונים, ואז מריצים את התאים אחד אחרי השני.

שלב 3

במחברת, חקרתם עכשיו מספר ארכיטקטורות של מודלים: LSTM, CNN ומודלים סטטיסטיים. בכל מודל, אפשר לראות את הביצועים של המודל ביחס לנתוני הבדיקה:

a528df58f4e6d372.png

7. אימון וחיזוי בענן

בקטע הזה:

  • להכין נתונים ומודלים לאימון בענן
  • לאמן את המודל ולעקוב אחרי התקדמות המשימה באמצעות הדרכת AI Platform
  • חיזוי באמצעות המודל באמצעות AI Platform Predictions

שלב 1

ב-Vertex AI Workbench, עוברים אל training-data-analyst/courses/ai-for-time-series/notebooks ופותחים את 03-cloud-training.ipynb.

שלב 2

מנקים את כל התאים ב-notebook (עריכה > ניקוי כל הפלט), משנים את הגדרות האזור, הפרויקט והקטגוריה באחד מהתאים הראשונים, ואז מריצים את התאים אחד אחרי השני.

שלב 3

בקטע הקודם, אימנו מודל ויצרנו חיזוי עבורו – הכול מתוך notebook של Workbench. בקטע הזה הדגמנו איך להשתמש ב-Python SDK ל-Vertex AI מה-notebook כדי להשתמש בשירותי Vertex AI לאימון ופריסה.

a3f6b5dc895a24fb.png

8. האתגר

בחלק הזה תנסו ליישם את המושגים שלמדתם על מערך נתונים חדש.

לא נספק הוראות מפורטות, אלא רק כמה רמזים (אם תרצו!).

המטרה היא לחזות 311 בקשות שירות מהעיר ניו יורק. בקשות שאינן לחירום כוללות תלונות על רעש, בעיות פנסי רחוב וכו'.

שלב 1

נתחיל בהבנת מערך הנתונים.

קודם כול, נכנסים למערך הנתונים city of New York 311 Service Requests.

כדי להכיר את הנתונים טוב יותר, נסו כמה שאילתות לדוגמה שמפורטות בתיאור מערך הנתונים:

  • מהו מספר 311 הבקשות שקשורות למשאיות גלידה?
  • באילו ימים מתקבלות הכי הרבה 311 בקשות שקשורות למפלגות?

בממשק המשתמש של BigQuery, בוחרים באפשרות Create Query כדי לראות איך לגשת למערך הנתונים. חשוב לשים לב שהשאילתה שנבחרה נשלחה על ידי bigquery-public-data.new_york_311.311_service_requests.

שלב 2

אנחנו מוכנים להתחיל. בקטע הזה, מבצעים שינויים ב-notebook הצגה והצגה חזותית כדי לעבוד עם הנתונים האלה.

רמזים

  • משכפלים את ה-notebook 01-explore.ipynb ומתחילים לעבוד ממנו.
  • כדי לעיין בנתונים, כדאי לנסות את השאילתה הזו:
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()
  • כדי לקבל את מספר האירועים לפי חודש, אפשר להשתמש בשאילתה הזו:
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
  • מעדכנים את המשתנים של העמודות בקטע הקבועים. בשאילתה שלמעלה, עמודת היעד היא y ועמודת התאריך היא ds. אין תכונות נוספות.
  • כדאי לשנות את שם הקובץ שאליו מייצאים את הנתונים לשיעור ה-Lab הבא.
  • ייצוא הנתונים באמצעות: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

שלב 3

עכשיו ניצור מודל של סדרת זמנים עם הנתונים החודשיים.

רמזים:

  • משכפלים את ה-notebook 02-model.ipynb ומתחילים לעבוד ממנו.
  • מעדכנים את הפרמטרים של מערך הנתונים:
  • מעדכנים את הפרמטרים target_col ו-ts_col כך שיתאימו למערך הנתונים החדש.
  • מעדכנים את הפרמטרים של המודל:
  • תדירות לחודש (קוד התחלת החודש הוא 'MS')
  • שלבים להזנת קלט: 12 (חלון מבט לאחור הוא 12 חודשים)
  • שלבי פלט: 3 (חיזוי ל-3 חודשים קדימה)
  • עונות: 12 (עונתיות היא 12 חודשים)
  • אם שיניתם את השם של קובץ הקלט ב-notebook הקודם, צריך לשנות אותו.
  • אם מריצים את השאילתה באמצע החודש, הסכום החודשי הכולל של החודש האחרון יהיה נמוך בהרבה מהצפוי. לצורך שיעור ה-Lab הזה, נסיר את החודש האחרון ממערך הנתונים באמצעות: df = df[:-1]
  • לא נראים חריגים חריגים בנתונים, לכן דלגו על התאים האלה או הוסיפו הערה לגביהם.
  • משנים את יחידות ה-LSTM ואת מסנני ה-CNN וגודל הליבה (kernel) של המודל החדש.

9. הסרת המשאבים

אם ברצונך להמשיך להשתמש ב-notebook הזה, מומלץ להשבית אותו כשהוא לא בשימוש. בממשק המשתמש של Workbench במסוף Cloud, בוחרים את ה-notebook ואז בוחרים באפשרות Stop:

57213ef2edad9257.png

כדי למחוק את כל המשאבים שיצרתם בשיעור ה-Lab הזה, תוכלו פשוט למחוק את ה-notebook של שולחן העבודה במקום להפסיק אותו.

באמצעות תפריט הניווט שבמסוף Cloud, עוברים אל Storage ומוחקים את שתי הקטגוריות שיצרתם לצורך אחסון נכסי המודלים (אזהרה: יש לבצע את הפעולה הזו רק אם יצרתם קטגוריות חדשות רק לשיעור ה-Lab הזה).