توقُّع السلاسل الزمنية باستخدام Vertex AI وBigQuery ML

1. نظرة عامة

في هذه الميزة الاختبارية، ستتعرّف على كيفية إنشاء نموذج لتوقّع السلاسل الزمنية باستخدام TensorFlow، ثم ستتعرّف على كيفية نشر هذه النماذج باستخدام Vertex AI.

ما ستتعرّف عليه

ستتعرَّف على كيفية:

  • تحويل البيانات لتتمكّن من استخدامها في نموذج تعلُّم آلي
  • تصوُّر البيانات واستكشافها
  • استخدام BigQuery ML لإنشاء نموذج توقّع السلاسل الزمنية
  • إنشاء نموذج توقّع السلسلة الزمنية باستخدام TensorFlow من خلال بنية LSTM وCNN

2. مقدمة حول التوقّع المستند إلى السلاسل الزمنية

يركّز هذا الدرس التطبيقي حول الترميز على كيفية تطبيق تقنيات توقّع السلاسل الزمنية باستخدام Google Cloud Platform. هذه ليست دورة تدريبية عامة حول التوقّع المستند إلى السلاسل الزمنية، ولكن قد يكون من المفيد أن نقدّم للمستخدمين جولة موجزة حول المفاهيم.

بيانات السلسلة الزمنية

أولاً، ما هي السلسلة الزمنية؟ وهي مجموعة بيانات تتضمّن بيانات مسجّلة على فواصل زمنية منتظمة. تحتوي مجموعة البيانات المتسلسلة زمنيًا على كل من الوقت ومتغير واحد على الأقل يعتمد على الوقت.

85af6a1ff05c69f2.png

المكوّنات

يمكن تقسيم السلسلة الزمنية إلى مكونات:

  • المؤشر: يتحرّك للأعلى أو للأسفل بنمط يمكن توقّعه بشكل معقول
  • موسمي: يتكرّر على مدار فترة زمنية محدّدة، مثل يوم أو أسبوع أو شهر أو موسم أو غير ذلك
  • عشوائي: التقلّبات المتبقية

يمكن أن تكون هناك طبقات متعددة من التغيّرات الموسمية. على سبيل المثال، قد يرصد مركز الاتصال نمطًا في عدد المكالمات في أيام معيّنة من الأسبوع وكذلك في أشهر معيّنة. قد يكون من الممكن تفسير البقايا من خلال متغيرات أخرى غير الوقت.

6e8d45bbbbc388ec.png

الثبات

للحصول على أفضل النتائج في التوقّع، يجب أن تكون بيانات السلسلة الزمنية ثابتة، أي أن تكون الخصائص الإحصائية، مثل المتوسط والتباين، ثابتة بمرور الوقت. يمكن تطبيق أساليب مثل التفاضل وإزالة الاتجاه على البيانات الأولية لجعلها أكثر ثباتًا.

على سبيل المثال، يعرض الرسم البياني أدناه لتركيز ثاني أكسيد الكربون نمطًا سنويًا متكررًا مع اتجاه تصاعدي. ( المصدر)

ab82857e2e7d0b89.png

بعد إزالة الاتجاه الخطي، تصبح البيانات أكثر ملاءمة للتوقّع، لأنّها تتضمّن الآن متوسطًا ثابتًا.

c936381ab1095528.png

استخدام بيانات السلسلة الزمنية لتعلُّم الآلة

لاستخدام بيانات السلاسل الزمنية في مشكلة تتعلّق بتعلُّم الآلة، يجب تحويلها حتى يمكن استخدام القيم السابقة لتوقُّع القيم المستقبلية. يعرض هذا الجدول مثالاً على كيفية إنشاء متغيرات متأخرة للمساعدة في توقّع القيمة المستهدَفة.

d667a941dbd470f5.png

بعد أن تناولنا بعض الأساسيات، لنبدأ الآن باستكشاف البيانات والتوقّع.

3- إعداد بيئة "دفتر الملاحظات"

بعد أن قدّمنا مقدمة موجزة عن البيانات، لننتقل الآن إلى إعداد بيئة تطوير النموذج.

الخطوة 1: تفعيل واجهات برمجة التطبيقات

يستخدم موصِّل BigQuery واجهة BigQuery Storage API. ابحث عن BigQuery Storage API في وحدة التحكّم وفعِّل واجهة برمجة التطبيقات إذا كانت غير مفعّلة حاليًا.

9895a2fd3cdf8f8c.png

الخطوة 2: إنشاء دفتر ملاحظات Vertex AI Workbench

انتقِل إلى قسم Vertex AI Workbench في Cloud Console وانقر على دفتر ملاحظات جديد. بعد ذلك، اختَر أحدث نوع من دفاتر ملاحظات TensorFlow Enterprise 2.x بدون وحدات معالجة الرسومات:

4e7b73eabf2bc061.png

استخدِم الخيارات التلقائية، ثم انقر على إنشاء. بعد إنشاء المثيل، انقر على فتح JupyterLab:

18c9f3c462aafaee.png

بعد ذلك، أنشئ دفتر ملاحظات Python 3 من JupyterLab:

58523671a252b95a.png

الخطوة 3: تنزيل مواد المختبر

أنشئ نافذة Terminal جديدة من واجهة 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

يمكنك إضافة الجدول إلى مجموعة بيانات جديدة أو حالية، ما يؤدي إلى تجميع الجداول ذات الصلة. في حال لم تكن قد أنشأت مجموعة بيانات بعد، يمكنك النقر على مشروعك في أسفل يسار الصفحة، ثم اختيار إنشاء مجموعة بيانات في أسفل يسار الصفحة.

281b97020cd52f29.png

اختَر اسمًا من اختيارك، مثل demo، واقبل الإعدادات التلقائية، ثمّ تابِع.

بعد اختيار مجموعة البيانات هذه، انقر على إنشاء جدول في أسفل يسار الصفحة لإنشاء جدول جديد.

ad47810d44cfb289.png

بالنسبة إلى خيارات إنشاء الجدول، حدِّد:

  • إنشاء جدول من: تحميل
  • اختَر الملف: cta_ridership.csv
  • اسم الجدول: cta_ridership
  • المخطط: ضَع علامة في المربّع للاكتشاف التلقائي للمخطط ومَعلمات الإدخال

213e4177e9e79544.png

الخطوة 3

حان الآن وقت إنشاء النموذج. توفّر 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`

لنتعرّف على العناصر الأساسية للصيغة من أجل فهمها:

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'

تتيح لنا هذه المَعلمة الاختيارية تضمين العطلات في النموذج. بما أنّ استكشاف البيانات في الخطوة السابقة أظهر أنّ عدد الركاب كان أقل في أيام العطلات، وبما أنّ البيانات تأتي من شيكاغو، إلينوي، الولايات المتحدة الأمريكية، سنضمّن عطلات الولايات المتحدة في النموذج.

AS SELECT ... FROM ...

يختار هذا القسم بيانات الإدخال التي سنستخدمها لتدريب النموذج.

هناك عدد من الخيارات الأخرى التي يمكنك إضافتها إلى طلب البحث، مثل تحديد عمود إذا كان لديك سلاسل زمنية متعددة، أو اختيار ما إذا كنت تريد اكتشاف مَعلمات نموذج ARIMA تلقائيًا. يمكنك الاطّلاع على مزيد من التفاصيل في مرجع بنية عبارة CREATE MODEL لنماذج السلاسل الزمنية.

الخطوة الرابعة

لنتعرّف أكثر على نموذجنا. بعد الانتهاء من التدريب، لننفّذ طلب بحث آخر، مع استبدال demo مرة أخرى إذا لزم الأمر:

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

لنفسّر النتائج. في كل صف، سيظهر نموذج مرشّح مع مَعلماته وإحصاءات التقييم. يتم عرض النتائج بترتيب تصاعدي حسب معيار معلومات Akaike، أو معيار معلومات Akaike، الذي يقدّم مؤشرًا نسبيًا لجودة النموذج. إذًا، النموذج في الصف الأول لديه أقل قيمة لمعيار معلومات أكايكي، ويُعدّ أفضل نموذج.

ستتمكّن من الاطّلاع على المَعلمات p وd وq لنموذج ARIMA، بالإضافة إلى الموسمية التي تم رصدها في النموذج. في هذه الحالة، يتضمّن النموذج الأفضل كلاً من التغيّرات الموسمية الأسبوعية والسنوية.

5b5b1e129c70a340.png

الخطوة 5

يمكننا الآن توقّع النتائج باستخدام الدالة ML.FORECAST.

الصِق/اكتب ما يلي (مع استبدال demo إذا لزم الأمر):

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. التدريب والتوقّع في السحابة الإلكترونية

في هذا القسم، ستتمكّن مما يلي:

  • إعداد البيانات والنماذج للتدريب في السحابة الإلكترونية
  • تدريب النموذج وتتبُّع مستوى تقدّم المهمة باستخدام AI Platform Training
  • التوقّع باستخدام النموذج من خلال AI Platform Predictions

الخطوة 1

في Vertex AI Workbench، انتقِل إلى training-data-analyst/courses/ai-for-time-series/notebooks وافتح 03-cloud-training.ipynb.

الخطوة 2

محو جميع الخلايا في دفتر الملاحظات (تعديل > محو جميع النواتج)، وتغيير إعدادات المنطقة والمشروع والحزمة في إحدى الخلايا القليلة الأولى، ثم تشغيل الخلايا واحدة تلو الأخرى

الخطوة 3

في القسم السابق، درّبنا نموذجًا وتوقّعنا النتائج باستخدام هذا النموذج، وكل ذلك ضمن دفتر ملاحظات Workbench. في هذا القسم، أوضحنا كيفية استخدام حزمة تطوير البرامج (SDK) الخاصة بلغة Python لمنصة Vertex AI من دفتر ملاحظاتك لاستخدام خدمات Vertex AI في التدريب والنشر.

a3f6b5dc895a24fb.png

8. التحدي

في هذا القسم، ستجرّب تطبيق المفاهيم التي تعلّمتها على مجموعة بيانات جديدة.

لن نقدّم تعليمات مفصّلة، بل بعض التلميحات فقط (إذا أردت ذلك).

الهدف هو التنبؤ بطلبات الخدمة التي يتم إرسالها إلى الرقم 311 في مدينة نيويورك. تشمل هذه الطلبات غير الطارئة الشكاوى بشأن الضوضاء ومشاكل إنارة الشوارع وما إلى ذلك.

الخطوة 1

لنبدأ بفهم مجموعة البيانات.

أولاً، يمكنك الوصول إلى مجموعة بيانات طلبات الخدمة 311 في مدينة نيويورك.

للتعرّف على البيانات بشكل أفضل، جرِّب بعض طلبات البحث النموذجية المُدرَجة في وصف مجموعة البيانات:

  • ما هو عدد طلبات الاتصال بالرقم 311 المتعلقة بشاحنات بيع الآيس كريم؟
  • ما هي الأيام التي يتم فيها تلقّي أكبر عدد من الطلبات على الرقم 311 بشأن الحفلات؟

في واجهة مستخدم BigQuery، انقر على إنشاء طلب بحث لمعرفة كيفية الوصول إلى مجموعة البيانات. يُرجى العِلم أنّ عبارة SELECT تستعلم من bigquery-public-data.new_york_311.311_service_requests.

الخطوة 2

نحن جاهزون للبدء. في هذا القسم، يمكنك إجراء تعديلات على دفتر ملاحظات الاستكشاف والتصوّر للعمل مع هذه البيانات.

تلميحات

  • نسخ 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 في Cloud Console، اختَر دفتر الملاحظات، ثم انقر على إيقاف:

57213ef2edad9257.png

إذا أردت حذف جميع المراجع التي أنشأتها في هذا المختبر، ما عليك سوى النقر على حذف دفتر ملاحظات Workbench بدلاً من إيقافه.

باستخدام قائمة "التنقل" في Cloud Console، انتقِل إلى "التخزين" واحذف الحزمتَين اللتين أنشأتهما لتخزين مواد عرض النموذج (تحذير: لا تنفّذ هذه الخطوة إلا إذا أنشأت حزمتَين جديدتَين لهذا المختبر فقط).