[PYTHON] Statistiques de mouvement pour la prédiction de séries chronologiques

introduction

CyberAgent20 New Graduate Advent Calendar 2019 Article du 16e jour La moyenne mobile est une méthode statistique courante pour analyser les données de séries chronologiques. Ceci est particulièrement courant lors de la mesure des tendances des cours boursiers, mais cette fois, j'aimerais en faire un formulaire pouvant être utilisé comme quantité de caractéristiques pour l'apprentissage automatique. Si quoi que ce soit, c'est un article plus proche de la mise en œuvre.

Je me concentre généralement sur l'analyse du texte et du son, je vous serais donc reconnaissant si vous pouviez signaler les erreurs.

Qu'est-ce qu'une statistique mobile?

Bien que ce soit appelé une statistique mobile, il s'agit d'une moyenne mobile ou d'une variance mobile. La plupart des méthodes réellement utilisées sont des moyennes mobiles, et même si vous recherchez quelque chose appelé dispersion mobile, il n'y a presque pas de résultats, mais lorsque vous l'utilisez dans le champ réel, il est en corrélation avec y et conduit à une précision améliorée. J'ai décidé de l'afficher parce qu'il y en avait. L'explication de la moyenne mobile elle-même sera omise autant que possible car de nombreux articles apparaîtront lors de la recherche, mais s'il est difficile de voir la transition des données en raison de la dispersion dans les données de la série chronologique, le lissage avec la moyenne mobile montrera la transition des données globales. Vous pouvez le rendre visible. Mathématiquement, la moyenne mobile pour 3 pas de temps * t * dans les données de la série chronologique * x * peut être exprimée comme suit.


\frac{x_{t-2}+x_{t-1}+x_t}{3}

J'ai fait 3 étapes, mais si ce sont des données quotidiennes, elles seront calculées selon l'échelle de la série chronologique comme 3 jours. Le lissage est effectué en calculant la moyenne mobile en utilisant la formule ci-dessus tout en décalant le temps * t *.

Lorsqu'il y a des données de séries chronologiques comme indiqué dans la figure de gauche ci-dessous en tant qu'image réelle, la tendance peut être saisie en prenant la moyenne mobile comme indiqué sur la figure de droite. image.png

Ce qui précède est appelé une moyenne mobile simple, et il existe différents types de moyennes mobiles. Si vous le recherchez dans wiki, il ressemble à ceci: Il semble qu'il existe de nombreux types, mais comme écrit, il semble que les SMA, WMA et EMA mentionnés ci-dessus soient généralement utilisés. Je voudrais réellement déplacer chaque main et trouver un cas d'utilisation la prochaine fois.

J'ai essayé la moyenne mobile simple (SMA), la moyenne mobile pondérée (WMA) et la moyenne mobile exponentielle (EMA) lors de la prédiction du bitcoin, et à ce moment-là, il n'y avait pas de données qui chuteraient fortement, alors laquelle est actuellement disponible? Je ne sais pas si l'indice est bon, mais je me souviens que SMA a fonctionné le mieux vers l'été 2017. La moyenne mobile simple est également utilisée dans le champ réel.

Caractéristique du tapis

Lorsque vous utilisez une statistique de mouvement comme fonction, elle doit être utilisée comme fonction de décalage. La fonction de décalage est utilisée comme un index de l'heure en utilisant les données de plusieurs heures et jours avant cette heure comme caractéristique d'une certaine heure. Dans le cas des statistiques de mouvement, les statistiques sont prises d'un certain point dans le temps à avant une étape spécifique, mais si le temps que vous souhaitez prédire est 7 jours plus tard, les données après 6 jours ne peuvent pas être utilisées pour la quantité de caractéristiques après 7 jours, il y a donc un décalage par rapport à l'heure. Les statistiques de mouvement jusqu'à l'heure actuelle sont utilisées comme quantités de caractéristiques 7 jours après la naissance. En faisant cela, la quantité de caractéristiques est traitée de manière égale entre les données d'apprentissage et les données de prédiction.

Le montant de la fonction de décalage est décrit dans ce livre récemment, donc pour référence.

la mise en oeuvre

À propos des données

Comme c'était facile à comprendre en tant que données, j'ai utilisé la température moyenne quotidienne de l'Agence météorologique. https://www.jma.go.jp/jma/index.html

Cette fois, compte tenu du cas où vous souhaitez prédire la température moyenne en novembre 2019, nous utiliserons les données de 2000 à septembre / octobre / novembre 2018 et septembre / octobre 2019.

Visualisation

Visualisons la valeur réelle dans un graphique. Le chiffre supérieur correspond aux données brutes sur la température moyenne et le chiffre inférieur correspond à la moyenne mobile sur 30 jours. En faisant cela, vous pouvez voir quand la température varie légèrement et quand elle ne varie pas. Lors de l'utilisation des statistiques de mouvement, le montant de la fonction de décalage est encore décalé d'un mois par rapport à la figure ci-dessous, de sorte que les données d'entraînement seront réduites. Par conséquent, vous devez être prudent lorsque vous devez augmenter le décalage. image.png

À propos de l'environnement

Pour le moment, je vais réfléchir à la destination et la préciser.

Pipfile


[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
pandas = "~=0.25"
matplotlib = "~=3.1"

[requires]
python_version = "3.7"

pandas pandas a une fonction de fenêtre appelée roulement. De plus, les statistiques sont produites avec moyenne et var, et la série chronologique est décalée avec décalage en tenant compte de la fonction de décalage.

impoart pandas as pd

df = pd.read_csv('')
#Puisqu'il est supposé qu'il est trié, veuillez trier comme il convient
df['Température moyenne(℃)'].rolling(30).mean().shift(30)
#La largeur de la fonction de fenêtre est déterminée en fonction du domaine en regardant la tendance et la corrélation avec y.

Étant donné que les pandas ont une fonction d'agrégation, vous pouvez facilement ajouter un index même si vous souhaitez ajouter un index autre que la moyenne mobile.

df['Température moyenne(℃)'].rolling(30).agg(['mean', 'var']).shift(30)
#kurtosis(kurt)Et distorsion(skew)Vous pouvez également voir.

BigQuery BigQuery dispose également d'une fonction de fenêtre pratique, ce qui vous permet de calculer facilement une moyenne mobile qui prend en compte le décalage.

SELECT
	AVG(Température moyenne(℃)) OVER(ROWS BETWEEN 30 PRECEDING 60 PRECEDING)
FROM
	`project.dataset.table`

La différence avec les pandas est évidente, mais BigQuery est beaucoup plus rapide. Le calcul de la distorsion de la netteté n'est pas aussi simple que les pandas, mais ce n'est pas un problème car il est rarement utilisé comme quantité de caractéristiques. La fonction de fenêtre est pratique et simple et facile à comprendre car vous pouvez spécifier chaque groupe et trier lors de l'application de la fonction.

À la fin

Il est intéressant de trouver la quantité de fonctionnalités tout en consultant les données réelles, mais comme je suis encore un débutant en statistique, j'aimerais pouvoir aller plus loin.

Recommended Posts

Statistiques de mouvement pour la prédiction de séries chronologiques
LSTM (1) pour la prédiction de séries chronologiques (pour les débutants)
Prédiction des données de séries chronologiques par projection simplex
Détection d'anomalies de données chronologiques pour les débutants
Décomposition des séries temporelles
Python: analyse des séries chronologiques
Python 3.4 Créer un environnement Windows7-64bit (pour l'analyse des séries chronologiques financières)
Programme d'étude des statistiques
Question sur la série chronologique Python
Analyse des séries chronologiques RNN_LSTM1
Analyse des séries chronologiques 1 Principes de base
Afficher les séries chronologiques TOPIX
Diagramme de séries chronologiques / Matplotlib
Une méthode d'étude pour les débutants pour apprendre l'analyse des séries chronologiques
Défi pour les prévisions de ventes futures: ① Qu'est-ce que l'analyse des séries chronologiques?
Premier Kaggle (kaggle ①)
[Statistiques pour les programmeurs] Théorème de Bayes
[Statistiques pour les programmeurs] Box whiskers
Installation de la série Python 3 pour Mac
Analyse des séries chronologiques partie 4 VAR
Kaguru pour la première fois
Analyse de séries chronologiques Partie 3 Prévisions
[Python] Tracer des données de séries chronologiques
Analyse de séries chronologiques Partie 1 Autocorrélation
[Statistiques] [Analyse des séries chronologiques] Tracez le modèle ARMA et saisissez la tendance.