آموزش هوش مصنوعی

پیش‌بینی با مدل ARIMA؛ روند، ایستایی و بررسی باقیمانده با پایتون

پیشرفته مطالعه در ۹ دقیقه بخش ۲۷ از ۲۹ در مبانی هوش مصنوعی و علم داده
mahdyar
پیش‌بینی با مدل ARIMA؛ روند، ایستایی و بررسی باقیمانده با پایتون

مدل ARIMA حدود پنجاه سال است که در پیش‌بینی سری زمانی به کار می‌رود و هنوز کنار گذاشته نشده است. دلیلش ساده است. روی بسیاری از داده‌های واقعی، ARIMA با تنظیم درست به پای مدل‌های پیچیده‌تر می‌رسد، در حالی که سریع‌تر و قابل توضیح‌تر است. هر مدل یادگیری عمیق برای سری زمانی باید اول از ARIMA بهتر باشد.

در قسمت قبل با ویژگی‌های سری زمانی آشنا شدیم و خط پایه‌ی ساده و فصلی را برای مصرف برق ساختیم. حالا اولین مدل واقعی را می‌سازیم. در این قسمت مفاهیم ایستایی و تفاضل‌گیری را می‌فهمیم، سه جزء ARIMA را باز می‌کنیم و مدل را با روشی ارزیابی می‌کنیم که شبیه استفاده‌ی واقعی باشد.

ایستایی و تفاضل‌گیری؛ پیش‌نیاز مدل ARIMA

پیش از ARIMA باید دو مفهوم را بشناسید. ARIMA فرض می‌کند با سری ایستا کار می‌کند. اما بیشتر سری‌های واقعی ایستا نیستند. تفاضل‌گیری پلی بین این دو است.

ایستایی چیست؟

از نظر آماری، سری ایستا سری‌ای است که توزیعش با جابه‌جایی در زمان تغییر نکند. یعنی میانگین، واریانس و ساختار همبستگی‌اش در هر بازه‌ی زمانی تقریباً یکسان باشد. نویز سفید یک سری ایستای کامل است.

سری‌ای که روند دارد، ایستا نیست، چون میانگینش در طول زمان تغییر می‌کند. سری‌ای که واریانسش در تابستان بیشتر است هم ایستا نیست. آزمون آماری دیکی-فولر افزوده یا ADF کمک می‌کند بسنجید سری ایستاست یا نه.

تفاضل‌گیری

تفاضل‌گیری یعنی به جای خود مقادیر، تفاوت هر مقدار با مقدار قبلی را مدل کنیم. اگر مصرف برق هر روز کمی بیشتر از روز قبل است، خود مقادیر روند دارند. اما تفاوت‌ها حول یک عدد ثابت نوسان می‌کنند.

برای حذف فصلی بودن هم می‌شود تفاضل فصلی گرفت. یعنی تفاوت هر ساعت با همان ساعت در روز قبل. در pandas این کار با diff(1) و diff(24) انجام می‌شود. معمولاً یک یا دو بار تفاضل‌گیری کافی است. تفاضل بیش از حد، نویز اضافه می‌کند.

سه جزء ARIMA؛ AR، I و MA

نام ARIMA از سه جزء آن آمده است. هرکدام یک عدد مرتبه دارد و مدل با سه عدد p، d و q مشخص می‌شود. فهمیدن نقش هر جزء کمک می‌کند این سه عدد را آگاهانه انتخاب کنید.

خودرگرسیون، یکپارچگی و میانگین متحرک

جزء AR یا خودرگرسیون، مقدار فعلی را به p مقدار گذشته ربط می‌دهد. مثلاً مصرف این ساعت ترکیبی خطی از مصرف چهار ساعت قبل است. جزء I یا یکپارچگی، همان تفاضل‌گیری است و d تعداد دفعات آن است.

جزء MA یا میانگین متحرک، مقدار فعلی را به q خطای پیش‌بینی گذشته ربط می‌دهد. اگر مدل ساعت قبل را کمتر از واقعیت پیش‌بینی کرده، این قسمت اصلاحش می‌کند. نام «میانگین متحرک» در اینجا کمی گمراه‌کننده است و با میانگین متحرک در نمودارها فرق دارد.

انتخاب مرتبه با ACF و PACF

نمودار خودهمبستگی یا ACF همبستگی سری با نسخه‌های تأخیری خودش را نشان می‌دهد. نمودار خودهمبستگی جزئی یا PACF همین را پس از حذف اثر تأخیرهای میانی نشان می‌دهد. قاعده‌ی سرانگشتی این است: جایی که PACF ناگهان قطع می‌شود، p را پیشنهاد می‌دهد و جایی که ACF قطع می‌شود، q را.

در عمل، این نمودارها فقط نقطه‌ی شروع‌اند. چند ترکیب نزدیک را امتحان کنید و با معیاری مثل AIC یا خطای اعتبارسنجی مقایسه کنید. ابزارهایی مثل auto_arima در کتابخانه‌ی pmdarima این جستجو را خودکار می‌کنند.

بیشتر بخوانید: تقسیم زمانی داده، خط پایه‌ی فصلی و خطر نشت آینده را پیش از ARIMA در سری زمانی چیست؟ مرور کنید.

ساخت مدل SARIMA برای مصرف برق

مصرف برق الگوی روزانه‌ی قوی دارد. پس به جای ARIMA ساده، نسخه‌ی فصلی آن یعنی SARIMA را به کار می‌بریم. SARIMA علاوه بر سه مرتبه‌ی معمولی، سه مرتبه‌ی فصلی و طول فصل را هم می‌گیرد. نمودار زیر مسیر ساخت و ارزیابی مدل را نشان می‌دهد.

مسیر ساخت و ارزیابی مدل ARIMA از بررسی ایستایی تا تحلیل باقیمانده

آماده‌سازی داده

برای سرعت، دو ماه داده‌ی ساعتی را برای آموزش انتخاب می‌کنیم؛ از اول نوامبر تا ۲۹ دسامبر ۲۰۱۴. دو روز آخر سال برای آزمون می‌ماند. داده را با MinMaxScaler به بازه‌ی صفر تا یک می‌بریم. مقیاس‌بند فقط روی آموزش fit می‌شود:

python
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from statsmodels.tsa.statespace.sarimax import SARIMAX

train = energy.loc["2014-11-01":"2014-12-29 23:00", ["load"]]
test = energy.loc["2014-12-30":, ["load"]]
scaler = MinMaxScaler().fit(train)
train_s = pd.Series(scaler.transform(train).ravel(), index=train.index)

model = SARIMAX(train_s, order=(4, 1, 0), seasonal_order=(1, 1, 0, 24)).fit(disp=False)
print(model.summary().tables[1])

معنای پارامترها

order=(4, 1, 0) یعنی چهار تأخیر خودرگرسیون، یک تفاضل و بدون جزء میانگین متحرک. seasonal_order=(1, 1, 0, 24) یعنی یک تأخیر خودرگرسیون فصلی، یک تفاضل فصلی و فصلی به طول ۲۴ ساعت.

این اعداد نقطه‌ی شروع معقولی‌اند، نه جواب نهایی. خلاصه‌ی مدل ضریب هر جزء و معناداری آن را نشان می‌دهد. ضریبی که معنادار نیست، احتمالاً لازم نیست و می‌شود مدل ساده‌تری امتحان کرد.

اعتبارسنجی گام‌به‌گام و بررسی باقیمانده

در استفاده‌ی واقعی، مدل هر ساعت چند ساعت آینده را پیش‌بینی می‌کند. بعد مقدار واقعی می‌رسد و مدل با آن به‌روز می‌شود. ارزیابی هم باید همین را شبیه‌سازی کند. به این روش اعتبارسنجی گام‌به‌گام می‌گویند.

پیش‌بینی با افق سه ساعت

در هر قدم، مدل سه ساعت آینده را پیش‌بینی می‌کند. سپس یک ساعت جلو می‌رویم، مقدار واقعی آن ساعت را به داده اضافه می‌کنیم و دوباره پیش‌بینی می‌کنیم. در statsmodels، متد append مدل را بدون آموزش دوباره‌ی کامل به‌روز می‌کند:

python
HORIZON = 3
res, preds = model, []
test_s = pd.Series(scaler.transform(test).ravel(), index=test.index)
for t in range(len(test_s) - HORIZON + 1):
    preds.append(res.forecast(HORIZON).values)
    res = res.append(test_s.iloc[t:t + 1])

پس از حلقه، پیش‌بینی‌ها را با inverse_transform به مقیاس اصلی برمی‌گردانیم. MAPE را برای هر افق، یک، دو و سه ساعت، جداگانه حساب می‌کنیم. معمولاً خطای افق سه ساعت بیشتر از یک ساعت است و این طبیعی است.

بررسی باقیمانده

باقیمانده یعنی تفاوت مقدار واقعی و پیش‌بینی. اگر مدل همه‌ی الگوها را گرفته باشد، باقیمانده باید شبیه نویز سفید باشد؛ بی‌الگو و با میانگین صفر. نمودار ACF باقیمانده نباید قله‌ی معناداری داشته باشد.

اگر در ACF باقیمانده قله‌ای در تأخیر ۱۶۸ ساعت دیدید، یعنی الگوی هفتگی هنوز گرفته نشده است. آزمون لیونگ-باکس همین را به‌صورت عددی می‌سنجد. این بررسی به شما می‌گوید مدل بعدی را کجا بهبود دهید.

ARIMA در برابر خط پایه

در پایان، MAPE مدل SARIMA را با خط پایه‌ی فصلی قسمت قبل مقایسه کنید. این مقایسه صادقانه‌ترین قضاوت است. اگر SARIMA بهتر نیست، یا مرتبه‌ها نیاز به تنظیم دارند یا داده الگویی بیش از فصلی بودن روزانه ندارد.

کی ARIMA انتخاب خوبی است؟

ARIMA برای سری‌های تک‌متغیره با الگوی نسبتاً پایدار عالی است. سریع است، با داده‌ی کم کار می‌کند و بازه‌ی اطمینان پیش‌بینی را هم می‌دهد. برای گزارش به مدیر، ضریب‌هایش قابل توضیح‌اند.

اما محدودیت هم دارد. رابطه‌ی غیرخطی را به‌سختی مدل می‌کند و افزودن متغیرهای بیرونی مثل دما، هرچند در SARIMAX ممکن است، به دقت بیشتری نیاز دارد. برای رابطه‌های غیرخطی، قسمت بعد روش متفاوتی را امتحان می‌کند.

تمرین عملی؛ از ADF تا لیونگ-باکس

روی داده‌ی مصرف برق یا سری زمانی خودتان این کارها را انجام دهید:

  • ایستایی: آزمون ADF را روی سری خام، تفاضل اول و تفاضل فصلی اجرا کنید.
  • ACF و PACF: نمودار هر دو را برای سری تفاضل‌گرفته رسم کنید و p و q پیشنهادی را بنویسید.
  • سه مدل: سه ترکیب از مرتبه‌ها را بسازید و AIC هرکدام را ثبت کنید.
  • گام‌به‌گام: بهترین مدل را با افق سه ساعت ارزیابی کنید و MAPE هر افق را گزارش کنید.
  • باقیمانده: ACF باقیمانده را رسم کنید و آزمون لیونگ-باکس را اجرا کنید.

در پایان، نتیجه را با خط پایه‌ی فصلی مقایسه کنید و در یک جمله بنویسید ARIMA چقدر بهتر بود.

سخن پایانی

مدل ARIMA سه جزء دارد؛ خودرگرسیون برای رابطه با گذشته، یکپارچگی برای حذف روند و میانگین متحرک برای اصلاح خطاهای قبلی. پیش‌نیاز آن ایستایی است که با تفاضل‌گیری به دست می‌آید. SARIMA همین را برای داده‌ی فصلی گسترش می‌دهد.

ارزیابی درست هم به اندازه‌ی ساخت مدل مهم است. اعتبارسنجی گام‌به‌گام شرایط واقعی را شبیه‌سازی می‌کند و بررسی باقیمانده نشان می‌دهد مدل چه چیزی را هنوز نگرفته است. و مثل همیشه، مقایسه با خط پایه‌ی ساده، صادقانه‌ترین قضاوت است.

این آموزش بر پایه‌ی درس Time series forecasting with ARIMA از مجموعه‌ی آزاد ML for Beginners مایکروسافت (مجوز MIT) به فارسی بازنویسی و تکمیل شده است.

پرسش‌های پرتکرار

مدل ARIMA چیست؟

ARIMA مدلی آماری برای پیش‌بینی سری زمانی است که سه جزء دارد. AR مقدار فعلی را به مقادیر گذشته ربط می‌دهد، I با تفاضل‌گیری روند را حذف می‌کند و MA مقدار فعلی را به خطاهای پیش‌بینی گذشته ربط می‌دهد. سه عدد p، d و q مرتبه‌ی این سه جزء‌اند.

ایستایی در سری زمانی یعنی چه؟

سری ایستا سری‌ای است که میانگین، واریانس و ساختار همبستگی‌اش در طول زمان ثابت می‌ماند. بیشتر سری‌های واقعی روند یا فصلی بودن دارند و ایستا نیستند. ARIMA با تفاضل‌گیری آن‌ها را به سری ایستا نزدیک می‌کند.

تفاوت ARIMA و SARIMA چیست؟

SARIMA نسخه‌ی فصلی ARIMA است. علاوه بر سه مرتبه‌ی معمولی، چهار پارامتر فصلی P، D، Q و طول دوره‌ی فصل را دارد. برای داده‌هایی با الگوی تکرارشونده‌ی روزانه، هفتگی یا سالانه مناسب‌تر است.

اعتبارسنجی گام‌به‌گام چیست؟

روشی برای ارزیابی مدل سری زمانی است که مدل در هر قدم فقط چند گام آینده را پیش‌بینی می‌کند، بعد مقدار واقعی به داده‌ی آموزش اضافه می‌شود و قدم بعد انجام می‌شود. این روش شرایط واقعی استفاده از مدل را شبیه‌سازی می‌کند.

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.

پنج رقم داخل تصویر را وارد کنید. اعداد فارسی و انگلیسی پذیرفته می‌شوند.

تصویر کد امنیتی پنج‌رقمی

در حال دریافت کد امنیتی…

مهلت کد تمام شد. روی «کد جدید» بزنید.