Bu yazıda R Programlama dili ile, Zaman serisi analizinde sıkça kullanılan Çarpımsal Winters Üstel Düzleştirme Yöntemini göreceğiz.

Bir Önceki yazıda Toplamsal Winters Üstel Düzleştirme Yöntemini Görmüştük. Şimdi de Çarpımsal Winters Üstel Düzleştirme Yönteminin nasıl uygulandığına bakalım.

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ş

Çarpımsal Winters Yöntemi

Mevsimsel hareketlerin trende bağlı olarak değiştiği ve trendin bir çarpanı olduğu varsayılmaktadır. Genellikle çarpımsal model tercih edilmektedir.

α, β ve γ’nın Belirlenmesi:

Kurulan model çarpımsal model olacağı için fonksiyon içindeki model değişkeni “MAM” olmalıdır.

Winters2<- forecast::ets(veri_ts, model = "MAM")
summary(Winters2)
## ETS(M,A,M) 
## 
## Call:
##  forecast::ets(y = veri_ts, model = "MAM") 
## 
##   Smoothing parameters:
##     alpha = 0.3292 
##     beta  = 9e-04 
##     gamma = 0.2528 
## 
##   Initial states:
##     l = 141713.6213 
##     b = 564.3679 
##     s = 0.991 0.958 0.9931 1.0717 1.0836 1.0489
##            0.9816 0.9136 0.9304 0.9685 0.9911 1.0685
## 
##   sigma:  0.0231
## 
##      AIC     AICc      BIC 
## 13919.11 13920.19 13993.49 
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set -378.7723 6176.062 4754.346 -0.2122225 1.822243 0.6141731
##                   ACF1
## Training set 0.3226722

Model çıktısına bakıldığında:

  • l = 141713.6213 -> ortalama düzeyin başlangıç değeridir.

  • b = 564.3679 -> 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.3292
    • β = 0
    • γ = 0.2528 olarak elde edilmiştir.

Çarpımsal Winters Modeli HKO

  • Hata kareler ortalaması-HKO = 6176.062^2 bulunmuştur.

Tahmin, ACF ve Dağılım Grafikleri:

library(forecast)
checkresiduals(Winters2, lag = 42)

## 
##  Ljung-Box test
## 
## data:  Residuals from ETS(M,A,M)
## Q* = 169.05, 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_win2<- Winters2[["fitted"]]

Tahmin edilen ilk 12 değeri (2022 yılı ABD elektrik tüketim tahminlerini) görelim:

ongoru2 <- forecast(Winters2,h=12)
knitr::kable(ongoru2[["mean"]],col.names = "2022 yılı ABD elektrik tüketimi - Çarpımsal Winters Tahminleri", align = "c")
2022 yılı ABD elektrik tüketimi - Çarpımsal Winters Tahminleri
327095.8
340700.8
311116.3
311409.0
288255.3
307903.8
349996.3
395149.7
393769.1
349813.4
318125.3
300226.6

Tahmin ve Orijinal serileri birlikte çizdirelim:

plot( window(veri_ts), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2)
lines( window(tahmin_win2) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(Elektrik_Tuketimi)),
               expression(paste(Çar.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 Çarpımsal 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_win2<- Winters2[["residuals"]]
plot.ts(hata_win2)

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_win2, 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.

Çarpımsal Winter Yöntemi ile elektrik Tüketim Öngörüsü Grafiği:

plot(forecast(Winters2,h=120),main = "Çarpımsal 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 Çarpımsal Winters Üstel Düzleştirme Yöntemi uygundur.

Peki hangi model daha iyi?

winters yöntemlerinde kullanılan iki yöntemin de yaptıkları tahminlerin orijinal seri ile karşılaştırmasında uyumlu sonuçlar verdiğini ve bu modellerin tahmin için kullanılabileceğini gördük.

Toplamsal ve Çarpımsal Winters 2022 Tahminleri:

ongoru2022 <- as.data.frame(cbind(ongoru1[["mean"]],ongoru2[["mean"]]))
colnames(ongoru2022) <- c("Toplamsal Winters", "Çarpımsal Winters")
knitr::kable(ongoru2022, align = "c")
Toplamsal Winters Çarpımsal Winters
327234.9 327095.8
337517.9 340700.8
310134.8 311116.3
309123.1 311409.0
286408.9 288255.3
305893.2 307903.8
349325.4 349996.3
393799.4 395149.7
393737.8 393769.1
348913.6 349813.4
317616.4 318125.3
300346.8 300226.6
ongoru111 <- forecast(Winters1,h=120)
ongoru222 <- forecast(Winters2,h=120)
plot( window(ongoru111[["mean"]]), 
      xlab="Zaman", ylab="",lty=1, col=4, lwd=2,main = "Toplamsal ve Çarpımsal Winters Yöntemlerinin 10 Yıllık Tahmin Grafiği")
lines( window(ongoru222[["mean"]]) ,lty=3,col=2,lwd=3)
legend("topleft",c(expression(paste(ToplamsalWinters)),
               expression(paste(ÇarpımsalWinters))),
       lwd=c(2,2),lty=c(1,3), cex=0.7, col=c(4,2))

  • İki modelin 2022 yılı elektrik kullanımı tahmin değerlerinin ve 10 yıllık Tahminlerinin yakın olduğunu söyleyebiliriz.

Peki hangi model bu veri için daha iyi?

Bu durumda iki yöntemin de HKO (Hata Kareler Ortalaması) değerlerine bakmamız gerekir.

Toplamsal Winters Yöntemi HKO = 6965.969^2
Çarpımsal Winters Yöntemi HKO = 6176.062^2

Çarpımsal Winters yönteminin HKO’sı, Toplamsal Winters yönteminden küçük olduğu için; Çarpımsal Winters yöntemi seriyi tahmin etmek için daha uygun olan yöntemdir.

Özet

Bu bölümde; Mevsimsel seriler için kullanılan Üstel Düzleştirme yöntemleri ile ABD’deki aylık elektrik tüketimini tahmin etmeye çalıştık. Uyguladığımız iki model de veriyi tahmin etmede iyi sonuçlar verdi. Bu iki model arasında Hata Kareler Ortalaması daha küçük olan Çarpımsal Winters yönteminin daha iyi olduğu sonucuna vardık.

Sonuç olarak ABD’deki aylık elektrik tüketimi serisinin tahmini için Winters Üstel Düzleştirme yöntemleri uygundur ve kullanılabilir.