Zaman Serisi Verileriyle Çalışırken Sık Yapılan 5 Hata

Zaman serisi verisiyle çalışan veri bilimciler sıkça aynı tuzaklara düşüyor. Bu hatalar modelin doğruluğunu ciddi şekilde etkiliyor. Beş yaygın sorunu adım adım ele alalım ve çözümlerini görelim.

Zaman serilerinde boşluklar normal görünse de, onları basitçe silmek ya da ilk değerle doldurmak hatalıdır. Doğru yöntem, zaman yapısını koruyarak interpolasyon yapmaktır.

1import pandas as pd
2import numpy as np
3
4# Eksik verili zaman serisi
5df = pd.DataFrame({
6'tarih': pd.date_range('2024-01-01', periods=10, freq='D'),
7'deger': [10, 20, np.nan, 30, np.nan, 40, 50, 60, np.nan, 70]
8})
9
10# Yanlış: sadece silmek
11# df = df.dropna()
12
13# Doğru: lineer interpolasyon
14df['deger'] = df['deger'].interpolate(method='linear')
15print(df)

Çıktı:

1tarih deger
20 2024-01-01 10.0
31 2024-01-02 20.0
42 2024-01-03 25.0
53 2024-01-04 30.0
64 2024-01-05 35.0
75 2024-01-06 40.0
86 2024-01-07 50.0
97 2024-01-08 60.0
108 2024-01-09 65.0
119 2024-01-10 70.0

Bir serinin artış eğilimi (trend) ile tekrarlayan desen (sezonluk) farklı şeylerdir. Bunları ayırmadan model kurmak yanlış sonuç verir.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1from statsmodels.tsa.seasonal import seasonal_decompose
2
3# Örnek zaman serisi (trend + sezonluk içeriyor)
4df['deger'] = df['deger'] + np.arange(len(df)) * 2 + 5 * np.sin(np.arange(len(df)))
5df = df.set_index('tarih')
6
7# Bileşenleri ayır
8decomposition = seasonal_decompose(df['deger'], model='additive', period=3)
9print("Trend:")
10print(decomposition.trend)
11print("\nSezonluk:")
12print(decomposition.seasonal)

Farklı ölçekteki veriler makine öğrenmesi modellerini yanıltır. Normalizasyon veya standardizasyon şarttır.

1from sklearn.preprocessing import StandardScaler
2
3scaler = StandardScaler()
4df['deger_scaled'] = scaler.fit_transform(df[['deger']])
5print(df[['deger', 'deger_scaled']].head())

Çok karmaşık modeller geçmiş verilere mükemmel uyar ama geleceği tahmin edemez. Basit modellerle başla, gerekirse karmaşıklaştır.

Pandas'ta tarih sütununu `datetime` tipine dönüştürmezsen, zaman serisi işlemleri başarısız olur.

1# Yanlış
2df_yanlış = pd.DataFrame({'tarih': ['2024-01-01', '2024-01-02'], 'deger': [10, 20]})
3print(type(df_yanlış['tarih'].iloc[0])) # str
4
5# Doğru
6df_dogru = pd.DataFrame({'tarih': pd.to_datetime(['2024-01-01', '2024-01-02']), 'deger': [10, 20]})
7print(type(df_dogru['tarih'].iloc[0])) # datetime64[ns]

Bu beş hatayı bilmek zaman serisi analizinde başarı oranını önemli ölçüde artırır. Her yeni projeye başlamadan önce veriyi bu açılardan kontrol et.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz