۱. مرور کلی
در این آزمایشگاه، شما یاد خواهید گرفت که چگونه یک مدل پیشبینی سری زمانی را با TensorFlow بسازید و سپس یاد خواهید گرفت که چگونه این مدلها را با Vertex AI مستقر کنید.
آنچه یاد میگیرید
شما یاد خواهید گرفت که چگونه:
- تبدیل دادهها به گونهای که بتوان از آنها در یک مدل یادگیری ماشینی استفاده کرد
- تجسم و کاوش دادهها
- استفاده از BigQuery ML برای ایجاد یک مدل پیشبینی سری زمانی
- ساخت یک مدل پیشبینی سری زمانی با TensorFlow با استفاده از معماریهای LSTM و CNN
۲. مقدمهای بر پیشبینی سریهای زمانی
تمرکز این آزمایشگاه کد بر نحوهی بهکارگیری تکنیکهای پیشبینی سریهای زمانی با استفاده از پلتفرم ابری گوگل است. این یک دورهی عمومی پیشبینی سریهای زمانی نیست، اما مرور مختصری از مفاهیم آن میتواند برای کاربران ما مفید باشد.
دادههای سری زمانی
اول، سری زمانی چیست؟ مجموعهای از دادهها است که در فواصل زمانی منظم ثبت شدهاند. یک مجموعه داده سری زمانی شامل زمان و حداقل یک متغیر وابسته به زمان است.

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

ایستایی
برای بهترین نتایج در پیشبینی، دادههای سری زمانی باید ایستا شوند، که در آن ویژگیهای آماری مانند میانگین و واریانس در طول زمان ثابت باشند. تکنیکهایی مانند تفاضلگیری و روندزدایی را میتوان برای دادههای خام به کار برد تا ایستاتر شوند.
برای مثال، نمودار زیر از غلظت CO2 یک الگوی سالانه تکرارشونده با روند صعودی را نشان میدهد. ( منبع )

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

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

حالا که برخی از اصول اولیه را پوشش دادهایم، بیایید با بررسی دادهها و پیشبینی شروع کنیم!
۳. محیط نوتبوک خود را راهاندازی کنید
حالا که مقدمهای کوتاه در مورد دادهها ارائه دادیم، بیایید محیط توسعه مدل خود را راهاندازی کنیم.
مرحله ۱: فعال کردن APIها
رابط BigQuery از BigQuery Storage API استفاده میکند. در کنسول، BigQuery Storage API را جستجو کنید و اگر در حال حاضر غیرفعال است، آن را فعال کنید.

مرحله ۲: یک دفترچه یادداشت Vertex AI Workbench ایجاد کنید
به بخش Vertex AI Workbench در کنسول ابری خود بروید و روی New Notebook کلیک کنید. سپس جدیدترین نوع نوتبوک TensorFlow Enterprise 2.x را بدون GPU انتخاب کنید:
از گزینههای پیشفرض استفاده کنید و سپس روی Create کلیک کنید. پس از ایجاد نمونه، Open JupyterLab را انتخاب کنید:

سپس، یک دفترچه یادداشت پایتون ۳ از JupyterLab ایجاد کنید:

مرحله ۳: دانلود مواد آزمایشگاهی
یک پنجره ترمینال جدید از رابط JupyterLab ایجاد کنید: File -> New -> Terminal.
از آنجا، با استفاده از این دستور، منبع را کلون کنید:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
۴. کاوش و تجسم دادهها
در این بخش، شما:
- یک پرسوجو ایجاد کنید که دادهها را در یک سری زمانی گروهبندی کند
- مقادیر گمشده را پر کنید
- تجسم دادهها
- تجزیه سریهای زمانی به اجزای روند و فصلی
مرحله ۱
در محیط کاری Vertex AI، به مسیر training-data-analyst/courses/ai-for-time-series/notebooks بروید و 01-explore.ipynb را باز کنید.
مرحله ۲
تمام سلولهای دفترچه یادداشت را پاک کنید (Edit > Clear All Outputs)، تنظیمات ناحیه، پروژه و باکت را در یکی از چند سلول اول تغییر دهید و سپس سلولها را یکی یکی اجرا کنید.
مرحله ۳
در این بخش، دادهها را وارد کردهاید و ابعاد مختلف آن را تجسم کردهاید. اکنون که تصویر واضحتری از دادهها دارید، آماده خواهید بود تا با استفاده از این دادهها، به مدلسازی یادگیری ماشین بپردازید.

۵. ایجاد مدل با پیشبینی سری زمانی BigQuery
در این بخش، شما:
- دادههای ورودی سری زمانی خود را به جدول BigQuery وارد کنید
- ایجاد مدل سری زمانی با استفاده از سینتکس BQML
- یاد بگیرید چگونه پارامترها و دقت مدل خود را ارزیابی کنید
- پیشبینی با استفاده از مدل
مرحله ۱
ما قصد داریم یک جدول BigQuery با دادههای خام CSV که بررسی کردیم، ایجاد کنیم. بیایید با دانلود CSV از محیط notebook شروع کنیم.
از دایرکتوری training-data-analyst/courses/ai-for-time-series/notebooks/data ، روی cta_ridership.csv کلیک راست کرده و آن را در محیط محلی خود دانلود کنید .
مرحله ۲
در مرحله بعد، این دادهها را در یک جدول BigQuery بارگذاری خواهیم کرد.
در کنسول به BigQuery بروید (با جستجو یا استفاده از این لینک ):

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

یک نام دلخواه مانند demo انتخاب کنید، مقادیر پیشفرض را بپذیرید و ادامه دهید.
با انتخاب آن مجموعه داده، برای ایجاد یک جدول جدید، گزینه Create Table را در گوشه پایین سمت راست انتخاب کنید.

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

مرحله ۳
حالا وقتشه که مدلمون رو بسازیم! BigQuery ML یه سینتکس سرراست شبیه به SQL ارائه میده که به شما امکان میده انواع مختلفی از مدلها رو ایجاد کنید.
در ویرایشگر کوئری، این کوئری را وارد/پیست کنید، و در صورت نیاز، در هر دو قسمت، به جای demo ، نام مجموعه داده خود را قرار دهید:
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`
بیایید برای درک بهتر، عناصر کلیدی سینتکس را بررسی کنیم:
| این دستور مدل را ایجاد میکند. انواع مختلفی از این دستور وجود دارد، مثلاً |
| در اینجا، گزینههای مدل را تعریف میکنیم که اولین گزینه، نوع مدل است. انتخاب ARIMA یک مدل پیشبینی سری زمانی ایجاد میکند. |
| ستون حاوی اطلاعات تاریخ/زمان |
| ستون دادهها |
| این پارامتر اختیاری به ما اجازه میدهد تعطیلات را در مدل لحاظ کنیم. از آنجایی که بررسی دادههای ما در مرحله قبل نشان داد که تعداد مسافران در روزهای تعطیل کمتر است و دادهها از شیکاگو، ایلینوی، ایالات متحده آمریکا گرفته شدهاند، تعطیلات ایالات متحده را نیز در مدل لحاظ میکنیم. |
| این بخش دادههای ورودی مورد استفاده برای آموزش مدل را انتخاب میکند. |
تعدادی گزینه دیگر نیز وجود دارد که میتوانید به پرسوجو اضافه کنید، مانند تعریف یک ستون در صورت داشتن چندین سری زمانی، یا انتخاب اینکه آیا پارامترهای مدل ARIMA به طور خودکار کشف شوند یا خیر. میتوانید جزئیات بیشتر را در دستور CREATE MODEL برای مرجع سینتکس مدلهای سری زمانی بیابید.
مرحله ۴
بیایید درباره مدل خود بیشتر بدانیم. پس از پایان آموزش، یک پرسوجوی دیگر اجرا میکنیم و در صورت نیاز، دوباره demo را جایگزین میکنیم:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
بیایید نتایج را تفسیر کنیم. در هر ردیف، یک مدل کاندید به همراه پارامترها و آمارههای ارزیابی آن را مشاهده خواهید کرد. نتایج به ترتیب صعودی AIC یا معیار اطلاعات آکائیکه که شاخصی نسبی از کیفیت مدل ارائه میدهد، بازگردانده میشوند. بنابراین، مدل ردیف اول کمترین AIC را دارد و بهترین مدل در نظر گرفته میشود.
شما قادر خواهید بود پارامترهای p، d و q مدل ARIMA و همچنین فصلی بودن کشف شده در مدل را مشاهده کنید. در این حالت، مدل برتر شامل فصلی بودن هفتگی و سالانه است.

مرحله ۵
حالا، ما آمادهایم تا با تابع ML.FORECAST پیشبینی کنیم!
عبارت زیر را وارد/جایگزین کنید (در صورت نیاز، عبارت demo را جایگزین کنید):
SELECT
*
FROM
ML.FORECAST(MODEL `demo.cta_ridership_model`,
STRUCT(7 AS horizon))
این پرسوجو به سادگی با استفاده از مدل ما، ۷ روز آینده را پیشبینی میکند! میتوانیم هفت ردیف برگردانده شده را در زیر ببینیم. این پیشبینی همچنین شامل یک فاصله اطمینان است که به طور پیشفرض ۰.۹۵ است اما در پرسوجو قابل تنظیم است.

کار عالی: ما یک مدل سری زمانی را تنها با چند پرسوجوی BQML ایجاد کردهایم.
۶. یک مدل پیشبینی سفارشی بسازید
در این بخش، شما:
- حذف دادههای پرت از دادهها
- انجام پیشبینی چند مرحلهای
- گنجاندن ویژگیهای اضافی در یک مدل سری زمانی
- آشنایی با معماریهای شبکه عصبی برای پیشبینی سریهای زمانی: LSTM و CNN
- آشنایی با مدلهای آماری، از جمله هموارسازی نمایی هولت-وینترز
- مدلهای گروهی
مرحله ۱
در محیط کاری Vertex AI، به مسیر training-data-analyst/courses/ai-for-time-series/notebooks بروید و 02-model.ipynb را باز کنید.
مرحله ۲
تمام سلولهای دفترچه یادداشت را پاک کنید (Edit > Clear All Outputs)، تنظیمات ناحیه، پروژه و باکت را در یکی از چند سلول اول تغییر دهید و سپس سلولها را یکی یکی اجرا کنید.
مرحله ۳
در دفترچه یادداشت، اکنون معماریهای مدل متعددی را بررسی کردهاید: LSTM، CNN و مدلهای آماری. برای هر مدل، میتوانید ببینید که مدل در برابر دادههای آزمایشی چگونه عمل میکند:

۷. آموزش و پیشبینی در فضای ابری
در این بخش، شما:
- آمادهسازی دادهها و مدلها برای آموزش در فضای ابری
- مدل خود را آموزش دهید و پیشرفت کار را با آموزش پلتفرم هوش مصنوعی زیر نظر داشته باشید
- پیشبینی با استفاده از مدل با پیشبینیهای پلتفرم هوش مصنوعی
مرحله ۱
در محیط کاری Vertex AI، به مسیر training-data-analyst/courses/ai-for-time-series/notebooks بروید و 03-cloud-training.ipynb را باز کنید.
مرحله ۲
تمام سلولهای دفترچه یادداشت را پاک کنید (Edit > Clear All Outputs)، تنظیمات ناحیه، پروژه و باکت را در یکی از چند سلول اول تغییر دهید و سپس سلولها را یکی یکی اجرا کنید.
مرحله ۳
در بخش قبلی، ما یک مدل را آموزش دادیم و با آن پیشبینی کردیم، همه اینها در یک نوتبوک Workbench. در این بخش، ما نحوه استفاده از Python SDK برای Vertex AI را از نوتبوک خود برای استفاده از سرویسهای Vertex AI برای آموزش و استقرار نشان دادیم.

۸. چالش
در این بخش، سعی خواهید کرد مفاهیمی را که آموختهاید، در یک مجموعه داده جدید به کار ببرید!
ما دستورالعملهای دقیقی ارائه نمیدهیم، فقط چند نکته (اگر مایل باشید!).
هدف، پیشبینی ۳۱۱ درخواست خدمات از شهر نیویورک است. این درخواستهای غیر اضطراری شامل شکایات مربوط به سر و صدا، مشکلات چراغهای خیابان و غیره میشود.
مرحله ۱
بیایید با درک مجموعه دادهها شروع کنیم.
ابتدا، به مجموعه دادههای درخواستهای خدمات شهر نیویورک ۳۱۱ دسترسی پیدا کنید.
برای آشنایی بهتر با دادهها، چند نمونه از کوئریهای ذکر شده در توضیحات مجموعه داده را امتحان کنید:
- تعداد ۳۱۱ درخواست مربوط به کامیونهای بستنیفروشی چقدر است؟
- چه روزهایی بیشترین درخواستهای ۳۱۱ مربوط به مهمانیها را دریافت میکنند؟
در رابط کاربری BigQuery، گزینه Create Query را انتخاب کنید تا نحوه دسترسی به مجموعه دادهها را مشاهده کنید. توجه داشته باشید که دستور select از bigquery-public-data.new_york_311.311_service_requests کوئری میگیرد.
مرحله ۲
ما آماده شروع هستیم. در این بخش، اصلاحاتی را در دفترچه کاوش و تجسم ایجاد کنید تا با این دادهها کار کند.
نکات
- دفترچه یادداشت
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)
مرحله ۳
حالا بیایید یک مدل سری زمانی با دادههای ماهانه ایجاد کنیم.
نکات:
- دفترچه یادداشت
02-model.ipynbرا کپی کنید و کار را از روی آن شروع کنید. - پارامترهای مجموعه داده را بهروزرسانی کنید:
- پارامترهای
target_colوts_colرا برای مطابقت با مجموعه داده جدید خود بهروزرسانی کنید. - پارامترهای مدل را بهروزرسانی کنید:
- تناوب به صورت ماهانه (کد شروع ماه «MS» است)
- مراحل ورودی: ۱۲ (بازه زمانی ۱۲ ماه است)
- مراحل خروجی: ۳ (پیشبینی ۳ ماه آینده)
- فصلها: ۱۲ (فصلی بودن ۱۲ ماه است)
- اگر نام فایل ورودی را در دفترچه یادداشت قبلی تغییر دادهاید، آن را تغییر دهید.
- اگر کوئری را در اواسط ماه اجرا کنید، مجموع ماهانه برای ماه آخر بسیار کمتر از حد انتظار خواهد بود. بنابراین، برای اهداف این آزمایش، بیایید ماه آخر را با استفاده از
df = df[:-1]از مجموعه دادهها حذف کنیم. - به نظر نمیرسد هیچ داده پرت واضحی در دادهها وجود داشته باشد، بنابراین از آن سلولها صرف نظر کنید یا آنها را در حالت کامنت قرار دهید.
- واحدهای LSTM و فیلترهای CNN و اندازه هسته را برای این مدل جدید تنظیم کنید.
۹. پاکسازی
اگر میخواهید به استفاده از این نوتبوک ادامه دهید، توصیه میشود وقتی از آن استفاده نمیکنید، آن را خاموش کنید. از رابط کاربری Workbench در Cloud Console خود، نوتبوک را انتخاب کرده و سپس Stop را انتخاب کنید:

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