R의 시계열 '클러스터링'


38

시계열 데이터 세트가 있습니다. 각 시계열의 실제 날짜가 모두 정확하게 '정렬'되는 것은 아니지만 각 시리즈는 동일한 기간을 포함합니다.

즉, 시계열을 2D 행렬로 읽으면 다음과 같이 보일 것입니다.

date     T1   T2   T3 .... TN
1/1/01   100  59   42      N/A
2/1/01   120  29   N/A     42.5
3/1/01   110  N/A  12      36.82
4/1/01   N/A  59   40      61.82
5/1/01    05  99   42      23.68
...
31/12/01  100  59   42     N/A

etc 

시계열 {T1, T2, ... TN}을 '가족'으로 분리하는 R 스크립트를 작성하려고합니다. 여기서 가족은 서로 "공감하는 경향이있는 시리즈"로 정의됩니다.

'클러스터링'부분을 위해, 나는 일종의 거리 측정을 선택 / 정의해야합니다. 시계열을 다루고 있기 때문에이 문제를 해결하는 방법을 잘 모릅니다. 한 간격 동안 동정적으로 움직일 수있는 일련의 시리즈는 후속 간격에서 그렇게하지 않을 수 있습니다.

나는 여기보다 나보다 훨씬 경험이 많고 영리한 사람들이 있다고 확신하므로 거리 측정에 사용할 알고리즘 / 휴리스틱에 대한 아이디어, 시계열 클러스터링에서 사용하는 방법에 대한 제안에 감사드립니다.

내 추측으로는이 작업을 수행 할 수있는 강력한 통계 방법이 없기 때문에 사람들이 통계 문제처럼 생각 하고이 문제를 어떻게 해결 / 해결하는지에 매우 관심이 있습니다.


1
이 질문에 대한 답변이 마음에들 수도 있습니다. stats.stackexchange.com/q/2777/1036
Andy W


1
Dirichlet 프로세스를 기반으로 한 통계 방법 이 있습니다.이 방법 은 모든 샘플에 대해 시점이 동일하지 않은 데이터 세트에 적용됩니다.
Dario

답변:


24

시계열 데이터베이스의 데이터 스트리밍 및 마이닝에서 일반적인 접근 방식은 시리즈를 기호 표현으로 변환 한 다음 유클리드 거리와 같은 유사성 메트릭을 사용하여 시리즈를 클러스터링하는 것입니다. 가장 많이 사용되는 표현은 SAX (Keogh & Lin) 또는 최신 iSAX (Shieh & Keogh)입니다.

위의 페이지에는 거리 측정법 및 클러스터링에 대한 참조도 포함되어 있습니다. Keogh와 승무원은 재현 가능한 연구를 수행하고 있으며 코드를 공개하는 것을 꽤 수용하고 있습니다. 그래서 당신은 그들에게 이메일을 보내 물어볼 수 있습니다. 그래도 MATLAB / C ++에서 작동하는 경향이 있다고 생각합니다.

최근 Java 및 R 구현을 작성하려는 노력이있었습니다.

나는 그것이 얼마나 멀리 떨어져 있는지 모릅니다. 모티프를 찾는 데 적합하지만, 그들이 얻은 거리에 따라 필요에 따라 무언가를 모으는 데 필요한 비트가 있어야합니다 (iSAX 및 거리 메트릭 : 이 부분은 클러스터링 및 주제 검색에 공통적이므로).


1
이것은 좋은 다루기 쉬운 출발점처럼 보입니다. 링크 주셔서 감사합니다.
morpheous

4
헛소리, 나는 SAX 페이지가 내가 본 것 중 가장 추악한 웹 페이지라고 생각한다!
naught101

18

"공감하는 경향이있다"고 말하는 또 다른 방법은 "공적 통합"입니다.

공적분 을 계산하는 표준 방법에는 Engle-Granger 방법과 Johansen 절차 의 두 가지가 있습니다. 이에 대해서는 "R을 사용한 통합 및 공적분 시계열 분석" (Pfaff 2008) 및 관련 R urca 패키지 에서 다룹니다 . R에서 이러한 방법을 찾으려면이 책을 적극 권장합니다.

또한 다변량 시계열 , 특히 U. 시카고의 Ruey Tsay 과정에서 필요한 모든 R 코드가 포함 된 이 질문 을 보는 것이 좋습니다 .


나는 몇 년 전에 공동 통합을 겪었지만, 그것은 나에게 굉장히 복잡해 보였습니다. 나는 덜 이론 (즉, 더 실용적) 솔루션 ...있을 것 기대했다
morpheous

3
Engle-Granger 방법은 특별히 복잡하지 않습니다. 두 계열 사이의 회귀 잔차를 취하여 단위근이 있는지 확인하십시오. 이것은 실용적입니다. 광범위한 문제에 정기적으로 사용됩니다. 즉, 귀하의 질문에 대한 답변에 통계적 지식이 필요하다고 생각합니다 (예를 들어, 정지성, 독립성 등을 이해해야합니다).
Shane

공동 통합을 위해 모든 쌍별 시리즈를 테스트하는 것보다이 방법을 사용하는 것이 더 좋은 방법이 있습니까? 처음에?
Andy W

@ 앤디 : 더 좋은 방법이있을 것이라고 확신하며, 그 소식을 기다리겠습니다. 이것은 매우 기본적인 접근 방식입니다.
Shane

1
> 나는 다른 것을 제안 할 수는 없지만 공적분은 실제로 매우 취약하고 ( '파라 메트릭 가정은 야생 계열이 되었음') 실제 작업에 적합하지 않습니다. 하나의 계열 (공 집적 평균).
user603

4

군집 시계열은 집단 역병 학자, 특히 곤충을 연구하여 발생과 붕괴의 추세를 이해하는 사람들에 의해 상당히 일반적으로 수행됩니다. 집시 나방, 가문비 나무 budoworm, 산 소나무 딱정벌레 및 낙엽송 싹에 대한 작업을 찾으십시오.

실제 군집화의 경우 원하는 거리 측정법을 선택할 수 있습니다. 각 군집은 자료 군 , Kaufmann 및 Rousseeuw 1990과 관련하여 고유 한 장점과 주별 을 가지고 있습니다. 데이터에서 그룹 찾기. 클러스터 분석에 대한 소개 는 시작하기에 좋은 장소입니다. 클러스터링 방법은 시계열을 사용하는 것을 '관리'하지 않으며 동일한 시점에서 측정 된 값만 봅니다. 두 시계열의 수명이 충분히 동기화되지 않으면 클러스터가 작동하지 않습니다.

시계열을 클러스터링 한 후 사용할 클러스터 (가족) 수를 결정하는 데 문제가 있습니다. 유익한 클러스터의 컷오프를 선택하는 방법에는 여러 가지가 있지만 여기서는 문헌이 그다지 좋지 않습니다.


1
y1,t

1
@ user603 당신은 "각 y1, t를 자신의 차원 (즉, N * T 차원)으로 둠으로써 시리즈가 자신의 과거와 높은 상관 관계가 있다는 것을 인정해야합니까?"
B_Miner

2

비슷한 질문에 대한 내 대답을 여기 에서 참조 하십시오 . 간단히 말해서, 데이터의 빠른 푸리에 변환을 수행하고, 입력 데이터가 실제 값인 경우 중복 주파수를 버리고, 빠른 푸리에 변환의 각 요소에 대한 실제 및 가상 부분을 분리하고, R의 Mclust 패키지를 사용하여 모델을 수행하십시오. 각 시계열의 각 요소의 실제 및 가상 부분을 기반으로 클러스터링. 이 패키지는 여러 클러스터 및 밀도에 대한 최적화를 자동화합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.