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

1. نظرة عامة

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

المعلومات التي تطّلع عليها

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

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

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

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

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

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

85af6a1ff05c69f2.png

المكوّنات

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

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

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

6e8d45bbbbc388ec.png

المحطة الثابتة

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

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

ab82857e2e7d0b89.png

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

c936381ab1095528.png

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

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

d667a941dbd470f5.png

الآن بعد أن تناولنا بعض الأساسيات، لنبدأ باستكشاف البيانات والتنبؤات!

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

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

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

يستخدِم موصِّل BigQuery واجهة Storage API في BigQuery. ابحث عن 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: ملف -> جديد -> نافذة الوحدة الطرفية.

بعد ذلك، استنسَخ مادة المستند المصدر باستخدام الأمر التالي:

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 لنماذج السلسلة الزمنية.

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

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

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

لنفسّر النتائج. في كل صف، سترى نموذجًا مرشحًا مع معلماته وإحصاءات التقييم الخاصة به. يتم عرض النتائج بترتيب تصاعدي حسب معيار AIC أو معيار معلومات أكايكي، ما يوفّر مؤشرًا نسبيًا لجودة النموذج. إذًا، يحتوي النموذج في الصف الأول على أدنى قيمة 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. التدريب والتوقّع في السحابة الإلكترونية

في هذا القسم، سوف:

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

الخطوة 1

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

الخطوة 2

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

الخطوة 3

في القسم السابق، تدربنا على نموذج وتنبأ به، وكل ذلك في دفتر ملاحظات منضدة. في هذا القسم، أوضحنا كيفية استخدام Python SDK for Vertex AI من دفتر ملاحظاتك لاستخدام خدمات Vertex AI في التدريب والنشر.

a3f6b5dc895a24fb.png

8. التحدي

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

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

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

الخطوة 1

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

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

للتعرف على البيانات بشكل أفضل، جرّب نموذجين من الاستعلامات المدرجة في وصف مجموعة البيانات:

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

في واجهة مستخدم BigQuery، اختَر Create Query (إنشاء طلب بحث) للاطّلاع على كيفية الوصول إلى مجموعة البيانات. لاحظ أن عبارة 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

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

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