תכונות הניטור

באמצעות Vertex AI Feature Store אפשר לתזמן ולהריץ משימות של מעקב אחרי תכונות כדי לעקוב אחרי נתוני התכונות, לאחזר נתונים סטטיסטיים של התכונות ולזהות סחף של תכונות. אפשר לעקוב אחרי נתוני תכונות רק אם רשמתם את מקור נתוני התכונות במאגר התכונות.

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

לכל משימת מעקב שמופעלת, Vertex AI Feature Store יוצר משאב FeatureMonitorJob שאפשר לאחזר כדי לראות את הנתונים הסטטיסטיים של התכונות ומידע על סחף שזוהה בנתוני התכונות.

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

לפני שמתחילים לעקוב אחרי תכונות באמצעות Vertex AI Feature Store, צריך לוודא שמתקיימות הדרישות המוקדמות שמפורטות בקטע הזה.

רישום של מקור נתונים של תכונות

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

אימות ב-Agent Platform

מאמתים את Gemini Enterprise Agent Platform, אלא אם כבר עשיתם זאת.

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

Python

כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

  1. התקינו את ה-CLI של Google Cloud.

  2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  3. אם אתם משתמשים במעטפת מקומית, צריך ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

    gcloud auth application-default login

    אם אתם משתמשים ב-Cloud Shell, אתם לא צריכים לעשות את זה.

    אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

REST

כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

    התקינו את ה-CLI של Google Cloud.

    אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

יצירת כלי למעקב אחרי תכונות עם לוח זמנים למעקב

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

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

REST

כדי ליצור משאב FeatureMonitor ולתזמן משימות של ניטור תכונות, שולחים בקשת POST באמצעות method‏ featureMonitors.create.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION_ID: האזור שבו רוצים ליצור את הכלי למעקב אחרי תכונות, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שבה הגדרתם את מעקב התכונות.
  • ‫FEATURE_MONITOR_NAME: שם לניטור התכונה החדשה שרוצים ליצור.
  • ‫FEATURE_ID_1 ו-FEATURE_ID_2: המזהים של התכונות שרוצים לעקוב אחריהן.
  • ‫DRIFT_THRESHOLD_1 ו-DRIFT_THRESHOLD_2: ספי שינוי לכל תכונה שכלולה בכלי למעקב אחרי תכונות. הסף של הסחף משמש לזיהוי אנומליות, כמו סחף של תכונות. מזינים ערך בטווח [0, 1). אם לא מזינים ערך, ערך הסף מוגדר כ-0.3 כברירת מחדל.
    Vertex AI Feature Store משווה את התמונות מביצועים עוקבים של משימות מעקב אחרי פיצ'רים ומחשב סטיות באמצעות הפונקציה ML.TFDV_VALIDATE ב-BigQuery. כדי לסווג אנומליות, נעשה שימוש במרחק L-infinity עבור מאפיינים קטגוריים ובשונות ג'נסן-שאנון עבור מאפיינים מספריים.
  • ‫CRON: ביטוי של תזמון cron שמייצג את התדירות של הרצת משימת המעקב אחרי התכונה. מידע נוסף זמין במאמר בנושא cron.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME

גוף בקשת JSON:

{
  "feature_selection_config": {
    "feature_configs": [
      {"feature_id":"FEATURE_ID_1", "drift_threshold": "DRIFT_THRESHOLD_1" },
      {"feature_id":"FEATURE_ID_2", "drift_threshold": "DRIFT_THRESHOLD_2" }
    ],
  },
  "schedule_config": {
    "cron": "CRON"
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateFeatureMonitorOperationMetadata",
    "genericMetadata": {
      "createTime": "2024-12-15T19:35:03.975958Z",
      "updateTime": "2024-12-15T19:35:03.975958Z"
    }
  }
}

Python

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

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

def create_feature_monitor_sample(
    project: str,
    location: str,
    existing_feature_group_id: str,
    feature_monitor_id: str,
    feature_selection_configs: List[Tuple[str, float]]
    schedule_config: str # Cron string. For example, "0 * * * *" indicates hourly execution.
):
    aiplatform.init(project="PROJECT_ID", location="LOCATION_ID")
    feature_group = feature_store.FeatureGroup("FEATUREGROUP_NAME")
    feature_monitor = feature_group.create_feature_monitor(
        name= "FEATURE_MONITOR_NAME",
        feature_selection_configs=[("FEATURE_ID_1", DRIFT_THRESHOLD_1),("FEATURE_ID_2", DRIFT_THRESHOLD_2)],
        schedule_config="CRON"
        )

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו רוצים ליצור את הכלי למעקב אחרי תכונות, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שבה הגדרתם את מעקב התכונות.
  • ‫FEATURE_MONITOR_NAME: שם לניטור התכונה החדשה שרוצים ליצור.
  • ‫FEATURE_ID_1 ו-FEATURE_ID_2: המזהים של התכונות שרוצים לעקוב אחריהן.
  • ‫DRIFT_THRESHOLD_1 ו-DRIFT_THRESHOLD_2: ספי שינוי לכל תכונה שכלולה בכלי למעקב אחרי תכונות. הסף של הסחף משמש לזיהוי סחף של תכונות. צריך להזין ערך בין 0 ל-1. אם לא מזינים ערך, ערך הסף מוגדר כ-0.3 כברירת מחדל.
    ‫Vertex AI Feature Store משווה בין תמונת מצב הנתונים ממשימת המעקב הנוכחית אחרי התכונות לבין תמונת מצב הנתונים במהלך משימת המעקב הקודמת אחרי התכונות. שימו לב: כדי לחשב את סטיית ההתפלגות, Vertex AI Feature Store משתמש בפונקציה ML.TFDV_VALIDATE ב-BigQuery.
    למדד שמשמש להשוואת נתונים סטטיסטיים, נעשה שימוש במרחק L-אינסוף עבור מאפיינים קטגוריים, ובשונות ג'נסן-שאנון עבור מאפיינים מספריים.
  • ‫CRON: ביטוי של לוח זמנים ב-Cron שמייצג את התדירות של הרצת משימת המעקב אחרי התכונה. מידע נוסף זמין במאמר בנושא cron.

הפעלת משימת ניטור תכונות באופן ידני

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

REST

כדי להריץ ידנית משימת מעקב אחר תכונות על ידי יצירת משאב FeatureMonitorJob , שולחים בקשת POST באמצעות השיטה featureMonitorJobs.create.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION_ID: האזור שבו רוצים להריץ את משימת המעקב אחרי התכונה, כמו us-central1.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שעבורו רוצים להריץ את משימת המעקב אחר התכונה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"
}

Python

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

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME}")
feature_monitor = feature_group.get_feature_monitor(FEATURE_MONITOR_NAME)
feature_monitor_job = feature_monitor.create_feature_monitor_job()

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו רוצים להריץ את משימת המעקב אחרי התכונה, כמו us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שעבורו רוצים להריץ את משימת המעקב אחר התכונה.

אחזור נתוני תכונות ממשימת מעקב

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

רשימת משימות של מעקב אחרי תכונות

בדוגמאות הבאות מוצגות דרכים לאחזר רשימה של כל המשאבים מסוג FeatureMonitorJob שנוצרו עבור משאב מסוג FeatureMonitor.

REST

כדי לאחזר רשימה של משאבי FeatureMonitorJob עבור משאב FeatureMonitor ספציפי, שולחים בקשת GET באמצעות השיטה featureMonitorJobs.list.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION_ID: האזור שבו נמצא משאב Feature, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שלגביו רוצים להציג את רשימת המשימות של מעקב אחרי תכונות.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "featureMonitorJobs": [
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID_1",
      "createTime": "2024-12-18T19:18:18.077161Z",
      "finalStatus": {},
      "featureSelectionConfig": {
        "featureConfigs": [
          {
            "featureId": "feature_name_1",
            "driftThreshold": 0.2
          },
          {
            "featureId": "feature_name_2",
            "driftThreshold": 0.2
          }
        ]
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID_2",
      "createTime": "2024-12-19T19:18:30.859921Z",
      "finalStatus": {},
      "featureSelectionConfig": {
        "featureConfigs": [
          {
            "featureId": "feature_name_1",
            "driftThreshold": 0.2
          },
          {
            "featureId": "feature_name_2",
            "driftThreshold": 0.2
          }
        ]
      }
    }
  ]
}

Python

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

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME")
feature_monitor = feature_group.get_feature_monitor(FEATURE_MONITOR_NAME)
feature_monitor_jobs = feature_monitor.list_feature_monitor_jobs()

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו נמצא משאב Feature, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שלגביו רוצים להציג את רשימת המשימות של מעקב אחרי תכונות.

צפייה בנתונים סטטיסטיים של תכונות מתוך משימת מעקב

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

REST

כדי להציג את הנתונים הסטטיסטיים של התכונה ממשימת מעקב על ידי אחזור משאב FeatureMonitorJob, שולחים בקשת GET באמצעות השיטה featureMonitorJobs.get.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION_ID: האזור שבו הופעלה משימת המעקב אחרי התכונה, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שעבורו הופעלה משימת המעקב אחר התכונה.
  • ‫FEATURE_MONITOR_JOB_ID: המזהה של משאב FeatureMonitorJob שרוצים לאחזר.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID",
  "createTime": "2024-12-19T19:18:18.077161Z",
  "finalStatus": {},
  "jobSummary": {
    "featureStatsAndAnomalies": [
      {
        "featureId": "feature_id_1",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "6",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "6"
            },
            "unique": "2",
            "topValues": [
              {
                "value": "59",
                "frequency": 2
              },
              {
                "value": "19",
                "frequency": 1
              }
            ],
            "avgLength": 2,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "59",
                  "sampleCount": 2
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "19",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "statsTime": "2024-12-19T19:18:18.077161Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      },
      {
        "featureId": "feature_id_2",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "6",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "6"
            },
            "unique": "2",
            "topValues": [
              {
                "value": "59",
                "frequency": 2
              },
              {
                "value": "19",
                "frequency": 1
              }
            ],
            "avgLength": 2,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "59",
                  "sampleCount": 2
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "19",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "statsTime": "2024-12-19T19:18:18.077161Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      }
    ]
  },
  "driftBaseFeatureMonitorJobId": "2250003330000300000",
  "driftBaseSnapshotTime": "2024-12-12T16:00:01.211686Z",
  "featureSelectionConfig": {
    "featureConfigs": [
      {
        "featureId": "feature_id_1",
        "driftThreshold": 0.2
      },
      {
        "featureId": "feature_id_2",
        "driftThreshold": 0.2
      }
    ]
  },
  "triggerType": "FEATURE_MONITOR_JOB_TRIGGER_ON_DEMAND"
}

Python

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

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")
feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})

feature_monitor = feature_group.get_feature_monitor("FEATURE_MONITOR_NAME")
feature_monitor_job = feature_monitor.get_feature_monitor_job("FEATURE_MONITOR_JOB_ID)")

# Retrieve feature stats and anomalies
feature_stats_and_anomalies = feature_monitor_job.feature_stats_and_anomalies
print(feature_stats_and_anomalies)

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו הופעלה משימת המעקב אחרי התכונה, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שעבורו הופעלה משימת המעקב אחר התכונה.
  • ‫FEATURE_MONITOR_JOB_ID: המזהה של משאב FeatureMonitorJob שרוצים לאחזר.

צפייה בנתונים סטטיסטיים של תכונה

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

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

REST

כדי לראות את נתוני התכונה של תכונה ספציפית במשאב Feature, שולחים בקשת GET באמצעות השיטה features.get ומציינים את מספר משימות המעקב שמהן רוצים לאחזר את הנתונים הסטטיסטיים.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION_ID: האזור שבו הופעלה משימת המעקב אחרי התכונה, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את התכונה.
  • ‫FEATURE_NAME: השם של משאב Feature שעבורו רוצים לאחזר את נתוני התכונה.
  • ‫LATEST_STATS_COUNT: מספר משימות הניטור האחרונות שמהן יאוחזרו נתוני התכונות.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME",
  "createTime": "2024-12-19T21:17:23.373559Z",
  "updateTime": "2024-12-19T21:17:23.373559Z",
  "etag": "sample_etag",
  "featureStatsAndAnomaly": [
    {
      "featureStats": {
        "name": "FEATURE_NAME",
        "type": "STRING",
        "stringStats": {
          "commonStats": {
            "numNonMissing": "4",
            "minNumValues": "1",
            "maxNumValues": "1",
            "avgNumValues": 1,
            "numValuesHistogram": {
              "buckets": [
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                }
              ],
              "type": "QUANTILES"
            },
            "totNumValues": "4"
          },
          "unique": "4",
          "topValues": [
            {
              "value": "feature_value_1",
              "frequency": 1
            },
            {
              "value": "feature_value_2",
              "frequency": 1
            },
            {
              "value": "feature_value_3",
              "frequency": 1
            },
            {
              "value": "feature_value_4",
              "frequency": 1
            }
          ],
          "avgLength": 4,
          "rankHistogram": {
            "buckets": [
              {
                "label": "label_1",
                "sampleCount": 1
              },
              {
                "lowRank": "1",
                "highRank": "1",
                "label": "label_2",
                "sampleCount": 1
              },
              {
                "lowRank": "2",
                "highRank": "2",
                "label": "label_3",
                "sampleCount": 1
              },
              {
                "lowRank": "3",
                "highRank": "3",
                "label": "label_4",
                "sampleCount": 1
              }
            ]
          }
        }
      },
      "driftDetectionThreshold": 0.1,
      "statsTime": "2024-12-19T22:00:02.734796Z",
      "featureMonitorJobId": "feature_monitor_job_id_1",
      "featureMonitorId": "feature_monitor_name_1"
    }
  ],
  "versionColumnName": "version_column_name"
}

Python

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

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})
feature_stats_and_anomalies = feature_group.get_feature("FEATURE_NAME", latest_stats_count=LATEST_STATS_COUNT)
print(feature_stats_and_anomalies)

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו הופעלה משימת המעקב אחרי התכונה, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_NAME: השם של התכונה שעבורה רוצים לאחזר את נתוני השימוש בתכונה.
  • ‫LATEST_STATS_COUNT: מספר משימות הניטור האחרונות שמהן יאוחזרו נתוני התכונות.

תרחיש שימוש לדוגמה: שימוש בניטור תכונות כדי לזהות סחף של תכונות

אתם יכולים להשתמש במעקב אחרי תכונות כדי לזהות אנומליה בנתוני התכונות שנקראת סחף תכונות. סחף הוא שינוי משמעותי ובלתי צפוי בנתוני התכונות ב-BigQuery לאורך זמן. בעזרת Vertex AI Feature Store אפשר לזהות סחף של תכונות על ידי השוואה בין תמונת המצב בזמן הפעלת משימת המעקב לבין תמונת המצב של הנתונים במהלך ההפעלה הקודמת של משימת המעקב.

לכל תכונה שכלולה במעקב התכונות, אם ההבדל בין שתי התמונות חורג מהסף שצוין בפרמטר drift_threshold, מאגר התכונות של Vertex AI מזהה סחף בתכונה ומחזיר את המידע הבא במשאב FeatureMonitorJob:

  • הפרמטר driftDetected מוגדר לערך true.

  • הסטייה בהתפלגות בין שתי התמונות. עבור תכונות מספריות, Vertex AI Feature Store מחשב את הערך הזה באמצעות Jensen-Shannon divergence. עבור תכונות קטגוריות, Vertex AI Feature Store מחשב את הערך הזה באמצעות מרחק L-אינסוף.

  • הסף שהסטייה מהחלוקה חרגה ממנו.

בדוגמאות הבאות אפשר לראות איך מאחזרים משאב FeatureMonitorJob ומוודאים אם זוהה שינוי.

REST

כדי לאחזר משאב FeatureMonitorJob , שולחים בקשת GET באמצעות ה-method‏ featureMonitorJobs.get.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION_ID: האזור שבו הופעלה משימת המעקב אחרי התכונה, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שעבורו הופעלה משימת המעקב אחר התכונה.
  • ‫FEATURE_MONITOR_JOB_ID: המזהה של משאב FeatureMonitorJob שרוצים לאחזר.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID

כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

curl

מריצים את הפקודה הבאה:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"

PowerShell

מריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID",
  "createTime": "2024-12-14T19:45:30.026522Z",
  "finalStatus": {},
  "jobSummary": {
    "featureStatsAndAnomalies": [
      {
        "featureId": "feature_id_1",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "3",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "3"
            },
            "unique": "3",
            "topValues": [
              {
                "value": "sample_value_1",
                "frequency": 1
              },
              {
                "value": "sample_value_2",
                "frequency": 1
              },
              {
                "value": "sample_value_3",
                "frequency": 1
              }
            ],
            "avgLength": 3,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "sample_label_1",
                  "sampleCount": 1
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "sample_label_2",
                  "sampleCount": 1
                },
                {
                  "lowRank": "2",
                  "highRank": "3",
                  "label": "sample_label_3",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "distributionDeviation": 0.1388880008888000,
        "driftDetectionThreshold": 0.1,
        "driftDetected": true,
        "statsTime": "2024-12-15T19:45:37.026522Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      }
    ]
  },
  "driftBaseFeatureMonitorJobId": "2250003330000300000",
  "driftBaseSnapshotTime": "2024-12-12T18:18:18.077161Z",
  "description": "sample_feature_monitor_job_description",
  "featureSelectionConfig": {
    "featureConfigs": [
      {
        "featureId": "feature_name",
        "driftThreshold": 0.1
      }
    ]
  },
  "triggerType": "FEATURE_MONITOR_JOB_TRIGGER_ON_DEMAND"
}

Python

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

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")
feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})
feature_monitor = feature_group.get_feature_monitor("FEATURE_MONITOR_NAME")
feature_monitor_job = feature_monitor.get_feature_monitor_job("FEATURE_MONITOR_JOB_ID)")

# Retrieve feature stats and anomalies
feature_stats_and_anomalies = feature_monitor_job.feature_stats_and_anomalies
print(feature_stats_and_anomalies)

# Check whether drifts are detected
for feature_stats_and_anomalies in feature_monitor_job.feature_stats_and_anomalies:
    print("feature: ", feature_stats_and_anomalies.feature_id)
    print("distribution deviation: ", feature_stats_and_anomalies.distribution_deviation)
    print("drift detected: ", feature_stats_and_anomalies.drift_detected)

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו הופעלה משימת המעקב אחרי התכונה, למשל us-central1.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫FEATUREGROUP_NAME: השם של קבוצת התכונות שמכילה את משאב FeatureMonitor.
  • ‫FEATURE_MONITOR_NAME: השם של משאב FeatureMonitor שעבורו הופעלה משימת המעקב אחר התכונה.
  • ‫FEATURE_MONITOR_JOB_ID: המזהה של משאב FeatureMonitorJob שרוצים לאחזר.