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 מאפשר לכם:
- משתמשים בפיצול נתונים ובשיטות חלוקה לחלונות ב-Vertex AI.
- קריאת נתונים מטבלאות BigQuery או מקובצי CSV שמאוחסנים ב-Cloud Storage. ב-Vertex AI, כל שורה צריכה להיות באותו פורמט כמו ב-Vertex AI Forecasting.
למרות ש-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 כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים. |
|
| פיצול חותמת הזמן | Vertex AI משתמש בערכים training_fraction, validation_fraction ו-test_fraction כדי לחלק את הנתונים לקבוצת נתונים לאימון, לקבוצת נתונים לתיקוף ולקבוצת נתונים לבדיקה. מערכת Vertex AI משתמשת בעמודה timestamp_split_key כדי לקבוע את הסדר הכרונולוגי של שורות הנתונים. |
|
| חלוקה ידנית (מוגדרת מראש) | מערכת Vertex AI מפצלת את הנתונים באמצעות הערכים TRAIN, VALIDATE או TEST בעמודה 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 |
מספר שלם | מספר העובדים המקסימלי לשימוש בהסקת מסקנות באצווה. |