Zaman Serileri ve Quantmod Paketi
Zaman Serisi Tahmini Nedir?
Bu bölümde kullanacağımız yöntemler makine öğrenimi konusunun altında da geçmektedir. Eğer elimizde düzenli olarak kaydedilen veriler varsa, bu verileri kullanarak gelecek olan düzenli gözlemi tahmin etmeye çalışabiliriz. Örneğin, GSYH her çeyrekte ve her yıl açıklanmaktadır. Biz bugüne kadar olan, GSYH verilerini kullanarak, gelecek yılın veya gelecek çeyreğin GSYH verisini tahmin etmeye çalışabiliriz. Aynı durum hisse senedi fiyatları, döviz kurları veya benzeri veriler içinde geçerli olabilir.
Zaman Serisi Bileşenleri?
Bu tahmini yapabilmek için zaman serilerinin yapısını iyi anlamamız gerekir. Zaman serileri 4 ana bileşenden oluşur.
Trend
Pek çok zaman serisi zaman içinde değişecektir, iktisadi değişkenler ise zaman içinde artma eğilimindedirler. Trendler özellikle iki zaman serisini karşılaştırıken önemlidir. Eğer zamana göre artan iki zaman serisi alırsanız, ikisi arasında var olmayan bir korelasyon gösterebilirsiniz. Örneğin bir ülkenin GSYH’si sürekli artma eğilimi gösteriyorsa ve siz bu veriyi Afrikaya düşen birikerek artan yağmur suyu oranıyla karşılaştırırsanız var olmayan bir korelasyona ulaşabilirsiniz.
Mevsimsellik
Bir veri seti dönemsel hareket kalıpları gösterebilir. Örneğin, dondurma satışları havalar sıcak olduğunda artıyorsa ve soğuk olduğunda düşüyorsa, dondurma satış sayısı zaman serisinin, yazları artış gösteren, kışları düşen ve bu hareket kalıbını sürekli tekrar eden bir yapıya sahip olduğunu gözlemleyebiliriz.
Seviye
Eğer zaman serisi düz bir çizgi olsaydı, seviyesinin ne olacağını gösterir.
Noise (gürültü)
Zaman serisinde oluşan rastgele dalgalanmaları anlatır. Bu dalgalanmalar rastgeledir ve zaman serisi verileriyle tahmin edilemez ve açıklanamaz.
Hangi modelleri kullanacağız?
ARIMA Modeli
ARIMA, hareketli ortalama (moving avarege, MA) ile entegre otoregresif (autoregression, AR) model anlamına gelir. Bu tür bir tahmin modelde, açıklayı değişkenler (x’ler) tahmin etmek istediğimiz (y) değişkeninin geçmiş tarihteki verileri ve hareketli ortalamalarıdır. ARIMA’nın AR ve MA’inin ortasında kalan I ise, tahmin değişkeninin kaç kere farkı alındığını belirtir.
Örnek vermemiz gerekirse, enflasyonun, gelecek ay ne kadar olacağını tahmin etmek için 2010-2020 yılları arasında CPI (consumere price index, tüketici fiyat endeksi) datasını aylık olarak TUİK’den indirdiğimizi varsayalım. Fiyat verisinin yüzdelik değişimi, enflasyonu verir, yani enflasyon, \(\pi\) formülünü şu şekilde yazabiliriz.
\[ \pi = \frac{CPI_t - CPI_{t-1}}{CPI_{t-1}} \]
Yüzdelik değişim aynı zamanda logaritma yardımıyla da bulunabilir
\[ \pi = \frac{ln(CPI_{t})}{ln(CPI_{t-1})} = ln(CPI_t) - (CPI_{t-1}) \]
eğer y değişkeni (\(ln(CPI_{t})\)) tahmin etmek istersek ve I’yı 1 alırsak, aslında y’nin ilk farkını alacağımızda, enflasyonu (\(\pi\))’yi tahmin etmeye çalışırız. İlk farkı almak, ekonomik verilerde genellikle en büyük sorunumuz olan ortak trend sorununu genellikle ortadan kaldırır. Fiyatlar zamana göre atmaktayken, enflasyon zamana göre artar demeyebiliriz.
SARIMA Modeli
Mevsimsel Otoregresif Entegre Hareketli Ortalama anlamına gelir. ARIMA modelinin, mevsimsel (seasonal) olarak genişletilmiş halidir.
VAR Modeli
Vektör Otoregresyon (VAR) yöntemi, bir zaman serisi yerini, bir çok zaman serisinin birbirlerini açıklayarak ortak bir modelde yazılması halidir.
Quantmod Paketi
Başlangıç olarak, Yahoo Finance, Google Finance ve Federal Reserve Bank of St. Louis’in Federal Rezerv Ekonomik Verileri (FRED) dahil olmak üzere bazı açık kaynaklardan doğrudan mali verileri indirmek için Quantmod paketini indireceğiz. Paket, Jeffry A. Ryan tarafından oluşturulmuştur.
Quantmod paketi yüklendikten sonra, internet bağlantısı olan kullanıcıların Yahoo ve Google Finance’ten günlük hisse senedi verilerine erişmek için tik sembollerini kullanmalarına ve FRED’den 1000’den fazla ekonomik ve finansal zaman serisine erişmek için getSymbols komutunu kullanmalarına olanak tanır. Paket ayrıca, örneğin kapanış fiyatı ve işlem hacminin zaman serisi grafiklerini elde etmek gibi bazı güzel işlevlere de sahiptir.
Quantmod paketini bir seferlik olmak üzere, sağ alt köşede bulunan kutucuktaki, Packages sekmesinden yükleyin.
library(quantmod)
Örnek olarak tesla’nın hisse senedi fiyatlarını indirelim. Yahoo-finance size şirketlerin sembollerini verecektir. Sizde yahoo finance’den tesla’yı ararsanız, sembolünün TSLA olduğunu göreceksiniz. Tesla hisse senedi veri setini indirmek için getSymbols komutunu kullanıyoruz.
getSymbols("TSLA")
## [1] "TSLA"
Artık teslanın 26 Haziran 2010 sonrası günlük verilerine sahibiz. Dataya bir göz atalım. Datanın boyutuna dim() komutuyla bakalım, ve verinin ilk 6 ve son 6 gözlemine bir göz atalım.
dim(TSLA)
## [1] 2948 6
head(TSLA)
## TSLA.Open TSLA.High TSLA.Low TSLA.Close TSLA.Volume TSLA.Adjusted
## 2010-06-29 3.800 5.000 3.508 4.778 93831500 4.778
## 2010-06-30 5.158 6.084 4.660 4.766 85935500 4.766
## 2010-07-01 5.000 5.184 4.054 4.392 41094000 4.392
## 2010-07-02 4.600 4.620 3.742 3.840 25699000 3.840
## 2010-07-06 4.000 4.000 3.166 3.222 34334500 3.222
## 2010-07-07 3.280 3.326 2.996 3.160 34608500 3.160
tail(TSLA)
## TSLA.Open TSLA.High TSLA.Low TSLA.Close TSLA.Volume TSLA.Adjusted
## 2022-03-07 856.300 866.14 804.57 804.58 24164700 804.58
## 2022-03-08 795.530 849.99 782.17 824.40 26799700 824.40
## 2022-03-09 839.480 860.56 832.01 858.97 19728000 858.97
## 2022-03-10 851.450 854.45 810.36 838.30 19549500 838.30
## 2022-03-11 840.200 843.80 793.77 795.35 22272800 795.35
## 2022-03-11 840.197 843.55 793.77 795.35 22345722 795.35
TSLA.Open, hisse senedinin o günkü açılış fiyatı, Close, kapanış, High, en yüksek, Low, en düşük, Adjuste, Ayarlanmış fiyatlarını vermektedir.Volume, Kaç kişinin işlem yaptığını gösterir.
Bu zaman serisinin grafiğini chartSeries() ile gösterebiliriz.
chartSeries(TSLA)
Bu hem zaman serisinin grafiğini, hem işlem yapan kişi sayısını göstermektedir. Aynı grafiği beyaz olarak almak isterseniz
chartSeries(TSLA, theme="white")
kullanabilirsiniz.
Mesela, Türkiye’nin 16-24 yaş arası işsizlik oranının verisini indirmek istiyorsunuz. FRED, bu veri setinin sembolünü size verir. Bu zaman serisi için sembol LRHU24TTTRM156S’dir.
getSymbols("LRHU24TTTRM156S",src="FRED")
## [1] "LRHU24TTTRM156S"
chartSeries(LRHU24TTTRM156S,theme="white")
Farketiyseniz, src kaynağınızın neresi olacağını yazabilmenizi sağlıyor. Hiçbirşey yazmasanız, sembolü Yahoo’da arayacaktır. Diyelim ki, son bir yıl için TL USD değerini istiyorsunuz. getFX("") komutunu her döviz kuru için kullanabilirsiniz.
getFX("USD/TRY",from="2020-01-01")
## [1] "USD/TRY"
chartSeries(USDTRY,theme="white")