خانه / مقالات / داده کاوی و هوش مصنوعی / سری های زمانی : تعریف، آنالیز، پیش بینی، کلاسترینگ و کلسیفایینگ در R

سری های زمانی : تعریف، آنالیز، پیش بینی، کلاسترینگ و کلسیفایینگ در R

سری های زمانی : تعریف، آنالیز، پیش بینی، کلاسترینگ و کلسیفایینگ در R

یک سری زمانی یکی از روش های پیش بینانه در داده کاوی و مجموعه مشاهداتی است که بر اساس زمان مرتب شده باشند. مانند:
میزان شاخص های مختلف بورس
میزان بارش های فصلی در مناطق شمالی ایران
پیش بینی تغییرات جمعیت در مدت زمان ده تا بیست سال آینده
سری زمانی توالی از مشاهدات بر روی یک متغیر است که در نقاط متوالی از زمان یا دوره های متوالی در زمان محاسبه می شود. این محاسبه ممکن است هر ساعت، هر روز، هر هفته ، هر ماه یا هر سال و یا در هر فاصله زمانی دیگری انجام شود. الگوی داده ها در درک اینکه سری زمانی در گذشته چگونه رفتار کرده بسیار مهم است. اگر انتظار رود که چنین رفتاری در آینده هم ادامه پیدا کند، می توان از الگوهای گذشته برای راهنمایی بهتر در انتخاب روش پیش بینی مناسب برای آینده هم استفاده کرد.
اگر زمان را متغیر مستقل و متغیر سری های زمانی را متغیر وابسته در نظر بگیریم، آنالیز رگرسیون را نیز می توان به عنوان یک روش سری زمانی در نظر گرفت.
هدف آنالیز سری های زمانی کشف الگویی در داده های گذشته یا سری های زمانی و سپس پیش بینی الگویی برای آینده است؛ این پیش بینی تنها بر مقادیر گذشته متغیر و/ یا خطاهای پیش بینی های گذشته تکیه دارد.
برای تعیین الگوهای داده یکی از راه های مفیدی که وجود دارد ساخت پلات سری زمانی است. پلات سری زمانی نمایش گرافیکی متغیرهای زمان و سری های زمانی است، متغیر زمان در محور افقی و مقادیر سری های زمانی در محور عمودی نمایش داده می شود. برخی انواع متداول الگوهای داده ای که می توان هنگام بررسی پلات سری زمانی مشخص کرد عبارتند از:
Horizontal Pattern
Trend Pattern
Seasonal Pattern
Trend and Seasonal Pattern
Cyclical Pattern
روش های پیش بینی که مورد بحث قرار می گیرند بر اساس این است که کدام یک از این الگوها در سری های زمانی موجود هستند.
Horizontal pattern
الگوی افقی، زمانی وجود دارد که داده حول یک میانگین ثابت نوسان داشته باشد.
برای یک سری زمانی با الگوی افقی یا horizontal pattern از انتقال میانگین یا هموار سازی نمایی برای ایجاد پیش بینی استفاده می شود. روش انتقال میانگین شامل محاسبه میانگین مقادیر داده های گذشته و سپس استفاده از آن میانگین به عنوان پیش بینی دوره بعدی می باشد. در روش هموارسازی نمایی میانگین وزنی مقادیر سری های زمانی قبلی برای محاسبه پیش بینی استفاده می شود. این روش ها زمانی که یک الگوی افقی به یک سطح جدید منتقل میشود به خوبی تطبیق می یابند.
یک عامل مهم در تعیین روش پیش بینی مورد استفاده دقت روش است. سه عامل دقت پیش بینی مورد بحث قرار می گیرند: mean absolute error (MAE)، mean squared error (MSE) و mean absolute percentage error (MAPE). هریک از این معیارها برای تعیین اینکه یک روش پیش بینی تا چه حد می تواند داده های سری های زمانی را که اکنون در دست هستند مجددا تولید کند، طراحی شده اند. با انتخاب روشی که بهترین دقت را برای داده های شناخته شده فعلی دارد، امیدواریم احتمال به دست آوردن پیش بینی های بهتر برای دوره های زمانی آتی را افزایش دهیم.
Trend pattern
این نوع الگو، زمانی وجود دارد که پلات سری های زمانی شیفت تدریجی به مقادیر نسبتا بالاتر یا پایین تر در دوره های زمانی طولانی تری نشان دهند.
برای سری های زمانی که تنها یک روال خطی بلند مدت دارند (Trend Pattern) می توان از رگرسیون خطی ساده برای انعکاس این روال استفاده کرد. برای سری های زمانی با روال غیر خطی یا دارای انحنا می توان از رگرسیون چندگانه برای انطباق یک معادله کوادراتیک یا نمایی با داده استفاده کرد.
Seasonal pattern
زمانی این نوع الگو وجود دارد که پلات سری های زمانی یک الگوی تکرار شونده در دوره های متوالی نشان دهد. دوره های متوالی معمولا وقفه های یک ساله هستند به این دلیل به آن فصلی می گویند.
برای سری زمانی با الگوی seasonal (فصلی) استفاده از dummy variables در مدل رگرسیون چندگانه برای ایجاد یک معادله رکرگسیون تخمینی با تاثیرات فصلی پیشنهاد می شود.
در صورتی که رویکرد رگرسیون گسترش یافته و موقعیت هایی را نیز شامل شود که سری های زمانی شامل تاثیر فصلی و روال خطی می شوند می توان رویکرد dummy variables برای کنترل فصلی بودن به علاوه رویکرد رگرسیون سری های زمانی برای کنترل روال خطی را ترکیب کرد.
آخرین گام در ایجاد یک پیش بینی زمانی که هم اجزای trend و هم اجزای seasonal حاضر هستند استفاده از شاخص های فصلی برای تنظیم نمایش روال است.
Stationary time series
سری های زمانی که مشخصه های آماری آنها مستقل از زمان است. در این سری های زمانی فرایند تولید داده یک میانگین ثابت دارد و تغییر سری های زمانی در طول زمان ثابت است.
Cyclical pattern
این نوع الگو زمانی به وجود می آید که پلات سری زمانی تناوبی از نقاطی بالا و پایین خط trend نشان دهد که برای مدت بیش از یک سال باقی مانده است.
Classification و کلاسترینگ سری های زمانی
در این قسمت دسته بندی و خوشه بندی سری های زمانی را با کد R نشان می دهیم.
کلاسترینگ سری های زمانی:
کلاسترینگ سری های زمانی پارتیشن بندی داده های سری های زمانی به چند گروه و بر اساس شباهت و یا فاصله آنهاست بطوری که سری های زمانی داخل یک کلاستر مشابه هم باشند. برای کلاسترینگ سریهای زمانی در R اولین گام انتخاب یک معیار شباهات/فاصله مناسب و سپس در گام بعدی استفاده از تکنیک های کلاسترینگ موجود مانند kmeans ، خوشه بندی سلسله مراتبی، خوشه بندی مبتنی بر density یا subspace clustering برای پیدا کردن ساختارهای خوشه بندی است.
Dynamic Time Warping (DTW) تنظیمات بهینه میان دو سری زمانی را پیدا می کند و فاصله DTW به عنوان یک معیار مسافت در مثال پایین استفاده شده است. دیتاستی که در اینجا به کار برده شده Synthetic Control Chart Time Series است که شامل ۶۰۰ مثال از چارت های کنترلی است. هر چارت کنترلی یک سری زمانی با ۶۰ مقدار است. ۶ کلاس وجود دارد: ۱) ۱-۱۰۰ نرمال ۲)۱۰۱-۲۰۰ چرخه ای ۳) ۲۰۱-۳۰۰ روند افزایشی ۴) ۳۰۱-۴۰۰ روند کاهشی ۵) ۴۰۱ – ۵۰۰ شیفت به بالا و ۶) ۵۰۱-۶۰۰ شیفت به پایین.
این دیتاست از لینک زیر قابل دانلود است:
http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_control.html
sc <- read.table(“E:/Rtmp/synthetic_control.data”, header=F, sep=””)
# بصورت رندوم از هر کلاس n نمونه برمیداریم تا ترسیم پلات راحت تر شود
n <- 10
s <- sample(1:100, n)
idx <- c(s, 100+s, 200+s, 300+s, 400+s, 500+s)
sample2 <- sc[idx,] observedLabels <- c(rep(1,n), rep(2,n), rep(3,n), rep(4,n), rep(5,n), rep(6,n))
# محاسبه فاصله DTW
library(dtw)
distMatrix <- dist(sample2, method=”DTW”)
# hierarchical clustering
hc <- hclust(distMatrix, method=”average”)
plot(hc, labels=observedLabels, main=””)
Classification سری های زمانی
classification ساخت مدل دسته بندی بر اساس سری های زمانی برچسب گذاری شده و سپس استفاده از آن مدل برای پیش بینی برچسب سری های زمانی بدون برچسب است. برای دسته بندی سری های زمانی در R باید ابتدا از داده های سری های زمانی را فیچرهایی استخراج کرده و ساخت و سپس از تکنیک های دسته بندی موجود مثل SVM، k-NN، شبکه های عصبی ، رگرسیون و درخت تصمیم بر روی آن مجموعه فیچرها استفاده کرد.
Discrete Wavelet Transform (DWT) در مثال زیر استفاده شده که نمایش multi-resolution ارائه می دهد. یکی دیگر از تکنیک های محبوب در استخراج ویژگی Discrete Fourier Transform (DFT) یا تبدیل فوریه گسسته است.
# استخراج ضرایب DWT(با فیلتر Haar)
library(wavelets)
wtData <- NULL
for (i in 1:nrow(sc)) {
+ a <- t(sc[i,])
+ wt <- dwt(a, filter=”haar”, boundary=”periodic”)
+ wtData <- rbind(wtData, unlist(c(wt@W,wt@V[[wt@level]])))
+ }
wtData <- as.data.frame(wtData)
# تبدیل لیبل های کلاس ها به مقادیر کتگوریکال
classId <- c(rep(“۱″,۱۰۰), rep(“۲″,۱۰۰), rep(“۳″,۱۰۰),
+ rep(“۴″,۱۰۰), rep(“۵″,۱۰۰), rep(“۶″,۱۰۰))
wtSc <- data.frame(cbind(classId, wtData))
#ساخت درخت تصمیم با تابع ctree از پکیج party
library(party)
ct <- ctree(classId ~ ., data=wtSc,
+ controls = ctree_control(minsplit=30, minbucket=10, maxdepth=5))
pClassId <- predict(ct)
# بررسی کلاسهای پیش بینی شده با کلاس های لیبل دار اصلی
table(classId, pClassId)
خروجی:

# accuracy
(sum(classId==pClassId)) / nrow(wtSc)
خروجی:
[۱] ۰٫۸۷۱۶۶۶۷

plot(ct, ip_args=list(pval=FALSE), ep_args=list(digits=0))

خروجی:

مثالی دیگر:
class ts

نشان دهنده داده ای است که در نقاط زمانی با فواصل یکسان نمونه برداری شده
frequency=7: سری هفتگی
frequency=12: سری های ماهانه
frequency=4: سریهای سه ماهه
Time Series Data in R
a <- ts(1:20, frequency = 12, start = c(2011, 3))
print(a)
خروجی

## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## ۲۰۱۱ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
## ۲۰۱۲ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰
str(a)

خروجی:
## Time-Series [1:20] from 2011 to 2013: 1 2 3 4 5 6 7 8 9 10…
attributes(a)
خروجی:
## $tsp
## [۱] ۲۰۱۱ ۲۰۱۳ ۱۲
##
## $class
## [۱] “ts”
Decomposition سری های زمانی

به تجزیه سری های زمانی به چند جزء یا کامپوننت می گویند Decomposition سری های زمانی که عبارتند از:
Trend component یا مولفه روند : روند بلند مدت
Seasonal component یا کامپوننت فصلی: تغییرات فصلی
Cyclical component یا کامپوننت چرخه ای: نوسانات تکرار شونده ولی غیر دوره ای
Irregular component یا کامپوننت های نامنظم: سایر کامپوننت ها
Data AirPassengers

برای مثال در این قسمت داده های مسافرین هوایی در R یپاده سازی می شود

f <- decompose(AirPassengers)
# seasonal figures
f$figure
plot(f$figure, type=”b”, xaxt=”n”, xlab=””)
# گرفتن نام ۱۲ ماه به انگلیسی
monthNames <- months(ISOdate(2011,1:12,1))
# نام کذاری ۱۲ محور با نام ماه ها
axis(1, at=1:12, labels=monthNames, las=2)

> plot(f)

در شکل بالا اولین چارت سری زمانی اصلی، دومین چارت trend سومین چارت فاکتورهای seasonal و آخرین چارت سایر کامپوننت ها را نشان می دهد.
برخی دیگر از توابع decomposition سری های زمانی stl() در پکیج stats، decomp() در پکیج timsac و tsr() در پکیج ast می باشد.
Dynamic Time Warping (DTW)

library(dtw)
idx <- seq(0, 2 * pi, len = 100)
a <- sin(idx) + runif(100)/10
b <- cos(idx)
align <- dtw(a, b, step = asymmetricP1, keep = T)
dtwPlotTwoWay(align)

کلاسترینگ سلسله مراتبی با فاصله اقلیدسی

# گرفتن n نمونه از هر کلاس
n <- 10
s <- sample(1:100, n)
idx <- c(s, 100 + s, 200 + s, 300 + s, 400 + s, 500 + s)
sample2 <- sc[idx, ] observedLabels <- rep(1:6, each = n)

# کلاسترنیگ
hc <- hclust(dist(sample2), method = “ave”)
plot(hc, labels = observedLabels, main = “”)
# تقسیم درخت برای رسیدن به ۸ کلاستر
memb <- cutree(hc, k = 8)
table(observedLabels, memb)
خروجی:
memb
observedLabels 1 2 3 4 5 6 7 8
۱ ۱۰ ۰ ۰ ۰ ۰ ۰ ۰ ۰
۲ ۰ ۳ ۱ ۱ ۳ ۲ ۰ ۰
۳ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰ ۰
۴ ۰ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰
۵ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰ ۰
۶ ۰ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰
کلاسترینگ سلسله مراتبی با فاصله DTW
myDist <- dist(sample2, method = “DTW”)
hc <- hclust(myDist, method = “average”)
plot(hc, labels = observedLabels, main = “”)

# تقسیم درخت برای رسیدن به ۸ کلاستر
memb <- cutree(hc, k = 8)
table(observedLabels, memb)
memb
observedLabels 1 2 3 4 5 6 7 8
۱ ۱۰ ۰ ۰ ۰ ۰ ۰ ۰ ۰
۲ ۰ ۴ ۳ ۲ ۱ ۰ ۰ ۰
۳ ۰ ۰ ۰ ۰ ۰ ۶ ۴ ۰
۴ ۰ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰
۵ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰ ۰
۶ ۰ ۰ ۰ ۰ ۰ ۰ ۰ ۱۰
کلاسیفیکیشن:

استخراج ویژگی:

Singular Value Decomposition (SVD)
Discrete Fourier Transform (DFT)
Discrete Wavelet Transform (DWT)
Piecewise Aggregate Approximation (PAA)
Perpetually Important Points (PIP)
Piecewise Linear Representation
Symbolic Representation

Decision Tree (ctree)
classId <- rep(as.character(1:6), each = 100)
newSc <- data.frame(cbind(classId, sc))
library(party)
ct <- ctree(classId ~ ., data = newSc,
controls = ctree_control(minsplit = 20,
minbucket = 5, maxdepth = 5))
pClassId <- predict(ct)
table(classId, pClassId)

خروجی:

pClassId
classId 1 2 3 4 5 6
۱ ۱۰۰ ۰ ۰ ۰ ۰ ۰
۲ ۱ ۹۷ ۲ ۰ ۰ ۰
۳ ۰ ۰ ۹۹ ۰ ۱ ۰
۴ ۰ ۰ ۰ ۱۰۰ ۰ ۰
۵ ۴ ۰ ۸ ۰ ۸۸ ۰
۶ ۰ ۳ ۰ ۹۰ ۰ ۷

# دقت
(sum(classId == pClassId))/nrow(sc)

خروجی:
[۱] ۰٫۸۱۸۳
Decision Tree with DWT
ct <- ctree(classId ~ ., data = wtSc,
controls = ctree_control(minsplit=20, minbucket=5,
maxdepth=5))
pClassId <- predict(ct)
table(classId, pClassId)

plot(ct, ip_args = list(pval = F), ep_args = list(digits = 0))

کلاسیفیکیشن k-NN
پیدا کردن k نزدیک ترین همسایه از یک نمونه و برچسب گذرای آن با اکثر آرا. این روش نیازمند ساختار شاخص گذاری مناسبی برای دیتاست های بزرگ است.
k <- 20
newTS <- sc[501, ] + runif(100) * 15
distances <- dist(newTS, sc, method = “DTW”)
s <- sort(as.vector(distances), index.return = TRUE)

# class id های k نزدیک ترین همسایه
table(classId[s$ix[1:k]])

خروجی:
۴ ۶
۳ ۱۷

نتیجه حداکثر آرا= کلاس ۶
برای کلاسترینگ سری های زمانی در R پکیج TSclust می تواند استفاده شود که عدم شباهت میان سری های زمانی را برای اجرای کلاسترینگ اندازه گیری می کند.

پیش بینی سری های زمانی

همان طور که قبلا گفته شد Time series forecasting پیش بینی رویدادهای آتی بر اساس داده های شناخته شده گذشته است. در ادامه مثالی برای پیش بینی سری های زمانی با مدل autoregressive integrated moving average یا ARIMA آورده شده است.
fit <- arima(AirPassengers, order=c(1,0,0), list(order=c(2,1,0), period=12))
fore <- predict(fit, n.ahead=24)
U <- fore$pred + 2*fore$se
L <- fore$pred – ۲*fore$se
ts.plot(AirPassengers, fore$pred, U, L, col=c(1,2,4,4), lty = c(1,1,2,2))
legend(“topleft”, c(“Actual”, “Forecast”, “Error Bounds (95% Confidence)”), col=c(1,2,4), lty=c(1,1,2))

پیش بینی نرخ مبادلات ارز با ARIMA و STL
این مثال سری های زمانی پیش بینی نرخ مبادلات ارزهای یورو و دلار استرالیا را با مدل های ARIMA و STL نشان می دهد. داده ای که در این پیاده سازی استفاده شده مربوط به مبادلات ارز از ژانویه ۱۹۹۹ تا ژوئن ۲۰۱۴ است که توسط بانک مرکزی اروپا ارائه شده و ازلینک زیر دانلود شده است:
http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html.
url <- “http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip”
download.file(url, “eurofxref-hist.zip”)

بررسی داده ها
rates <- read.csv(unz(“eurofxref-hist.zip”, “eurofxref-hist.csv”),
header = T)
rates[1:2, ] خروجی :
## Date USD JPY BGN CYP CZK DKK EEK GBP HUF LTL LVL
## ۱ ۲۰۱۴-۰۷-۰۱ ۱٫۳۶۹ ۱۳۹٫۰ ۱٫۹۵۵۸ N/A 27.43 7.456 N/A 0.7981 310.4 3.453 N/A
## ۲ ۲۰۱۴-۰۶-۳۰ ۱٫۳۶۶ ۱۳۸٫۴ ۱٫۹۵۵۸ N/A 27.45 7.456 N/A 0.8015 309.3 3.453 N/A
## MTL PLN ROL RON SEK SIT SKK CHF ISK NOK HRK RUB TRL
## ۱ N/A 4.158 N/A 4.3881 9.160 N/A N/A 1.214 N/A 8.438 7.58 46.895 N/A
## ۲ N/A 4.157 N/A 4.383 9.176 N/A N/A 1.216 N/A 8.403 7.576 46.3779 N/A
## TRY AUD BRL CAD CNY HKD IDR INR KRW MXN
## ۱ ۲٫۹۰۶۶ ۱٫۴۴۸ ۳٫۰۳۴۹ ۱٫۴۵۹ ۸٫۴۸۸۳ ۱۰٫۶۱ ۱۶۲۵۱٫۹۴ ۸۲٫۲۳۰۷ ۱۳۸۵ ۱۷٫۷۷۵۹
## ۲ ۲٫۸۹۶۹ ۱٫۴۵۴ ۳٫۰۰۰۲ ۱٫۴۵۹ ۸٫۴۷۲۲ ۱۰٫۵۹ ۱۶۲۴۸٫۱۵ ۸۲٫۲۰۲۳ ۱۳۸۲ ۱۷٫۷۱۲۴
## MYR NZD PHP SGD THB ZAR ILS X
## ۱ ۴٫۳۸۹۳ ۱٫۵۶۲ ۵۹٫۷۶۴ ۱٫۷۰۵ ۴۴٫۳۶۷ ۱۴٫۵۸ ۴٫۶۹۲ NA
## ۲ ۴٫۳۸۵۶ ۱٫۵۶۳ ۵۹٫۶۵۲ ۱٫۷۰۵ ۴۴٫۳۲۳ ۱۴٫۴۶ ۴٫۶۹۶ NA
str(rates$Date)

خروجی:
## Factor w/ 3968 levels “1999-01-04″,”1999-01-05”,..: 3968 3967 3966 3965 3964 3963 3962 3961 3960 3959 …
## تبدیل به فرمت تاریخ
rates$Date <- as.Date(rates$Date, “%Y-%m-%d”)
str(rates$Date)

خروجی:
## Date[1:3968], format: “2014-07-01” “2014-06-30” “2014-06-27” “2014-06-26” …
range(rates$Date)
خروجی:
## [۱] “۱۹۹۹-۰۱-۰۴” “۲۰۱۴-۰۷-۰۱”

rates <- rates[order(rates$Date), ] ## ترسیم سری های زمانی
plot(rates$Date, rates$AUD, type = “l”)

پیش بینی با ARIMA
کد زیر نشان می دهد که داده برای آخر هفته ها یا تعطیلات عمومی وجود ندارد.
head(rates$Date, 20)

## [۱] “۱۹۹۹-۰۱-۰۴” “۱۹۹۹-۰۱-۰۵” “۱۹۹۹-۰۱-۰۶” “۱۹۹۹-۰۱-۰۷” “۱۹۹۹-۰۱-۰۸”
## [۶] “۱۹۹۹-۰۱-۱۱” “۱۹۹۹-۰۱-۱۲” “۱۹۹۹-۰۱-۱۳” “۱۹۹۹-۰۱-۱۴” “۱۹۹۹-۰۱-۱۵”
## [۱۱] “۱۹۹۹-۰۱-۱۸” “۱۹۹۹-۰۱-۱۹” “۱۹۹۹-۰۱-۲۰” “۱۹۹۹-۰۱-۲۱” “۱۹۹۹-۰۱-۲۲”
## [۱۶] “۱۹۹۹-۰۱-۲۵” “۱۹۹۹-۰۱-۲۶” “۱۹۹۹-۰۱-۲۷” “۱۹۹۹-۰۱-۲۸” “۱۹۹۹-۰۱-۲۹”
years <- format(rates$Date, “%Y”)
tab <- table(years)
tab
## years
## ۱۹۹۹ ۲۰۰۰ ۲۰۰۱ ۲۰۰۲ ۲۰۰۳ ۲۰۰۴ ۲۰۰۵ ۲۰۰۶ ۲۰۰۷ ۲۰۰۸ ۲۰۰۹ ۲۰۱۰ ۲۰۱۱ ۲۰۱۲ ۲۰۱۳
## ۲۵۹ ۲۵۵ ۲۵۴ ۲۵۵ ۲۵۵ ۲۵۹ ۲۵۷ ۲۵۵ ۲۵۵ ۲۵۶ ۲۵۶ ۲۵۸ ۲۵۷ ۲۵۶ ۲۵۵
## ۲۰۱۴
## ۱۲۶
## تعداد روزهای هر سال پس از حذف ۲۰۱۴
mean(tab[1:(length(tab) – 1)])
## [۱] ۲۵۶٫۱

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

source(“forecast.R”) ## see code file in section 5
result.arima <- forecastArima(rates, n.ahead = 90)

source(“plotForecastResult.R”)
plotForecastResult(result.arima, title = “Exchange rate forecasting with ARIMA”)
پیش بینی با STL

result.stl <- forecastStl(rates, n.ahead = 90)
plotForecastResult(result.stl, title = “Exchange rate forecasting with STL”)

## نرخ مبادلات در ۲۰۱۴
result <- subset(result.stl, date >= “2014-01-01”)
plotForecastResult(result, title = “Exchange rate forecasting with STL (2014)”)

توابع
کدهای مرجعی که در بالا استفاده شده در ادامه آورده شده است:
کدی که شامل توابع پیش بینی با ARIMA و STL است بصورت زیر است که در کتابخانه forecast موجود می باشد.

library(forecast)

forecastStl <- function(x, n.ahead = 30) {
+ myTs <- ts(x$AUD, start = 1, frequency = 256)
+ fit.stl <- stl(myTs, s.window = 256)
+ sts <- fit.stl$time.series
+ trend <- sts[, “trend”] + fore <- forecast(fit.stl, h = n.ahead, level = 95)
+ plot(fore)
+ pred <- fore$mean
+ upper <- fore$upper
+ lower <- fore$lower
+ output <- data.frame(actual = c(x$AUD, rep(NA, n.ahead)),
+ trend = c(trend, rep(NA, n.ahead)), pred = c(rep(NA,
+ nrow(x)), pred), lower = c(rep(NA, nrow(x)), lower),
+ upper = c(rep(NA, nrow(x)), upper), date = c(x$Date,
+ max(x$Date) + (1:n.ahead)))
+ return(output)
+ }

forecastArima <- function(x, n.ahead = 30) {
+ myTs <- ts(x$AUD, start = 1, frequency = 256)
+ fit.arima <- arima(myTs, order = c(0, 0, 1))
+ fore <- forecast(fit.arima, h = n.ahead)
+ plot(fore)
+ upper <- fore$upper[, “95%”] + lower <- fore$lower[, “95%”] + trend <- as.numeric(fore$fitted)
+ pred <- as.numeric(fore$mean)
+ output <- data.frame(actual = c(x$AUD, rep(NA, n.ahead)),
+ trend = c(trend, rep(NA, n.ahead)), pred = c(rep(NA,
+ nrow(x)), pred), lower = c(rep(NA, nrow(x)), lower),
+ upper = c(rep(NA, nrow(x)), upper), date = c(x$Date,
+ max(x$Date) + (1:n.ahead)))
+ return(output)
+ }

تابع ترسیم نتایج پیش بینی سری های زمانی بصورت زیر است:
plotForecastResult <- function(x, title = NULL) {
+ x <- x[order(x$date), ] + max.val <- max(c(x$actual, x$upper), na.rm = T)
+ min.val <- min(c(x$actual, x$lower), na.rm = T)
+ plot(x$date, x$actual, type = “l”, col = “grey”, main = title,
+ xlab = “Time”, ylab = “Exchange Rate”, xlim = range(x$date),
+ ylim = c(min.val, max.val))
+ grid()
+ lines(x$date, x$trend, col = “yellowgreen”)
+ lines(x$date, x$pred, col = “green”)
+ lines(x$date, x$lower, col = “blue”)
+ lines(x$date, x$upper, col = “blue”)
+ legend(“bottomleft”, col = c(“grey”, “yellowgreen”, “green”,
+ “blue”), lty = 1, c(“Actual”, “Trend”, “Forecast”, “Lower/Upper Bound”))
+ }

مراجع:
Time Series Analysis and Forecasting: Chapter 15

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CD0QFjAE&url=http%3A%2F%2Fwww.irdatamining.com%2Fattachments%2Farticle%2F92%2F4th%2520seminar.pdf&ei=ML6WVY6tDYupsgGmzaZA&usg=AFQjCNEJAwlT21Gb_iYc9ivUvgSJ_5-aKA&sig2=fT06ZBGTrusY_XFoHi_l6g&bvm=bv.96952980,d.bGg&cad=rja
http://www.rdatamining.com/examples/time-series-forecasting

http://www.rdatamining.com/examples/time-series-clustering-classification

http://cran.r-project.org/web/packages/TSclust

http://www.rdatamining.com/docs/time-series-analysis-and-mining-with-r

1 دیدگاه

  1. سلام
    آیا یان هایی که بالا فرمودین، رو با استفاده از MATLAB هم انجام میدین؟

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

x

شاید بپسندید

داده کاوی و الگوریتم خوشه بندی kmeans

داده کاوی و الگوریتم خوشه بندی kmeans در این مقاله قصد داریم ...