Как рассчитать скользящие средние в 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])

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *