Pandas & NumPy Academy · Ders

Enterpolasyon ve İleri Düzey Atama

Zamana dayalı düzgün doldurma için interpolate() kullanın ve ortalama ile medyan atamasının hangi durumlarda uygun olduğunu öğrenin.

4. ders / 413 adım

Enterpolasyon ve İleri Düzey Atama, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. 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.

Enterpolasyonun fillna() İşlevinden Daha İyi Olduğu Durumlar

İleriye ve geriye doğru doldurma, verilerin eğilimini dikkate almadan en yakın bilinen değeri taşır. Enterpolasyon, bilinen değerler arasında düzgün bir geçiş olduğunu varsayarak eksik değerleri tahmin eder; örneğin sıcaklık pazartesi günü 20°C, cuma günü 30°C ise enterpolasyon çarşamba günü için 25°C tahmin eder. Bu yaklaşım sensör verileri, fiyatlar veya nüfus sayıları gibi düzgün değişen sinyallerde daha gerçekçi eksik değerler üretir.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'day': [1, 2, 3, 4, 5],
    'temp': [20.0, np.nan, np.nan, np.nan, 30.0]
})

# Linear interpolation fills gaps smoothly
df['temp_interp'] = df['temp'].interpolate(method='linear')
print(df)
#    day  temp  temp_interp
# 0    1  20.0         20.0
# 1    2   NaN         22.5
# 2    3   NaN         25.0
# 3    4   NaN         27.5
# 4    5  30.0         30.0

interpolate() Yöntemleri

Pandas interpolate() birden çok yöntemi destekler. En yaygın yöntemler şunlardır: 'linear' (bilinen değerler arasında eşit aralıklarla ilerler), 'time' (bir DatetimeIndex ayarlandığında eşit olmayan zaman aralıklarını dikkate alır), 'polynomial' (bir polinom eğrisi uydurur ve bir order bağımsız değişkeni gerektirir) ve 'spline' (parçalı ve düzgün bir polinom kullanır). Linear en güvenli varsayılandır; daha yüksek dereceli yöntemler küçük boşluklarda aşırı uyuma yol açabilir.

import pandas as pd
import numpy as np

s = pd.Series([0, np.nan, np.nan, 8.0])

print('linear:', s.interpolate('linear').tolist())
# [0.0, 2.6666..., 5.3333..., 8.0]

print('polynomial(2):', s.interpolate('polynomial', order=2).tolist())
# [0.0, 2.222..., 5.111..., 8.0]

DatetimeIndex ile time Enterpolasyonu

Series değeriniz, eşit olmayan zaman aralıklarına sahip bir DatetimeIndex içerdiğinde (örneğin yalnızca hafta içi günleri içeriyor ve hafta sonları eksikse), method='time' enterpolasyonu yalnızca konuma göre değil, gerçekte geçen süreyle orantılı olarak yapar. Bu yöntem, takvimdeki boşluk ne olursa olsun her satırı eşit aralıklı kabul eden doğrusal enterpolasyondan daha doğrudur.

import pandas as pd
import numpy as np

# Unequal gaps: Jan 1, Jan 3, Jan 10
idx = pd.to_datetime(['2024-01-01', '2024-01-03', '2024-01-10'])
s = pd.Series([100.0, np.nan, 170.0], index=idx)

# linear treats gaps as equal (position-based)
print(s.interpolate('linear').tolist())  # [100.0, 135.0, 170.0]

# time accounts for actual day count
# Jan 1 to Jan 3 = 2 days, Jan 1 to Jan 10 = 9 days
# fraction: 2/9 of the way from 100 to 170
print(s.interpolate('time').tolist())   # [100.0, 115.55..., 170.0]

Enterpolasyon Kapsamını Sınırlama

ffill() gibi interpolate() da art arda gelen kaç NaN konumunun doldurulacağını sınırlayan bir limit parametresini kabul eder. Sınırı aşan NaN değerleri eksik olarak kalır. Böylece enterpolasyonun, gerçek değerin herhangi bir şey olabileceği çok uzun boşluklar boyunca uygulanması önlenir; uzun boşluklar manuel inceleme için işaretlenmelidir.

import pandas as pd
import numpy as np

s = pd.Series([1.0, np.nan, np.nan, np.nan, np.nan, 10.0])

# Only fill the first 2 NaN positions
filled = s.interpolate('linear', limit=2)
print(filled.tolist())
# [1.0, 2.8, 4.6, NaN, NaN, 10.0]

Ortalama mı, Medyan Eksik Değer Ataması mı Seçilmeli?

Ortalama ve medyan ile eksik değer ataması basit yöntemlerdir, ancak önemli ödünleşimleri vardır. Ortalama aykırı değerlere duyarlıdır; birkaç çok büyük değer ortalamayı yükselterek onu gelir veya konut fiyatları gibi sağa çarpık dağılımlar için kötü bir doldurma değerine dönüştürür. Medyan aykırı değerlere karşı dayanıklıdır ve çarpık sütunlar için daha iyi bir seçimdir. Ortalamayı yalnızca verileriniz yaklaşık olarak simetrikse ve aşırı aykırı değerler içermiyorsa kullanın.

import pandas as pd
import numpy as np

# Skewed income data with an outlier
income = pd.Series([30000, 35000, 32000, 1_000_000, np.nan])

print('Mean:  ', income.mean())    # ~274000 — pulled by outlier
print('Median:', income.median())  # ~33500 — robust choice

# Prefer median for skewed data
filled = income.fillna(income.median())
print(filled.tolist())
# [30000, 35000, 32000, 1000000, 33500.0]

KNN Eksik Değer Ataması Kavramı

K-En Yakın Komşu (KNN) eksik değer ataması, eksik bir değeri, eksik olmayan özellikler arasındaki uzaklıkla ölçülen en benzer k satırın ortalamasıyla (veya ağırlıklı ortalamasıyla) değiştirir. Bu çok değişkenli bir stratejidir; doldurma işlemini yönlendirmek için diğer sütunlardaki bilgileri kullanır. Özellikler ilişkili olduğunda, tek sütun ortalamasıyla eksik değer atamasından daha doğrudur.

Scikit-learn KNNImputer, NumPy dizileri ve Pandas DataFrames ile doğrudan bütünleşir.

import pandas as pd
import numpy as np
from sklearn.impute import KNNImputer

df = pd.DataFrame({
    'age': [25, 35, np.nan, 45],
    'income': [50000, 70000, 60000, np.nan]
})

imputer = KNNImputer(n_neighbors=2)
df_imputed = pd.DataFrame(
    imputer.fit_transform(df),
    columns=df.columns
)
print(df_imputed.round(1))
#     age   income
# 0  25.0  50000.0
# 1  35.0  70000.0
# 2  30.0  60000.0   <- filled from neighbours
# 3  45.0  65000.0   <- filled from neighbours

IterativeImputer ile Çoklu Eksik Değer Ataması

Çoklu eksik değer ataması, istatistiksel araştırmalarda eksik verileri ele almak için altın standarttır. Scikit-learn IterativeImputer, MICE (Zincirleme Denklemlerle Çoklu Eksik Değer Ataması) yaklaşımını uygular: eksik değer içeren her sütunu diğer sütunların bir işlevi olarak modeller ve değerler yakınsayana kadar eksik değer atamasını yineler. Bu yöntem, özellikler arası ilişkileri tek sütunlu stratejilerden daha iyi yakalar.

import pandas as pd
import numpy as np
from sklearn.experimental import enable_iterative_imputer  # noqa
from sklearn.impute import IterativeImputer

df = pd.DataFrame({
    'x1': [1, 2, np.nan, 4, 5],
    'x2': [2, np.nan, 6, 8, 10],
    'y':  [3, 5, 7, np.nan, 11]
})

imp = IterativeImputer(max_iter=10, random_state=0)
df_filled = pd.DataFrame(imp.fit_transform(df), columns=df.columns)
print(df_filled.round(2))

Eksik Veriler için Gösterge Sütunları

Bir değere eksik değer ataması yapıldığını gizlemek yerine, eksik değer atamasından önce hangi satırlarda eksik değer bulunduğunu belirten bir ikili gösterge sütunu eklemek iyi bir uygulamadır. Bu, sonraki modellerin eksiklik örüntüsünden kendilerinin öğrenmesini sağlar; bazen bir değerin eksik olup olmaması, değerin kendisi kadar öngörücü olabilir.

import pandas as pd
import numpy as np

df = pd.DataFrame({'salary': [50000, np.nan, 70000, np.nan, 90000]})

# Add indicator before filling
df['salary_was_missing'] = df['salary'].isna().astype(int)

# Then fill
df['salary'] = df['salary'].fillna(df['salary'].median())
print(df)
#    salary  salary_was_missing
# 0  50000.0                   0
# 1  70000.0                   1
# 2  70000.0                   0
# 3  70000.0                   1
# 4  90000.0                   0

Eksik Değer Ataması ve Veri Sızıntısı

Makine öğrenmesi işlem hatlarında kritik bir kural vardır: eksik değer atama istatistiklerini (ortalama, medyan, mod) yalnızca eğitim kümesi üzerinde hesaplayın, ardından aynı değerleri test kümesine uygulayın. Bölme işleminden önce tüm veri kümesi üzerinde istatistik hesaplamak veri sızıntısına neden olur; model eğitim sırasında test verilerini dolaylı olarak görür ve başarım tahminleri olduğundan yüksek çıkar. Eksik değer atayıcıları her zaman eğitim verileri üzerinde eğitin ve hem eğitim hem de test verilerini dönüştürün.

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'feature': [1, 2, np.nan, 4, np.nan, 6, 7, 8]})
train, test = train_test_split(df, test_size=0.25, random_state=0)

# Fit ONLY on training data
imp = SimpleImputer(strategy='mean')
train['feature'] = imp.fit_transform(train[['feature']])

# Transform test using training statistics
test['feature'] = imp.transform(test[['feature']])
print('Train mean used:', imp.statistics_[0])

Eksik Değer Atama Stratejilerini Görsel Olarak Karşılaştırma

Birden çok eksik değer atama yöntemi uyguladıktan sonra, özgün ve eksik değer atanmış sütunların dağılımını yan yana çizerek etkilerini karşılaştırın. İyi bir eksik değer ataması, özgün dağılımın şeklini (ortalama, varyans, çarpıklık) mümkün olduğunca korumalıdır. Ortalama ile eksik değer ataması dağılımı daraltır; KNN ve MICE ise dağılımı genellikle daha iyi korur.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
original = np.random.exponential(scale=5, size=200)
with_nan = original.copy()
with_nan[np.random.choice(200, 40, replace=False)] = np.nan

s = pd.Series(with_nan)

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
s.dropna().hist(ax=axes[0], bins=20, title='Original (no NaN)')
s.fillna(s.mean()).hist(ax=axes[1], bins=20, title='Mean-imputed')
plt.tight_layout()
plt.savefig('imputation_comparison.png')
print('Saved comparison chart')

Doğru Eksik Değer Atama Stratejisini Seçme

Her durumda en iyi olan tek bir eksik değer atama stratejisi yoktur; doğru seçim bağlama bağlıdır. Eksik değer oranının düşük olduğu basit tek değişkenli durumlarda mean/median kullanın. Sabit eğilimlere sahip zaman serilerinde ffill/bfill kullanın. Özellikler ilişkili olduğunda ve bu ilişkilerden yararlanmak istediğinizde KNN veya IterativeImputer kullanın. Eksik değerin açık bir iş anlamı varsa alan sabitlerini (örneğin mevcut olmama durumu için 0, bilinmeyen için -1) kullanın. Seçiminizi her zaman belgeleyin.

# Decision guide (no runnable code)
#
# Missing < 5%  AND data is MCAR?  -> Mean/median fill is fine
# Time series with stable trend?   -> ffill() with limit
# Features are correlated?         -> KNNImputer or IterativeImputer
# Categorical column?              -> Mode fill or 'Unknown' sentinel
# Going into ML model?             -> Add indicator column + fill
# Research / publication quality?  -> Multiple imputation (MICE)
print('Strategy selected based on context')

Hızlı Kontrol

Enterpolasyon ve gelişmiş eksik değer atama konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: interpolate(), bilinen değerler arasında düzgün bir eğilim olduğunu varsayarak eksik değerleri tahmin eder; method='time', eşit olmayan DatetimeIndex aralıklarını ele alır; KNNImputer ve IterativeImputer gibi gelişmiş stratejiler, doldurma işlemlerini yönlendirmek için diğer sütunları kullanır. Veri sızıntısını önlemek için eksik değer atamasından önce her zaman gösterge sütunları ekleyin ve istatistikleri yalnızca eğitim kümesi üzerinde hesaplayın. Sırada DataFrame sütun veri türlerini inceleyip dönüştüreceğiz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Enterpolasyon ve İleri Düzey Atama” dersi ücretsiz mi?

Evet — “Enterpolasyon ve İleri Düzey Atama” 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.

“Enterpolasyon ve İleri Düzey Atama” dersinde ne öğreneceğim?

Zamana dayalı düzgün doldurma için interpolate() kullanın ve ortalama ile medyan atamasının hangi durumlarda uygun olduğunu öğrenin. 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 4. dersidir.

“Enterpolasyon ve İleri Düzey Atama” 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. Eksik Değerleri Belirleme
  2. Eksik Değerleri Kaldırma
  3. Eksik Değerleri Doldurma
  4. Enterpolasyon ve İleri Düzey Atama
← Pandas & NumPy Academy Sayfasına Dön