স্ট্যাটস মডেল এবং নবীর সাথে সময় সিরিজের পূর্বাভাস

স্ট্যাটস মডেল এবং নবীর সাথে সময় সিরিজের পূর্বাভাস

উত্স নোড: 1996963
স্ট্যাটস মডেল এবং নবীর সাথে সময় সিরিজের পূর্বাভাস
দ্বারা চিত্র jcomp on Freepik
 

টাইম সিরিজ হল ডেটা বিজ্ঞান ক্ষেত্রের মধ্যে একটি অনন্য ডেটাসেট। ডেটা সময়-ফ্রিকোয়েন্সিতে রেকর্ড করা হয় (যেমন, দৈনিক, সাপ্তাহিক, মাসিক, ইত্যাদি), এবং প্রতিটি পর্যবেক্ষণ অন্যটির সাথে সম্পর্কিত। সময় সিরিজের ডেটা মূল্যবান যখন আপনি সময়ের সাথে আপনার ডেটার কী ঘটবে তা বিশ্লেষণ করতে চান এবং ভবিষ্যতের পূর্বাভাস তৈরি করতে চান। 

টাইম সিরিজ ফোরকাস্টিং হল ঐতিহাসিক টাইম সিরিজ ডেটার উপর ভিত্তি করে ভবিষ্যত ভবিষ্যদ্বাণী তৈরি করার একটি পদ্ধতি। সময় সিরিজের পূর্বাভাসের জন্য অনেক পরিসংখ্যান পদ্ধতি আছে, যেমন আরিমা or সূচক মসৃণকরণ.

টাইম সিরিজের পূর্বাভাস প্রায়ই ব্যবসায় সম্মুখীন হয়, তাই ডেটা সায়েন্টিস্টের জন্য কীভাবে টাইম সিরিজ মডেল তৈরি করা যায় তা জানা উপকারী। এই নিবন্ধে, আমরা শিখব কিভাবে দুটি জনপ্রিয় পূর্বাভাস পাইথন প্যাকেজ ব্যবহার করে টাইম সিরিজের পূর্বাভাস দিতে হয়; পরিসংখ্যান মডেল এবং নবী। এর মধ্যে প্রবেশ করা যাক.

সার্জারির পরিসংখ্যান মডেল পাইথন প্যাকেজ হল একটি ওপেন সোর্স প্যাকেজ যা বিভিন্ন পরিসংখ্যানগত মডেল অফার করে, যার মধ্যে টাইম সিরিজের পূর্বাভাস মডেল রয়েছে। আসুন একটি উদাহরণ ডেটাসেট সহ প্যাকেজটি চেষ্টা করে দেখি। এই নিবন্ধটি ব্যবহার করবে ডিজিটাল কারেন্সি টাইম সিরিজ 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 ব্যবহার করা যাক। দ্য পরিসংখ্যান মডেল অনেক সময় সিরিজ মডেল 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

 

স্ট্যাটস মডেল এবং নবীর সাথে সময় সিরিজের পূর্বাভাস
 

আমাদের উপরের উদাহরণে, আমরা statsmodels থেকে ARIMA মডেলটিকে পূর্বাভাস মডেল হিসাবে ব্যবহার করি এবং পরবর্তী 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% ত্রুটি অর্জন করতে পারে। এইভাবে, আমরা ত্রুটিটি ঠিক করতে মডেলটিকে আরও পরিবর্তন করতে চাই। আপনি চেক করতে পারেন ডকুমেন্টেশন আরও অনুসন্ধানের জন্য।

পূর্বাভাস ব্যবসায় ঘটে এমন একটি সাধারণ ঘটনা। একটি পূর্বাভাস মডেল তৈরি করার একটি সহজ উপায় হল পরিসংখ্যান পূর্বাভাস এবং নবী পাইথন প্যাকেজগুলি ব্যবহার করা। এই নিবন্ধে, আমরা শিখব কিভাবে একটি পূর্বাভাস মডেল তৈরি করতে হয় এবং পরিসংখ্যান পূর্বাভাস এবং নবীর সাথে তাদের মূল্যায়ন করতে হয়।
 
 
কর্নেলিয়াস যুধা বিজয়া একজন ডেটা বিজ্ঞান সহকারী ব্যবস্থাপক এবং ডেটা লেখক। আলিয়াঞ্জ ইন্দোনেশিয়াতে পূর্ণ-সময় কাজ করার সময়, তিনি সোশ্যাল মিডিয়া এবং লেখার মাধ্যমে পাইথন এবং ডেটা টিপস শেয়ার করতে পছন্দ করেন।
 

সময় স্ট্যাম্প:

থেকে আরো কেডনুগেটস