RigelのR言語メモであーる(R言語だけとは言っていない)

RigelのR言語メモであーる(主にpython)

興味あることや趣味、やったことについて書くよ

Rで簡単な変化点検知(changepointパッケージ)

最近kaggleをやりはじめました。
その時に、簡単な変化点検知が必要となった。
changepointパッケージを使った簡単な変化点検知のメモ。


changepointパッケージは、

  • change in variance
  • change in mean
  • change in mean and variance

の三つがある。
今回の目的には、change in meanが合ってる。

以下Rコード

y=data
ansmean=cpt.mean(y)
plot(ansmean,cpt.col='blue',type="o")
abline(v=ansmean@cpts[1]+0.5,col=3)
print(ansmean)

結果
f:id:strawberry_kyon:20171214115359p:plain

Class 'cpt' : Changepoint Object
       ~~   : S4 class containing 12 slots with names
              cpttype date version data.set method test.stat pen.type pen.value minseglen cpts ncpts.max param.est 

Created on  : Fri Apr 21 18:46:22 2017 

summary(.)  :
----------
Created Using changepoint version 2.2.2 
Changepoint type      : Change in mean 
Method of analysis    : AMOC 
Test Statistic  : Normal 
Type of penalty       : MBIC with value, 18.50883 
Minimum Segment Length : 1 
Maximum no. of cpts   : 1 
Changepoint Locations : 182 

データは実際のkaggleのデータ。レストランの来店人数の予測をしないといけない。
縦軸はlog(人数+1)としている。
なんかいい感じに推定してくれた。ありがたい。
penaltyは"SIC", "BIC", "MBIC", AIC", "Hannan-Quinn", "Asymptotic", "Manual", "CROPS"から選べる。
methodは"AMOC", "PELT", "SegNeigh", "BinSeg"から選べる。

ちなみに、
change in varianceはcpt.var()
change in mean and varianceはcpt.meanvar()
を使うと良い。

簡単に変化点を検出する場合は便利。
この結果は、MCMCの事前分布に入れる。

kaggleの調子はどうなんだって?
聞かないでください。