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 pd2import numpy as np34# Eksik verili zaman serisi5df = 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})910# Yanlış: sadece silmek11# df = df.dropna()1213# Doğru: lineer interpolasyon14df['deger'] = df['deger'].interpolate(method='linear')15print(df)Çıktı:
1tarih deger20 2024-01-01 10.031 2024-01-02 20.042 2024-01-03 25.053 2024-01-04 30.064 2024-01-05 35.075 2024-01-06 40.086 2024-01-07 50.097 2024-01-08 60.0108 2024-01-09 65.0119 2024-01-10 70.0Bir serinin artış eğilimi (trend) ile tekrarlayan desen (sezonluk) farklı şeylerdir. Bunları ayırmadan model kurmak yanlış sonuç verir.
1from statsmodels.tsa.seasonal import seasonal_decompose23# Ö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')67# Bileşenleri ayır8decomposition = 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 StandardScaler23scaler = 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])) # str45# Doğru6df_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.
0 yorum