HyperAIHyperAI

Command Palette

Search for a command to run...

كيفية بناء نماذج SARIMA لمتابعة البيانات الزمنية الموسمية بشكل دقيق وموجه

كيفية بناء نماذج SARIMA للمforecasting السلسلة الزمنية البيانات لا تتكرر فحسب؛ بل تقوم بتكرار موسمي منتظم. تصوير: Markus Spiske على Unsplash تنطلق عمليات التنبؤ بالسلسلة الزمنية غالبًا من خلال النماذج الكلاسيكية مثل ARIMA (النموذج الانحداري المتكامل المتوسط المتحرك). يعمل هذا النموذج بشكل فعال للبيانات غير الموسمية التي تتميز باتجاهات ثابتة، ولكن عندما تدخل الدوريات الموسمية في الصورة، مثل الذروات الشهرية للمبيعات أو دورة درجات الحرارة اليومية، يبدأ ARIMA بمفرده في الخفوت. هنا يأتي دور النموذج الموسمي ARIMA، أو SARIMA كما هو شائع. يمتد هذا النموذج عن ARIMA من خلال نمذجة المكونات الموسمية بشكل صريح، مما يجعله أداة قوية للتنبؤ الحقيقي حيث تتكرر الأنماط في فترات زمنية منتظمة. يتميز SARIMA بقدرته على التعامل مع: - البيانات التي تتسم بدورة موسمية واضحة. - الأنماط التي تتكرر سنويًا أو شهريًا أو أسبوعيًا أو يوميًا. - التغيرات في الاتجاهات العامة على مدى فترات زمنية طويلة. في هذا المقال، سنتناول تفصيل مكونات SARIMA، وكيفية تحديد الدوريات الموسمية، وخطوات بناء نموذج SARIMA باستخدام لغة البرمجة بايثون وأدوات مثل statsmodels و pmdarima. كما سيتضمن المقال كيفية تقييم وتuning النموذج، بالإضافة إلى الأخطاء الشائعة التي يجب تجنبها. مكونات SARIMA SARIMA يجمع بين ثلاثة مكونات رئيسية: المكون الانحداري الذاتي الموسمي (Seasonal Autoregressive Component): يعتمد هذا المكون على قيم البيانات السابقة في فترات موسمية محددة. على سبيل المثال، إذا كان لديك بيانات شهرية، فقد يعتمد على القيم التي حدثت في نفس الشهر من السنوات السابقة. المكون التكاملي الموسمي (Seasonal Differencing Component): يهدف هذا المكون إلى إزالة الدوريات الموسمية من البيانات، مما يساعد في جعل السلسلة أكثر استقرارًا. يتم ذلك عن طريق حساب الفروق بين القيم في فترات موسمية محددة. المكون المتوسط المتحرك الموسمي (Seasonal Moving Average Component): يأخذ في الاعتبار الانحرافات العشوائية في فترات موسمية محددة، مما يساعد في تقليل التأثيرات القصيرة الأمد والضوضاء في البيانات. كيفية تحديد الدورية الموسمية تحديد الدورية الموسمية هو خطوة أساسية في بناء نموذج SARIMA فعال. يمكن استخدام الرسوم البيانية والتحليلات الإحصائية لتحقيق ذلك: الرسم البياني الزمني: يوفر الرسوم البيانية الزمنية لمحة أولية عن الأنماط الموسمية في البيانات. ابحث عن تكرارات منتظمة في الذروات والقيعان. التقرير الموسمي (Seasonal Decomposition): يستخدم هذا التقرير لفصل البيانات إلى مكوناتها الأساسية: الاتجاه، الدورية، والضوضاء. أدوات مثل statsmodels توفر وظائف للقيام بذلك بسهولة. اختبارات الإحصاء (Statistical Tests): يمكن استخدام اختبارات مثل ACF (الارتباط الذاتي) و PACF (الارتباط الذاتي الجزئي) لتحديد مدى ارتباط القيم فيما بينها في فترات موسمية محددة. بناء نموذج SARIMA باستخدام Python الخطوة 1: استيراد المكتبات اللازمة python import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.statespace.sarimax import SARIMAX from statsmodels.graphics.tsaplots import plot_acf, plot_pacf from pmdarima import auto_arima الخطوة 2: تحميل البيانات ```python تحميل البيانات من ملف CSV data = pd.read_csv('your_data.csv', parse_dates=['date'], index_col='date') ``` الخطوة 3: تحليل البيانات الأولي ```python رسم الرسم البياني الزمني plt.figure(figsize=(10, 4)) plt.plot(data) plt.title('Time Series Data') plt.xlabel('Date') plt.ylabel('Value') plt.show() تحليل الدورية الموسمية from statsmodels.tsa.seasonal import seasonal_decompose result = seasonal_decompose(data, model='additive') result.plot() plt.show() ``` الخطوة 4: تحديد معلمات SARIMA يمكن استخدام وظيفة auto_arima من مكتبة pmdarima لتحديد أفضل المعلمات تلقائيًا: ```python تحديد المعلمات باستخدام auto_arima model = auto_arima(data, seasonal=True, m=12) # m هو عدد الفترات في الدورة الموسمية print(model.summary()) ``` الخطوة 5: بناء وتدريب النموذج ```python بناء النموذج باستخدام المعلمات المحددة sarima_model = SARIMAX(data, order=model.order, seasonal_order=model.seasonal_order) results = sarima_model.fit() print(results.summary()) ``` الخطوة 6: تقييم النموذج ```python رسم التوقعات predictions = results.get_prediction(start=pd.to_datetime('2022-01-01'), dynamic=False) pred_conf = predictions.conf_int() ax = data['2020':].plot(label='observed') predictions.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(10, 4)) ax.fill_between(pred_conf.index, pred_conf.iloc[:, 0], pred_conf.iloc[:, 1], color='pink', alpha=.2) ax.set_xlabel('Date') ax.set_ylabel('Value') plt.legend() plt.show() ``` تعديل وتحسين النموذج يمكن تحسين نموذج SARIMA من خلال تعديل المعلمات وتطبيق تقنيات التuning: تعديل المعلمات: جرب تغيير قيم المعلمات p, d, q للنموذج الانحداري الذاتي، التكاملي، والمتوسط المتحرك، وكذلك المعلمات الموسمية P, D, Q. تحسين الأداء: استخدم تقنيات مثل صيغة أكايكي للمعلومات (AIC) وصيغة بيكي (BIC) لتقييم أداء النموذج وتحديد أفضل مجموعة من المعلمات. الأخطاء الشائعة التي يجب تجنبها عدم تحديد الدورية الموسمية بشكل صحيح: قد يؤدي هذا إلى نتائج غير دقيقة. راجع الرسوم البيانية والاختبارات الإحصائية بعناية. استخدام معلمات غير مناسبة: قد ينتج عنها نماذج مفرطة التعقيد أو بسيطة جدًا. استخدم أدوات مثل auto_arima لمساعدة في تحديد المعلمات المناسبة. تجاهل الضوضاء والانحرافات العشوائية: قد تؤثر هذه العناصر على دقة التنبؤ. ضع في اعتبارك استخدام مكونات المتوسط المتحرك والاختلافات التكاملية للتعامل معها. الخلاصة SARIMA هو نموذج قوي ومرونة يناسب العديد من التطبيقات الحقيقية التي تتسم بالدوريات الموسمية. من خلال فهم مكوناته وتحديد الدورية بشكل دقيق، يمكنك بناء نماذج تنبؤية دقيقة وموثوقة. استخدم الأدوات المتاحة في Python مثل statsmodels و pmdarima لتسهيل هذه العملية وتقييم النتائج بدقة.

الروابط ذات الصلة

كيفية بناء نماذج SARIMA لمتابعة البيانات الزمنية الموسمية بشكل دقيق وموجه | القصص الشائعة | HyperAI