پیش بینی سری های زمانی با مدل های آماری و پیامبر

پیش بینی سری های زمانی با مدل های آماری و پیامبر

گره منبع: 1996963
پیش بینی سری های زمانی با مدل های آماری و پیامبر
تصویر 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 را از طریق رسانه های اجتماعی و رسانه های نوشتاری به اشتراک بگذارد.
 

تمبر زمان:

بیشتر از kdnuggets