تصویر jcomp on Freepik
سری های زمانی یک مجموعه داده منحصر به فرد در زمینه علم داده است. داده ها در فرکانس زمانی ثبت می شوند (مثلاً روزانه، هفتگی، ماهانه و غیره)، و هر مشاهده به دیگری مربوط می شود. داده های سری زمانی زمانی ارزشمند هستند که بخواهید آنچه را که در طول زمان برای داده های شما اتفاق می افتد تجزیه و تحلیل کنید و پیش بینی های آینده را ایجاد کنید.
پیش بینی سری های زمانی روشی برای ایجاد پیش بینی های آینده بر اساس داده های سری زمانی تاریخی است. روش های آماری زیادی برای پیش بینی سری های زمانی وجود دارد، مانند آریما or هموارسازی نمایی.
پیشبینی سریهای زمانی اغلب در کسبوکار انجام میشود، بنابراین برای دانشمند داده مفید است که بداند چگونه یک مدل سری زمانی ایجاد کند. در این مقاله، نحوه پیشبینی سریهای زمانی را با استفاده از دو بسته محبوب Python پیشبینی میکنیم. statsmodels و پیامبر. بیایید وارد آن شویم.
La مدل های آماری بسته پایتون یک بسته منبع باز است که مدل های آماری مختلفی از جمله مدل پیش بینی سری های زمانی را ارائه می دهد. بیایید بسته را با یک مجموعه داده نمونه امتحان کنیم. این مقاله از سری زمانی ارز دیجیتال داده های Kaggle (CC0: Public Domain).
بیایید داده ها را پاکسازی کنیم و به مجموعه داده ای که داریم نگاهی بیندازیم.
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 برای ایجاد یک مدل پیش بینی استفاده کنیم. را مدل آماری بسیاری از APIهای مدل سری زمانی را ارائه می دهد، اما ما از مدل 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 که ما استفاده می کنیم برای پیش بینی خیلی ساده به نظر می رسد.
شاید بهتر باشد از مدل دیگری خارج از statsmodels استفاده کنیم. بیایید بسته پیامبر معروف فیس بوک را امتحان کنیم.
پیامبر یک بسته مدل پیشبینی سری زمانی است که روی دادههایی با اثرات فصلی بهترین کار را دارد. پیامبر همچنین به عنوان یک مدل پیشبینی قوی در نظر گرفته میشد، زیرا میتوانست دادههای گمشده و پرت را مدیریت کند.
بیایید بسته پیامبر را امتحان کنیم. ابتدا باید بسته را نصب کنیم.
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 و Prophet ارزیابی کنیم.
کورنلیوس یودا ویجایا دستیار مدیر علوم داده و نویسنده داده است. در حالی که به طور تمام وقت در آلیانز اندونزی کار می کند، دوست دارد نکات Python و Data را از طریق رسانه های اجتماعی و رسانه های نوشتاری به اشتراک بگذارد.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- پلاتوبلاک چین. 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
- هر
- پیش از آن
- اثرات
- خطا
- و غیره
- ارزیابی
- ارزیابی
- هر
- مثال
- توضیح دهید
- اکتشاف
- فیس بوک
- معروف
- رشته
- پایان
- نام خانوادگی
- مناسب
- رفع
- پیروی
- برای
- پیش بینی
- از جانب
- تابع
- بیشتر
- آینده
- دریافت کنید
- GitHub
- خوب
- گراف
- بزرگ
- دسته
- اتفاق می افتد
- سخت
- آیا
- تاریخی
- افق
- چگونه
- چگونه
- اما
- HTML
- HTTPS
- واردات
- in
- شامل
- از جمله
- افزایش
- افزایش
- شاخص
- اندونزی
- اول
- نصب
- در عوض
- IT
- JPG
- kdnuggets
- دانستن
- آخرین
- یاد گرفتن
- لینک
- دیگر
- نگاه کنيد
- مطالب
- ساخت
- مدیر
- بسیاری
- ماتپلوتلب
- رسانه ها
- روش
- روش
- متریک
- قدرت
- گم
- مدل
- مدل سازی
- مدل
- ماهیانه
- تحت عنوان
- نیاز
- نیازهای
- بعد
- بی حس
- گرفتن
- of
- ارائه
- on
- ONE
- منبع باز
- سفارش
- دیگر
- خارج از
- بسته
- بسته
- پانداها
- پارامترهای
- بخش
- الگو
- درصد
- انجام دادن
- افلاطون
- هوش داده افلاطون
- PlatoData
- نقطه
- نقطه
- محبوب
- ممکن
- پیش بینی
- پیش گویی
- پیش بینی
- آماده
- ارائه
- فراهم می کند
- عمومی
- پــایتــون
- اماده
- ثبت
- رگرسیون
- مربوط
- نیاز
- نتیجه
- نتایج
- تنومند
- ریشه
- علم
- دانشمند
- به نظر می رسد
- سلسله
- تنظیم
- اشتراک گذاری
- ساده
- So
- آگاهی
- رسانه های اجتماعی
- برخی از
- خاص
- انشعاب
- مربع
- آماری
- چنین
- گرفتن
- آزمون
- که
- La
- آنها
- زمان
- سری زمانی
- نکات
- به
- هم
- قطار
- آموزش
- روند
- تردید
- فهمیدن
- منحصر به فرد
- بی نام
- بطرف بالا
- us
- استفاده کنید
- کاربران
- معمولا
- ارزشمند
- ارزش
- مختلف
- از طريق
- تجسم
- مسیر..
- هفتگی
- خوب
- چی
- در حین
- ویکیپدیا
- اراده
- با
- در داخل
- کارگر
- با این نسخهها کار
- خواهد بود
- نویسنده
- نوشته
- شما
- زفیرنت