時系列データとは?


時系列データとは、ある一時期の状態を表すような、時間的な変化を、連続的に観測して得られた値の系列のことです。例えば、毎日の売上データ、毎時間の気温、月ごとの来客数などです。時系列データの利用は、気候パターンの解析、交通状況の監視、人口統計学的傾向の調査データの事です。

 

一口に時間に関するデータといっても複数のタイプがあります。

 

・点過程データ

間隔が一定ではないようなデータのタイプです。点過程データの目的は、事象が発生したという事を分析することです。地震・故障のタイミングや来客のデータに使われます。数量よりも発生するかどうかを分析のターゲットにしています。

 

・時系列データ

時間的な変化を、連続的に得られたデータでそれぞれを直線で結んだものになります。通常時間のデータといえば、こちらを想定しています。

 

・キューデータ

点過程データの一種になります。コールセンターの着信数・応答数、トランザクションログ、ATMの利用等の分析の時のデータタイプになります。

 

この中でも時系列データは「過去」と「現在」、そして「未来」があり、これらがつながっているデータであります。前の値によって、前の前の値が、現在の値に影響をしていることを「自己相関」と言います。データを時系列に並べることによって、過去の様子を分析することも可能ですし、これから先の事象について予測することが可能になります。しかし点過程データやキューデータでは過去に大きく依存しているかというとそうではありません。地震が起こるかどうかが前の起こったデータ見るのが難しいからです。また故障のタイミングも他の要因に起因している事も多く、要因から分析する事も多いからです。

では、時系列データを作成し簡単に分析してみます。

 

Python

 

import pandas as pd

import numpy as np

import matplotlib.pylab as plt

 

dateparse = lambda dates: pd.datetime.strptime(dates, ‘%Y-%m’)

data = pd.read_csv(‘AirPassengers.csv’, parse_dates=[‘Month’], index_col=’Month’,date_parser=dateparse)

 

 

print (data.head())

plt.plot(data)

 

            

Month                   #Passengers

1949-01-01          112

1949-02-01          118

1949-03-01          132

1949-04-01          129

1949-05-01          121

 

time_series_1

 

# Autoregression

from statsmodels.graphics.tsaplots import plot_acf

plot_acf(data, lags=12)

plt.show()

 

time_series_2

時間軸でデータが変わっていく要因として、次の4つがあります。

傾向変動

傾向変動(トレンド)は、長期的に見て上昇(増加)傾向や減少傾向にあるかを判断する項目になります。例えばですが、地球温暖化と言われている地球の温度は今上昇傾向(アップトレンド)と言われています。

季節変動

季節変動(シーズナル)は、文字通り季節ごとに繰り返される変化を示すものです。例えばですが、ゴールデンウイークに観光客が増えるといった季節的な要因を示すものになります。

循環変動

循環変動(サイクル)は、季節変動と違い長周期の繰り返し変動になります。例えばですが、1年のうちで気温が日本だと夏は暑く、冬が寒いというのが繰り返されます。しかし有史以来、氷河期という寒い時期もあれば、恐竜がいた温暖な時期もあります。このように長周期で繰り返すものになります。

規則変動

不規則変動(ノイズ)は、上記3つの変動要素では説明がつかない短期的な変化を示すものです。

実際はこれら4つの要素は独立して測定されるわけでなく、回帰部分も含めて全ての要素が組み合わさった結果としてのデータが測定されます。

Statsmodelsのライブラリーでdecompositionの図を作成します。

 

import statsmodels.api as sm

decomposition = sm.tsa.seasonal_decompose(data, model=’additive’)

fig = decomposition.plot()

plt.show()

 

time_series_3