Як обчислити ковзні середні в python


Ковзне середнє — це техніка, яка може бути використана для згладжування даних часових рядів, щоб зменшити «шум» у даних і легше визначити шаблони та тенденції.

Ідея ковзної середньої полягає в тому, щоб взяти середнє значення кількох попередніх періодів, щоб отримати «ковзну середню» для певного періоду.

Цей підручник пояснює, як обчислити ковзаючі середні в Python.

Приклад: Ковзні середні в Python

Припустимо, у нас є наступна таблиця, яка показує загальний обсяг продажів певної компанії за 10 періодів:

 x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]

Спосіб 1. Використовуйте функцію cumsum().

Одним із способів обчислення ковзного середнього є використання функції cumsum():

 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])

Ось як інтерпретувати результат:

  • Ковзне середнє третього періоду дорівнює 47. Воно розраховується як середнє за перші три періоди: (50+55+36)/3 = 47 .
  • Ковзне середнє для четвертого періоду становить 46,67. Це обчислюється як середнє за три попередні періоди: (55+36+49)/3 = 46,67 .

І так далі.

Спосіб 2: Використовуйте панд.

Інший спосіб обчислення ковзного середнього — це написати функцію на основі pandas:

 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])

Цей метод дає точно такі ж результати, як і попередній метод, але він працює швидше на великих масивах.

Зауважте, що ви також можете вказати будь-яку кількість попередніх періодів для використання в обчисленні ковзного середнього. Наприклад, ви можете використовувати n=5:

 #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])

Чим більше періодів ви використовуєте для обчислення ковзної середньої, тим більш «згладженою» буде лінія ковзної середньої.

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *