0Pricing
Pandas & NumPy Academy · Ders

Kaydırma ve Gecikme Özellikleri

shift() ile gecikmeli ve öncül sütunlar oluşturun, diff() ile dönemler arası değişimi hesaplayın ve yüzde değişimini bulun.

Kaydırma ve Gecikme Özellikleri, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

Gecikme Özellikleri Neden Önemlidir?

Zaman serisi analizinde, önceki zaman adımındaki değer (bir gecikme) çoğu zaman mevcut değerin en iyi tahmin edicilerinden biridir. Örneğin, dünkü satışlar bugünkü satışlar hakkında bilgi verir. Gecikme sütunları oluşturmak, makine öğrenmesi modellerinde özellik olarak geçmiş değerleri veya otokorelasyonun istatistiksel analizinde bu değerleri kullanmanızı sağlar. Pandas, tek bir vektörleştirilmiş çağrıda gecikme özellikleri oluşturmak için shift() yöntemini sunar.

shift(): Değerleri İleriye veya Geriye Taşıma

Series.shift(n), tüm değerleri n konum aşağı taşır (pozitif n bir gecikme oluşturur) ve ilk n satırı NaN ile doldurur. Negatif bir n aktarılması, değerleri yukarı taşır (bir öncül oluşturur ve gelecekteki değerleri mevcut satıra geri kaydırır). İndeks değişmeden kalır; yalnızca değerlerin konumu değiştirilir.

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'sales': [100, 120, 115, 130, 140, 125]},
    index=pd.date_range('2024-01-01', periods=6, freq='D')
)

# Lag-1: yesterday's sales
df['sales_lag1'] = df['sales'].shift(1)
# Lead-1: tomorrow's sales (shifted up)
df['sales_lead1'] = df['sales'].shift(-1)
print(df)

Birden Çok Gecikme Sütunu Oluşturma

Makine öğrenmesi için genellikle aynı anda birkaç gecikme özelliği oluşturursunuz: gecikme-1, gecikme-7 (geçen haftanın aynı günü) ve gecikme-30 (geçen ayın aynı günü). En okunabilir yol, bunları bir döngüde oluşturup her birini yeni bir sütuna atamaktır. Ortaya çıkan DataFrame, modellemeye hazır özgün seriyi ve onun tüm gecikmeli sürümlerini içerir.

for lag in [1, 2, 3, 7]:
    df[f'sales_lag{lag}'] = df['sales'].shift(lag)

print(df.columns.tolist())
# ['sales', 'sales_lag1', 'sales_lag2', 'sales_lag3', 'sales_lag7']

# Drop rows with NaN from the largest lag period
df_model = df.dropna()
print('Ready for modelling, shape:', df_model.shape)

Zamana Dayalı Kaydırma için freq ile shift()

Tamsayı sayıda satıra göre kaydırmak yerine freq parametresini kullanarak bir zaman kaydırmasına göre kaydırabilirsiniz. df.shift(1, freq='ME'), değerleri yerinde tutarak indeksi bir ay sonu ileri kaydırır; yani değerler değişmez, yalnızca indeks değişir. Bu, değerleri yeniden düzenlemeden sabit bir zaman aralığı kadar kaymış iki zaman serisini hizalamak için kullanışlıdır.

monthly = pd.Series(
    [100, 120, 115],
    index=pd.date_range('2024-01-31', periods=3, freq='ME')
)

# Shift the index forward by 1 month (values stay, index moves)
shifted_index = monthly.shift(1, freq='ME')
print('Original index:', monthly.index.tolist())
print('Shifted index: ', shifted_index.index.tolist())
# Original: [2024-01-31, 2024-02-29, 2024-03-31]
# Shifted:  [2024-02-29, 2024-03-31, 2024-04-30]

diff(): Dönemden Döneme Değişim

Series.diff(n), bir değer ile ondan n konum önceki değer arasındaki farkı hesaplar: x[t] - x[t-n]. Bu yöntem, günden güne değişimleri, haftadan haftaya farkları veya yıldan yıla değişimleri hesaplamak için yaygın olarak kullanılır. Çıkarılacak önceki değerler bulunmadığından ilk n satır NaN olur.

df['sales_diff1'] = df['sales'].diff(1)  # day-over-day change
df['sales_diff7'] = df['sales'].diff(7)  # week-over-week change

print(df[['sales', 'sales_diff1']].head())
#             sales  sales_diff1
# 2024-01-01    100          NaN
# 2024-01-02    120         20.0  <- +20 from yesterday
# 2024-01-03    115         -5.0  <- -5 from yesterday

pct_change(): Yüzde Değişimi

Series.pct_change(n), göreli yüzde değişimini hesaplar: (x[t] - x[t-n]) / x[t-n]. Bu yöntem finansal analiz (günlük getiriler), büyüme oranı hesaplama ve mutlak değişimin göreli değişim kadar anlamlı olmadığı her durum için gereklidir. Yüzde puanlarını elde etmek için sonucu 100 ile çarpın.

df['pct_chg'] = df['sales'].pct_change().round(3)
df['pct_chg_7d'] = df['sales'].pct_change(7).round(3)

print(df[['sales', 'pct_chg']].head())
#             sales  pct_chg
# 2024-01-01    100      NaN
# 2024-01-02    120    0.200  <- 20% increase
# 2024-01-03    115   -0.042  <- 4.2% decrease

shift() ile Aritmetik İşlemleri Birleştirme

Türetilmiş zaman özelliklerini hesaplamak için shift() yöntemini aritmetik işlemlerle birleştirebilirsiniz. Örneğin bugünkü değerin geçen haftaki değere oranını, sabit bir başlangıçtan bu yana kümülatif toplamı veya bir yıl önceki değerden farkı hesaplayabilirsiniz. Bunların tümü aynı örüntüyü izler: özgün seriyi kaydırın ve mevcut değerlerle eleman bazında aritmetik işlem yapın.

# Week-over-week growth index (today / last week)
df['wow_ratio'] = (df['sales'] / df['sales'].shift(7)).round(3)

# Deviation from 3-day lag
df['dev_3d'] = df['sales'] - df['sales'].shift(3)

# Is today higher than yesterday? (boolean feature)
df['higher_than_yesterday'] = df['sales'] > df['sales'].shift(1)

print(df[['sales', 'wow_ratio', 'higher_than_yesterday']].head())

Kümülatif Özellikler için cumsum() ve cumprod()

Series.cumsum(), ilk satırdan her satıra kadar olan devam eden toplamı hesaplarken Series.cumprod() kümülatif çarpımı hesaplar. Bunlar kümülatif gelir, kümülatif getiri (bileşik büyüme) ve yılbaşından bugüne toplamları için kullanışlıdır. Herhangi bir bağımsız değişken gerektirmez ve her sayısal Series veya DataFrame sütununda çalışır.

# Cumulative sales (year-to-date total)
df['ytd_sales'] = df['sales'].cumsum()

# Cumulative product: compound growth factor
returns = pd.Series([0.02, -0.01, 0.03, 0.01, -0.005])
df_ret = pd.DataFrame({'daily_return': returns})
df_ret['compound'] = (1 + df_ret['daily_return']).cumprod() - 1
print(df_ret)

Makine Öğrenmesi için Gecikme Özellikleri

Makine öğrenimi için zaman serisi verilerini hazırlarken standart bir özellik mühendisliği adımı, gecikmeli özelliklerden oluşan bir matris oluşturmaktır. Her sütun, hedef değişkenin geçmişteki farklı bir zaman adımındaki değerini temsil eder. Gecikmeleri oluşturduktan sonra, (geçmiş veriler eksik olduğu için başlangıçta ortaya çıkan) NaN içeren satırları kaldırın ve zamansal sırayı koruyarak verileri karıştırmadan eğitim ve test kümelerine ayırın.

def make_lag_matrix(series, n_lags):
    df_lags = pd.DataFrame({'y': series})
    for lag in range(1, n_lags + 1):
        df_lags[f'lag_{lag}'] = series.shift(lag)
    return df_lags.dropna()

lag_df = make_lag_matrix(df['sales'], n_lags=3)
print(lag_df)
# y    lag_1  lag_2  lag_3
# ...  ...    ...    ...

Gruplar İçinde Kaydırma

Verileriniz birden çok varlık içeriyorsa (örneğin tek bir DataFrame içinde birden çok ürün veya bölge), kaydırma işlemlerini her varlığın grubu içinde ayrı ayrı hesaplamanız gerekir. Ürün A'nın ilk satırındaki gecikmenin ürün B'nin son değeri değil NaN olmasını sağlamak için groupby().shift() kullanın. Bu adım uygulanmadan grupların birbirine karıştırılması, sık görülen ve fark edilmesi zor bir veri sızıntısı hatasıdır.

df_multi = pd.DataFrame({
    'product': ['A', 'A', 'A', 'B', 'B', 'B'],
    'sales': [100, 120, 115, 200, 210, 195]
})

# WRONG: lag crosses product boundary
df_multi['lag_wrong'] = df_multi['sales'].shift(1)

# CORRECT: lag within each product
df_multi['lag_correct'] = df_multi.groupby('product')['sales'].shift(1)
print(df_multi)

pct_change İşaretlerini Yorumlama

Pozitif bir pct_change() değeri, geçerli değerin önceki değerden yüksek olduğu anlamına gelir; negatif değer ise daha düşük olduğunu gösterir. Önceki değer sıfırken sıfıra bölme durumuna dikkat edin: geçerli değerin işaretine bağlı olarak sonuç NaN veya inf olabilir. pct_change() sonrasında sonsuz değerleri temizlemek için replace([float('inf'), float('-inf')], float('nan')) kullanın.

import numpy as np

s = pd.Series([0, 100, 50, 200])
chg = s.pct_change()
print(chg)
# 0      NaN  <- no prior value
# 1      inf  <- 0 -> 100 (division by zero)
# 2    -0.5   <- 100 -> 50 (-50%)
# 3     3.0   <- 50 -> 200 (+300%)

# Clean infinite values
chg_clean = chg.replace([float('inf'), float('-inf')], float('nan'))
print(chg_clean)

Kısa Kontrol

Bu derste öğrendiğiniz kaydırma ve gecikmeli özellikler konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: shift(n), değerleri n konum aşağı taşıyarak gecikmeli özellikler oluşturur; diff(n), dönemden döneme mutlak değişimi hesaplar; pct_change(n), göreli yüzde değişimini hesaplar; birden çok grupla çalışırken veri sızıntısını önlemek için groupby().shift() kullanmanız gerekir. Sırada, .dt erişimcisini kullanarak zamansal özellikleri çıkaracağız.

Sıkça Sorulan Sorular

“Kaydırma ve Gecikme Özellikleri” dersi ücretsiz mi?

Evet — “Kaydırma ve Gecikme Özellikleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Kaydırma ve Gecikme Özellikleri” dersinde ne öğreneceğim?

shift() ile gecikmeli ve öncül sütunlar oluşturun, diff() ile dönemler arası değişimi hesaplayın ve yüzde değişimini bulun. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Kaydırma ve Gecikme Özellikleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. DatetimeIndex ve Dönem Aralıkları
  2. Zaman Serilerini Yeniden Örnekleme
  3. Kaydırma ve Gecikme Özellikleri
  4. Zamansal Özellikleri Çıkarma
← Pandas & NumPy Academy Sayfasına Dön