Veri bilimi alanında sıkça karşılaşılan veri tiplerinden biri zamana bağlı değişkenler içeren verilerdir. Belirli zaman aralıklarında ölçülmüş verileri analiz etmek kullanılan en uygun yöntemlerin başında zaman serisi analizleri yer almaktadır. Veriden anlamlı bilgi çıkartmak ve gelecek zaman periyotları için tahmin yapabilmek için kullanılan zaman serisi kavramının tanımı ile başlayalım.
Belirli bir zaman aralığı boyunca ölçülen bir değişkenin sıralı bir şekilde kaydedildiği istatistiksel bir verinin analizi yöntemidir. Bu değişken; günlük hava sıcaklığı, aylık satışlar, yıllık hisse senedi, saatlik trafik yoğunluğu gibi birçok farklı şey olabilir. Zaman serileri günlük hayatta en sık karşılaşılan veri türlerinden biridir.
Zaman serileri verileri, zamana bağlı bir değişkenin değerlerini içerir ve genellikle eşit zaman aralıkları ile ölçülür. Bir örnek olması açısından, yaklaşık 40 yıldır tutulmakta olan atmosferdeki karbondioksit miktarının gözlem verilerine bakalım:
data = sm.datasets.co2.load_pandas()
y = data.data
Görüldüğü gibi seri, zamanlar (yıllara göre aylık bazda) ve gözlemlerden (karbondioksit ölçüm miktarından) oluşmaktadır.
Gelecekteki değerleri tahmin etmek, belirli bir süre boyunca gerçekleşen değişiklikleri analiz etmek, veriler arasındaki ilişkileri keşfetmek, anormal verileri belirlemek, bir olayın etkisini ölçmek gibi amaçlar için kullanılabilir.
Zaman serileri analizi pek çok disiplinde kullanılır. Bunlardan birkaçına örnek verecek olursak:
Sosyal bilimlerde; nüfus sayımı, suç oranları, oy oranları, sağlık verileri gibi değişkenleri incelemek için kullanılır. Bu analizler sosyal trendleri ve desenleri anlamak için kullanılır.
Ekonomi ve finans alanında; hisse senedi fiyatları, faiz oranları, döviz kurları, enflasyon oranları, işsizlik oranları gibi değişkenleri incelemek için kullanılır.
Meteorolojide; hava sıcaklığı, rüzgar hızı, nem oranı, yağış gibi hava değişkenlerinin zaman içindeki değişimlerini incelemek için kullanılır.
Mühendislik alanında; titreşim verileri, sinyal verileri, akış hızı gibi farklı değişkenlerin analizi için kullanılır. Bu analizler kalite kontrol, hasar tespiti, arıza teşhisi gibi farklı amaçlar için kullanılabilir.
Endüstriyel sistemlerde; üretim miktarı, verimlilik oranları, enerji tüketimi, kalite kontrol verileri gibi farklı değişkenlerin analiziz için kullanılır. Bu analizler endüstriyel süreçlerin iyileştirilmesi ve verimliliğin arttırılması için kullanılabilir.
Zaman serisi analizlerinde durağanlık, mevsimsellik, trend ve döngüsellik gibi kavramlar bulunmaktadır. Bu bileşenler basitçe, zaman serisinin değişimine neden olan faktörler olarak düşünülebilir. Veriye uygulanacak yöntemi etkilediklerinden dikkatli bir şekilde incelenemeleri gerekmektedir. Şimdi bu bileşenlere göz atarak birer Python uygulaması yapalım.
Durağanlık (stationarity):
Serinin istatistiksel özelliklerinin zaman içinde değişmemesidir. Yani serinin ortalaması, varyansı ve kovaryansı zaman boyunca değişmez. Durağan bir zaman serisi, tahmin modellerinin daha doğru ve güvenilir olmasını sağlar.
Durağan bir zaman serisinin grafiği aşağıdaki gibidir.
“statsmodels” kütüphanesi içinden C02 veri seti üzerinden durağanlık kontrolünü sağlayalım. Bunun için hipotez testi kuralım ve p-value değerine göre serinin durağan olup olmadığına bakalım.
import statsmodels.api as sm
df = sm.datasets.co2.load_pandas()
y = data.df
train = y[: ’1997-12-01’]
test = y[‘1998-01-01’ :]
H0: seri durağan değildir.
p-value değeri 0.05 ten küçük ise seri durağandır.
def is_stationary(y):
p_value = sm.tsa.stattools.adfuller(y)[1]
if p_value < 0.05:
print(F”Seri Durağandır. (p-value: {round(p_value, 3)})”)
else:
print(F”Seri Durağan Değildir. (p-value: {round(p_value, 3)})”)
is_stationary(y)
kodumuzu çalıştırdığımızda çıktımız şöyle olmakta:
Seri Durağan Değildir. (p_value: 0.999)
Serinin grafiğine bakalım:
y.plot(figsize=(15,6))
plt.show()
Grafikten de serinin durağan olmadığı gözlemlenmektedir.
Zaman serisindeki yavaş, uzun vadeli değişimleri ifade eder. Bir serinin uzun bir süre boyunca nispeten daha yüksek veya daha düşük değerlere hareketini gösteren verilerdeki bir modeldir. Başka bir deyişle, zaman serisinde artan veya azalan bir eğim olduğunda bir trend gözlenir.
Aşağıdaki grafikte, yolcu sayısı zaman serisinin yukarı yönlü bir trende sahip olduğunu gözlemlemekteyiz.
Zaman serisinin belirli bir davranışı belirli periyotta tekrar etmesi durumuna denir. Mevsimsellik, trend bileşeninden bağımsızdır ve bazen durağanlık analizinde dikkate alınması gerekebilir. Bayramlar, yılbaşı ve sevgililer günü gibi özel günlerde tüketicilerin satın alma davranışındaki değişikliklerde gözlemlenir.
Yine CO2 zaman serisi verisi üzerinden giderek trend ve mevsimselliği inceleyelim:
def zs_bilesenleri(y,model=”additive”)
result=seasonal_decompose(y, model=model)
fig, axes = plt.subplots(2,1, sharex=True, sharey=False)
fig.set_figheight(10)
fig.set_figwidth(15)
axes[0].plot(result.trend, label=’Trend’)
axes[0].legend(loc=’upper left’)
axes[1].plot(result.seasonal, ‘g’, label=’Seasonality & Mean:’ + str(round(result.seasonal.mean(),4)))
axes[1].legend(loc=’upper left’)
plt.show(block=True)
zs_bilesenleri(y)
Bu fonksiyonun çıktısına baktığımızda aşağıdaki grafikleri elde etmiş oluruz. İlk grafik serideki trendi gösterirken ikinci grafik mevsimselliği göstermektedir.
Dış etkilerden kaynaklanan uzun vadeli dalgalanmaları temsil eder. Kısmi mevsimsellik barındırır ancak yapısal nedenlerle konjonktürel etkilerle değişir. Mevsimsel döngüler bir takvim yılı içinde gözlenirken, düşük işsizlik oranları nedeniyle artan satışlar gibi döngüsel etkiler bir takvim yılından daha uzun zaman dilimlerini kapsayabilir.
Dalgalanmalar sabit bir frekansta değilse, döngüseldir; sıklık değişmiyorsa ve takvimin bazı yönleriyle ilişkiliyse, model mevsimseldir. Genel olarak döngülerin ortalama uzunluğu, mevsimsel modelin uzunluğundan daha uzundur ve döngülerin büyüklükleri, mevsimsel modellerin büyüklüklerinden daha değişken olma eğilimindedir.
Böylece zaman serisi kavramını ve zaman serilerinin bileşenlerini Python uygulaması ile ele almış olduk. Yazı serisinin gelecek yazılarında zaman serilerinde smoothing ve zaman serisi analizlerinde istatistiksel yöntemler başlıklarını inceleyeceğiz.
Zaman serileri hakkında daha fazla bilgi edinmek ve uygulamalar ile bilginizi pekiştirmek isterseniz Miuul’un bünyesinde yer alan Zaman Serileri eğitimine göz atabilir, Veri Bilimi Kariyer yolculuğunu inceleyebilirsiniz.
Kaynaklar
statsmodels, Mauna Loa weekly atmospheric CO2 data
QuantInsti, Stationarity in time series analysis explained using python
Analytics India Magazine, Comprehensive guide to deseasonalizing time series
Wikipedia, Time series
Veri Bilimi Okulu, Prophet ile Python’da zaman serisi analizi
simplilearn, A complete guide to get a grasp of time series analysis
Analytics Vidhya, Learning time series analysis & modern statistical models
Machine Learning Mastery, How to identify and remove seasonality from time series data with Python