קבלת מסקנות אונליין למודל תחזית

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

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

בקשה להסקת מסקנות באצווה היא בקשה לא סנכרונית. משתמשים בהסקת מסקנות באצווה כשלא נדרשת תשובה מיידית ורוצים לעבד נתונים שנצברו באמצעות בקשה אחת.

בדף הזה מוסבר איך להשתמש בהסקת מסקנות אונליין כדי לחזות ערכים עתידיים. כדי ללמוד איך לחזות ערכים באמצעות הסקת מסקנות באצווה, אפשר לעיין במאמר קבלת מסקנות באצווה עבור מודל תחזית.

כדי להשתמש במודל להסקת מסקנות, צריך לפרוס אותו לנקודת קצה. נקודת קצה היא קבוצה של משאבים פיזיים.

במקום הסקה, אפשר לבקש הסבר. ערכי החשיבות של כל תכונה בהסבר מציינים את מידת התרומה של כל תכונה לתוצאת ההסקה. סקירה כללית של המושגים זמינה במאמר שיוך תכונות לחיזוי.

מידע על התמחור של מסקנות אונליין זמין במאמר בנושא תמחור של זרימות עבודה טבלאיות.

לפני שמתחילים

לפני ששולחים בקשת הסקה אונליין, צריך קודם לאמן מודל.

יצירה או בחירה של נקודת קצה

משתמשים בפונקציה 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]

פריסת המודל בנקודת הקצה

משתמשים בפונקציה 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 צריך להיות אותו מספר של נקודות נתונים.
  • לכל זוגות הערכים של המפתח unavailable at forecast צריך להיות אותו מספר של נקודות נתונים.
  • לצמדי מפתח/ערך של available at forecast צריכים להיות לפחות נתונים רבים כמו לצמדי מפתח/ערך של unavailable 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 Agent Platform מגיב עם שתי מסקנות לגבי Sales, שמתאימות לשני חותמות הזמן של האופק ("2023-08-06" ו-"2023-08-07").

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

אם מספר נקודות הנתונים של ההקשר במופע הקלט קטן ממספר נקודות הנתונים של ההקשר ששימשו לאימון המודל, או גדול ממנו, צריך לוודא שמספר הנקודות הזה עקבי בכל זוגות הערכים של המפתח available at forecasting ובכל זוגות הערכים של המפתח unavailable at forecasting.

לדוגמה, נניח שיש מודל שאומן על סמך נתוני הקשר מארבעה ימים ונתוני אופק משני ימים. אפשר לשלוח בקשת הסקה עם נתוני הקשר של שלושה ימים בלבד. במקרה כזה, צמדי המפתח/ערך unavailable at forecast מכילים שלושה ערכים. צמדי מפתח/ערך של available at forecast חייבים להכיל חמישה ערכים.

פלט של הסקה אונליין

‫Gemini Enterprise Agent Platform מספקת פלט של הסקה אונליין בשדה 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: תכונות חיזוי שערכי חלון ההקשר שלהן משמשים כקלט למקודד TFT Long Short-Term Memory (LSTM).
  • 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 Agent Platform מחזירה את ההסקה הבאה של קוונטילים: [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 Agent Platform יוצר הסברים לכל סוגי התכונות: מאפיין, זמין בתחזית ולא זמין בתחזית. מידע נוסף על השדות של רכיב attributions זמין במאמר שיוך.

מחיקת נקודת הקצה

כדי למחוק את נקודת הקצה, משתמשים בפונקציות undeploy_all() ו-delete(). בדוגמה הבאה מוצג קוד:

endpoint.undeploy_all()
endpoint.delete()

המאמרים הבאים