Bu yazıda R Programlama dili ile, Zaman serisi analizinde sıkça kullanılan Toplamsal Winters Üstel Düzleştirme Yöntemini göreceğiz.
Verinin Tanımlanması ve Zaman Serisinin Oluşturulması
Veri
Analiz boyunca kullanılan veri, ABD Enerji Bilgi Yönetim İdaresi (eia) tarafından 1973-2021 yılları arasında tutulan aylık elektrik tüketimi verisidir.
Veriye buradan ulaşabilirsiniz: Veri / eia
Verinin yüklenmesi:
veri <-read.csv("https://raw.githubusercontent.com/gungorrbaris/zaman-serisi-analizi-R/main/data/Table_7.6_Electricity_End_Use.csv")
knitr::kable(head(veri,n=10), align = "c")
Month | Electricity.End.Use..Total |
---|---|
1973 January | 144505.2 |
1973 February | 139546.1 |
1973 March | 137102.3 |
1973 April | 131365.9 |
1973 May | 131360.9 |
1973 June | 140293.0 |
1973 July | 152562.2 |
1973 August | 157480.8 |
1973 September | 157309.6 |
1973 October | 146042.0 |
Verinin Düzenlenmesi:
Tarih değişkenini Ay-Yıl formatına getirelim:
tarih = seq(from = as.Date("1973-01-01"), to = as.Date("2021-11-01"), by = 'month')
veri$Month <- tarih
veri$Month <-format(veri$Month, "%m-%Y")
knitr::kable(head(veri), align = "c")
Month | Electricity.End.Use..Total |
---|---|
01-1973 | 144505.2 |
02-1973 | 139546.1 |
03-1973 | 137102.3 |
04-1973 | 131365.9 |
05-1973 | 131360.9 |
06-1973 | 140293.0 |
Değişken isimlerini türkçeleştirelim:
colnames(veri) <- c("Tarih","Elektrik_Tuketimi")
knitr::kable(head(veri), align = "c")
Tarih | Elektrik_Tuketimi |
---|---|
01-1973 | 144505.2 |
02-1973 | 139546.1 |
03-1973 | 137102.3 |
04-1973 | 131365.9 |
05-1973 | 131360.9 |
06-1973 | 140293.0 |
Serinin Hazırlanması
Zaman Serisinin Oluşturulması
veri_ts <- ts(data = veri$Elektrik_Tuketimi, start = c(1973, 01), end = c(2021, 11), frequency = 12 )
Verimizde gözlemler aylık olduğu için frekans değeri (frequency) 12 olarak belirlenmelidir.
Zaman Serisi Grafiğinin Çizilmesi
ts.plot(veri_ts,gpars=list(xlab="Zaman", ylab="Elektrik Tüketimi"))
Zaman Serisi Grafiğine bakıldığında:
Pozitif yönlü artış vardır. Bu yüzden Serinin artan bir trende sahip olduğunu söyleyebiliriz.
Seride düzenli dalgalanmaların olduğu görülmektedir. Bu seride mevsimsellik olabileceğini gösterir. Daha kesin sonuç için ACF grafiğini çizelim.
ACF Grafiğinin Çizilmesi
! BİLGİ !
Gecikmeli seri: Serilerdeki verilerin dönem kaydırılması işlemi ile ortaya çıkan serilerdir. Zt bir zaman serisi değişkeni ise; bir dönem gecikmeli zaman serisi Zt-1, iki dönem gecikmeli Zt-2 ve k dönem gecikmeli Zt-k ile gösterilir.
Otokorelasyon katsayısı: Zaman serileri ile bu serilerin gecikmeli serileri arasındaki ilişkileri verir.
ACF: Otokorelasyon fonksiyonu (Autocorrelation function) demektir. Otokorelasyon katsayısı değerlerinden oluşur.
Seride trendin olduğunu anlamak için ACF grafiğindeki ilk dört gecikmeye bakmak yeterlidir. İlk dört gecikme sınırlar dışındaysa seri için “trende sahiptir” diyebiliriz.
library(fpp)
## Zorunlu paket yükleniyor: forecast
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Zorunlu paket yükleniyor: fma
## Zorunlu paket yükleniyor: expsmooth
## Zorunlu paket yükleniyor: lmtest
## Zorunlu paket yükleniyor: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Zorunlu paket yükleniyor: tseries
Acf(veri_ts,lag.max = 42, ylim=c(-1,1), lwd=5,main="Orijinal veri ACF Grafiği")
ACF Grafiğine bakıldığında:
Tüm gecikmeler (4 gecikme olması yeterlidir) sınırlar dışında olduğu için zaman serisinin trende sahip olduğu söylenebilir. Bu yüzden serinin farkı alınıp durağan hale getirilmelidir.
Trend ile birlikte düzenli dalgalanmaların olduğu gözükse de baskın bir mevsimsellikten şu an için bahsedemeyiz.
Birinci Farkın Alınması
! BİLGİ !
Fark Alınması: Zaman serisinin akışkanlı bir şekilde son değerlerinden belli bir dönem önceki değerlerinin çıkarılması işlemidir. Bu işlem sayesinde serideki trend ya da mevsimsel dalgalanmaları yok etmek mümkün olmaktadır.
veri_birinci_fark <- diff(veri_ts, differences = 1)
Farkı alınmış seri için ACF:
Acf(veri_birinci_fark,lag.max = 42, ylim=c(-1,1), lwd=5,main="Birinci Fark sonrası ACF Grafiği")
MEVSİMSELLİK
Birinci Farkı alınmış seri için ACF Grafiğine bakıldığında:
- Yine tüm gecikmeler sınırlar dışında olduğu için birinci farkı alınmış zaman serisinin de trende sahip olduğu söylenebilir. Fakat bir öncekine göre bu ACF grafiğinde baskın bir mevsimsellik görülüyor. Dalgalanmalar ve gecikmelerdeki düzenli sıçramalar bunu destekliyor.
WİNTERS ÜSTEL DÜZLEŞTİRME YÖNTEMİ
Diğer yazılarda anlatılan yöntemler, zaman içinde değişmeyen parametre varsayımına uygun serilerin tahminlerinde kullanılmaktaydı. Bir başka deyişle, bu tür seriler deterministik trende sahipti. Ancak birçok zaman serisinin hareketi regresyon doğrusuna ya da eğrisine dönme eğilimi göstermemektedir. Yani, zaman içinde serinin trend yapısı rasgele değişebilmektedir. Bu durumda, regresyon katsayısı sabit bir değer değil her t zamanında değişen değerlere sahip rasgele bir değişken olmaktadır. Böyle bir serinin tahınininin yapılabilmesi için elde edilen son gözlem (T’ inci döneme ait gözlem) değeri ile son döneme ait tahminin güncelleştirilmiş hali kullanılır.
Bu bölümde, zaman içinde değişen parametrelere sahip olan ve bir regresyon doğrusuna ya da eğrisine dönme eğilimi olmadığından tek bir regresyon doğrusu ya da eğrisiyle açıklanamayan, yani kısaca stokastik trende sahip olan serilerin analizi üzerinde durulacaktır.
Zaman Serileri için Üstel Düzleştirme Yöntemi, serinin mevsimsel olup olmamasına göre değişiklik göstermektedir.
Sadece trende sahip seriler (Mevsimsel olmayan) için;
Basit Üstel Düzleştirme Yöntemi
Holt Üstel Düzleştirme Yöntemi gibi yöntemler kullanılabilir.
Hem trende hem de mevsimselliğe sahip seriler için ise Winters Üstel Düzleştirme Yöntemini uygulayabiliriz.
Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş
Buradaki başlıkta; Trende sahip serinin birinci farkını aldığımızda serinin aynı zamanda mevsimselliğe sahip olduğunu ACF grafiğine bakarak açıklamıştık.
Kullandığımız veri mevsimselliğe sahip olduğu için bu bölümde sadece Winters Üstel Düzleştirme Yöntemi gösterilecektir.
Winters Üstel Düzleştirme Yöntemi için aşağıdaki formüller kullanılacaktır:
Kaynak: Prof. Dr. Cem Kadılar, Dr. Hatice Öncel Çekim SPSS ve R Uygulamalı Zaman Serileri Analizine Giriş
Toplamsal Winters Yöntemi
Verilerin trend’den bağımsız ve mevsimsel hareketlerin büyüklüğünün zaman içinde sabit olduğu varsayılır.
α, β ve γ’nın Belirlenmesi:
Kurulan model toplamsal model olacağı için fonksiyon içindeki model değişkeni “AAA” olmalıdır.
Winters1<- forecast::ets(veri_ts, model = "AAA")
summary(Winters1)
## ETS(A,A,A)
##
## Call:
## forecast::ets(y = veri_ts, model = "AAA")
##
## Smoothing parameters:
## alpha = 0.35
## beta = 0.0015
## gamma = 0.376
##
## Initial states:
## l = 142359.4408
## b = 650.5006
## s = -2003.421 -21271.04 -10677.56 13503.16 37439.09 33817.96
## 5562.078 -19450.16 -23820.27 -12164.33 -8641.028 7705.514
##
## sigma: 7062.892
##
## AIC AICc BIC
## 14164.62 14165.70 14239.00
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -443.1612 6965.969 5416.702 -0.2365098 2.209926 0.6997371
## ACF1
## Training set 0.3491801
Model çıktısına bakıldığında:
l = 142359.4408 -> ortalama düzeyin başlangıç değeridir.
b = 650.5006 -> eğimin başlangıç değeridir.
s değerine bakıldığında ise 12 farklı değer (periyot sayımız 12 olduğu için) vardır. Bu değerler mevsimsel terimin başlangıç değerleridir. Başlangıç değerleri kullanılarak Optimal düzleştirme katsayıları,
- α = 0.35
- β = 0.0015
- γ = 0.376 olarak elde edilmiştir.
Toplamsal Winters Modeli HKO
- Hata kareler ortalaması-HKO = 6965.969^2 bulunmuştur.
Tahmin, ACF ve Dağılım Grafikleri:
library(forecast)
checkresiduals(Winters1, lag = 42)
##
## Ljung-Box test
##
## data: Residuals from ETS(A,A,A)
## Q* = 225.17, df = 26, p-value < 2.2e-16
##
## Model df: 16. Total lags used: 42
Tahmin ve Hata Serilerinin Bulunması:
α, β ve γ düzleştirme katsayıları kullanılarak serinin tahmin değerleri aşağıdaki gibi bulunabilir.
tahmin_win1<- Winters1[["fitted"]]
Tahmin edilen ilk 12 değeri (2022 yılı ABD elektrik tüketim tahminlerini) görelim:
ongoru1 <- forecast(Winters1,h=12)
knitr::kable(ongoru1[["mean"]],col.names = "2022 yılı ABD elektrik tüketimi - Toplamsal Winters Tahminleri", align = "c")
2022 yılı ABD elektrik tüketimi - Toplamsal Winters Tahminleri |
---|
327234.9 |
337517.9 |
310134.8 |
309123.1 |
286408.9 |
305893.2 |
349325.4 |
393799.4 |
393737.8 |
348913.6 |
317616.4 |
300346.8 |
Tahmin ve Orijinal serileri birlikte çizdirelim:
plot( window(veri_ts),
xlab="Zaman", ylab="",lty=1, col=4, lwd=2)
lines( window(tahmin_win1) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_Tuketimi)),
expression(paste(Top.Winters_Tahmini))),
lwd=c(2,2),lty=c(1,3), cex=0.7, col=c(4,2))
Zaman Serisi Grafiğine bakıldığında:
Tahmin ile orijinal seri arasında uyum olduğu görülmektedir. Yani görsel olarak Toplamsal Winters yöntemi ile yapılan tahminlerin gerçeğe yakın olduğunu söyleyebiliriz.
Fakat emin olmak için hataların akgürültü olup olmadığına bakmamız gerekmektedir.
Hata Serisi:
α, β ve γ düzleştirme katsayıları kullanılarak serinin hata değerleri aşağıdaki gibi bulunabilir.
hata_win1<- Winters1[["residuals"]]
plot.ts(hata_win1)
Hatalar Akgürültü mü?
Ho: Hatalar Akgürültüdür.(Hatalar arasında ilişki yoktur.)
H1: Hatalar Akgürültü değildir.(Hatalar arasında ilişki vardır.)
Hatalar için ACF Grafiği:
Acf(hata_win1, lag.max = 42, ylim=c(-1,1), lwd=5,main="Hatalar için ACF Grafiği")
Hatalar için ACF Grafiğine bakıldığında:
İlk dört gecikmeden üç tanesinin sınırları geçtiği, birinin sınırlar içinde kaldığı görülmektedir.
Hataların akgürültü olduğunu söyleyebiliriz. Yani Hatalar arasında ilişki yoktur. Kurulan model tahmin etmede kullanılabilir.
Toplamsal Winter Yöntemi ile elektrik Tüketim Öngörüsü Grafiği:
plot(forecast(Winters1,h=120),main = "Toplamsal Winter Yönteminin İlerleyen Yıllar İçin Tahminleri")
SONUÇ
Bir önceki adımda görüldüğü üzere;
Hatalar Arasında ilişki olmadığını yani hataların akgürültü olduğunu gördük.
Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin Regresyon analizi için kullanılan Toplamsal Winters Üstel Düzleştirme Yöntemi uygundur.