זיהוי חריגות בכמה סדרות נתונים מבוססות זמן באמצעות מודל TimesFM

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

במדריך הזה נעשה שימוש בנתונים מהטבלה הציבורית bigquery-public-data.san_francisco_bikeshare.bikeshare_trips.

מטרות

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

עלויות

במדריך הזה נעשה שימוש ברכיבים של Cloud de Confiance by S3NSשהשימוש בהם כרוך בתשלום, כולל הרכיבים הבאים:

  • BigQuery
  • BigQuery ML

מידע נוסף על העלויות ב-BigQuery זמין בדף תמחור ב-BigQuery.

מידע נוסף על העלויות של BigQuery ML זמין במאמר תמחור ב-BigQuery ML.

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

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. ‫BigQuery מופעל באופן אוטומטי בפרויקטים חדשים. כדי להפעיל את BigQuery בפרויקט קיים,

    אם BigQuery API לא מופעל, מפעילים אותו.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

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

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

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

כדי לזהות חריגות באמצעות מודל TimesFM:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run. השאילתה תימשך דקה או שתיים:

    WITH
      bike_share_trips AS (
        SELECT
          TIMESTAMP_TRUNC(start_date, HOUR) AS trip_hour, COUNT(*) AS num_trips
        FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
        GROUP BY TIMESTAMP_TRUNC(start_date, HOUR)
      )
    SELECT *
    FROM
      AI.DETECT_ANOMALIES(
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-07-01') AND trip_hour < TIMESTAMP('2017-08-01')
        ),
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-08-01') AND trip_hour < TIMESTAMP('2017-09-01')
        ),
        anomaly_prob_threshold => 0.95,
        timestamp_col => 'trip_hour',
        data_col => 'num_trips');

    התוצאות אמורות להיראות כך:

    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | time_series_timestamp   | time_series_data | is_anomaly | lower_bound        | upper_bound         | anomaly_probability | ai_detect_anomalies_status|
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | 2017-08-01 00:00:00 UTC | 13.0             | false      | -1.97939332204...  | 27.604928623830...  | 0.38048622012138... |                           |
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | 2017-08-01 01:00:00 UTC | 6.0              | false      | -9.42939322810...  | 20.154928628380...  | 0.38048622012138... |                           |
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | ...                     | ...              | ...        | ...                | ...                 | ...                 | ...                       |
    +-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    
  3. כשהשאילתה מסיימת לפעול, לוחצים על הכרטיסייה Visualization (הדמיה). התרשים שיתקבל ייראה כך:

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

    אפשר לזהות את האנומליות שבהן הערך של time_series_data חורג מהטווח של lower_bound ו-upper_bound.

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

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

כדי לזהות חריגות באמצעות מודל TimesFM:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run:

    WITH
      bike_share_trips AS (
        SELECT
          TIMESTAMP_TRUNC(start_date, HOUR) AS trip_hour, COUNT(*) AS num_trips, subscriber_type
        FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_trips`
        GROUP BY TIMESTAMP_TRUNC(start_date, HOUR), subscriber_type
      )
    SELECT *
    FROM
      AI.DETECT_ANOMALIES(
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-07-01') AND trip_hour < TIMESTAMP('2017-08-01')
        ),
        (
          SELECT *
          FROM bike_share_trips
          WHERE trip_hour >= TIMESTAMP('2017-08-01') AND trip_hour < TIMESTAMP('2017-09-01')
        ),
        anomaly_prob_threshold => 0.95,
        timestamp_col => 'trip_hour',
        data_col => 'num_trips',
        id_cols => ['subscriber_type']);

    התוצאות אמורות להיראות כך:

    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | subscriber_type | time_series_timestamp   | time_series_data | is_anomaly | lower_bound        | upper_bound         | anomaly_probability | ai_detect_anomalies_status|
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Customer        | 2017-08-01 00:00:00 UTC | 13.0             | false      | -1.97939332204...  | 27.604928623830...  | 0.38048622012138... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Customer        | 2017-08-01 01:00:00 UTC | 3.0              | false      | -5.12345678901...  | 10.123456789012...  | 0.12345678901234... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | ...             | ...                     | ...              | ...        | ...                | ...                 | ...                 | ...                       |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Subscriber      | 2017-08-01 00:00:00 UTC | 13.0             | false      | -1.97939332204...  | 27.604928623830...  | 0.38048622012138... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | Subscriber      | 2017-08-01 01:00:00 UTC | 3.0              | false      | -5.12345678901...  | 10.123456789012...  | 0.12345678901234... |                           |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    | ...             | ...                     | ...              | ...        | ...                | ...                 | ...                 | ...                       |
    +-----------------+-------------------------+------------------+------------+--------------------+---------------------+---------------------+---------------------------+
    

הסרת המשאבים

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

מחיקת פרויקט

כדי למחוק את הפרויקט:

  1. במסוף Cloud de Confiance , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

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