
Merhaba herkese,
Bugün bir zaman serisi içerisindeki trendin varlığından bahsedebilmemiz için kullanabileceğimiz istatiksel bir test yapısından bahsedeceğiz.Süreçler ve zaman serileri birden fazla testler ile test edilebilir ama bizz bugün ki konumuzda Mann-Kendall Trend Test testinden bahsedeceğiz.Öncelikle bazı kavramların tanımlamalarını kısa kısa yapalım.
Zaman Serisi Nedir?
Zaman serisi, zaman içinde belirli bir sıraya göre kaydedilen veri noktalarının dizisidir. Zaman serisi verileri genellikle düzenli zaman aralıklarında toplanır ve belirli bir değişkenin zaman içindeki dinamiklerini analiz etmeyi amaçlar. Örnekler arasında hisse senedi fiyatları, sıcaklık ölçümleri, enerji tüketimi, ekonomik göstergeler ve çok daha fazlası bulunur. Zaman serileri iki ana bileşenden oluşur: bağımlı değişken (gözlenen veri) ve bağımsız değişken (zaman).Örnek bir zaman serisi gösterecek olursak, 3 günlük bir zaman serisindeki yağış miktarları:
Kod:
Tarih Yağış(metreküp)
01.01.2024 14
02.01.2024 15
03.01.2024 16
Zaman serisi analizinin temel amacı bu tür verilerdeki desenleri, eğilimleri ve mevsimselliği anlamak ve gelecekteki değerleri tahmin etmektir.
Trend Nedir?
Trend,verinin zaman içinde gösterdiği genel eğilimi ifade eder. Trend,zaman serisinin uzun vadeli bileşeni olup veri noktalarının genel olarak artma ya da azalma eğiliminde olup olmadığını gösterir. Bir zaman serisinde trend genellikle daha geniş bir zaman diliminde gözlemlenen, veri setindeki sürekli bir yönelimi ifade eder ve kısa vadeli dalgalanmaların (mevsimsellik veya gürültü) ötesinde bir yapıyı işaret eder.
Mann-Kendall Trend Test Nedir?
Mann-Kendall Trend Testi, bir zaman serisinde monotonik (tek yönlü) bir trendin varlığını tespit etmek için kullanılan parametrik olmayan bir istatistiksel testtir. Test zaman serisi verilerinin bağımsız olup olmadığını ve bir artış veya azalma trendi gösterip göstermediğini belirlemek için kullanılır. Bu yöntem, özellikle çevre bilimlerinde, meteoroloji verilerinde, hidrolojide ve diğer bilimsel çalışmalarda zaman serilerindeki trendleri incelemek için popülerdir.
Testin Amacı Nedir?
Mann-Kendall testi, bir zaman serisindeki belirgin bir trendi tespit etmek amacıyla geliştirilmiştir. Temel olarak şu iki hipotez test edilir:
- H0 (Null Hipotezi): Zaman serisinde trend yoktur (veriler rastgele dağılmıştır)
- H1 (Alternatif Hipotez): Zaman serisinde anlamlı bir artış veya azalış trendi vardır
Bu test monotonik trendleri tespit eder, yani zaman içinde sürekli artan veya azalan bir eğilim olup olmadığını belirler. Ancak mevsimsel veya döngüsel değişiklikleri göz önüne almaz sadece tek yönlü değişimleri değerlendirir.
Şimdi beraber bir kaç örnek yapalım.
Örnekler için popüler kütüphanelerden numpy, pandas, ve istatistiksel analiz için pyMannKendall kullanacağız. Kütüphaneleri yüklemek için şu komutu yazalım:
Şimdi beraber bir kaç örnek yapalım.
Örnekler için popüler kütüphanelerden numpy, pandas, ve istatistiksel analiz için pyMannKendall kullanacağız. Kütüphaneleri yüklemek için şu komutu yazalım:
Kod:
pip install numpy pandas pymannkendall
Şimdi rastgele üretilen zaman serisi verileri üzerinde Mann-Kendall testi uygulayacağız.Bunun için kütüphanelerimizi import edelim.

Şimdi rastgele bir artış trendi içeren zaman serisi oluşturalım.

Şimdi testi uygulayalım
Grafik:

Metinsel çıktı:
Metinsel çıktıdaki değerler ne anlama geliiyor

Şimdi rastgele bir artış trendi içeren zaman serisi oluşturalım.

Şimdi testi uygulayalım
Grafik:

Metinsel çıktı:
Kod:
Mann_Kendall_Test(trend='increasing', h=np.True_, p=np.float64(0.0), z=np.float64(14.548100507673665), Tau=np.float64(0.9870707070707071), s=np.float64(4886.0), var_s=112750.0, slope=np.float64(0.8808355763545836), intercept=np.float64(-4.83149422998013))
Metinsel çıktıdaki değerler ne anlama geliiyor
- Trendin Yönü: Artış veya azalış yönü.
- p-Değeri: Trendin anlamlı olup olmadığını gösterir.
- Z Değeri: Mann-Kendall Z istatistiği.
Peki bizm metinsel çıktığımızdaki değerler ne anlama geliyor?
- Trend: Artan bir trend var (increasing).
- p-Değeri: 0.001, bu da %1'den küçük olduğu için trendin anlamlı olduğunu gösteriyor.
- Z Değeri: Z değeri 3.10, bu da pozitif bir eğilim olduğunu doğruluyor.
Daha da pekiştirmek için bir örnek daha yapalım bu örnekte sıcaklık verisi gibi çevresel veriler üzerinde bu testi uygulayalım. Gerçek veri olarak kullanım yapmayacağımız için burada sadece bir simülasyon uyguluyorum.

Grafik:

Metinsel çıktı:
Peki bu çıktının yorumunu siz yapabilir misiniz? Konunun altına cevaplarınızı bekliyorum
Gerçek verilerle bir Mann-Kendall Trend Testi yapmak için genellikle çevresel veya finansal veriler kullanılır. Örneğin, küresel sıcaklık artışını analiz etmek için dünya çapında kaydedilen ortalama sıcaklık verilerini kullanabiliriz. Bu tür verileri bulabileceğiniz yerlerden biri NASA'nın veri setleri veya çevresel kuruluşların sunduğu açık veri kaynaklarıdır. Ancak burada bir simülasyon yerine gerçek veri kullanarak nasıl çalışacağımızı göstereceğim.İlk olarak aşağıdaki kütüphaneleri indirelim

Grafik:

Metinsel çıktı:
Kod:
Mann_Kendall_Test(trend='increasing', h=np.True_, p=np.float64(0.006075596089704316), z=np.float64(2.7436733479467335), Tau=np.float64(0.26857142857142857), s=np.float64(329.0), var_s=14291.666666666666, slope=np.float64(0.013820436137385015), intercept=np.float64(-0.004554192596058215))
Peki bu çıktının yorumunu siz yapabilir misiniz? Konunun altına cevaplarınızı bekliyorum
Gerçek verilerle bir Mann-Kendall Trend Testi yapmak için genellikle çevresel veya finansal veriler kullanılır. Örneğin, küresel sıcaklık artışını analiz etmek için dünya çapında kaydedilen ortalama sıcaklık verilerini kullanabiliriz. Bu tür verileri bulabileceğiniz yerlerden biri NASA'nın veri setleri veya çevresel kuruluşların sunduğu açık veri kaynaklarıdır. Ancak burada bir simülasyon yerine gerçek veri kullanarak nasıl çalışacağımızı göstereceğim.İlk olarak aşağıdaki kütüphaneleri indirelim
Kod:
pip install seaborn
pip install pandas_datareader
pip install yfinance #Yahoo Finance Api için bunu yükklemeliyiz.
Daha sonra Yahoo Finance'ten Apple (AAPL) hissesi için 14 yıllık veri indirelim. Bunun için yfinance kütüphanesini kullanacağız.Ben direkt kodun tamamını vereyim.

Çıktı:

Peki bu grafiğimize bir trend çizgisi eklyelim istersek

Çıktı:

Peki bu grafiğimize bir trend çizgisi eklyelim istersek
Python:
from scipy.stats import linregress
#Lineer regresyon işlemi
slope, intercept, r_value, p_value, std_err = linregress(df_close.index.map(pd.Timestamp.toordinal), df_close.values)
#Trend çizgisi ile görselleştirme
plt.figure(figsize=(10,6))
sns.lineplot(x=df_close.index, y=df_close.values, marker='o', label="AAPL Kapanış Fiyatı")
plt.plot(df_close.index, intercept + slope * df_close.index.map(pd.Timestamp.toordinal), 'r', label=f'Trend Çizgisi (Eğim: {slope:.3f})')
plt.title("Apple Hisse Senedi Kapanış Fiyatları ve Trend Çizgisi (2010-2020)", fontsize=14)
plt.xlabel("Yıl", fontsize=12)
plt.ylabel("Kapanış Fiyatı (USD)", fontsize=12)
plt.grid(True)
plt.legend()
plt.show()
- Apple hisse senedi verilerini indirdik (yfinance kullanarak).
- Mann-Kendall trend testi uyguladık ve verilerde anlamlı bir trend olup olmadığını analiz ettik.
- Son olarak lineer regresyon kullanarak trendin eğimini hesapladık ve grafikte gösterdik.






