پیش‌بینی سری‌های زمانی با Vertex AI و BigQuery ML

1. بررسی اجمالی

در این آزمایشگاه، نحوه ساخت یک مدل پیش‌بینی سری زمانی با TensorFlow و سپس نحوه استقرار این مدل‌ها با Vertex AI را خواهید آموخت.

آنچه یاد می گیرید

شما یاد خواهید گرفت که چگونه:

  • داده ها را به گونه ای تبدیل کنید که بتوان از آنها در مدل ML استفاده کرد
  • تجسم و کاوش داده ها
  • از BigQuery ML برای ایجاد یک مدل پیش‌بینی سری زمانی استفاده کنید
  • یک مدل پیش‌بینی سری زمانی با TensorFlow با استفاده از معماری‌های LSTM و CNN بسازید

2. مقدمه ای بر پیش بینی سری های زمانی

تمرکز این نرم‌افزار روی نحوه اعمال تکنیک‌های پیش‌بینی سری زمانی با استفاده از Google Cloud Platform است. این یک دوره عمومی پیش‌بینی سری زمانی نیست، اما یک تور مختصر از مفاهیم ممکن است برای کاربران ما مفید باشد.

داده های سری زمانی

اول، سری زمانی چیست؟ این یک مجموعه داده با داده های ثبت شده در فواصل زمانی منظم است. مجموعه داده سری زمانی شامل زمان و حداقل یک متغیر است که به زمان وابسته است.

85af6a1ff05c69f2.png

اجزاء

یک سری زمانی را می توان به اجزای زیر تجزیه کرد:

  • روند : در یک الگوی قابل پیش بینی به بالا یا پایین حرکت می کند
  • فصلی : در یک دوره خاص مانند یک روز، هفته، ماه، فصل و غیره تکرار می شود.
  • تصادفی : نوسانات باقیمانده

ممکن است چندین لایه فصلی وجود داشته باشد. به عنوان مثال، یک مرکز تماس ممکن است در روزهای خاصی از هفته و همچنین در ماه‌های معین، الگویی را در حجم تماس مشاهده کند. باقیمانده ممکن است بجز زمان با متغیرهای دیگری توضیح داده شود.

6e8d45bbbbc388ec.png

ثابت بودن

برای بهترین نتایج در پیش‌بینی، داده‌های سری زمانی باید ثابت باشند، جایی که ویژگی‌های آماری مانند میانگین و واریانس در طول زمان ثابت هستند. تکنیک هایی مانند تفکیک و کاهش روند را می توان برای داده های خام به کار برد تا ثابت تر شود.

به عنوان مثال، نمودار زیر غلظت CO2 یک الگوی تکرار شونده سالانه با روند صعودی را نشان می دهد. ( منبع )

ab82857e2e7d0b89.png

پس از حذف روند خطی، داده ها برای پیش بینی مناسب تر هستند، زیرا اکنون میانگین ثابتی دارند.

c936381ab1095528.png

استفاده از داده های سری زمانی برای یادگیری ماشین

برای استفاده از داده‌های سری زمانی در یک مسئله یادگیری ماشینی، باید آن‌ها را تبدیل کرد تا بتوان از مقادیر قبلی برای پیش‌بینی مقادیر آینده استفاده کرد. این جدول نمونه ای از نحوه ایجاد متغیرهای تاخیری برای کمک به پیش بینی هدف را نشان می دهد.

d667a941dbd470f5.png

اکنون که برخی از اصول را پوشش دادیم، بیایید با کاوش داده ها و پیش بینی شروع کنیم!

3. محیط Notebook خود را راه اندازی کنید

اکنون که مقدمه‌ای کوتاه بر داده‌ها انجام داده‌ایم، اجازه دهید محیط توسعه مدل خود را تنظیم کنیم.

مرحله 1: API ها را فعال کنید

رابط BigQuery از BigQuery Storage API استفاده می کند. BigQuery Storage API را در کنسول جستجو کنید و اگر API در حال حاضر غیرفعال است، آن را فعال کنید.

9895a2fd3cdf8f8c.png

مرحله 2: یک نوت بوک Vertex AI Workbench ایجاد کنید

به بخش Vertex AI Workbench در Cloud Console خود بروید و روی New Notebook کلیک کنید. سپس آخرین نوع نوت بوک TensorFlow Enterprise 2.x را بدون پردازنده گرافیکی انتخاب کنید:

4e7b73eabf2bc061.png

از گزینه های پیش فرض استفاده کنید و سپس روی ایجاد کلیک کنید. پس از ایجاد نمونه، Open JupyterLab را انتخاب کنید:

18c9f3c462aafaee.png

سپس، یک نوت بوک پایتون 3 از JupyterLab ایجاد کنید:

58523671a252b95a.png

مرحله 3: دانلود مواد آزمایشگاهی

یک پنجره ترمینال جدید از رابط JupyterLab ایجاد کنید: File -> New -> Terminal.

از آنجا، متن منبع را با این دستور کلون کنید:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. داده ها را کاوش و تجسم کنید

در این بخش، شما:

  • یک پرس و جو ایجاد کنید که داده ها را در یک سری زمانی گروه بندی می کند
  • مقادیر از دست رفته را پر کنید
  • تجسم داده ها
  • سری های زمانی را به اجزای روند و فصلی تجزیه کنید

مرحله 1

در Vertex AI Workbench، به قسمت training-data-analyst/courses/ai-for-time-series/notebooks بروید و 01-explore.ipynb را باز کنید.

مرحله 2

تمام سلول های نوت بوک را پاک کنید (ویرایش > پاک کردن همه خروجی ها)، تنظیمات ناحیه، پروژه و سطل را در یکی از چند سلول اول تغییر دهید و سپس سلول ها را یکی یکی اجرا کنید.

مرحله 3

در این بخش، داده ها را وارد کرده و ابعاد مختلف آن را تجسم کرده اید. اکنون که تصویر واضح تری از داده ها دارید، آماده خواهید بود تا با استفاده از این داده ها به مدل سازی یادگیری ماشینی ادامه دهید.

55839e7bc0427915.png

5. یک مدل با پیش بینی سری های زمانی BigQuery ایجاد کنید

در این بخش، شما:

  • داده های ورودی سری زمانی خود را در جدول BigQuery وارد کنید
  • یک مدل سری زمانی با استفاده از نحو BQML ایجاد کنید
  • یاد بگیرید که چگونه پارامترها و دقت مدل خود را ارزیابی کنید
  • با استفاده از مدل خود پیش بینی کنید

مرحله 1

ما می‌خواهیم یک جدول BigQuery با داده‌های خام از CSV که اخیراً بررسی کردیم ایجاد کنیم. بیایید با دانلود CSV از محیط نوت بوک شروع کنیم.

از دایرکتوری training-data-analyst/courses/ai-for-time-series/notebooks/data ، روی cta_ridership.csv راست کلیک کرده و آن را در محیط محلی خود دانلود کنید .

مرحله 2

در مرحله بعد، این داده ها را در جدول BigQuery آپلود می کنیم.

به BigQuery در کنسول بروید (با جستجو یا استفاده از این پیوند ):

649e7ab1c44b75e8.png

می توانید جدول را به یک مجموعه داده جدید یا موجود اضافه کنید که جداول مرتبط را گروه بندی می کند. اگر قبلاً مجموعه داده ای ایجاد نکرده اید، می توانید روی پروژه خود در گوشه پایین سمت چپ کلیک کنید و سپس Create Dataset را در گوشه پایین سمت راست انتخاب کنید.

281b97020cd52f29.png

نام دلخواه خود را انتخاب کنید، مانند demo ، پیش فرض ها را بپذیرید و ادامه دهید.

با انتخاب مجموعه داده، Create Table را در گوشه پایین سمت راست انتخاب کنید تا جدول جدیدی ایجاد شود.

ad47810d44cfb289.png

برای گزینه های ایجاد جدول، انتخاب کنید:

  • ایجاد جدول از: آپلود
  • فایل را انتخاب کنید: cta_ridership.csv
  • نام جدول: cta_ridership
  • طرحواره: کادر تشخیص خودکار طرحواره و پارامترهای ورودی را علامت بزنید

213e4177e9e79544.png

مرحله 3

اکنون زمان ایجاد مدل ما است! BigQuery ML یک نحو ساده شبیه به SQL ارائه می دهد که به شما امکان می دهد انواع مختلفی از مدل ها را ایجاد کنید.

در ویرایشگر پرس و جو، این پرس و جو را جای‌گذاری/تایپ کنید و در صورت نیاز، نسخه نمایشی را با نام مجموعه داده خود در هر دو مکان جایگزین کنید:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

بیایید برای درک، عناصر کلیدی نحو را مرور کنیم:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

این عبارت مدل را ایجاد می کند. انواع مختلفی از این عبارت وجود دارد، به عنوان مثال CREATE MODEL ، اما ما انتخاب کردیم که یک مدل موجود با همین نام را در اینجا جایگزین کنیم.

OPTIONS(MODEL_TYPE='ARIMA' ... )

در اینجا گزینه های مدل را تعریف می کنیم که اولین گزینه نوع مدل است. انتخاب ARIMA یک مدل پیش‌بینی سری زمانی ایجاد می‌کند.

TIME_SERIES_TIMESTAMP_COL='service_date'

ستون با اطلاعات تاریخ/زمان

TIME_SERIES_DATA_COL='total_rides'

ستون داده

HOLIDAY_REGION='us'

این پارامتر اختیاری به ما امکان می دهد تعطیلات را در مدل قرار دهیم. از آنجایی که کاوش داده‌های ما در مرحله قبل نشان داد که سواری در روزهای تعطیل کمتر است و داده‌ها از شیکاگو، IL، ایالات متحده آمریکا می‌آیند، ما تعطیلات ایالات متحده را در مدل لحاظ می‌کنیم.

AS SELECT ... FROM ...

این بخش داده های ورودی را که برای آموزش مدل استفاده خواهیم کرد انتخاب می کند.

تعدادی گزینه دیگر وجود دارد که می توانید به پرس و جو اضافه کنید، مانند تعریف یک ستون اگر چندین سری زمانی دارید، یا انتخاب کنید که آیا پارامترهای مدل ARIMA به طور خودکار کشف شوند. می توانید جزئیات بیشتری را در دستور CREATE MODEL برای مرجع نحو مدل های سری زمانی بیابید.

مرحله 4

بیایید در مورد مدل خود بیشتر بدانیم. پس از اتمام آموزش، بیایید پرس و جو دیگری را اجرا کنیم و در صورت نیاز دوباره نسخه آزمایشی را جایگزین کنیم:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

بیایید نتایج را تفسیر کنیم. در هر ردیف، یک مدل کاندید را با پارامترها و آمار ارزیابی آن مشاهده خواهید کرد. نتایج به ترتیب صعودی AIC یا معیار اطلاعات Akaike بازگردانده می شوند که یک شاخص نسبی از کیفیت مدل را ارائه می دهد. بنابراین مدل ردیف اول کمترین AIC را دارد و بهترین مدل محسوب می شود.

شما می توانید پارامترهای p، d و q مدل ARIMA و همچنین فصلی بودن کشف شده در مدل را مشاهده کنید. در این مورد، مدل برتر هر دو فصلی هفتگی و سالانه را شامل می شود.

5b5b1e129c70a340.png

مرحله 5

اکنون، با تابع ML.FORECAST آماده پیش بینی هستیم!

موارد زیر را بچسبانید/تایپ کنید (در صورت نیاز نسخه نمایشی را جایگزین کنید):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

این پرس و جو به سادگی 7 روز را با استفاده از مدل ما پیش بینی می کند! می‌توانیم هفت ردیف برگشت‌شده را در زیر ببینیم. پیش‌بینی همچنین شامل یک بازه اطمینان است که 0.95 پیش‌فرض است اما در پرس و جو قابل تنظیم است.

b8a7f22657dc2d27.png

کار عالی: ما یک مدل سری زمانی تنها با چند جستار BQML ایجاد کرده ایم.

6. یک مدل پیش بینی سفارشی بسازید

در این بخش، شما:

  • موارد پرت را از داده ها حذف کنید
  • پیش بینی چند مرحله ای را انجام دهید
  • شامل ویژگی های اضافی در مدل سری زمانی
  • در مورد معماری شبکه های عصبی برای پیش بینی سری های زمانی بیاموزید: LSTM و CNN
  • در مورد مدل های آماری، از جمله هموارسازی نمایی Holt-Winters اطلاعات کسب کنید
  • مدل های مجموعه

مرحله 1

در Vertex AI Workbench، به training-data-analyst/courses/ai-for-time-series/notebooks بروید و 02-model.ipynb را باز کنید.

مرحله 2

تمام سلول های نوت بوک را پاک کنید (ویرایش > پاک کردن همه خروجی ها)، تنظیمات ناحیه، پروژه و سطل را در یکی از چند سلول اول تغییر دهید و سپس سلول ها را یکی یکی اجرا کنید.

مرحله 3

در نوت بوک، اکنون چندین معماری مدل را بررسی کرده اید: LSTM، CNN، و مدل های آماری. برای هر مدل، می توانید نحوه عملکرد مدل در برابر داده های آزمایشی را مشاهده کنید:

a528df58f4e6d372.png

7. آموزش و پیش بینی در ابر

در این بخش، شما:

  • داده ها و مدل ها را برای آموزش در فضای ابری آماده کنید
  • مدل خود را آموزش دهید و پیشرفت کار را با آموزش پلتفرم هوش مصنوعی نظارت کنید
  • پیش‌بینی با استفاده از مدل با پیش‌بینی‌های پلتفرم هوش مصنوعی

مرحله 1

در Vertex AI Workbench، به training-data-analyst/courses/ai-for-time-series/notebooks بروید و 03-cloud-training.ipynb را باز کنید.

مرحله 2

تمام سلول های نوت بوک را پاک کنید (ویرایش > پاک کردن همه خروجی ها)، تنظیمات ناحیه، پروژه و سطل را در یکی از چند سلول اول تغییر دهید و سپس سلول ها را یکی یکی اجرا کنید.

مرحله 3

در بخش قبل، ما یک مدل را آموزش دادیم و با آن پیش‌بینی کردیم، همه در یک دفترچه یادداشت Workbench. در این بخش، نحوه استفاده از Python SDK برای Vertex AI را از نوت بوک خود برای استفاده از خدمات Vertex AI برای آموزش و استقرار نشان دادیم.

a3f6b5dc895a24fb.png

8. چالش

در این بخش، سعی خواهید کرد مفاهیمی را که یاد گرفتید در یک مجموعه داده جدید اعمال کنید!

ما دستورالعمل های دقیق ارائه نمی دهیم، فقط برخی نکات (اگر آنها را می خواهید!).

هدف پیش بینی 311 درخواست خدمات از شهر نیویورک است. این درخواست های غیر اضطراری شامل شکایات مربوط به سر و صدا، مسائل مربوط به نور خیابان و غیره است.

مرحله 1

بیایید با درک مجموعه داده شروع کنیم.

ابتدا به مجموعه داده درخواست خدمات شهر نیویورک 311 دسترسی پیدا کنید.

برای شناخت بهتر داده‌ها، چند مورد از پرس و جوهای نمونه فهرست شده در توضیحات مجموعه داده را امتحان کنید:

  • تعداد 311 درخواست مربوط به کامیون های بستنی چقدر است؟
  • بیشترین 311 درخواست مربوط به مهمانی ها در چه روزهایی است؟

در BigQuery UI، Create Query را انتخاب کنید تا نحوه دسترسی به مجموعه داده را ببینید. توجه داشته باشید که عبارت select از bigquery-public-data.new_york_311.311_service_requests درخواست می کند.

مرحله 2

ما برای شروع آماده ایم. در این بخش، برای کار با این داده ها، تغییراتی را در نوت بوک Explore and Visualize انجام دهید.

نکات

  • نوت بوک 01-explore.ipynb را کپی کنید و از آن شروع به کار کنید.
  • برای کاوش داده ها، این پرس و جو را امتحان کنید:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • برای دریافت شمارش رویدادها بر اساس ماه، از این پرس و جو استفاده کنید:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • متغیرهای ستون را در قسمت ثابت ها به روز کنید. در جستار بالا، ستون هدف y و ستون تاریخ ds است. هیچ ویژگی اضافی وجود ندارد.
  • تغییر نام فایلی را که در آن داده ها را برای آزمایشگاه بعدی صادر می کنید، در نظر بگیرید.
  • صادر کردن داده ها با استفاده از: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

مرحله 3

بیایید اکنون یک مدل سری زمانی با داده های ماهانه ایجاد کنیم.

نکات:

  • نوت بوک 02-model.ipynb را کپی کنید و از آن شروع به کار کنید.
  • به روز رسانی پارامترهای مجموعه داده:
  • پارامترهای target_col و ts_col را برای مطابقت با مجموعه داده جدید خود به روز کنید.
  • به روز رسانی پارامترهای مدل:
  • فرکانس به ماهانه (کد شروع ماه 'MS' است)
  • مراحل ورودی: 12 (پنجره نگاه به عقب 12 ماه است)
  • مراحل خروجی: 3 (پیش بینی 3 ماه آینده)
  • فصل: 12 (فصلی 12 ماه است)
  • اگر نام فایل ورودی را در نوت بوک قبلی تغییر داده اید، تغییر دهید.
  • اگر پرس و جو را در اواسط ماه اجرا کنید، مجموع ماهانه ماه آخر بسیار کمتر از حد انتظار خواهد بود. بنابراین، برای اهداف این آزمایشگاه، اجازه دهید ماه آخر را از مجموعه داده حذف کنیم: df = df[:-1]
  • به نظر نمی رسد که هیچ نقطه پرت آشکاری در داده ها وجود ندارد، بنابراین آن سلول ها را رد کنید یا در آن نظر دهید.
  • واحدهای LSTM و فیلترهای CNN و اندازه هسته را برای این مدل جدید تنظیم کنید.

9. پاکسازی

اگر می خواهید به استفاده از این نوت بوک ادامه دهید، توصیه می شود در صورت عدم استفاده آن را خاموش کنید. از Workbench UI در Cloud Console خود، نوت بوک را انتخاب کنید و سپس Stop را انتخاب کنید:

57213ef2edad9257.png

اگر می‌خواهید تمام منابعی را که در این آزمایشگاه ایجاد کرده‌اید حذف کنید، به‌جای متوقف کردن دفترچه یادداشت workbench آن را حذف کنید .

با استفاده از منوی پیمایش در Cloud Console، به Storage بروید و هر دو سطل را که برای ذخیره دارایی های مدل خود ایجاد کرده اید حذف کنید (هشدار: فقط در صورتی این کار را انجام دهید که سطل های جدیدی را فقط برای این آزمایشگاه ایجاد کرده باشید).