ב-Gemini Enterprise Agent Platform יש שתי אפשרויות לחיזוי ערכים עתידיים באמצעות מודל החיזוי שאומן: הסקות אונליין והסקות באצווה.
הסקת מסקנות אונליין היא בקשה סינכרונית. כדאי להשתמש בהסקת מסקנות אונליין כששולחים בקשות בתגובה לקלט של אפליקציה, או במצבים אחרים שבהם נדרשת הסקת מסקנות בזמן אמת.
בקשת הסקה באצווה היא בקשה לא סנכרונית. כדאי להשתמש בהסקת מסקנות באצווה כשלא נדרשת תשובה מיידית ורוצים לעבד נתונים שנצברו באמצעות בקשה אחת.
בדף הזה מוסבר איך לחזות ערכים עתידיים באמצעות הסקות אונליין. במאמר קבלת הסקות באצווה למודל חיזוי מוסבר איך לחזות ערכים באמצעות הסקות באצווה.
כדי להשתמש במודל להסקת מסקנות, צריך לפרוס אותו בנקודת קצה (endpoint). נקודת קצה (endpoint) היא קבוצה של משאבים פיזיים.
אתם יכולים לבקש הסבר במקום הסקת מסקנות. ערכי החשיבות המקומית של המאפיינים בהסבר מראים כמה כל מאפיין תרם לתוצאת ההסקה. לסקירה כללית של המושגים, קראו את המאמר שיוך תכונות לחיזוי.
למידע ולמידה על תמחור עבור היקשים מקוונים, ראו
לפני שמתחילים
כדי לשלוח בקשת הסקה אונליין, קודם צריך לאמן מודל.
יצירה או בחירה של נקודת קצה (endpoint)
משתמשים בפונקציה aiplatform.Endpoint.create() כדי ליצור נקודת קצה. אם כבר יש לכם נקודת קצה, אתם יכולים לבחור אותה באמצעות הפונקציה aiplatform.Endpoint().
הקוד הבא הוא דוגמה:
# Import required modules
from google.cloud import aiplatform
from google.cloud.aiplatform import models
PROJECT_ID = "PROJECT_ID"
REGION = "REGION"
# Initialize the Vertex SDK for Python for your project.
aiplatform.init(project=PROJECT_ID, location=REGION)
endpoint = aiplatform.Endpoint.create(display_name='ENDPOINT_NAME')
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- REGION: האזור שבו משתמשים ב-Gemini Enterprise Agent Platform.
- ENDPOINT_NAME: השם המוצג של נקודת הקצה.
בחירת מודל מאומן
משתמשים בפונקציה aiplatform.Model() כדי לבחור מודל מאומן:
# Create reference to the model trained ahead of time.
model_obj = models.Model("TRAINED_MODEL_PATH")
מחליפים את מה שכתוב בשדות הבאים:
- TRAINED_MODEL_PATH: לדוגמה,
projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]
פריסת המודל בנקודת הקצה (endpoint)
משתמשים בפונקציה deploy() כדי לפרוס את המודל בנקודת הקצה. הקוד הבא הוא דוגמה:
deployed_model = endpoint.deploy(
model_obj,
machine_type='MACHINE_TYPE',
traffic_percentage=100,
min_replica_count='MIN_REPLICA_COUNT',
max_replica_count='MAX_REPLICA_COUNT',
sync=True,
deployed_model_display_name='DEPLOYED_MODEL_NAME',
)
מחליפים את מה שכתוב בשדות הבאים:
- MACHINE_TYPE: לדוגמה,
n1-standard-8. מידע נוסף על סוגי מכונות - MIN_REPLICA_COUNT: המספר המינימלי של הצמתים לפריסה הזו.
אתם יכולים להגדיל או להקטין את מספר הצמתים לפי הצורך של עומס ההסקה, עד למספר המקסימלי של הצמתים ולעולם לא פחות מהמספר הזה של הצמתים. הערך הזה חייב להיות שווה ל-1 או גדול יותר. אם לא מגדירים את המשתנה
min_replica_count, ערך ברירת המחדל הוא1. - MAX_REPLICA_COUNT: המספר המקסימלי של הצמתים בפריסה הזו.
אפשר להגדיל או להקטין את מספר הצמתים בהתאם לעומס ההסקה, עד למספר הצמתים הזה ולא פחות ממספר הצמתים המינימלי. אם לא מגדירים את המשתנה
max_replica_count, המספר המקסימלי של הצמתים מוגדר לערך שלmin_replica_count. - DEPLOYED_MODEL_NAME: שם ל-
DeployedModel. אפשר להשתמש בשם המוצג שלModelגם בשבילDeployedModel.
פריסת המודל עשויה להימשך כעשר דקות.
קבלת הסקות אונליין
כדי לקבל הסקות, משתמשים בפונקציה predict() ומספקים מכונת קלט אחת או יותר. הקוד הבא מציג דוגמה:
predictions = endpoint.predict(instances=[{...}, {...}])
כל מופע קלט הוא מילון Python עם אותה סכימה שבה המודל אומן. הוא חייב להכיל צמד מפתח/ערך של available at forecast שתואם לעמודת הזמן, וצמד מפתח/ערך של unavailable at forecast שמכיל את הערכים ההיסטוריים של עמודת ההסקה המטורגטת. ב-Gemini Enterprise Agent Platform, כל מופע קלט צריך להיות שייך לסדרת זמן אחת. הסדר של צמדי המפתח/ערך במופע לא חשוב.
האינסטנס של הקלט כפוף למגבלות הבאות:
- בכל צמדי המפתח/ערך של available at forecast צריך להיות אותו מספר של נקודות על הגרף.
- בכל צמדי המפתח/ערך של לא זמין בתחזית צריך להיות אותו מספר של נקודות על הגרף.
- צמדי המפתח/ערך של זמין בתחזית חייבים לכלול לפחות את אותו מספר נקודות על הגרף כמו צמדי המפתח/ערך של לא זמין בתחזית.
סוגי המאפיינים והזמינות שלהם בתחזית
הקוד הבא מדגים קבוצה של שני מופעי קלט.
העמודה Category מכילה נתוני מאפיינים. העמודה Timestamp מכילה נתונים שזמינים בתחזית. שלוש נקודות הן נתוני הקשר ושתי נקודות הן נתוני אופק. העמודה Sales מכילה נתונים שלא זמינים בתחזית. כל שלוש הנקודות הן נתוני הקשר. במאמר טווח התחזית, חלון ההקשר וחלון התחזית מוסבר איך משתמשים בהקשר ובטווח בתחזיות.
instances=[
{
# Attribute
"Category": "Electronics",
# Available at forecast: three days of context, two days of horizon
"Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
# Unavailable at forecast: three days of context
"Sales": [490.50, 325.25, 647.00],
},
{
# Attribute
"Category": "Food",
# Available at forecast: three days of context, two days of horizon
"Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
# Unavailable at forecast: three days of context
"Sales": [190.50, 395.25, 47.00],
}
])
בכל מופע, פלטפורמת הסוכנים של Gemini Enterprise מחזירה שתי הסקות לגבי Sales, שתואמות לשתי חותמות הזמן של horizon ("2023-08-06" ו-"2023-08-07").
כדי להשיג ביצועים אופטימליים, מספר הנקודות על הגרף של context ומספר הנקודות על הגרף של horizon בכל מופע קלט חייבים להתאים לאורכי ההקשר והאופק שאיתם המודל אומן. אם יש חוסר התאמה, Gemini Enterprise Agent Platform מוסיף ריפוד או מקצר את המופע כדי להתאים לגודל של המודל.
אם מספר הנקודות על הגרף של context במופע הקלט קטן או גדול ממספר הנקודות על הגרף של context ששימשו לאימון המודל, ודאו שמספר הנקודות הזה עקבי בכל צמדי המפתח/ערך של available at forecasting ובכל צמדי המפתח/ערך של unavailable at forecasting.
לדוגמה, נניח שיש מודל שאומן עם נתוני הקשר של ארבעה ימים ונתוני אופק של יומיים. אפשר לשלוח בקשת הסקה עם נתוני הקשר של שלושה ימים בלבד. במקרה הזה, צמדי המפתח/ערך של לא זמין בתחזית מכילים שלושה ערכים. הצמדים של מפתח/ערך available at forecast חייבים להכיל חמישה ערכים.
פלט של הסקת מסקנות אונליין
פלטפורמת הסוכנים של Gemini Enterprise מספקת פלט של הסקת מסקנות אונליין בשדה value:
{
'value': [...]
}
אורך התגובה להסקה תלוי באופק שבו נעשה שימוש באימון המודל ובאופק של המכונה של הקלט. האורך של תגובת ההסקה הוא הערך הקטן ביותר מבין שני הערכים האלה.
מומלץ להביא בחשבון את הדוגמאות הבאות:
- אתם מאמנים מודל עם
context=15ו-horizon=50. במופע הקלט ישcontext=15ו-horizon=20. אורך התשובה להסקה הוא20. - אתם מאמנים מודל עם
context=15ו-horizon=50. במופע הקלט ישcontext=15ו-horizon=100. אורך התשובה להסקה הוא50.
פלט של הסקות אונליין למודלים של TFT
במודלים שאומנו באמצעות Temporal Fusion Transformer (TFT), פלטפורמת Gemini Enterprise Agent Platform מספקת יכולת פירוש של TFT tft_feature_importance בנוסף להסקה בשדה value:
{
"tft_feature_importance": {
"attribute_weights": [...],
"attribute_columns": [...],
"context_columns": [...],
"context_weights": [...],
"horizon_weights": [...],
"horizon_columns": [...]
},
"value": [...]
}
-
attribute_columns: מאפייני חיזוי שהם בלתי תלויים בזמן. -
attribute_weights: המשקלים שמשויכים לכל אחד מהערכים שלattribute_columns. -
context_columns: מאפייני חיזוי שהערכים שלהם בחלון ההקשר משמשים כקלט למקודד הזיכרון לטווח קצר לזמן ארוך (LSTM) של ה-TFT. -
context_weights: משקלי החשיבות של המאפיינים שמשויכים לכל אחד מהערכים שלcontext_columnsבמופע החזוי. -
horizon_columns: מאפייני חיזוי שערכי אופק החיזוי שלהם משמשים כקלט למפענח הזיכרון לטווח קצר לזמן ארוך (LSTM) של TFT. -
horizon_weights: משקלי החשיבות של המאפיינים שמשויכים לכל אחד מהערכים שלhorizon_columnsבמופע החזוי.
פלט של הסקת מסקנות אונליין למודלים שעברו אופטימיזציה להפסד קוונטיל
במודלים שעברו אופטימיזציה להפסד קוונטילי, Gemini Enterprise Agent Platform מספקת את פלט ההסקה הבא אונליין:
{
"value": [...],
"quantile_values": [...],
"quantile_predictions": [...]
}
-
value: אם קבוצת האחוזונים כוללת את החציון,valueהוא ערך ההסקה בחציון. אחרת,valueהוא ערך ההסקה באחוזון הנמוך ביותר בקבוצה. לדוגמה, אם קבוצת האחוזונים היא[0.1, 0.5, 0.9],valueהיא ההסקה לאחוזון0.5. אם קבוצת האחוזונים היא[0.1, 0.9], אזvalueהוא ההסקה לאחוזון0.1. quantile_values: ערכי האחוזונים, שמוגדרים במהלך אימון המודל.-
quantile_predictions: ערכי ההסקה שמשויכים ל-quantile_values.
לדוגמה, נניח שיש מודל שבו עמודת היעד היא ערך המכירות.
ערכי הקוונטיל מוגדרים בתור [0.1, 0.5, 0.9]. פלטפורמת הסוכנים של Gemini Enterprise מחזירה את הסקות הקוונטיל הבאות: [4484, 5615, 6853]. כאן, קבוצת האחוזונים כוללת את החציון, כך ש-value הוא ההסקה לגבי האחוזון 0.5 (5615). אפשר לפרש את ההסקות לגבי האחוזונים באופן הבא:
P(sales value < 4484)= 10%P(sales value < 5615)= 50%P(sales value < 6853)= 90%
פלט של הסקה אונליין למודלים עם הסקה הסתברותית
אם המודל משתמש בהסקה הסתברותית, השדה value מכיל את הערך המינימלי של יעד האופטימיזציה. לדוגמה, אם יעד האופטימיזציה הוא minimize-rmse, השדה value מכיל את הערך הממוצע. אם הערך הוא minimize-mae, השדה value מכיל את הערך החציוני.
אם המודל שלכם משתמש בהסקה הסתברותית עם קוונטילים, Gemini Enterprise Agent Platform מספק ערכי קוונטילים והסקות בנוסף למזעור של יעד האופטימיזציה. ערכי הקוונטיל מוגדרים במהלך אימון המודל. הסקת מסקנות לפי אחוזונים היא ערכי ההסקה שמשויכים לערכי האחוזונים.
קבלת הסברים אונליין
כדי לקבל הסברים, משתמשים בפונקציה explain() ומספקים מופע קלט אחד או יותר. הקוד הבא מציג דוגמה:
explanations = endpoint.explain(instances=[{...}, {...}])
הפורמט של מכונות הקלט זהה להסקות אונליין ולהסברים אונליין. מידע נוסף זמין במאמר קבלת הסקות אונליין.
לסקירה כללית של המושגים שקשורים לשיוך תכונות, קראו את המאמר שיוך תכונות לחיזוי.
פלט של הסבר אונליין
הקוד הבא מדגים איך אפשר להפיק את תוצאות ההסבר:
# Import required modules
import json
from google.protobuf import json_format
def explanation_to_dict(explanation):
"""Converts the explanation proto to a human-friendly json."""
return json.loads(json_format.MessageToJson(explanation._pb))
for response in explanations.explanations:
print(explanation_to_dict(response))
תוצאות ההסבר הן בפורמט הבא:
{
"attributions": [
{
"baselineOutputValue": 1.4194682836532593,
"instanceOutputValue": 2.152980089187622,
"featureAttributions": {
...
"store_id": [
0.007947325706481934
],
...
"dept_id": [
5.960464477539062e-08
],
"item_id": [
0.1100526452064514
],
"date": [
0.8525647521018982
],
...
"sales": [
0.0
]
},
"outputIndex": [
2
],
"approximationError": 0.01433318599207033,
"outputName": "value"
},
...
]
}
מספר הרכיבים של attributions תלוי באופק שבו נעשה שימוש באימון המודל ובאופק של המכונה שהוזנה. מספר הרכיבים הוא הערך הקטן ביותר מבין שני הערכים האלה.
השדה featureAttributions ברכיב attributions מכיל ערך אחד לכל אחת מהעמודות בקבוצת הנתונים של הקלט. פלטפורמת הסוכנים של Gemini Enterprise יוצרת הסברים לכל סוגי המאפיינים: מאפיין, זמין בתחזית ולא זמין בתחזית. מידע נוסף על השדות של רכיב attributions זמין במאמר שיוך (Attribution).
מחיקת נקודת הקצה (endpoint)
כדי למחוק את נקודת הקצה, משתמשים בפונקציות undeploy_all() ו-delete(). הקוד הבא מציג דוגמה:
endpoint.undeploy_all()
endpoint.delete()