0Pricing
Coding Interview Prep · Ders

Kayan Pencerelerde Hareketli Ortalamalar

BETWEEN PRECEDING AND CURRENT ROW ile N dönemlik hareketli ortalamalar hesaplayın.

Kayan Pencerelerde Hareketli Ortalamalar, CoddyKit'te ücretsiz bir Coding Interview Prep 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, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Hareketli Ortalama Sorusu

Analistlere bu soru sürekli sorulur: "Gelirin 7 günlük hareketli ortalamasını hesaplayın." Hareketli (veya kayan) ortalama, her noktayı yakınındaki günlerle birlikte ortalayarak gürültülü günlük veriyi yumuşatır.

Mülakat düzeyinde yanıt, açıkça belirtilmiş kayan çerçeveye sahip bir pencere AVG'sidir. Temel beceri, pencerenin sıralama boyunca doğru biçimde kayması için çerçeve sınırlarını seçmektir.

Temel Kalıp

Hareketli ortalama, AVG(value) OVER (ORDER BY ... ROWS BETWEEN n PRECEDING AND CURRENT ROW) biçimindedir. Çerçeve kayar: her satırda geçerli satırı ve önceki n satırı kapsar.

Günlük satırlar üzerindeki 7 günlük pencere için 6 satır geri gidip geçerli satırı da eklersiniz; böylece toplam 7 satır elde edilir. Buradaki bir eksik ya da fazla sayım, mülakatçıların yakaladığı en yaygın hatadır.

SELECT
  sale_date,
  amount,
  AVG(amount) OVER (
    ORDER BY sale_date
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  ) AS moving_avg_7d
FROM daily_sales;

Pencere Boyutunu Doğru Saymak

Pencere boyutu preceding + 1'e eşittir ( +1, geçerli satırdır). Dolayısıyla:

  • 3 satırlık pencere: ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
  • 7 satırlık pencere: ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  • 30 satırlık pencere: ROWS BETWEEN 29 PRECEDING AND CURRENT ROW

Bu aritmetiği mülakatta yüksek sesle söyleyin; böylece kurul, tahminde bulunmadığınızı ve bilinçli hareket ettiğinizi görür.

Merkezlenmiş ve Geriye Dönük Pencereler

Yukarıdaki örnek geriye dönük bir ortalamadır: yalnızca geçmişe bakar; bu nedenle nedenseldir ve tahmin panoları için güvenlidir.

Merkezlenmiş bir ortalama her iki yöne bakar; örneğin 7 satırlık merkezlenmiş bir pencere için ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING kullanılır. Merkezlenmiş pencereler daha simetrik bir yumuşatma sağlar; ancak gerçek zamanlı olarak en yeni satırlar için hesaplanamaz. Kullanım senaryosunun hangisine ihtiyaç duyduğunu belirtin.

SELECT
  sale_date,
  AVG(amount) OVER (
    ORDER BY sale_date
    ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
  ) AS centered_avg_7
FROM daily_sales;

Pencere Sınırındaki Etki

Verilerin en başında tam pencere henüz mevcut değildir. 7 günlük geriye dönük ortalamanın 1. satırında yalnızca 1 satır kullanılabildiği için AVG yalnızca bu tek değerin ortalamasını alır.

Bu nedenle ilk satırlar, daha az satır üzerinden hesaplanan bir "alışma dönemi" ortalaması gösterir. Mülakatçılar bunun nasıl ele alınacağını sorar. İki seçenek vardır: kısmi pencereyi kabul etmek veya tam bir sayı gerektirerek ilk satırları gizlemek.

Kısmi Pencereleri Gizleme

İş gereksinimi, tam pencere kullanılabilir olana kadar NULL istiyorsa, aynı çerçeve üzerinde COUNT(*) kullanın ve kısa pencereleri bir CASE ifadesiyle boş bırakın.

Bu, sınırlardaki doğruluğu düşündüğünüzü gösteren ve birçok adayın atladığı ayrıntılı, özenli bir dokunuştur.

SELECT
  sale_date,
  CASE WHEN COUNT(*) OVER w = 7
       THEN AVG(amount) OVER w
  END AS moving_avg_7d
FROM daily_sales
WINDOW w AS (
  ORDER BY sale_date
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);

WINDOW ile Bir Çerçeveyi Yeniden Kullanma

Önceki sorguda adlandırılmış bir WINDOW yan tümcesi kullanılmıştı. Aynı çerçeve birden çok kez geçtiğinde, onu WINDOW w AS (...) ile bir kez tanımlayıp OVER w ile kullanmak sorguyu DRY ve okunabilir tutar.

PostgreSQL, MySQL 8 ve SQL Server adlandırılmış pencereleri destekler. Mülakatta bir tane kullanmak, kopyala-yapıştır pencere işlevlerinin ötesinde bir yetkinliğe işaret eder.

SELECT
  sale_date,
  AVG(amount) OVER w AS avg_7d,
  SUM(amount) OVER w AS sum_7d
FROM daily_sales
WINDOW w AS (
  ORDER BY sale_date
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);

Takvim Günleri ile Satırlar Arasındaki Tuzak

İnce bir tuzak vardır: tabloda eksik günler bulunuyorsa ROWS 6 PRECEDING, son 7 kaydedilmiş satıra yayılır; bu satırlar 7 takvim gününden daha uzun bir dönemi kapsayabilir.

Aralıkları dikkate alan gerçek bir takvim tabanlı 7 günlük ortalama için uzaklık içeren RANGE kullanın veya önce eksiksiz bir tarih dizisine birleştirme yaparak her günün bir satırı olmasını sağlayın. Bu ayrımdan söz etmek, önceki dersteki ROWS ve RANGE içgörüsünün tam olarak kendisidir.

SELECT
  sale_date,
  AVG(amount) OVER (
    ORDER BY sale_date
    RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW
  ) AS calendar_avg_7d
FROM daily_sales;

Grup Başına Hareketli Ortalamalar

Çalışan toplamlar gibi, hareketli ortalamaların da genellikle varlık başına sıfırlanması gerekir. Her ürün veya mağaza için gruplar arasında taşmayan kendi kayan penceresini oluşturmak üzere PARTITION BY ekleyin.

Çerçeve ve sıralama her bölümün içinde bağımsız olarak çalışır; böylece her grubun ilk satırları kendi alışma dönemini doğru biçimde başlatır.

SELECT
  product_id,
  sale_date,
  AVG(amount) OVER (
    PARTITION BY product_id
    ORDER BY sale_date
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  ) AS product_ma_7d
FROM daily_sales;

Yumuşatma İş Başında

Neden bunu yapalım? Günlük gelir sivri dalgalanmalar gösterir; hareketli ortalama eğilimi ortaya çıkarır. Yaygın bir analist yanıtı, gösterge panelinin hem sinyali hem de gürültüyü göstermesi için ham değeri yumuşatılmış çizgiyle birlikte sunar.

İvmeyi tespit etmek için kısa ve uzun bir hareketli ortalamayı da (örneğin 7 günlük ve 30 günlük) karşılaştırabilirsiniz; bu, hareketli ortalamaların kesişiminin SQL'deki karşılığıdır.

SELECT
  sale_date,
  amount,
  AVG(amount) OVER (ORDER BY sale_date
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)  AS ma_7,
  AVG(amount) OVER (ORDER BY sale_date
    ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS ma_30
FROM daily_sales;

Mülakat Kontrol Listesi

Hareketli ortalama sorusunu iyi yanıtlamak için şu noktaları ele alın:

  • AVG OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW).
  • Pencere boyutu = önceki satır sayısı + 1.
  • Geriye dönük ve merkezlenmiş pencere seçimi.
  • Kısmi pencere alışma dönemi ve bunu gizleme yöntemi.
  • Günler eksik olduğunda ROWS ile RANGE arasındaki fark.
  • Varlık başına sıfırlamak için PARTITION BY.

Hızlı Kontrol

Günlük satırlar üzerinde 7 günlük geriye dönük hareketli ortalama için çerçeveyi seçin.

Özet: Hareketli Ortalamalar

Hareketli ortalama, pencere boyutunun önceki satırların sayısına bir eklenmesiyle bulunduğu AVG(value) OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW) biçimindedir. Kullanım senaryosuna uygun olarak geriye dönük veya merkezlenmiş pencereyi seçin, alışma dönemi satırlarını bir COUNT denetimiyle ele alın ve takvim aralıkları önemli olduğunda bir RANGE uzaklığına geçin.

PARTITION BY ile varlık başına sıfırlayın ve adlandırılmış bir WINDOW ile çerçeveleri yeniden kullanın. Sırada, çalışan toplamları toplam içindeki payı gösteren yüzdelere dönüştürüyoruz.

Sıkça Sorulan Sorular

“Kayan Pencerelerde Hareketli Ortalamalar” dersi ücretsiz mi?

Evet — “Kayan Pencerelerde Hareketli Ortalamalar” 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 Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Kayan Pencerelerde Hareketli Ortalamalar” dersinde ne öğreneceğim?

BETWEEN PRECEDING AND CURRENT ROW ile N dönemlik hareketli ortalamalar hesaplayın. Coding Interview Prep 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.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, 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.

“Kayan Pencerelerde Hareketli Ortalamalar” 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 Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding Interview Prep 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. Pencere Çerçeveleriyle Birikimli Toplamlar
  2. ROWS ve RANGE Çerçevelemesi
  3. Kayan Pencerelerde Hareketli Ortalamalar
  4. Birikimli Dağılım ve Toplamın Yüzdesi
← Coding Interview Prep Sayfasına Dön