تحلیل سری زمانی با پایتون — معرفی انواع مدل ها

۱۲۵۱ بازدید
آخرین به‌روزرسانی: ۲۸ آبان ۱۴۰۲
زمان مطالعه: ۷ دقیقه
دانلود PDF مقاله
تحلیل سری زمانی با پایتون — معرفی انواع مدل هاتحلیل سری زمانی با پایتون — معرفی انواع مدل ها

تحلیل سری زمانی و انتخاب مدل مناسب برای تحلیل آن‌ها یکی از مهم‌ترین بخش‌های تجزیه و تحلیل داده‌های مرتبط با زمان است. انجام محاسبات و رسم نمودارها، از وظایف اصلی «تحلیل‌گر داده» (Data Scientist) محسوب می‌شود. زبان برنامه نویسی پایتون از ابزارهای مفید در این امر است. در سری مطالب دنباله‌ای تحلیل سری زمانی با پایتون، در قسمت اول، به بررسی مفاهیم اولیه در مبحث سری زمانی پرداختیم. در این بخش، مدل‌های پایه برای سری زمانی و نحوه ایستا کردن (Stationary)  آن‌ها را مرور خواهیم کرد. در بخش آخر و سوم، به معرفی مدل‌های ترکیبی و پیچیده سری زمانی خواهیم پرداخت و پیاده‌سازی چنین مدل‌هایی را با زبان برنامه‌نویسی پایتون فرا خواهیم گرفت.

997696

تحلیل سری زمانی با پایتون به صورت دنباله‌ای از نوشتارها در سه بخش ارائه می‌شود.

برای آشنایی بیشتر با مقدمات مربوط به مبحث سری زمانی بهتر است نوشتار تحلیل سری زمانی — تعریف و مفاهیم اولیه را بخوانید. همچنین خواندن مطلب سری زمانی در علم داده — از صفر تا صد نیز خالی از لطف نیست.

تحلیل سری زمانی و معرفی انواع مدل‌ها

همانطور که در بخش اول از این سری مطالب مطالعه کردید، مدل خطی یکی از انواع مدل‌های سری زمانی است که در آن بوسیله رابطه خطی داده‌ها با زمان، عمل مدل‌سازی صورت می‌گیرد. ولی متاسفانه، مدل ساخته شده دارای خاصیت ایستایی (Stationary) نیست. در ادامه به معرفی مدل‌هایی خواهیم پرداخت به صورت خطی بوده و خاصیت ایستایی نیز دارند.

مدل خودهمبسته

زمانی که متغیر وابسته با مقدارهایی از خودش (با در نظر گرفتن مقدار تاخیر مناسب) تشکیل یک مدل خطی دهد، مدل را «خودهمبسته» (Autoregressive) می‌نامند.  شیوه نمایش چنین مدلی به زبان ریاضی به صورت زیر خواهد بود.

xt=a1xt1+apxtp+wt=i=1paixti+wt\large x_t=a_1x_{t-1}+\cdots a_px_{t-p}+w_t\\ \large = \sum_{i=1}^pa_ix_{t-i}+w_t

چنین مدلی را با نماد AR(p)AR(p) نشان می‌دهند. به مانند مدل‌های دیگر wtw_t‌ میزان خطا یا نویز سفید در مدل است. همچنین pp را مرتبه مدل «اتورگرسیو» یا «خودهمبسته» می‌نامند. به این ترتیب مشخص است که منظور از pp میزان تاخیراتی است که باید در مدل لحاظ شود. با توجه به مقدار pp تعداد داده‌هایی که از گذشته روی متغیر xx در زمان tt تاثیرگذار هستند مشخص می‌شود. برای مثال مدل AR(2)AR(2) به صورت زیر نوشته خواهد شد.

xt=a1xt1+a2xt2+wt,    a1,a20\large x_t=a_1x_{t-1}+a_2x_{t-2}+w_t, \;\;a_1, a_2 \neq 0

این مدل نشان می‌دهد که مقدار متغیر در زمان tt به مقدار متغیر در زمان‌های t1t-1و t2t-2 وابسته است و مدل این وابستگی نیز خطی است. از طرفی مقدار خطا یا نویز سفید wtw_t نیز در مقدار xtx_t نقش دارد.

نکته: اگر در مدل AR(1)AR(1) مقدار a1=1a_1=1 باشد، مدل به صورت قدم‌های تصادفی در خواهد آمد. در قسمت اول از مطالب دنباله‌ای سری زمانی، مشخص شد که چنین مدلی ایستا نیست.

xt=xt1+wt\large x_t=x_{t-1}+w_t

با استفاده از کد زیر به شبیه‌سازی داده‌های چنین مدلی خواهیم پرداخت. در اینجا ضریب (a1a_1) برابر با 0.6 در نظر گرفته شده است.

1# Simulate an AR(1) process with alpha = 0.6
2
3np.random.seed(1)
4n_samples = int(1000)
5a = 0.6
6x = w = np.random.normal(size=n_samples)
7
8for t in range(n_samples):
9    x[t] = a*x[t-1] + w[t]
10    
11_ = tsplot(x, lags=lags)

نمودارهای تحلیل سری زمانی مربوط به چنین داده‌هایی در ادامه قابل مشاهده است. این نمودارها الگوی مناسبی برای تشخیص داده‌های سری زمانی با مدل AR(1)AR(1) هستند. به این معنی که اگر برای یک سری داده، نمودارهای سری زمانی ترسیم شود و الگوی مشابه با نمودارهای زیر داشته باشد می‌توان آن را سری زمانی با مدل AR(1)AR(1) در نظر گرفت.

نکته: تابع tsplot در بخش اول از این نوشتارها معرفی شده است.

AR(1) time series model

همانطور که انتظار داشتیم، توزیع باقی‌مانده‌ها نرمال است. از طرفی میزان همبستگی بین داده‌ها بخصوص در تاخیر اول (Lag 1) که در منحنی PACF دیده می‌شود، گواه وجود رابطه بین مشاهدات است. در ادامه یک مدل AR(p)AR(p) را به کمک توابع پایتون ایجاد می‌کنیم. ابتدا یک مدل ARAR را برای داده‌ها در نظر می‌گیریم و ضریب a1a_1 را برآورد می‌کنیم. سپس به منظور برآورد مقدار pp از تابع select_order استفاده خواهیم کرد. اگر مقدار ضریب a1a_1 نزدیک به مقدار 0.6 برآورد شود، آنگاه به نظر می‌رسد مدل AR(1)AR(1) برای داده مناسب است.

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

1# Fit an AR(p) model to simulated AR(1) model with alpha = 0.6
2
3mdl = smt.AR(x).fit(maxlag=30, ic='aic', trend='nc')
4%time est_order = smt.AR(x).select_order(
5    maxlag=30, ic='aic', trend='nc')
6
7true_order = 1
8p('\nalpha estimate: {:3.5f} | best lag order = {}'
9  .format(mdl.params[0], est_order))
10p('\ntrue alpha = {} | true order = {}'
11  .format(a, true_order))

مقدارهای برآورد شده برای ضریب و تاخیر (lag) به صورت زیر است.

alpha  estimate=0.58227    best  lag  order=1true  alpha=0.6      true  order=1\large alpha\; estimate = 0.58227 \; | \; best\; lag\; order = 1\\ \large true\; alpha = 0.6 \;\;\; | true\; order = 1

به نظر می‌رسد که پارامتر واقعی مدل را به خوبی پیش‌بینی کرده‌ایم. حال به بررسی و شبیه‌سازی مدل AR(2)AR(2) می‌پردازیم. در ادامه کد مربوط به شبیه‌سازی چنین داده‌هایی نوشته شده است.

1# Simulate an AR(2) process
2
3n = int(1000)
4alphas = np.array([.666, -.333])
5betas = np.array([0.])
6
7# Python requires us to specify the zero-lag value which is 1
8# Also note that the alphas for the AR model must be negated
9# We also set the betas for the MA equal to 0 for an AR(p) model
10# For more information see the examples at statsmodels.org
11ar = np.r_[1, -alphas]
12ma = np.r_[1, betas]
13
14ar2 = smt.arma_generate_sample(ar=ar, ma=ma, nsample=n) 
15_ = tsplot(ar2, lags=lags)

با توجه به داده‌های شبیه‌سازی شده، نمودارهای تحلیل سری‌زمانی با تابع tsplot، ترسیم شده است.

AR(2) time series model

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

1# Fit an AR(p) model to simulated AR(2) process
2
3max_lag = 10
4mdl = smt.AR(ar2).fit(maxlag=max_lag, ic='aic', trend='nc')
5est_order = smt.AR(ar2).select_order(
6    maxlag=max_lag, ic='aic', trend='nc')
7
8true_order = 2
9p('\ncoef estimate: {:3.4f} {:3.4f} | best lag order = {}'
10  .format(mdl.params[0],mdl.params[1], est_order))
11p('\ntrue coefs = {} | true order = {}'
12  .format([.666,-.333], true_order))

خروجی‌های که در ادامه قابل مشاهده هستند تقریبا برابر با ضریب‌های واقعی هستند.

coef  estimate:  0.6291    0.3196        best  lag    order  =2true    coefs=[0.666,    0.333]    true  order=2\large coef\; estimate:\;0.6291\;\;-0.3196\;\;|\;\; best\; lag\;\;order\;=2\\ \large true\;\;coefs=[0.666,\;\;-0.333]\;|\;true\;order =2

به منظور بررسی مدل سری زمانی AR(1)AR(1) برای داده‌های MSFT که در بخش اول این سری مطالب معرفی و بارگذاری شده، دستور زیر را اجرا کنید.

1_ = tsplot(data.MSFT, lags=30)

حال به بررسی خروجی تابع tsplot برای لگاریتم داده‌های MSFT می‌پردازیم.

msft log return time series

به نظر می‌رسد که خطا‌ها توزیع نرمال دارند ولی بعد از گذشت ۲۳ تاخیر ضریب خودهمبستگی ACF به صفر میل می‌کند. حال با اجرای کد زیر محاسبات مربوط به برازش سری زمانی طی کرده و نتایج را مورد بررسی قرار می‌دهیم.

1# Fit an AR(p) model to simulated AR(2) process
2
3max_lag = 10
4mdl = smt.AR(ar2).fit(maxlag=max_lag, ic='aic', trend='nc')
5est_order = smt.AR(ar2).select_order(
6    maxlag=max_lag, ic='aic', trend='nc')
7
8true_order = 2
9p('\ncoef estimate: {:3.4f} {:3.4f} | best lag order = {}'
10  .format(mdl.params[0],mdl.params[1], est_order))
11p('\ntrue coefs = {} | true order = {}'
12  .format([.666,-.333], true_order))

نتیجه اجرای این کد به صورت زیر است:

best  estimated  lag  order  =23\large best\;estimated\;lag\;order\;=23

به نظر می‌رسد که میزان تاخیر در این مدل برابر با ۲۳ است یا مدل دارای ۲۳ پارامتر خواهد بود. با توجه به تعدد پارامترها، مدل مناسب به نظر نمی‌رسد زیرا پیچیدگی آن زیاد است.

مدل میانگین متحرک (Moving Average)

مدل «میانگین متحرک» (Moving Average) با پارامتر qq مشخص می‌شود. این پارامتر نشان می‌دهد که مقدار سری زمانی در زمان tt با qq مقدار خطا یا نویز سفید تشکیل یک مدل خطی می‌دهد. از نظر اینکه مدل میانگین متحرک به صورت ترکیب خطی نوشته می‌شود، مشابه با مدل AR است ولی با این تفاوت که برحسب ترکیب خطی از خطاهای برحسب زمان، نوشته می‌شود.

بیان ریاضی برای مدل میانگین متحرک با توجه به نمادهای به کار رفته در قسمت اول به صورت زیر است.

xt=wt+β1wt1++βpwtq=wt+i=1qβiwti\large x_t=w_t+\beta_1w_{t-1}+\cdots+\beta_pw_{t-q}=w_t+\sum_{i=1}^q\beta_iw_{t-i}

در اینجا wtw_t همان نویز‌های سفید با میانگین صفر و ورایانس ۱ در زمان tt هستند.

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *