Python'da hareketli ortalamalar nasıl hesaplanır?
Hareketli ortalama, verilerdeki “gürültüyü” azaltmak ve kalıpları ve eğilimleri daha kolay belirlemek amacıyla zaman serisi verilerini yumuşatmak için kullanılabilecek bir tekniktir.
Hareketli ortalamanın arkasındaki fikir, belirli bir dönem için “hareketli ortalamaya” ulaşmak için önceki dönemlerin ortalamasını almaktır.
Bu eğitimde Python’da hareketli ortalamaların nasıl hesaplanacağı açıklanmaktadır.
Örnek: Python’da Hareketli Ortalamalar
Belirli bir şirketin 10 dönem içindeki toplam satışlarını gösteren aşağıdaki tabloya sahip olduğumuzu varsayalım:
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
Yöntem 1: cumsum() işlevini kullanın.
Hareketli ortalamayı hesaplamanın bir yolu cumsum() fonksiyonunu kullanmaktır:
import numpy as np #define moving average function def moving_avg(x, n): cumsum = np.cumsum(np.insert(x, 0, 0)) return (cumsum[n:] - cumsum[:-n]) / float(n) #calculate moving average using previous 3 time periods n = 3 moving_avg(x, n): array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])
Sonucun nasıl yorumlanacağı aşağıda açıklanmıştır:
- Üçüncü periyodun hareketli ortalaması 47’dir. İlk üç periyodun ortalaması alınarak hesaplanır: (50+55+36)/3 = 47 .
- Dördüncü periyodun hareketli ortalaması 46,67. Bu önceki üç dönemin ortalaması olarak hesaplanır: (55+36+49)/3 = 46,67 .
Ve benzeri.
Yöntem 2: Pandaları kullanın.
Hareketli ortalamayı hesaplamanın başka bir yolu da pandalara dayalı bir fonksiyon yazmaktır:
import pandas as pd #define array to use and number of previous periods to use in calculation x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104] n=3 #calculate moving average pd.Series(x).rolling(window=n).mean().iloc[n-1:].values array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])
Bu yöntem önceki yöntemle tamamen aynı sonuçları üretir ancak daha büyük dizilerde daha hızlı çalışma eğilimindedir.
Hareketli ortalama hesaplamasında kullanmak üzere istediğiniz sayıda önceki dönemi de belirtebileceğinizi unutmayın. Örneğin, n=5 kullanmayı tercih edebilirsiniz:
#use 5 previous periods to calculate moving average n=5 #calculate moving average pd.Series(x).rolling(window=n).mean().iloc[n-1:].values array([54.8, 59.8, 69., 79., 85.2, 89.2])
Hareketli ortalamayı hesaplamak için ne kadar çok dönem kullanırsanız, hareketli ortalama çizgisi o kadar “düzeltilir”.