RやPythonを用いた一般的な時系列解析のための実装例

機械学習技術 人工知能技術 デジタルトランスフォーメーション技術 センサーデータ&IOT ICT技術 ストリームデータの処理 ICTインフラ技術 確率的生成モデル 関係データ学習 サポートベクトルマシン スパースモデリング 異常検知・変化検知技術 時系列データ解析 本ブログのナビ
時系列データの解析の概要

時系列データとは、株価や気温、トラフィック量などの時間の経過に応じて値が変化するデータのことを呼ぶ。この時系列データに対して機械学習を適用することで、大量のデータを学習し、未知のデータに対する予測を行うことで、ビジネスの意思決定やリスク管理などに役立てることができる。

時系列データには、トレンド(傾向)、季節性、ランダム要素などが含まれる。トレンドとは長期的な傾向を表し、季節性とは周期的なパターンであり、ランダム要素とは予測できないノイズとなる。これらの要素を考慮するために、時系列データの予測では様々な手法が用いられている。

それらの中で代表的な手法としては、RやPythonを用いた一般的な時系列解析のための実装例“でも述べているARIMA、”Prophetを用いた時系列分析について“で述べているProphet、”LSTMの概要とアルゴリズム及び実装例について“で述べているLSTM、状態空間モデルなどが用いられる。これらの手法は機械学習に基づいた予測手法で、過去の時系列データを学習して未来の予測を行うものとなる。

また、時系列データには時刻が含まれるため、過去のデータを学習し未来を予測するためには、データをトレンド成分、季節成分、残差成分に分解するなど、時系列データを適切に加工する必要があり、そこでも様々な工夫が必要となる。

Pythonでの時系列データ解析の実装

Pythonを用いた時系列解析には、様々なライブラリやツールが存在する。ここでは、代表的なライブラリの一つであるpandasを用いた時系列解析の具体的な実装について述べる。

まずはじめに、pandasのdatetimeデータ型を用いて時系列データを作成する。これは例えば、以下のように1時間ごとのデータを作成することで可能となる。

import pandas as pd
import numpy as np

# 時系列データの作成
date_rng = pd.date_range(start='1/1/2020', end='1/10/2020', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))

次に、時系列データの可視化を行う。pandasには、plotメソッドを用いて簡単にグラフを描画することができる。以下は、上記で作成したデータの可視化例となる。

import matplotlib.pyplot as plt

# データの可視化
df.plot(x='date', y='data')
plt.show()

時系列解析では、トレンドや季節性などの要素を分解することが重要であり、pandasには、seasonal_decomposeメソッドを用いて時系列データを分解する機能がある。以下は、上記のデータをトレンド、季節性、残差に分解する例となる。

from statsmodels.tsa.seasonal import seasonal_decompose

# 時系列データの分解
result = seasonal_decompose(df['data'], model='additive', period=24)

# 分解結果の可視化
result.plot()
plt.show()

トレンドや季節性の分解結果をもとに、ARIMAモデルなどを用いた予測も行うことができる。ARIMAモデルを用いた予測の例を以下に示す。

from statsmodels.tsa.arima_model import ARIMA

# モデルの定義と学習
model = ARIMA(df['data'], order=(1, 1, 1))
model_fit = model.fit(disp=0)

# 予測結果の取得
forecast = model_fit.forecast(steps=24)

# 予測結果の可視化
plt.plot(df['data'])
plt.plot(forecast[0])
plt.show()

今回は、pandasを用いた時系列解析の実装例であったが、他にも、statsmodelsやscikit-learnなどのライブラリを用いた時系列解析の実装が可能となる。

Rを用いた時系列データ解析の実装

R言語は、時系列解析に非常に適したプログラミング言語の一つであり、R言語には、時系列解析に特化したパッケージである「forecast」がある。以下では、forecastパッケージを用いた時系列解析の具体的な実装例について述べる。

まずはじめに、時系列データを作成する。以下は、1時間ごとのデータを作成する例となる。

library(forecast)

# 時系列データの作成
date_rng <- seq(as.POSIXct("2020-01-01 00:00:00"), 
                 as.POSIXct("2020-01-10 23:00:00"), 
                 by="hour")
df <- data.frame(date=date_rng, data=rnorm(length(date_rng)))

次に、時系列データの可視化を行う。R言語には、ggplot2パッケージを用いて簡単にグラフを描画することができる。以下は、上記で作成したデータの可視化例となる。

library(ggplot2)

# データの可視化
ggplot(df, aes(x=date, y=data)) +
  geom_line() +
  xlab("Date") +
  ylab("Data")

時系列解析では、トレンドや季節性などの要素を分解することが重要であり、forecastパッケージには、stl()関数を用いて時系列データを分解する機能がある。以下は、上記のデータをトレンド、季節性、残差に分解する例となる。

# 時系列データの分解
result <- stl(df$data, s.window="periodic")

# 分解結果の可視化
autoplot(result)

また、トレンドや季節性の分解結果をもとに、ARIMAモデルなどを用いた予測も行うこともできる。forecastパッケージには、auto.arima()関数を用いてARIMAモデルのパラメータを自動的に選択する機能がある。以下に、上記のデータをARIMAモデルで予測する例を示す。

# ARIMAモデルの予測
model <- auto.arima(df$data)
forecast <- forecast(model, h=24)

# 予測結果の可視化
autoplot(forecast)

R言語による時系列解析の具体的な実装では、このforecastパッケージ以外にも、statsパッケージやTSAパッケージなど、時系列解析に適した多数のパッケージが存在する。

参考情報と参考図書

時系列データ解析に関しては”時系列データ解析“に詳細を述べている。そちらも参照のこと。

参考図書としては”現場ですぐ使える時系列データ分析~データサイエンティストのための基礎知識~

Pythonによる時系列分析 ―予測モデル構築と企業事例―

時系列解析: 自己回帰型モデル・状態空間モデル・異常検知

物体・画像認識と時系列データ処理入門“等がある。

コメント

  1. […] RやPythonを用いた一般的な時系列データ解析の実装例 […]

  2. […] RやPythonを用いた時系列データ解析の一般的な実装例 […]

タイトルとURLをコピーしました