曲線形状に基づいて時系列クラスタリングを行うことは可能ですか?


47

一連のアウトレットの販売データがあり、時間の経過に伴うカーブの形状に基づいてそれらを分類したいと考えています。データはおおよそ次のように見えます(ただし、明らかにランダムではなく、データが欠落しています)。

n.quarters <- 100
n.stores <- 20
if (exists("test.data")){
  rm(test.data)
}
for (i in 1:n.stores){
  interval <- runif(1, 1, 200)
  new.df <- data.frame(              
    var0 = interval + c(0, cumsum(runif(49, -5, 5))),
    date = seq.Date(as.Date("1990-03-30"), by="3 month", length.out=n.quarters),
    store = rep(paste("Store", i, sep=""), n.quarters))
  if (exists("test.data")){
    test.data <- rbind(test.data, new.df)    
  } else {
    test.data <- new.df
  }
}
test.data$store <- factor(test.data$store)

Rの曲線の形状に基づいてクラスター化する方法を知りたいと思います。次のアプローチを検討していました。

  1. 各ストアのvar0を時系列全体で0.0〜1.0の値に線形変換して、新しい列を作成します。
  2. R のkmlパッケージを使用して、これらの変換された曲線をクラスター化します

2つの質問があります。

  1. これは合理的な探索的アプローチですか?
  2. データkmlを理解できる縦方向のデータ形式に変換するにはどうすればよいですか?Rスニペットは大歓迎です!

2
あなたは、個々の縦方向のデータの軌跡クラスタリングに以前の質問からいくつかのアイデアを得る可能性がありますstats.stackexchange.com/questions/2777/...
Jeromy Anglim

1
@Jeromy Anglinリンクをありがとう。運はありましたkmlか?
fmark

簡単に見てきましたが、現時点では、個々の時系列の選択された機能(平均、初期、最終、変動、急激な変化の存在など)に基づいてカスタマイズされたクラスター分析を使用しています。
ジェロミーアングリム


@Robこの質問は不規則な時間間隔を想定しているようには見えませんが、実際には互いに近いものです(執筆時に他の質問を思い出しませんでした)。
chl

回答:


26

@Jeromyが提供するリンクで縦断的データを分析するためのいくつかの方向性が議論されたので、特に機能的データ分析に関するものを注意深く読むことをお勧めします。「縦断的データの機能的クラスタリング」、または不規則にサンプリングされた軌跡のモデルベースのクラスタリングに特に関係するPACE Matlabツールボックス(PengとMüller、まばらに観測された確率過程の距離ベースのクラスタリング、オンラインオークションへの適用応用統計 2008年2月2日:1056)。財務の時系列には良い統計的枠組みがあるかもしれないと想像できますが、それについては知りません。

このkmlパッケージは基本的にk-meansに依存しており、個体で観測された測定値間のユークリッド距離に(デフォルトで)作用します。軌道と呼ばれるものは、個々の一連の観測値、、およびn i y i = y i 1y i 2y i td y iy j= tniyi=(yi1,yi2,,yit)d(yi,yj)=t1k=1t(yikyjk)2。欠損データは、(カリンスキー基準を計算するための)最近傍のような代入スキームに関連付けられた先行距離測定(ガワー調整)をわずかに変更することで処理されます。実際のデータがどのように見えるかを自分では表明していないので、うまくいくかどうかはわかりません。少なくとも、縦方向の成長曲線、「多項式」形状で動作しますが、非常に特定のパターン(クラスター間で異なる時点での特定の時点での極小/最大など)を変換することで検出できるとは思えません例)。おそらく不整合の曲線をクラスタリングすることに興味があるなら、あなたは間違いなく他の解決策を見なければなりません。Sangalli et al。からの機能的なクラスタリングとアライメント、およびその中の参照は、良い出発点を提供するかもしれません。

以下に、それを試すのに役立つかもしれないいくつかのコードを示します(結果を再現したい場合、私のシードは通常101に設定されます)。基本的に、使用kmlするためにはclusterizLongDataオブジェクト(id最初の列の数と次の列の測定値)を作成するだけです。t

library(lattice)
xyplot(var0 ~ date, data=test.data, groups=store, type=c("l","g"))

tw <- reshape(test.data, timevar="date", idvar="store", direction="wide")
parallel(tw[,-1], horizontal.axis=F, 
         scales=list(x=list(rot=45, 
                            at=seq(1,ncol(tw)-1,by=2), 
                            labels=substr(names(tw[,-1])[seq(1,ncol(tw)-1,by=2)],6,100), 
                            cex=.5)))

library(kml)
names(tw) <- c("id", paste("t", 1:(ncol(tw)-1)))
tw.cld <- as.cld(tw)
cld.res <- kml(tw.cld,nbRedrawing=5)
plot(tw.cld)

次の2つの図は、シミュレートされた生データと5クラスターのソリューションです(Calinski基準に従って、fpcパッケージでも使用されます)。私は縮尺版を見せません。

代替テキスト

代替テキスト


1
非常に詳細な回答をありがとうございます。私はkml自分のデータを実行しましたが、あなたが示唆したように、それはカーブ形状ではなく大部分に基づいてクラスタリングしているので、問題を改善できるかどうかを確認するためにいくつかの前処理ステップを試しています。Sangalli等による研究。私は何をしたいのか非常に有望に見えます-しかし、私は彼らのアプローチの実装を見つけることができません。たぶん、私はこのプロジェクトのために彼らの仕事の独自の実装を作成する時間がないでしょう。FOSSの実装を知っていますか?
fmark

@fmark私の知る限り、OSSの実装はありません(ただし、作業はごく最近のものです)。それらは両方ともRで利用可能なk-meansとk-medoidsを使用します。私の意見では、最も重要な部分はテンプレートカーブを生成し、ワーピング関数を実装することです。そのためには、形態計測/ procruste分析を見ることで追加情報を見つけるか、Matlab PACEツールボックスのコードを検索できます(ただし、これはEMまたはそのようなものでいっぱいでなければなりません)。私の最善の推奨事項は次のとおりです。著者にアルゴリズムの無料実装を依頼してください。
chl

2
肯定が得られた場合は報告します:) カーブクラスタリングのペーパーk-meanアライメントには、実装の詳細があり、これを自分で実行したい人にとっても役立つ場合があります。
fmark

1
なぜ平均値を削除して(そして標準偏差で除算するのか)、なぜこれをしないのですか?その後、結果は形状についてよりも大きくなり、大きさについてはより少なくなります
...-naught101

9

Wang、Xiaozhe、Kate Smith、Rob Hyndmanのstats.se常連が代替アプローチを公開しました。

「時系列データの特性ベースのクラスタリング」。データマイニングとナレッジディスカバリー13、いいえ。3(2006):335–364

あの人たちは書く:

本論文では、構造特性に基づいた時系列のクラスタリング手法を提案します。他の選択肢とは異なり、この方法は距離メトリックを使用してポイント値をクラスタリングするのではなく、時系列から抽出されたグローバルフィーチャに基づいてクラスタリングします。特徴量は、個々のシリーズから取得され、教師なしニューラルネットワークアルゴリズム、自己組織化マップ、または階層的クラスタリングアルゴリズムを含む、任意のクラスタリングアルゴリズムに供給することができます。時系列を説明するグローバルメジャーは、基になる特性(トレンド、季節性、周期性、シリアル相関、歪度、尖度、カオス、非線形性、自己相似性)を最もよくキャプチャする統計演算を適用することによって取得されます。メソッドは抽出されたグローバルメジャーを使用してクラスタリングするため、時系列の次元性が低下し、データの欠落やノイズの影響を受けにくくなります。さらに、クラスタリング入力として使用する必要がある機能セットから最適な選択を見つけるための検索メカニズムを提供します。

RコードはRobのブログで入手できます。


6

Eamonn Keogh(UC Riverside)の時系列クラスタリングに関する研究を見ることができます。彼のウェブサイトには多くのリソースがあります。彼はMatlabコードサンプルを提供していると思うので、これをRに変換する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.