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 ».