Comment calculer les moyennes mobiles en Python



Une moyenne mobile est une technique qui peut être utilisée pour lisser les données de séries chronologiques afin de réduire le « bruit » dans les données et d’identifier plus facilement les modèles et les tendances.

L’idée derrière une moyenne mobile est de prendre la moyenne d’un certain nombre de périodes précédentes pour aboutir à une « moyenne mobile » pour une période donnée.

Ce tutoriel explique comment calculer des moyennes mobiles en Python.

Exemple : moyennes mobiles en Python

Supposons que nous ayons le tableau suivant qui montre les ventes totales d’une certaine entreprise sur 10 périodes :

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

Méthode 1 : utilisez la fonction cumsum().

Une façon de calculer la moyenne mobile consiste à utiliser la fonction 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])

Voici comment interpréter le résultat :

  • La moyenne mobile de la troisième période est de 47. Elle est calculée comme la moyenne des trois premières périodes : (50+55+36)/3 = 47 .
  • La moyenne mobile de la quatrième période est de 46,67. Ceci est calculé comme la moyenne des trois périodes précédentes : (55+36+49)/3 = 46,67 .

Et ainsi de suite.

Méthode 2 : utilisez des pandas.

Une autre façon de calculer la moyenne mobile consiste à écrire une fonction basée sur 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])

Cette méthode produit exactement les mêmes résultats que la méthode précédente, mais elle a tendance à s’exécuter plus rapidement sur des tableaux plus grands.

Notez que vous pouvez également spécifier n’importe quel nombre de périodes précédentes à utiliser dans le calcul de la moyenne mobile. Par exemple, vous préféreriez peut-être utiliser 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])

Plus vous utilisez de périodes pour calculer la moyenne mobile, plus la ligne de moyenne mobile sera « lissée ».

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *