u++の備忘録

Twitter提供のRパッケージ{AnomalyDetection}で日経平均株価の異常検知

データセット

日経平均株価のデータは、以下のサイトからダウンロードしました。2007年以降のデータをダウンロードし、結合して一つのcsvファイルを作ります。
http://k-db.com/indices/I101/1h

日付の列の処理

ダウンロード時点では"2007/01/01"のような形式で日付が入っていました。
rで日付を処理するには、決まった形式になっている方が都合が良さそうだったので、この時点でExcelの機能で整形しました。

f:id:upura:20170912104815p:plain

パッケージのインストール

install.packages("devtools")
devtools::install_github("twitter/AnomalyDetection")
library(AnomalyDetection)

実行

パッケージとデータセットの読み込み

library(AnomalyDetection)
df = read.csv("nikkei_index.csv")
data = data.frame(as.POSIXlt(df[,1]),df[,4]) # 終値を利用
plot(data, xlab = "date", ylab = "ending price")

f:id:upura:20170912105226p:plain

異常検知

res <- AnomalyDetectionTs(data, max_anoms=0.02, direction='both', plot=TRUE)
res

本来ならば、$anomsに異常と判定された行が抽出されるのですが、今回は全て異常ではないという判定だったようです。
確かにプロット結果を見ても、ある程度自然な推移のようにも捉えられます。

f:id:upura:20170912105314p:plain

終わりに

今後はより大規模なデータセットで試してみたいと思います。

github.com