1. סקירה כללית
בשיעור ה-Lab הזה תלמדו איך ליצור מודל לחיזוי סדרות עיתיות באמצעות TensorFlow, ואז תלמדו איך לפרוס את המודלים האלה באמצעות Vertex AI.
מה תלמדו
במאמר הזה נסביר איך:
- ביצוע טרנספורמציה של נתונים כדי שאפשר יהיה להשתמש בהם במודל ML
- הצגה חזותית של נתונים ועיון בהם
- שימוש ב-BigQuery ML ליצירת מודל לחיזוי סדרות זמן
- פיתוח מודל לחיזוי סדרות זמן באמצעות TensorFlow עם ארכיטקטורות LSTM ו-CNN
2. מבוא לחיזוי סדרות עיתיות
ה-Codelab הזה מתמקד ביישום של טכניקות לחיזוי סדרות עיתיות באמצעות Google Cloud Platform. זה לא קורס כללי בנושא חיזוי סדרות עיתיות, אבל סקירה קצרה של המושגים עשויה לעזור למשתמשים שלנו.
נתונים של פעולות על ציר הזמן
קודם כול, מהי סדרת זמן? זהו מערך נתונים עם נתונים שנרשמים במרווחי זמן קבועים. מערך נתונים של סדרת זמן מכיל גם זמן וגם לפחות משתנה אחד שתלוי בזמן.

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

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

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

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

אחרי שהסברנו כמה מושגים בסיסיים, הגיע הזמן להתחיל לנתח נתונים ולבצע תחזיות.
3. הגדרת סביבת Notebook
אחרי שקיבלנו מבוא קצר לנתונים, הגיע הזמן להגדיר את סביבת פיתוח המודלים.
שלב 1: הפעלת ממשקי API
המחבר של BigQuery משתמש ב-BigQuery Storage API. מחפשים את BigQuery Storage API במסוף ומפעילים את ה-API אם הוא מושבת.

שלב 2: יצירת notebook ב-Vertex AI Workbench
עוברים אל Vertex AI Workbench section במסוף Cloud ולוחצים על New Notebook. לאחר מכן בוחרים את סוג ה-notebook האחרון של TensorFlow Enterprise 2.x without GPUs:
משתמשים באפשרויות ברירת המחדל ולוחצים על יצירה. אחרי שהמופע נוצר, בוחרים באפשרות Open JupyterLab:

לאחר מכן, יוצרים קובץ notebook של Python 3 מ-JupyterLab:

שלב 3: הורדת חומרי המעבדה
כדי ליצור חלון Terminal חדש מממשק JupyterLab: לוחצים על File (קובץ) -> New (חדש) -> Terminal (טרמינל).
משם, משכפלים את חומר המקור באמצעות הפקודה הבאה:
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 (Edit > Clear All Outputs), משנים את ההגדרות של האזור, הפרויקט והמאגר באחד מהתאים הראשונים, ואז מריצים את התאים אחד אחרי השני.
שלב 3
בקטע הזה ייבאתם את הנתונים והצגתם אותם בצורה ויזואלית במאפיינים שונים. עכשיו, אחרי שיש לכם תמונה ברורה יותר של הנתונים, תוכלו להמשיך ליצירת מודלים של למידת מכונה באמצעות הנתונים האלה.

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 במסוף (אפשר לחפש או להשתמש בקישור הזה):

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

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

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

שלב 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`
כדי להבין את התחביר, נסביר את הרכיבים העיקריים שלו:
| ההצהרה הזו יוצרת את המודל. יש וריאציות של ההצהרה הזו, למשל |
| כאן מגדירים את אפשרויות המודל, כאשר האפשרות הראשונה היא סוג המודל. בחירה באפשרות ARIMA תיצור מודל חיזוי של סדרת זמנים. |
| העמודה עם פרטי התאריך והשעה |
| עמודת הנתונים |
| הפרמטר האופציונלי הזה מאפשר לנו לכלול חגים במודל. בשלב הקודם, ניתוח הנתונים הראה ששיעור הנוסעים נמוך יותר בחגים, והנתונים מגיעים משיקגו, אילינוי, ארה"ב, לכן אנחנו כוללים את החגים בארה"ב במודל. |
| בקטע הזה בוחרים את נתוני הקלט שבהם נשתמש כדי לאמן את המודל. |
יש עוד כמה אפשרויות שאפשר להוסיף לשאילתה, כמו הגדרת עמודה אם יש לכם כמה סדרות עתיות, או בחירה אם לגלות באופן אוטומטי את הפרמטרים של מודל ARIMA. פרטים נוספים זמינים בהפניה לתחביר של הצהרת CREATE MODEL עבור מודלים של סדרות עיתיות.
שלב 4
בואו נלמד עוד על המודל שלנו. אחרי שהאימון יסתיים, נריץ שאילתה נוספת, ונחליף את הדמו אם צריך:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
בואו נפרש את התוצאות. בכל שורה יופיע מודל מועמד, עם הפרמטרים והנתונים הסטטיסטיים של ההערכה שלו. התוצאות מוחזרות בסדר עולה של AIC, או קריטריון המידע של אקייק, שמספק אינדיקטור יחסי לאיכות המודל. לכן, למודל בשורה הראשונה יש את ערך ה-AIC הנמוך ביותר, והוא נחשב למודל הטוב ביותר.
תוכלו לראות את הפרמטרים p, d ו-q של מודל ARIMA, וגם את העונתיות שהתגלתה במודל. במקרה הזה, המודל העליון כולל גם עונתיות שבועית וגם עונתיות שנתית.

שלב 5
עכשיו אפשר להשתמש בפונקציה ML.FORECAST כדי לחזות את הביצועים.
מדביקים או מקלידים את הטקסט הבא (מחליפים את demo אם צריך):
SELECT
*
FROM
ML.FORECAST(MODEL `demo.cta_ridership_model`,
STRUCT(7 AS horizon))
השאילתה הזו פשוט חוזה את הנתונים ל-7 ימים קדימה באמצעות המודל שלנו. אפשר לראות את שבע השורות שהוחזרו למטה. התחזית כוללת גם רווח בר-סמך, שמוגדר כברירת מחדל ל-0.95 אבל אפשר להגדיר אותו בשאילתה.

עבודה מצוינת: יצרנו מודל של סדרת זמן באמצעות כמה שאילתות BQML בלבד.
6. יצירת מודל חיזוי בהתאמה אישית
בקטע הזה תלמדו:
- הסרת ערכים חריגים מהנתונים
- ביצוע חיזוי עם מספר שלבים
- הכללת תכונות נוספות במודל של סדרת זמן
- מידע על ארכיטקטורות של רשתות נוירונים מלאכותיות לחיזוי סדרות עיתיות: LSTM ו-CNN
- מידע על מודלים סטטיסטיים, כולל Holt-Winters Exponential Smoothing
- מודלים של Ensemble
שלב 1
ב-Vertex AI Workbench, מנווטים אל training-data-analyst/courses/ai-for-time-series/notebooks ופותחים את 02-model.ipynb.
שלב 2
מנקים את כל התאים ב-notebook (Edit > Clear All Outputs), משנים את ההגדרות של האזור, הפרויקט והמאגר באחד מהתאים הראשונים, ואז מריצים את התאים אחד אחרי השני.
שלב 3
במחברת, בחנתם כמה ארכיטקטורות של מודלים: LSTM, CNN ומודלים סטטיסטיים. לגבי כל מודל, אפשר לראות את הביצועים שלו בהשוואה לנתוני הבדיקה:

7. אימון וחיזוי בענן
בקטע הזה תלמדו:
- הכנת נתונים ומודלים לאימון בענן
- אימון המודל ומעקב אחרי התקדמות העבודה באמצעות AI Platform Training
- חיזוי באמצעות המודל עם AI Platform Predictions
שלב 1
ב-Vertex AI Workbench, מנווטים אל training-data-analyst/courses/ai-for-time-series/notebooks ופותחים את 03-cloud-training.ipynb.
שלב 2
מנקים את כל התאים ב-notebook (Edit > Clear All Outputs), משנים את ההגדרות של האזור, הפרויקט והמאגר באחד מהתאים הראשונים, ואז מריצים את התאים אחד אחרי השני.
שלב 3
בקטע הקודם, אימנו מודל וביצענו איתו חיזוי, והכול בתוך מחברת Workbench. בקטע הזה הדגמנו איך להשתמש ב-Python SDK for Vertex AI מתוך ה-notebook כדי להשתמש בשירותי Vertex AI לאימון ולפריסה.

8. האתגר
בקטע הזה תנסו ליישם את המושגים שלמדתם על מערך נתונים חדש.
לא נספק הוראות מפורטות, רק כמה רמזים (אם תרצו!).
המטרה היא לחזות בקשות לשירות 311 מעיריית ניו יורק. הבקשות האלה לא דחופות וכוללות תלונות על רעש, בעיות בתאורת רחוב וכו'.
שלב 1
נתחיל בהסבר על מערך הנתונים.
קודם כל, ניגשים לקבוצת הנתונים City of New York 311 Service Requests.
כדי להכיר טוב יותר את הנתונים, כדאי לנסות כמה מהשאילתות לדוגמה שמופיעות בתיאור של מערך הנתונים:
- מה מספר הבקשות למוקד 311 שקשורות למשאיות גלידה?
- באילו ימים מתקבלות הכי הרבה בקשות למוקד 311 שקשורות למסיבות?
בממשק המשתמש של BigQuery, בוחרים באפשרות יצירת שאילתה כדי לראות איך לגשת למערך הנתונים. שימו לב שהשאילתה של הצהרת הבחירה היא מ-bigquery-public-data.new_york_311.311_service_requests.
שלב 2
הכול מוכן. בקטע הזה, מבצעים שינויים במחברת Explore and Visualize כדי לעבוד עם הנתונים האלה.
רמזים
- משכפלים את מחברת
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. אין תכונות נוספות.
- מומלץ לשנות את שם הקובץ שבו מייצאים את הנתונים למעבדה הבאה.
- מייצאים את הנתונים באמצעות:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
שלב 3
עכשיו ניצור מודל של סדרת זמן עם הנתונים החודשיים.
הערות:
- משכפלים את מחברת
02-model.ipynbומתחילים לעבוד ממנה. - מעדכנים את הפרמטרים של מערך הנתונים:
- מעדכנים את הפרמטרים
target_colו-ts_colכך שיתאימו למערך הנתונים החדש. - מעדכנים את הפרמטרים של המודל:
- תדירות חודשית (הקוד לתחילת חודש הוא MS)
- שלבי קלט: 12 (חלון המבט לאחור הוא 12 חודשים)
- שלבי הפלט: 3 (חיזוי ל-3 חודשים קדימה)
- עונות: 12 (עונתיות היא 12 חודשים)
- אם שיניתם את שם קובץ הקלט במחברת הקודמת, צריך לשנות אותו גם כאן.
- אם מריצים את השאילתה באמצע החודש, הסכום החודשי הכולל של החודש האחרון יהיה נמוך בהרבה מהצפוי. לכן, לצורך שיעור ה-Lab הזה, נסיר את החודש האחרון מקבוצת הנתונים באמצעות הפקודה:
df = df[:-1] - לא נראה שיש חריגים ברורים בנתונים, אז אפשר לדלג על התאים האלה או להוסיף להם הערה.
- משנים את יחידות ה-LSTM, את המסננים של ה-CNN ואת גודל הליבה של המודל החדש.
9. הסרת המשאבים
אם רוצים להמשיך להשתמש ב-notebook הזה, מומלץ להשבית אותו כשלא משתמשים בו. בממשק המשתמש של Workbench במסוף Cloud, בוחרים את מחברת ה-Notebook ואז בוחרים באפשרות Stop:

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