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.
«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.
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.
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
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
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.
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)
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
Une partie du code Python a été réécrite de R en Python par @moyomot.
La fin
[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