Okullar için Robotik ve Mühendislik · anaokulundan liseye

2. ünite / 8

Temizleme: aykırı değer, eksik veri ve yumuşatma

z-skoru neden kandırılır, Hampel neden yereldir, ara değer ne zaman yalan söyler ve yumuşatmanın bedeli olan gecikme.

Bu ünitenin sonunda

  • Aykırı değeri z-skoru, IQR ve Hampel süzgeciyle bulmak ve farklarını açıklamak
  • Eksik veriyi ileri doldurma ve doğrusal ara değerle doldurmak
  • Hareketli ortalama, medyan süzgeci ve üstel ortalamayı gürültü ve gecikme açısından karşılaştırmak
  • Bir temizleme adımının hatasını gerçek değere karşı ölçmek

Ders notları

Temizleme üç ayrı sorudur ve sırası önemlidir: önce aykırı değerleri bul, sonra onları ve okunamayan örnekleri doldur, en son yumuşat. Sırayı karıştırırsan 85 °C'lik bir sıçrama hareketli ortalamanın içine karışır ve beş örnek boyunca sıcaklığı 15 derece yukarı çeker.

Aykırı değer: üç yöntem

  • z-skoru: ortalamadan k·σ uzaktakileri işaretler. Sorunu maskelemedir: uç değerler ortalamayı ve σ'yı kendileri büyütür. Sera verisinde sıçramalar o kadar uçtadır ki k = 3 yine yedisini de yakalar, ama 30 °C yerine 32 °C okuyan hafif bir hatayı asla göremez.
  • IQR (Tukey çitleri): Q1 − 1,5·IQR altı ve Q3 + 1,5·IQR üstü. Sıralamaya dayandığı için uç değerden etkilenmez; burada da 7 sıçramayı bulur. Ama küreseldir: öğlen 29 °C ile gece 29 °C'yi ayırt edemez.
  • Hampel süzgeci: her noktayı kendi komşuluğunun (±3 örnek) medyanıyla karşılaştırır, ölçek olarak 1,4826·MAD kullanır. Yerel olduğu için günlük döngüyü bilir. k = 4 ile 18 örnek işaretler; yedi sıçramanın hepsi içindedir, kalanı gürültünün keskin olduğu kısa anlardır. Fazladan işaretlemek burada ucuzdur, çünkü silinen nokta komşularından doldurulur.
Hampel: |xi − medyan(pencere)| > k · 1,4826 · MAD(pencere)

Eksik veri

İleri doldurma (son geçerli değer) gerçek zamanlıdır ve cihazda bedavadır, ama uzun boşlukta düz bir basamak çizer. Doğrusal ara değer iki komşu arasına düz çizgi çeker; daha doğrudur ama bir sonraki değeri bilmeyi gerektirir, yani yalnız kayıt bittikten sonra kullanılabilir. Altı saatlik bir boşluğu doğrusal ara değerle doldurmak öğlen tepesini siler: uzun boşluk doldurulmaz, işaretlenir.

Yumuşatma ve gecikme

  • Hareketli ortalama (w): son w örneğin ortalaması. Gürültüyü √w kat azaltır, ama yaklaşık (w − 1)/2 örnek geride kalır.
  • Medyan süzgeci: tek sıçramayı tamamen siler, basamağı bozmadan geçirir.
  • Üstel ortalama (EMA): y += α(x − y). Tek değişken, tek çarpma; mikrodenetleyicinin favorisi.

Simülatör gürültüsüz gerçek sıcaklığı da bildiği için her adımın hatası ölçülebilir. Hampel ve doğrusal ara değerden sonra RMSE yaklaşık 0,25 °Cdir, yani yalnız sensör gürültüsü kalmıştır. Üstüne 5'li hareketli ortalama koyunca RMSE 0,46ya, 5'li medyan 0,51e çıkar: nedensel yumuşatıcıların gecikmesi, sıcaklığın hızlı değiştiği sabah ve akşam saatlerinde gürültüden daha çok hata ekler. Ders: yumuşatma her zaman iyileştirmez; ölçmeden karar verme.

Simülasyon

Temizleme tezgâhı: aykırı değer, eksik veri, yumuşatma

Ham sıcaklığa üç adım uygula: aykırı değerleri bul (z-skoru, IQR, Hampel), boşlukları doldur (ileri doldurma, doğrusal ara değer), yumuşat (hareketli ortalama, medyan, üstel). Simülatör gerçek sıcaklığı da bildiği için her adımın hatası ölçülür.

2. gün: ham (gri), temiz (renkli), gerçek (kesikli); halkalar işaretlenen aykırı değerler1015.52126.53204.779.5314.319.123.8saat°C
18 nokta işaretlendi, gerçek 7 sıçramanın 7 tanesi yakalandı · kalan boşluk 0 Gerçeğe göre RMSE (7 gün): doldurmadan sonra 0,250 °C · yumuşatmadan sonra 0,250 °C

Kod

Cihazda temizleme: aralık denetimi, 3'lü medyan, EMA
// Fiziksel olarak imkânsız değerler hiç kaydedilmez
bool plausible(float t) { return !isnan(t) && t > -10.0f && t < 60.0f; }

// Son üç örneğin medyanı: tek sıçramayı tamamen siler
float median3(float a, float b, float c) {
  return max(min(a, b), min(max(a, b), c));
}

struct Ema {
  float alpha, y = NAN;
  float push(float x) {
    if (isnan(x)) return y;                  // eksikte son tahmini koru
    y = isnan(y) ? x : y + alpha * (x - y);  // tek çarpma, tek değişken
    return y;
  }
};

float w[3] = {NAN, NAN, NAN};
Ema ema{0.3f};

float cleanSample(float raw) {
  w[0] = w[1]; w[1] = w[2]; w[2] = plausible(raw) ? raw : NAN;
  float m = (isnan(w[0]) || isnan(w[1])) ? w[2] : median3(w[0], w[1], w[2]);
  return ema.push(m);
}
Python: Hampel süzgeci ve doğrusal ara değer
import numpy as np

def hampel(x, half=3, k=4.0):
    out = np.zeros(len(x), dtype=bool)
    for i in range(len(x)):
        w = x[max(0, i - half): i + half + 1]
        w = w[~np.isnan(w)]
        if np.isnan(x[i]) or len(w) == 0:
            continue
        m = np.median(w)
        mad = 1.4826 * np.median(np.abs(w - m))  # normal dağılımda sigma
        out[i] = abs(x[i] - m) > k * max(mad, 1e-6)
    return out

def interp_nan(x):
    i = np.arange(len(x)); ok = ~np.isnan(x)
    return np.interp(i, i[ok], x[ok])            # kenarda en yakın değer
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

temizleme.pypython

Çıktı

Çıktı burada görünecek.

Kendin dene

Temizleme tezgâhında aykırı değer yöntemini z-skoru, IQR ve Hampel arasında değiştir; her birinin kaç nokta işaretlediğini ve kaç sıçramayı yakaladığını yaz. Doldurma yöntemini ileri doldurma ve doğrusal ara değer arasında değiştirip RMSE'ye bak. Sonra yumuşatıcıyı hareketli ortalama, medyan ve üstel ortalama arasında değiştir, pencereyi 3'ten 15'e büyüt: RMSE nerede en küçük? Python kodundaki pürüzlülük ve gecikme sütunlarıyla karşılaştır.

Sık yapılan hatalar

  • Önce yumuşatıp sonra aykırı değer aramak: sıçrama ortalamaya karışır ve artık bulunamaz.
  • z-skorunu tek başına kullanmak: uç değerler σ'yı büyütür, orta büyüklükteki hatalar maskelenir.
  • Uzun boşlukları doğrusal ara değerle doldurmak: günlük tepe ya da dip sessizce silinir.
  • Merkezli (geleceğe bakan) yumuşatıcıyı canlı sistemde ya da özellik olarak kullanmak: gelecekten bilgi sızar.
  • Temizlenmiş veriyi ham verinin üstüne yazmak: hangi noktanın değiştirildiği kaybolur.

Yazılım mühendisliği bağlantısı

Temizleme hattı küçük, saf fonksiyonlardan kurulmalıdır: hampel, interpLinear, movingAvg. Her biri tek iş yapar ve ayrı test edilir.

  • Sınır durumlarını test et: tamamen NaN seri, baştaki ve sondaki boşluk, tek elemanlı pencere.
  • Her adımın kaç noktayı değiştirdiğini kaydet (veri soy kütüğü). Sorun çıkınca hangi adımın suçlu olduğunu bulursun.
  • Cihazdaki C++ temizleyici ile Python temizleyicinin aynı girdide aynı çıktıyı verdiğini bir test vektörüyle doğrula.

Kendini sına

  1. z-skoru yöntemi neden büyük sıçramaların yanında orta büyüklükteki hataları kaçırabilir?

  2. Hampel süzgecinin IQR'a göre üstünlüğü nedir?

  3. Cihazda, canlı akışta eksik örneği doldurmak için hangisi kullanılabilir?

  4. Temiz seriye 5'li hareketli ortalama eklenince RMSE 0,25'ten 0,46'ya çıktı. Neden?

Bu üniteden sonra bitirme projesinde

  • Veri ve temizleme raporu: Kendi kaydın ya da sera-sensorleri.csv; temizleme hattı, işaretlenen noktalar, doldurma ve gerçeğe göre RMSE tablosu.

Parçalar ve ilgili sayfalar

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç