1. סקירה כללית
בשיעור ה-Lab הזה תלמדו איך לפתח מודל חיזוי לסדרה על זמן באמצעות TensorFlow, ואז תלמדו איך לפרוס את המודלים האלה באמצעות Vertex AI.
מה לומדים
נסביר לכם איך:
- טרנספורמציה של נתונים כדי שניתן יהיה להשתמש בהם במודל למידת מכונה
- הצגה חזותית וחקירה של נתונים
- שימוש ב-BigQuery ML כדי ליצור מודל חיזוי לסדרות זמן
- פיתוח מודל חיזוי לפי סדרת זמנים באמצעות TensorFlow באמצעות ארכיטקטורות LSTM ו-CNN
2. מבוא לחיזוי לפי סדרת זמנים
המטרה של Codelab הזו היא איך להחיל שיטות חיזוי של סדרות זמנים באמצעות Google Cloud Platform. זה לא קורס כללי לחיזוי סדרות זמנים, אבל סיור קצר של העקרונות האלה יעזור למשתמשים שלנו.
נתונים על סדרת זמנים
ראשית, מהי סדרת זמנים? זהו מערך נתונים עם נתונים שמתועדים במרווחי זמן קבועים. מערך נתונים של סדרת זמנים מכיל גם זמן וגם לפחות משתנה אחד שתלוי בזמן.
רכיבים
אפשר לפרק סדרה של זמנים לרכיבים:
- מגמה: זזים למעלה או למטה לפי דפוס סביר של צפי
- עונתי: חוזר על פני תקופה ספציפית, כמו יום, שבוע, חודש, עונה וכו'.
- אקראי: תנודות שיוריות
יכולות להיות כמה שכבות של עונתיות. לדוגמה, מוקד טלפוני עשוי לראות דפוס בנפח השיחות בימים מסוימים בשבוע וגם בחודשים נתונים. ייתכן שניתן להסביר את השאריות באמצעות משתנים אחרים מלבד זמן.
תחנה
כדי לקבל את התוצאות הטובות ביותר בחיזוי, צריך להפוך את הנתונים של סדרות זמנים לתחנות, שבהן המאפיינים הסטטיסטיים כמו ממוצע ושונות נשארים קבועים לאורך זמן. אפשר להשתמש בטכניקות כמו הבדלות ופירוט, כדי להפוך את הנתונים האלה לנייחים יותר.
לדוגמה, בתרשים שמתחת לריכוז הפחמן הדו-חמצני מוצג דפוס שנתי חוזר עם מגמת עלייה. ( מקור)
אחרי שמסירים את המגמה הלינארית, הנתונים מתאימים יותר לחיזוי, כי עכשיו יש להם ממוצע קבוע.
שימוש בנתונים של סדרת זמנים ללמידת מכונה
כדי להשתמש בנתונים של סדרות זמנים בבעיה של למידת מכונה, צריך לשנות אותם כך שאפשר יהיה להשתמש בערכים קודמים לחיזוי ערכים עתידיים. בטבלה הזו מוצגת דוגמה לאופן שבו נוצרים משתנים באיחור כדי לעזור בחיזוי היעד.
אחרי שעסקנו בכמה יסודות, בואו נתחיל לחקור נתונים ותחזיות!
3. הגדרת סביבת ה-notebook
עכשיו, אחרי שעברנו על מבוא קצר של הנתונים, נגדיר עכשיו את סביבת פיתוח המודלים שלנו.
שלב 1: הפעלת ממשקי API
המחבר של BigQuery משתמש ב-BigQuery Storage API. מחפשים את BigQuery Storage API במסוף ומפעילים את ה-API אם הוא מושבת כרגע.
שלב 2: יצירת notebook ב-Vertex AI Workbench
עוברים לקטע Vertex AI Workbench במסוף Cloud ולוחצים על New Notebook. לאחר מכן בוחרים את סוג ה-notebook העדכני ביותר מסוג TensorFlow Enterprise 2.x ללא מעבדי GPU:
משתמשים באפשרויות ברירת המחדל ואז לוחצים על יצירה. אחרי שיוצרים את המכונה, בוחרים באפשרות Open JupyterLab:
לאחר מכן יוצרים notebook מסוג Python 3 מ-JupyterLab:
שלב 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
בקטע הזה ייבאתם את הנתונים וביצעתם הצגה חזותית של מאפיינים שונים שלהם. עכשיו, אחרי שתקבלו תמונה ברורה יותר של הנתונים, תוכלו להמשיך לבנות מודלים של למידת מכונה שמבוססים על הנתונים האלה.
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 במסוף (באמצעות חיפוש או שימוש בקישור הזה):
אפשר להוסיף את הטבלה למערך נתונים חדש או קיים, כדי לקבץ טבלאות קשורות. אם עדיין לא יצרתם מערך נתונים, תוכלו ללחוץ על הפרויקט בפינה הימנית התחתונה ולבחור באפשרות Create Dataset (יצירת מערך נתונים) בפינה הימנית התחתונה.
בוחרים שם לבחירתכם, למשל demo
, מאשרים את אפשרויות ברירת המחדל וממשיכים.
כשמערך הנתונים שנבחר, בוחרים באפשרות יצירת טבלה בפינה השמאלית התחתונה כדי ליצור טבלה חדשה.
באפשרויות ליצירת טבלה, בוחרים באחת מהאפשרויות הבאות:
- יצירת טבלה מ: Upload
- בחירת קובץ: 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, או קריטריון למידע על Akaike, שמייצג מדד יחסי של איכות המודל. לכן, למודל בשורה הראשונה יש את מדד ה-AIC הנמוך ביותר, והוא נחשב למודל הטוב ביותר.
תוכלו לראות את הפרמטרים p, d ו-q של מודל ARIMA, וגם את העונתיות שהתגלתה במודל. במקרה הזה, המודל המוביל כולל גם עונתיות וגם שבועית.
שלב 5
עכשיו אנחנו מוכנים ליצור תחזיות באמצעות הפונקציה ML.FORECAST
.
מדביקים או מקלידים את הפרטים הבאים (מחליפים את הדגמה (דמו) במקרה הצורך):
SELECT * FROM ML.FORECAST(MODEL `demo.cta_ridership_model`, STRUCT(7 AS horizon))
השאילתה הזו פשוט יוצרת תחזיות ל-7 ימים באמצעות המודל שלנו. אפשר לראות את שבע השורות שהוחזרו למטה. התחזית כוללת גם רווח בר-סמך שברירת המחדל שלו היא 0.95, אבל ניתן להגדיר אותו בשאילתה.
עבודה מצוינת: יצרנו מודל של סדרת זמנים באמצעות כמה שאילתות 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 ומודלים סטטיסטיים. בכל מודל, אפשר לראות את הביצועים של המודל ביחס לנתוני הבדיקה:
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 לאימון ופריסה.
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:
כדי למחוק את כל המשאבים שיצרתם בשיעור ה-Lab הזה, תוכלו פשוט למחוק את ה-notebook של שולחן העבודה במקום להפסיק אותו.
באמצעות תפריט הניווט שבמסוף Cloud, עוברים אל Storage ומוחקים את שתי הקטגוריות שיצרתם לצורך אחסון נכסי המודלים (אזהרה: יש לבצע את הפעולה הזו רק אם יצרתם קטגוריות חדשות רק לשיעור ה-Lab הזה).