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.