1. بررسی اجمالی
در این آزمایشگاه، نحوه ساخت یک مدل پیشبینی سری زمانی با TensorFlow و سپس نحوه استقرار این مدلها با Vertex AI را خواهید آموخت.
آنچه یاد می گیرید
شما یاد خواهید گرفت که چگونه:
- داده ها را به گونه ای تبدیل کنید که بتوان از آنها در مدل ML استفاده کرد
- تجسم و کاوش داده ها
- از BigQuery ML برای ایجاد یک مدل پیشبینی سری زمانی استفاده کنید
- یک مدل پیشبینی سری زمانی با TensorFlow با استفاده از معماریهای LSTM و CNN بسازید
2. مقدمه ای بر پیش بینی سری های زمانی
تمرکز این نرمافزار روی نحوه اعمال تکنیکهای پیشبینی سری زمانی با استفاده از Google Cloud Platform است. این یک دوره عمومی پیشبینی سری زمانی نیست، اما یک تور مختصر از مفاهیم ممکن است برای کاربران ما مفید باشد.
داده های سری زمانی
اول، سری زمانی چیست؟ این یک مجموعه داده با داده های ثبت شده در فواصل زمانی منظم است. مجموعه داده سری زمانی شامل زمان و حداقل یک متغیر است که به زمان وابسته است.
اجزاء
یک سری زمانی را می توان به اجزای زیر تجزیه کرد:
- روند : در یک الگوی قابل پیش بینی به بالا یا پایین حرکت می کند
- فصلی : در یک دوره خاص مانند یک روز، هفته، ماه، فصل و غیره تکرار می شود.
- تصادفی : نوسانات باقیمانده
ممکن است چندین لایه فصلی وجود داشته باشد. به عنوان مثال، یک مرکز تماس ممکن است در روزهای خاصی از هفته و همچنین در ماههای معین، الگویی را در حجم تماس مشاهده کند. باقیمانده ممکن است بجز زمان با متغیرهای دیگری توضیح داده شود.
ثابت بودن
برای بهترین نتایج در پیشبینی، دادههای سری زمانی باید ثابت باشند، جایی که ویژگیهای آماری مانند میانگین و واریانس در طول زمان ثابت هستند. تکنیک هایی مانند تفکیک و کاهش روند را می توان برای داده های خام به کار برد تا ثابت تر شود.
به عنوان مثال، نمودار زیر غلظت CO2 یک الگوی تکرار شونده سالانه با روند صعودی را نشان می دهد. ( منبع )
پس از حذف روند خطی، داده ها برای پیش بینی مناسب تر هستند، زیرا اکنون میانگین ثابتی دارند.
استفاده از داده های سری زمانی برای یادگیری ماشین
برای استفاده از دادههای سری زمانی در یک مسئله یادگیری ماشینی، باید آنها را تبدیل کرد تا بتوان از مقادیر قبلی برای پیشبینی مقادیر آینده استفاده کرد. این جدول نمونه ای از نحوه ایجاد متغیرهای تاخیری برای کمک به پیش بینی هدف را نشان می دهد.
اکنون که برخی از اصول را پوشش دادیم، بیایید با کاوش داده ها و پیش بینی شروع کنیم!
3. محیط Notebook خود را راه اندازی کنید
اکنون که مقدمهای کوتاه بر دادهها انجام دادهایم، اجازه دهید محیط توسعه مدل خود را تنظیم کنیم.
مرحله 1: API ها را فعال کنید
رابط BigQuery از BigQuery Storage API استفاده می کند. BigQuery Storage API را در کنسول جستجو کنید و اگر API در حال حاضر غیرفعال است، آن را فعال کنید.
مرحله 2: یک نوت بوک Vertex AI Workbench ایجاد کنید
به بخش Vertex AI Workbench در Cloud Console خود بروید و روی New Notebook کلیک کنید. سپس آخرین نوع نوت بوک TensorFlow Enterprise 2.x را بدون پردازنده گرافیکی انتخاب کنید:
از گزینه های پیش فرض استفاده کنید و سپس روی ایجاد کلیک کنید. پس از ایجاد نمونه، Open JupyterLab را انتخاب کنید:
سپس، یک نوت بوک پایتون 3 از JupyterLab ایجاد کنید:
مرحله 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
در این بخش، داده ها را وارد کرده و ابعاد مختلف آن را تجسم کرده اید. اکنون که تصویر واضح تری از داده ها دارید، آماده خواهید بود تا با استفاده از این داده ها به مدل سازی یادگیری ماشینی ادامه دهید.
5. یک مدل با پیش بینی سری های زمانی BigQuery ایجاد کنید
در این بخش، شما:
- داده های ورودی سری زمانی خود را در جدول BigQuery وارد کنید
- یک مدل سری زمانی با استفاده از نحو BQML ایجاد کنید
- یاد بگیرید که چگونه پارامترها و دقت مدل خود را ارزیابی کنید
- با استفاده از مدل خود پیش بینی کنید
مرحله 1
ما میخواهیم یک جدول BigQuery با دادههای خام از CSV که اخیراً بررسی کردیم ایجاد کنیم. بیایید با دانلود CSV از محیط نوت بوک شروع کنیم.
از دایرکتوری training-data-analyst/courses/ai-for-time-series/notebooks/data
، روی cta_ridership.csv
راست کلیک کرده و آن را در محیط محلی خود دانلود کنید .
مرحله 2
در مرحله بعد، این داده ها را در جدول BigQuery آپلود می کنیم.
به BigQuery در کنسول بروید (با جستجو یا استفاده از این پیوند ):
می توانید جدول را به یک مجموعه داده جدید یا موجود اضافه کنید که جداول مرتبط را گروه بندی می کند. اگر قبلاً مجموعه داده ای ایجاد نکرده اید، می توانید روی پروژه خود در گوشه پایین سمت چپ کلیک کنید و سپس Create Dataset را در گوشه پایین سمت راست انتخاب کنید.
نام دلخواه خود را انتخاب کنید، مانند demo
، پیش فرض ها را بپذیرید و ادامه دهید.
با انتخاب مجموعه داده، Create Table را در گوشه پایین سمت راست انتخاب کنید تا جدول جدیدی ایجاد شود.
برای گزینه های ایجاد جدول، انتخاب کنید:
- ایجاد جدول از: آپلود
- فایل را انتخاب کنید: cta_ridership.csv
- نام جدول: cta_ridership
- طرحواره: کادر تشخیص خودکار طرحواره و پارامترهای ورودی را علامت بزنید
مرحله 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`
بیایید برای درک، عناصر کلیدی نحو را مرور کنیم:
| این عبارت مدل را ایجاد می کند. انواع مختلفی از این عبارت وجود دارد، به عنوان مثال |
| در اینجا گزینه های مدل را تعریف می کنیم که اولین گزینه نوع مدل است. انتخاب ARIMA یک مدل پیشبینی سری زمانی ایجاد میکند. |
| ستون با اطلاعات تاریخ/زمان |
| ستون داده |
| این پارامتر اختیاری به ما امکان می دهد تعطیلات را در مدل قرار دهیم. از آنجایی که کاوش دادههای ما در مرحله قبل نشان داد که سواری در روزهای تعطیل کمتر است و دادهها از شیکاگو، IL، ایالات متحده آمریکا میآیند، ما تعطیلات ایالات متحده را در مدل لحاظ میکنیم. |
| این بخش داده های ورودی را که برای آموزش مدل استفاده خواهیم کرد انتخاب می کند. |
تعدادی گزینه دیگر وجود دارد که می توانید به پرس و جو اضافه کنید، مانند تعریف یک ستون اگر چندین سری زمانی دارید، یا انتخاب کنید که آیا پارامترهای مدل ARIMA به طور خودکار کشف شوند. می توانید جزئیات بیشتری را در دستور CREATE MODEL برای مرجع نحو مدل های سری زمانی بیابید.
مرحله 4
بیایید در مورد مدل خود بیشتر بدانیم. پس از اتمام آموزش، بیایید پرس و جو دیگری را اجرا کنیم و در صورت نیاز دوباره نسخه آزمایشی را جایگزین کنیم:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
بیایید نتایج را تفسیر کنیم. در هر ردیف، یک مدل کاندید را با پارامترها و آمار ارزیابی آن مشاهده خواهید کرد. نتایج به ترتیب صعودی AIC یا معیار اطلاعات Akaike بازگردانده می شوند که یک شاخص نسبی از کیفیت مدل را ارائه می دهد. بنابراین مدل ردیف اول کمترین AIC را دارد و بهترین مدل محسوب می شود.
شما می توانید پارامترهای p، d و q مدل ARIMA و همچنین فصلی بودن کشف شده در مدل را مشاهده کنید. در این مورد، مدل برتر هر دو فصلی هفتگی و سالانه را شامل می شود.
مرحله 5
اکنون، با تابع ML.FORECAST
آماده پیش بینی هستیم!
موارد زیر را بچسبانید/تایپ کنید (در صورت نیاز نسخه نمایشی را جایگزین کنید):
SELECT * FROM ML.FORECAST(MODEL `demo.cta_ridership_model`, STRUCT(7 AS horizon))
این پرس و جو به سادگی 7 روز را با استفاده از مدل ما پیش بینی می کند! میتوانیم هفت ردیف برگشتشده را در زیر ببینیم. پیشبینی همچنین شامل یک بازه اطمینان است که 0.95 پیشفرض است اما در پرس و جو قابل تنظیم است.
کار عالی: ما یک مدل سری زمانی تنها با چند جستار 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، و مدل های آماری. برای هر مدل، می توانید نحوه عملکرد مدل در برابر داده های آزمایشی را مشاهده کنید:
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 برای آموزش و استقرار نشان دادیم.
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 را انتخاب کنید:
اگر میخواهید تمام منابعی را که در این آزمایشگاه ایجاد کردهاید حذف کنید، بهجای متوقف کردن دفترچه یادداشت workbench آن را حذف کنید .
با استفاده از منوی پیمایش در Cloud Console، به Storage بروید و هر دو سطل را که برای ذخیره دارایی های مدل خود ایجاد کرده اید حذف کنید (هشدار: فقط در صورتی این کار را انجام دهید که سطل های جدیدی را فقط برای این آزمایشگاه ایجاد کرده باشید).