الصورة عن طريق 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 عبر وسائل التواصل الاجتماعي وكتابة الوسائط.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- بلاتوبلوكشين. Web3 Metaverse Intelligence. تضخيم المعرفة. الوصول هنا.
- المصدر https://www.kdnuggets.com/2023/03/time-series-forecasting-statsmodels-prophet.html?utm_source=rss&utm_medium=rss&utm_campaign=time-series-forecasting-with-statsmodels-and-prophet
- :يكون
- $ UP
- 1
- 11
- 7
- 8
- 9
- a
- من نحن
- فوق
- مطلق
- إطلاقا
- التأهيل
- المكتسبة
- أليانز
- تحليل
- و
- آخر
- واجهات برمجة التطبيقات
- هي
- البند
- AS
- المساعد
- At
- على أساس
- BE
- لان
- قبل
- مفيد
- أفضل
- أفضل
- ما بين
- نساعدك في بناء
- الأعمال
- by
- حساب
- CAN
- الحالات
- CC0
- التحقق
- الكود
- عمود
- الأعمدة
- مشترك
- قارن
- مقارنة
- مكونات
- واثق
- نظرت
- استطاع
- تغطية
- خلق
- العملة
- يوميا
- البيانات
- علم البيانات
- عالم البيانات
- التاريخ
- يوم
- أيام
- dc
- الترتيب
- مفصلة
- تطوير
- نطاق
- لا
- e
- كل
- في وقت سابق
- الآثار
- خطأ
- إلخ
- تقييم
- تقييم
- كل
- مثال
- شرح
- استكشاف
- فيسبوك
- مشهور
- حقل
- نهاية
- الاسم الأول
- تناسب
- حل
- متابعيك
- في حالة
- توقعات
- تبدأ من
- وظيفة
- إضافي
- مستقبل
- دولار فقط واحصل على خصم XNUMX% على جميع
- GitHub جيثب:
- خير
- رسم بياني
- عظيم
- مقبض
- يحدث
- الثابت
- يملك
- تاريخي
- الأفق
- كيفية
- كيفية
- لكن
- HTML
- HTTPS
- استيراد
- in
- يشمل
- بما فيه
- زيادة
- في ازدياد
- مؤشر
- أندونيسيا
- في البداية
- تثبيت
- بدلًا من ذلك
- IT
- JPG
- KD nuggets
- علم
- آخر
- تعلم
- لينكدين:
- يعد
- بحث
- تبدو
- جعل
- مدير
- كثير
- matplotlib
- الوسائط
- طريقة
- طرق
- المقاييس
- ربما
- مفقود
- نموذج
- تصميم
- عارضات ازياء
- شهريا
- عين
- حاجة
- إحتياجات
- التالي
- نمباي
- تحصل
- of
- الوهب
- on
- ONE
- المصدر المفتوح
- طلب
- أخرى
- في الخارج
- صفقة
- حزم
- الباندا
- المعلمات
- جزء
- نمط
- نسبة مئوية
- نفذ
- أفلاطون
- الذكاء افلاطون البيانات
- أفلاطون داتا
- البوينت
- نقاط
- أكثر الاستفسارات
- ممكن
- تنبأ
- تنبؤ
- تنبؤات
- إعداد
- تزود
- ويوفر
- جمهور
- بايثون
- استعداد
- مسجل
- تراجع
- ذات صلة
- المتطلبات
- نتيجة
- النتائج
- قوي
- جذر
- علوم
- عالم
- يبدو
- مسلسلات
- طقم
- مشاركة
- الاشارات
- So
- العدالة
- وسائل التواصل الاجتماعي
- بعض
- محدد
- انقسم
- مربع
- إحصائي
- هذه
- أخذ
- تجربه بالعربي
- أن
- •
- منهم
- الوقت
- السلاسل الزمنية
- نصائح
- إلى
- جدا
- قطار
- قادة الإيمان
- اكثر شيوعا
- عدم اليقين
- فهم
- فريد من نوعه
- غير مسمى
- إلى الأعلى
- us
- تستخدم
- المستخدمين
- عادة
- القيمة
- قيمنا
- مختلف
- بواسطة
- التصور
- طريق..
- أسبوعي
- حسن
- ابحث عن
- في حين
- ويكيبيديا
- سوف
- مع
- في غضون
- عامل
- أعمال
- سوف
- كاتب
- جاري الكتابة
- حل متجر العقارات الشامل الخاص بك في جورجيا
- زفيرنت