חיזוי באמצעות 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. שני צינורות הנתונים הם מופעים של Gemini Enterprise Agent Platform Pipelines מתוך Google Cloud Pipeline Components ‏ (GCPC).

שילוב של Prophet עם Agent Platform מאפשר לכם:

למרות ש-Prophet הוא מודל רב-משתנים, Agent Platform תומכת רק בגרסה חד-משתנית שלו.

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

Workflow APIs

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

  • Agent Platform
  • Dataflow
  • BigQuery
  • Cloud Storage

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

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

כדי לתמוך במספר סדרות זמן, צינור עיבוד הנתונים משתמש במשימת אימון מותאמת אישית של Agent Platform וב-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() מאפשר לכם להגדיר את חשבון השירות של Gemini Enterprise Agent Platform 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 העמודה של מזהה סדרת הזמנים. חובה לציין עמודה של מזהה סדרת זמן, ולכל שורה צריך להיות ערך בעמודה הזו. נתוני האימון לחיזוי בדרך כלל כוללים כמה סדרות זמן, והמזהה מציין ל-Agent Platform לאיזו סדרת זמן שייכת תצפית מסוימת בנתוני האימון. לכל השורות בסדרת זמן נתונה יש את אותו ערך בעמודה של מזהה סדרת הזמן. חלק מהמזהים הנפוצים של סדרות זמן הם מזהה המוצר, מזהה החנות או האזור. אפשר לאמן מודל חיזוי על סדרת זמן אחת, עם ערך זהה לכל השורות בעמודה של מזהה סדרת הזמן. עם זאת, Agent Platform מתאימה יותר לנתוני אימון שמכילים שתי סדרות זמן או יותר. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש לפחות ב-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.

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

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

פיצול נתונים תיאור פרמטרים
פיצול ברירת מחדל Agent Platform בוחרת באופן אקראי 80% משורות הנתונים שלכם לקבוצת נתונים לאימון, 10% לקבוצת נתונים לתיקוף ו-10% לקבוצת נתונים לבדיקה. Agent Platform משתמשת בעמודה Time (זמן) כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים. ללא
פיצול שבר Agent Platform משתמשת בערכים שאתם מספקים כדי לחלק את הנתונים לקבוצת נתונים לאימון, לקבוצת נתונים לתיקוף ולקבוצת נתונים לבדיקה. Agent Platform משתמשת בעמודה Time (זמן) כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים.
  • training_fraction
  • validation_fraction
  • test_fraction
פיצול חותמת הזמן Agent Platform משתמשת בערכים training_fraction, validation_fraction ו-test_fraction כדי לחלק את הנתונים לקבוצת נתונים לאימון, לקבוצת נתונים לתיקוף ולקבוצת נתונים לבדיקה. Agent Platform משתמשת בעמודה timestamp_split_key כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים.
  • training_fraction
  • validation_fraction
  • test_fraction
  • timestamp_split_key
חלוקה ידנית (מוגדרת מראש) Agent Platform מפצלת את הנתונים באמצעות הערכים 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 שם העמודה שמכילה את חותמות הזמן של פיצול הנתונים. צריך להגדיר את הערך הזה אם משתמשים בפיצול של חותמת זמן.

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

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

אסטרטגיה של חלון נע תיאור פרמטרים
ספירה מספר החלונות שנוצרים על ידי Agent Platform לא יכול לחרוג מהמספר המקסימלי שצוין על ידי המשתמש. אם מספר השורות במערך נתוני הקלט קטן ממספר החלונות המקסימלי, כל שורה משמשת ליצירת חלון. אחרת, Agent Platform מבצע דגימה אקראית כדי לבחור את השורות. ערך ברירת המחדל של המספר המקסימלי של חלונות הוא 100,000,000. המספר המקסימלי של חלונות לא יכול לעלות על 100,000,000. window_max_count
Stride Agent Platform משתמשת בשורה אחת מכל X שורות קלט כדי ליצור חלון, עד למקסימום של 100,000,000 חלונות. האפשרות הזו שימושית להסקת מסקנות עונתית או תקופתית. לדוגמה, אפשר להגביל את התחזיות ליום אחד בשבוע על ידי הגדרת הערך של אורך פסיעה ל-7. הערך יכול להיות בין 1 ל-1000. window_stride_length
עמודה אפשר להוסיף עמודה לנתוני הקלט שבה הערכים הם True או False. פלטפורמת Agent יוצרת חלון לכל שורת קלט שבה הערך של העמודה הוא 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 בפלטפורמת הסוכנים יוצר מודל Prophet אחד לכל סדרת זמן בנתונים. צינור ההסקה מצטבר נתוני קלט לפי מזהה סדרת זמן ומחשב את ההסקות בנפרד לכל סדרת זמן. לאחר מכן, צינור הנתונים מפרק את תוצאות ההסקה כדי להתאים לפורמט של חיזוי בפלטפורמת הסוכנים.

בדוגמת הקוד הבאה אפשר לראות איך מריצים צינור עיבוד נתונים של 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 העמודה של מזהה סדרת הזמנים. חובה לציין עמודה של מזהה סדרת זמן, ולכל שורה צריך להיות ערך בעמודה הזו. נתוני האימון לחיזוי בדרך כלל כוללים כמה סדרות זמן, והמזהה מציין ל-Agent Platform לאיזו סדרת זמן שייכת תצפית מסוימת בנתוני האימון. לכל השורות בסדרת זמן נתונה יש את אותו ערך בעמודה של מזהה סדרת הזמן. חלק מהמזהים הנפוצים של סדרות זמן הם מזהה המוצר, מזהה החנות או האזור. אפשר לאמן מודל חיזוי על סדרת זמן אחת, עם ערך זהה לכל השורות בעמודה של מזהה סדרת הזמן. עם זאת, Agent Platform מתאימה יותר לנתוני אימון שמכילים שתי סדרות זמן או יותר. כדי לקבל את התוצאות הטובות ביותר, מומלץ להשתמש לפחות ב-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 מספר שלם מספר העובדים המקסימלי לשימוש בהסקת מסקנות באצווה.