بناء أنظمة تنبؤ متعددة النماذج باستخدام GluonTS: دليل شامل مع بيانات اصطناعية وتقييم مرئي متقدم

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

1. إعداد بيئة العمل واستيراد المكتبات

نبدأ باستيراد المكتبات الأساسية اللازمة لإدارة البيانات، والتصور، وأدوات GluonTS. كما نقوم بإعداد استيرادات شرطية لـ PyTorch و MXNet، مما يسمح لنا باستخدام أي من الخلفية المتاحة في بيئتنا.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')
from gluonts.dataset.pandas import PandasDataset
from gluonts.dataset.split import split
from gluonts.evaluation import make_evaluation_predictions, Evaluator
from gluonts.dataset.artificial import ComplexSeasonalTimeSeries

try:
    from gluonts.torch import DeepAREstimator
    TORCH_AVAILABLE = True
except ImportError:
    TORCH_AVAILABLE = False

try:
    from gluonts.mx import DeepAREstimator as MXDeepAREstimator
    from gluonts.mx import SimpleFeedForwardEstimator
    MX_AVAILABLE = True
except ImportError:
    MX_AVAILABLE = False

2. توليد مجموعة بيانات اصطناعية

نقوم بتوليد مجموعة بيانات اصطناعية تتضمن عدة متسلسلات زمنية، حيث يجمع كل منها بين الاتجاه، والتذبذب الموسمي، والضوضاء. نضمن أن كل تشغيل ينتج نتائج متسقة، ونعيد إطار بيانات متعدد المتسلسلات جاهز للتجريب.

def create_synthetic_dataset(num_series=50, length=365, prediction_length=30):
    """توليد متسلسلات زمنية متعددة المتغيرات اصطناعية مع اتجاهات وتذبذبات موسمية وضوضاء"""
    np.random.seed(42)
    series_list = []
    for i in range(num_series):
        trend = np.cumsum(np.random.normal(0.1 + i*0.01, 0.1, length))
        daily_season = 10 * np.sin(2 * np.pi * np.arange(length) / 7)
        yearly_season = 20 * np.sin(2 * np.pi * np.arange(length) / 365.25)
        noise = np.random.normal(0, 5, length)
        values = np.maximum(trend + daily_season + yearly_season + noise + 100, 1)
        dates = pd.date_range(start='2020-01-01', periods=length, freq='D')
        series_list.append(pd.Series(values, index=dates, name=f'series_{i}'))
    return pd.concat(series_list, axis=1)

print(" إنشاء مجموعة بيانات متعددة المتسلسلات الاصطناعية...")
df = create_synthetic_dataset(num_series=10, length=200, prediction_length=30)
dataset = PandasDataset(df, target=df.columns.tolist())
training_data, test_gen = split(dataset, offset=-60)
test_data = test_gen.generate_instances(prediction_length=30, windows=2)

3. تهيئة نماذج التنبؤ

نقوم بتوليد مجموعة بيانات مكونة من 10 متسلسلات، ونغلفها في PandasDataset من GluonTS، ونقسمها إلى نوافذ تدريب واختبار. ثم نقوم بتهيئة عدة مقدرين (PyTorch DeepAR، MXNet DeepAR، وFeedForward) إن وجدت، ونعود إلى مجموعة بيانات اصطناعية مدمجة إذا لم يتم تحميل أي من الخلفيات.

print(" تهيئة نماذج التنبؤ...")
models = {}
if TORCH_AVAILABLE:
    try:
        models['DeepAR_Torch'] = DeepAREstimator(freq='D', prediction_length=30)
        print(" تم تحميل PyTorch DeepAR")
    except Exception as e:
        print(f" فشل تحميل PyTorch DeepAR: {e}")
if MX_AVAILABLE:
    try:
        models['DeepAR_MX'] = MXDeepAREstimator(freq='D', prediction_length=30, trainer=dict(epochs=5))
        print(" تم تحميل MXNet DeepAR")
    except Exception as e:
        print(f" فشل تحميل MXNet DeepAR: {e}")
try:
    models['FeedForward'] = SimpleFeedForwardEstimator(freq='D', prediction_length=30, trainer=dict(epochs=5))
    print(" تم تحميل نموذج FeedForward")
except Exception as e:
    print(f" فشل تحميل FeedForward: {e}")

# ... (باقي الكود كما هو) ...

4. تدريب وتقييم النماذج

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

# ... (باقي الكود كما هو) ...

5. تصور النتائج المتقدمة

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

# ... (باقي الكود كما هو) ...

6. الخاتمة

يوفر هذا الدليل إطارًا متينًا يجمع بين إنشاء البيانات، وتجريب النماذج، وتحليل الأداء. بدلاً من الاعتماد على تكوين واحد، نرى كيفية التكيف بمرونة، واختبار خيارات متعددة، وتصور النتائج بطرق تجعل المقارنة سهلة. هذا يعطينا أساسًا أقوى لتجربة GluonTS وتطبيق نفس المبادئ على مجموعات البيانات الحقيقية، مع الحفاظ على العملية معيارية وسهلة التوسيع. يمكنك متابعتنا على تويتر [رابط تويتر]، والانضمام إلى مجتمعنا على ريديت [رابط ريديت]، والاشتراك في قائمتنا البريدية [رابط النشرة البريدية].

المصدر: MarkTechPost