Introduction à l'analyse des séries temporelles ~ Modèle d'ajustement saisonnier ~ Implémenté en R et Python

introduction

Ceci est l'article du 19e jour de Gunosy Advent Calender 2015. Cette année est également terminée.

J'ai commencé à travailler chez Gunosy en novembre et ça a été très amusant. Étant donné que je fais habituellement de l'analyse de données et du développement d'algorithmes, cette fois je présenterai brièvement l'analyse des séries chronologiques utilisée dans l'analyse commerciale.

Qu'est-ce que l'analyse de séries chronologiques?

«L'analyse des séries chronologiques est une tentative de capturer les fluctuations d'un certain phénomène par rapport aux mouvements passés». [Tiré de «Introduction to Time Series Analysis» par Genshiro Kitagawa](http://www.amazon.co.jp/%E6%99%82%E7%B3%BB%E5%88%97%E8%A7%A3%E6 % 9E% 90% E5% 85% A5% E9% 96% 80-% E5% 8C% 97% E5% B7% 9D-% E6% BA% 90% E5% 9B% 9B% E9% 83% 8E / dp / 4000054554)

Les termes «gestion axée sur les données» et «big data» commencent à prendre racine, et je pense que de nombreuses entreprises prennent des décisions pour améliorer leurs produits sur la base des données. Cependant, les données qui changent quotidiennement (en particulier les indicateurs appelés ventes et KPI) varient considérablement et il peut être difficile de bien appréhender les changements. Par conséquent, l'analyse des séries chronologiques peut être utilisée pour capturer correctement les changements et rendre les prédictions précises.

Ajustement saisonnier

Cette fois, je présenterai les données de désaisonnalisation. En gros, des données chronologiques «Valeur observée = composante de tendance + composante saisonnière + composante de bruit» C'est le modèle expliqué dans.

Les applications que nous fournissons sont également influencées par le rythme de la vie humaine tant qu'elles sont étroitement liées à la vie humaine. Il y a à peu près «facteur mois», «facteur jour» et «facteur temps», mais cette fois je vais me concentrer sur le jour et mettre en œuvre l'échantillon.

Implémentation en R

Je voudrais l'implémenter en utilisant les données de Tokyo Electric Power. Tout d'abord, je vais le faire avec R. Tout d'abord, sortez les données brutes.

data <- read.csv("tokyo2015_day.csv", header=T) #Obtenir des données de csv
power <- data[,2] #Extraire les numéros
plot(power, type="l") #terrain

スクリーンショット 2015-12-25 01.04.37.png

C'est irrégulier. R a une «fonction ts» qui convertit les données en données périodiques et une fonction «fonction stl» qui les convertit en données de séries chronologiques désaisonnalisées, et vous pouvez facilement créer un modèle désaisonnalisé à l'aide de celles-ci.

data <- read.csv("tokyo2015_day.csv", header=T) #Obtenir des données de csv
power <- data[,2] #Extraire les numéros
plot(power, type="l") #terrain

ts <- ts(power, frequency=7) #Le cycle est de 7 jours(1 semaine)
stl <- stl(ts, s.window="periodic") #Création de données de séries chronologiques de désaisonnalisation

plot(stl, type="l") #terrain

スクリーンショット 2015-12-25 01.11.41.png

Le haut des quatre graphiques sont les données brutes (valeurs observées), qui peuvent être divisées en «composante de tendance», «composante saisonnière» et «composante de bruit» dans l'ordre à partir du haut.

Dans l'analyse des données, les changements à long terme peuvent être capturés en examinant les composantes de tendance.

Un peu de considération

Après tout, l'été et l'hiver sont élevés et l'influence de la journée semble grande (vous pouvez voir que de nombreuses personnes vivent dans un cycle similaire). Les principaux éléments de la composante jour sont les suivants. Puisque le 1er janvier 2015 est le début et le 1er janvier est le jeudi, vous pouvez voir que la composante saisonnière des vacances (samedi, dimanche) est négative.

$ print(stl$time.series[,1]) #Composantes saisonnières de sortie
2321.9288  1927.3324 -2517.1524 -6122.9112   293.1919  1872.1087  2225.5017...

Quand vous voyez la quantité d'électricité utilisée pendant l'été chuter brusquement, vous ne pouvez pas vous empêcher de penser: «Il est vrai qu'elle s'est soudainement refroidie depuis septembre de cette année». (* Je ne peux rien dire à moins de le comparer avec d'autres années)

Implémentation en Python

Je le fais aussi en Python. C'est Jupyter. Ce que nous faisons est la même chose.

import csv
import datetime as datetime  
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
%matplotlib inline

filename = "tokyo2015_day.csv"
with open(filename, 'rt') as f:
    data = list(csv.reader(f))

headers = data.pop(0)
df = pd.DataFrame(data, columns=headers)

dataFrame = DataFrame(df['power'].values.astype(int), DatetimeIndex(start='2015-01-01', periods=len(df['power']), freq='D'))
ts = seasonal_decompose(dataFrame.values, freq=7)
plt.plot(ts.trend) #Composant de tendance
plt.plot(ts.seasonal) #Ingrédients saisonniers
plt.plot(ts.resid) #Composant de bruit

Merci

Une partie du code Python a été réécrite de R en Python par @moyomot.

en conclusion

La fin

Matériel de référence

[Genshiro Kitagawa "Introduction to Time Series Analysis"](http://www.amazon.co.jp/%E6%99%82%E7%B3%BB%E5%88%97%E8%A7%A3%E6% 9E% 90% E5% 85% A5% E9% 96% 80-% E5% 8C% 97% E5% B7% 9D-% E6% BA% 90% E5% 9B% 9B% E9% 83% 8E / dp / 4000054554)

Recommended Posts

Introduction à l'analyse des séries temporelles ~ Modèle d'ajustement saisonnier ~ Implémenté en R et Python
[Introduction à la décomposition des éléments] Organisons les méthodes d'analyse des séries chronologiques en R et python ♬
"Introduction à l'analyse de données par modélisation statistique bayésienne à partir de R et Stan" implémenté en Python
Python: analyse des séries temporelles: création d'un modèle SARIMA
Python: Analyse des séries temporelles: Constantity, modèle ARMA / ARIMA
Pour représenter la date, l'heure, l'heure et les secondes en Python
Python: analyse des séries chronologiques
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Introduction à la vérification des effets Rédaction des chapitres 4 et 5 en Python
Notes de lecture (en Python et Stan) pour une introduction à la modélisation statistique pour l'analyse de données (Midorimoto)
[Introduction à Python3 Jour 1] Programmation et Python
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Hashing de données en R et Python
Introduction à l'analyse d'image opencv python
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie1-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
[Statistiques] [Analyse des séries chronologiques] Tracez le modèle ARMA et saisissez la tendance.
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie3-
Analyse de séries temporelles par modèle général d'espace d'états gaussien à l'aide de Python [Exemple d'implémentation considérant extrinsèque et saisonnalité]
Analyse des séries chronologiques 2 Stabilité, modèle ARMA / ARIMA
[Introduction à Python] Comment utiliser la classe en Python?
Livre de canard implémenté en Python "Modélisation statistique Bayes avec Stan et R"
Comment faire R chartr () en Python
J'ai essayé l'analyse de séries chronologiques! (Modèle AR)
Analyse des données: application facile des statistiques descriptives et des statistiques d'estimation aux données CSV en Python
Analyse des séries chronologiques 4 Construction du modèle SARIMA
Introduction facile de la série python3 et d'OpenCV3
Ajouter une série à la colonne dans les pandas python
Comment utiliser is et == en Python
J'ai implémenté le modèle VGG16 avec Keras et essayé d'identifier CIFAR10
Analyse des séries chronologiques n ° 6 Faux retour et partie républicaine
Introduction aux vecteurs: Algèbre linéaire en Python <1>
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Obtenez des données de séries chronologiques de k-db.com avec Python
3 façons d'analyser les chaînes de temps avec python [Note]
Comment générer une séquence en Python et C ++
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
tse --Introduction à l'éditeur de flux de texte en Python
Implémenter la récurrence et l'exploration commémoratives dans Python and Go
J'ai écrit "Introduction à la vérification des effets" en Python
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
Une manière intelligente de chronométrer le traitement avec Python
Envoyer un message à Skype et Chatwork en Python
Analyse de survie apprise avec Python 2 - Estimation Kaplan-Meier
[Introduction à l'application Udemy Python3 +] 64. Espace de noms et portée
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
J'ai essayé d'implémenter TOPIC MODEL en Python
Comment lire les données de séries chronologiques dans PyTorch
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
"Introduction à la vérification des effets Chapitre 3 Analyse utilisant le score de propension" + α est essayé en Python
[Analyse du modèle SIR] Transformez la formule pour déterminer γ et le nombre de reproduction effectif R ♬
[Impression] [Analyse de données à partir de zéro] Introduction à la science des données Python apprise dans des analyses de rentabilisation
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
[Introduction au son] Organisons l'introduction au son de python et de R ♬ -Écoutez le son de l'explosion de Nikkei 255-