التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي

عقدة المصدر: 1996963
التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
الصورة عن طريق jcomp on Freepik
 

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

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

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

statsmodels حزمة Python عبارة عن حزمة مفتوحة المصدر تقدم نماذج إحصائية متنوعة ، بما في ذلك نموذج التنبؤ بالسلاسل الزمنية. لنجرب الحزمة بمثال على مجموعة البيانات. هذه المقالة سوف تستخدم السلاسل الزمنية للعملات الرقمية بيانات من Kaggle (CC0: المجال العام). 

دعنا ننظف البيانات ونلقي نظرة على مجموعة البيانات التي لدينا.

import pandas as pd df = pd.read_csv('dc.csv') df = df.rename(columns = {'Unnamed: 0' : 'Time'})
df['Time'] = pd.to_datetime(df['Time'])
df = df.iloc[::-1].set_index('Time') df.head()

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

على سبيل المثال ، لنفترض أننا نريد توقع متغير "close_USD". دعونا نرى كيف نمط البيانات مع مرور الوقت.

import matplotlib.pyplot as plt plt.plot(df['close_USD'])
plt.show()

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

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

# Split the data
train = df.iloc[:-200] test = df.iloc[-200:]

 

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

دعنا نستخدم statsmodels لإنشاء نموذج تنبؤ. ال ستاتسمودل يوفر العديد من واجهات برمجة التطبيقات لنماذج السلاسل الزمنية ، لكننا سنستخدم نموذج ARIMA كمثال.

from statsmodels.tsa.arima.model import ARIMA #sample parameters
model = ARIMA(train, order=(2, 1, 0)) results = model.fit() # Make predictions for the test set
forecast = results.forecast(steps=200)
forecast

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

في مثالنا أعلاه ، نستخدم نموذج ARIMA من statsmodels كنموذج للتنبؤ ونحاول التنبؤ بـ 200 يومًا القادمة.

هل نتيجة النموذج جيدة؟ دعنا نحاول تقييمها. عادةً ما يستخدم تقييم نموذج السلاسل الزمنية رسمًا بيانيًا مرئيًا لمقارنة البيانات الفعلية والتنبؤ بمقاييس الانحدار مثل متوسط ​​الخطأ المطلق (MAE) وخطأ مربع متوسط ​​الجذر (RMSE) و MAPE (متوسط ​​النسبة المئوية للخطأ المطلق).

from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np #mean absolute error
mae = mean_absolute_error(test, forecast) #root mean square error
mse = mean_squared_error(test, forecast)
rmse = np.sqrt(mse) #mean absolute percentage error
mape = (forecast - test).abs().div(test).mean() print(f"MAE: {mae:.2f}")
print(f"RMSE: {rmse:.2f}")
print(f"MAPE: {mape:.2f}%")

 

MAE: 7956.23 RMSE: 11705.11 MAPE: 0.35%

 

النتيجة أعلاه تبدو جيدة ، لكن دعنا نرى كيف تكون عندما نتخيلها.

plt.plot(train.index, train, label='Train')
plt.plot(test.index, test, label='Test')
plt.plot(forecast.index, forecast, label='Forecast')
plt.legend()
plt.show()

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

كما نرى ، كانت التوقعات أسوأ حيث لا يستطيع نموذجنا التنبؤ بالاتجاه المتزايد. يبدو نموذج ARIMA الذي نستخدمه بسيطًا جدًا للتنبؤ.

ربما يكون من الأفضل أن نحاول استخدام نموذج آخر خارج نماذج الإحصائيات. لنجرب حزمة النبي الشهيرة من فيسبوك.

نبي عبارة عن حزمة نموذج للتنبؤ بالسلسلة الزمنية تعمل بشكل أفضل على البيانات ذات التأثيرات الموسمية. اعتبر النبي أيضًا نموذجًا قويًا للتنبؤ لأنه يمكنه التعامل مع البيانات المفقودة والقيم المتطرفة.

دعونا نجرب حزمة النبي. أولاً ، نحتاج إلى تثبيت الحزمة.

pip install prophet

 

بعد ذلك ، يجب أن نجهز مجموعة البيانات الخاصة بنا لتدريب نموذج التنبؤ. النبي له مطلب محدد: يجب تسمية عمود الوقت بـ "ds" والقيمة كـ "y".

df_p = df.reset_index()[["Time", "close_USD"]].rename( columns={"Time": "ds", "close_USD": "y"}
)

 

مع استعداد بياناتنا ، دعنا نحاول إنشاء تنبؤ تنبؤي بناءً على البيانات.

import pandas as pd
from prophet import Prophet model = Prophet() # Fit the model
model.fit(df_p) # create date to predict
future_dates = model.make_future_dataframe(periods=365) # Make predictions
predictions = model.predict(future_dates) predictions.head()

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

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

model.plot(predictions)

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

ستزودنا وظيفة رسم التنبؤات من النموذج بمدى ثقة التوقعات. من المخطط أعلاه ، يمكننا أن نرى أن التنبؤ له اتجاه تصاعدي ولكن مع زيادة عدم اليقين ، كلما طالت التوقعات.

من الممكن أيضًا فحص مكونات التنبؤ بالوظيفة التالية.

model.plot_components(predictions)

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

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

هل يمكن تقييم النموذج النبوي أيضًا؟ قطعاً. يتضمن النبي مقياسًا تشخيصيًا يمكننا استخدامه: سلسلة زمنية عبر التحقق من الصحة. تستخدم الطريقة جزءًا من البيانات التاريخية وتناسب النموذج في كل مرة باستخدام البيانات حتى نقطة القطع. ثم يقارن النبي التنبؤات مع تلك الفعلية. دعنا نحاول استخدام الكود.

from prophet.diagnostics import cross_validation, performance_metrics # Perform cross-validation with initial 365 days for the first training data and the cut-off for every 180 days. df_cv = cross_validation(model, initial='365 days', period='180 days', horizon = '365 days') # Calculate evaluation metrics
res = performance_metrics(df_cv) res

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

في النتيجة أعلاه ، حصلنا على نتيجة التقييم من النتيجة الفعلية مقارنة بالتوقعات في كل يوم تنبؤ. من الممكن أيضًا تصور النتيجة باستخدام الكود التالي.

from prophet.plot import plot_cross_validation_metric
#choose between 'mse', 'rmse', 'mae', 'mape', 'coverage' plot_cross_validation_metric(df_cv, metric= 'mape')

 

التنبؤ بالسلاسل الزمنية مع نماذج الدولة والنبي
 

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

التنبؤ هو أحد الحالات الشائعة التي تحدث في العمل. إحدى الطرق السهلة لتطوير نموذج التنبؤ هي استخدام حزم statsforecast و Prophet Python. في هذه المقالة ، نتعلم كيفية إنشاء نموذج تنبؤ وتقييمه باستخدام statsforecast والنبي.
 
 
كورنليوس يودا ويجايا هو مدير مساعد لعلوم البيانات وكاتب بيانات. أثناء عمله بدوام كامل في Allianz Indonesia ، يحب مشاركة نصائح حول Python و Data عبر وسائل التواصل الاجتماعي وكتابة الوسائط.
 

الطابع الزمني:

اكثر من KD nuggets