חיזוי באמצעות Prophet

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

בדומה ל-BigQuery ML ARIMA_PLUS,‏ Prophet מנסה לפרק כל סדרת זמן למגמות, לעונות ולחגים, וליצור תחזית באמצעות צבירה של ההסקות של המודלים האלה. עם זאת, יש הבדל חשוב: ב-BQML ARIMA+ נעשה שימוש ב-ARIMA כדי ליצור מודל של רכיב המגמה, ואילו ב-Prophet נעשה ניסיון להתאים עקומה באמצעות מודל לוגיסטי או ליניארי חלקי.

‫Google Cloud offers a pipeline for training a Prophet model and a pipeline for getting batch inferences from a Prophet model. שני צינורות העיבוד הם מופעים של Vertex AI Pipelines מתוך Google Cloud Pipeline Components ‏ (GCPC).

שילוב של Prophet עם Vertex AI מאפשר לכם:

למרות ש-Prophet הוא מודל רב-משתני, Vertex AI תומך רק בגרסה חד-משתנית שלו.

מידע על חשבונות השירות שמשמשים בתהליך העבודה הזה מופיע במאמר חשבונות שירות ל-Tabular Workflows.

Workflow APIs

תהליך העבודה הזה משתמש בממשקי ה-API הבאים:

  • Vertex AI
  • Dataflow
  • BigQuery
  • Cloud Storage

אימון מודל באמצעות Prophet

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

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

קוד לדוגמה הבא מדגים איך להריץ צינור להכשרת מודל Prophet:

job = aiplatform.PipelineJob(
    ...
    template_path=train_job_spec_path,
    parameter_values=train_parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

הפרמטר האופציונלי service_account ב-job.run() מאפשר להגדיר את חשבון השירות של Vertex AI Pipelines לחשבון לפי בחירתכם.

הפונקציה הבאה מגדירה את צינור הנתונים ואת ערכי הפרמטרים.

(
    train_job_spec_path,
    train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
    ...
)

זוהי קבוצת משנה של פרמטרים של get_prophet_train_pipeline_and_parameters:

שם הפרמטר סוג הגדרה
project String מזהה הפרויקט.
location String האזור שלכם.
root_dir String המיקום ב-Cloud Storage שבו יישמר הפלט.
target_column String העמודה (הערך) שהמודל הזה אמור לחזות.
time_column String עמודת הזמן. חובה לציין עמודת זמן, ולכל שורה צריך להיות ערך בעמודה הזו. בעמודת הזמן מצוין הזמן שבו בוצעה תצפית מסוימת.
time_series_identifier_column String העמודה שמזהה את סדרת הזמנים. חובה לציין עמודה של מזהה סדרת זמן, ולכל שורה צריך להיות ערך בעמודה הזו. נתוני האימון של התחזית כוללים בדרך כלל כמה סדרות זמן, והמזהה מציין ל-Vertex AI לאיזו סדרת זמן שייכת תצפית מסוימת בנתוני האימון. לכל השורות בסדרת זמן נתונה יש את אותו ערך בעמודה של מזהה סדרת הזמן. חלק מהמזהים הנפוצים של סדרות זמן הם מזהה המוצר, מזהה החנות או האזור. אפשר לאמן מודל חיזוי על סדרת זמן אחת, עם ערך זהה לכל השורות בעמודת המזהה של סדרת הזמן. עם זאת, Vertex AI מתאים יותר לנתוני אימון שמכילים שתי סדרות זמן או יותר. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש לפחות ב-10 סדרות זמן לכל עמודה שבה משתמשים כדי לאמן את המודל.
data_granularity_unit String היחידה שבה יש להשתמש לגרנולריות של נתוני האימון, לאופק התחזית ולחלון ההקשר. יכול להיות minute, hour, day, week, month או year. איך בוחרים את רמת הפירוט של הנתונים
data_source_csv_filenames String ‫URI של קובץ CSV שמאוחסן ב-Cloud Storage.
data_source_bigquery_table_path String כתובת URI של טבלה ב-BigQuery.
forecast_horizon מספר שלם אופק התחזית קובע עד כמה רחוק בעתיד המודל חוזה את ערך היעד לכל שורה של נתוני הסקה. אופק התחזית מצוין ביחידות של רמת הפירוט של הנתונים. מידע נוסף
optimization_objective String יעד האופטימיזציה של המודל. מידע נוסף
max_num_trials מספר שלם מספר הניסיונות המקסימלי לשיפור הביצועים שיתבצעו לכל סדרת זמן.

פרמטרים של Dataflow

זו קבוצת משנה של get_prophet_train_pipeline_and_parameters פרמטרים להתאמה אישית של Dataflow:

שם הפרמטר סוג הגדרה
trainer_dataflow_machine_type String סוג המכונה של Dataflow שמשמש לאימון.
trainer_dataflow_max_num_workers מספר שלם המספר המקסימלי של עובדי Dataflow שישמשו לאימון.
evaluation_dataflow_machine_type String סוג המכונה ב-Dataflow שבה יש להשתמש לצורך הערכה.
evaluation_dataflow_max_num_workers מספר שלם מספר העובדים המקסימלי ב-Dataflow שייעשה בהם שימוש לצורך הערכה.
dataflow_service_account String חשבון שירות מותאם אישית להרצת משימות Dataflow. אפשר להגדיר את עבודת Dataflow כך שתשתמש בכתובות IP פרטיות וברשת משנה ספציפית של VPC. הפרמטר הזה משמש כשינוי של חשבון השירות שמוגדר כברירת מחדל של עובד Dataflow.

מכיוון שמשימות האימון של Prophet פועלות ב-Dataflow, יש זמן אתחול ראשוני של 5 עד 7 דקות. כדי לצמצם את זמן הריצה הנוסף, אפשר להגדיל את הקיבולת או להרחיב את הפריסה. לדוגמה, כדי להגדיל את הקיבולת, משנים את סוג המכונה מ-n1-standard-1 ל-e2-highcpu-8. כדי להרחיב את הקיבולת, מגדילים את מספר העובדים מ-1 ל-200.

פרמטרים של פיצול נתונים

צינור האימון מציע את האפשרויות הבאות לפיצול הנתונים:

פיצול נתונים תיאור פרמטרים
חלוקה כברירת מחדל מערכת Vertex AI בוחרת באופן אקראי 80% משורות הנתונים שלכם לקבוצת נתונים לאימון, 10% לקבוצת נתונים לתיקוף ו-10% לקבוצת נתונים לבדיקה. מערכת Vertex AI משתמשת בעמודה Time כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים. ללא
פיצול שבר מערכת Vertex AI משתמשת בערכים שאתם מספקים כדי לחלק את הנתונים לקבוצת נתונים לאימון, לקבוצת נתונים לתיקוף ולקבוצת נתונים לבדיקה. מערכת Vertex AI משתמשת בעמודה Time כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים.
  • training_fraction
  • validation_fraction
  • test_fraction
פיצול חותמת הזמן ‫Vertex AI משתמש בערכים training_fraction,‏ validation_fraction ו-test_fraction כדי לחלק את הנתונים לקבוצת נתונים לאימון, לקבוצת נתונים לתיקוף ולקבוצת נתונים לבדיקה. מערכת Vertex AI משתמשת בעמודה timestamp_split_key כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים.
  • training_fraction
  • validation_fraction
  • test_fraction
  • timestamp_split_key
חלוקה ידנית (מוגדרת מראש) מערכת Vertex AI מפצלת את הנתונים באמצעות הערכים TRAIN,‏ VALIDATE או TEST בעמודה predefined_split_key.
  • predefined_split_key

כך מגדירים את פרמטרים של פיצול נתונים ב-get_prophet_train_pipeline_and_parameters:

שם הפרמטר סוג הגדרה
predefined_split_key String שם העמודה שמכילה את הערכים TRAIN,‏ VALIDATE או TEST. מגדירים את הערך הזה אם משתמשים בפיצול ידני (מוגדר מראש).
training_fraction Float אחוז הנתונים שיוקצו לקבוצת נתונים לאימון. צריך להגדיר את הערך הזה אם משתמשים בפיצול של שבר או בפיצול של חותמת זמן.
validation_fraction Float אחוז הנתונים שיוקצו לקבוצת נתונים לתיקוף. צריך להגדיר את הערך הזה אם משתמשים בפיצול של שבר או בפיצול של חותמת זמן.
test_fraction Float אחוז הנתונים שיוקצו לקבוצת נתונים לבדיקה. צריך להגדיר את הערך הזה אם משתמשים בפיצול של שבר או בפיצול של חותמת זמן.
timestamp_split_key String שם העמודה שמכילה את חותמות הזמן של פיצול הנתונים. צריך להגדיר את הערך הזה אם משתמשים בפיצול של חותמת זמן.

פרמטרים של חלון

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

אסטרטגיה של חלון נע תיאור פרמטרים
ספירה מספר החלונות שנוצרו על ידי Vertex AI לא יכול לחרוג מהמספר המקסימלי שצוין על ידי המשתמש. אם מספר השורות במערך נתוני הקלט קטן ממספר החלונות המקסימלי, כל שורה משמשת ליצירת חלון. אחרת, Vertex AI מבצע דגימה אקראית כדי לבחור את השורות. ערך ברירת המחדל של המספר המקסימלי של חלונות הוא 100,000,000. מספר החלונות המקסימלי לא יכול לעלות על 100,000,000. window_max_count
Stride ‫Vertex AI משתמש בשורה אחת מכל X שורות קלט כדי ליצור חלון, עד למקסימום של 100,000,000 חלונות. האפשרות הזו שימושית להסקת מסקנות עונתית או תקופתית. לדוגמה, אפשר להגביל את התחזיות ליום אחד בשבוע על ידי הגדרת הערך 7 לאורך הפסיעה. הערך יכול להיות בין 1 ל-1000. window_stride_length
עמודה אתם יכולים להוסיף עמודה לנתוני הקלט שבה הערכים הם True או False. ‫Vertex AI יוצר חלון לכל שורת קלט שבה הערך של העמודה הוא True. אפשר להגדיר את הערכים True ו-False בכל סדר, כל עוד המספר הכולל של השורות True קטן מ-100,000,000. מומלץ להשתמש בערכים בוליאניים, אבל אפשר להשתמש גם בערכי מחרוזת. ערכי מחרוזת לא תלויי-רישיות. window_column

הגדרתם את פרמטרים של חלון הזמן ב-get_prophet_train_pipeline_and_parameters באופן הבא:

שם הפרמטר סוג הגדרה
window_column String השם של העמודה עם הערכים True ו-False.
window_stride_length מספר שלם הערך של אורך הפסיעה.
window_max_count מספר שלם המספר המקסימלי של חלונות.

הסקת מסקנות באמצעות Prophet

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

בדוגמת הקוד הבאה אפשר לראות איך מריצים צינור עיבוד נתונים של Prophet:

job = aiplatform.PipelineJob(
    ...
    template_path=prediction_job_spec_path,
    parameter_values=prediction_parameter_values,
    ...
)
job.run(...)

הפונקציה הבאה מגדירה את צינור הנתונים ואת ערכי הפרמטרים.

(
    prediction_job_spec_path,
    prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
    ...
)

זוהי קבוצת משנה של פרמטרים של get_prophet_prediction_pipeline_and_parameters:

שם הפרמטר סוג הגדרה
project String מזהה הפרויקט.
location String האזור שלכם.
model_name String השם של משאב Model. הפורמט של המחרוזת הוא: projects/{project}/locations/{location}/models/{model}.
time_column String עמודת הזמן. חובה לציין עמודת זמן, ולכל שורה צריך להיות ערך בעמודה הזו. בעמודת הזמן מצוין הזמן שבו בוצעה תצפית מסוימת.
time_series_identifier_column String העמודה שמזהה את סדרת הזמנים. חובה לציין עמודה של מזהה סדרת זמן, ולכל שורה צריך להיות ערך בעמודה הזו. נתוני האימון של התחזית כוללים בדרך כלל כמה סדרות זמן, והמזהה מציין ל-Vertex AI לאיזו סדרת זמן שייכת תצפית מסוימת בנתוני האימון. לכל השורות בסדרת זמן נתונה יש את אותו ערך בעמודה של מזהה סדרת הזמן. חלק מהמזהים הנפוצים של סדרות זמן הם מזהה המוצר, מזהה החנות או האזור. אפשר לאמן מודל חיזוי על סדרת זמן אחת, עם ערך זהה לכל השורות בעמודת המזהה של סדרת הזמן. עם זאת, Vertex AI מתאים יותר לנתוני אימון שמכילים שתי סדרות זמן או יותר. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש לפחות ב-10 סדרות זמן לכל עמודה שבה משתמשים כדי לאמן את המודל.
target_column String העמודה (הערך) שהמודל הזה אמור לחזות.
data_source_csv_filenames String ‫URI של קובץ CSV שמאוחסן ב-Cloud Storage.
data_source_bigquery_table_path String כתובת URI של טבלה ב-BigQuery.
bigquery_destination_uri String ‫URI של מערך נתוני היעד שנבחר. אם לא מגדירים את הערך הזה, המשאבים נוצרים במערך נתונים חדש בפרויקט.
machine_type String סוג המכונה שבה צריך להשתמש להסקת מסקנות באצווה.
max_num_workers מספר שלם מספר העובדים המקסימלי לשימוש בהסקת מסקנות באצווה.