곡선 모양을 기반으로 시계열 군집을 수행 할 수 있습니까?


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패키지 를 사용하여 이러한 변환 된 곡선을 군집화합니다.

두 가지 질문이 있습니다.

  1. 이것이 합리적인 탐색 적 접근입니까?
  2. 데이터를 kml이해할 수 있는 종단 데이터 형식으로 변환 하려면 어떻게해야합니까? 모든 R 스 니펫은 대단히 감사하겠습니다!

2

1
@Jeromy Anglin 링크 감사합니다. 운이 kml있었나요?
fmark

간략히 살펴 보았지만, 현재는 개별 시계열의 선택된 기능 (예 : 평균, 초기, 최종, 변동성, 급격한 변화의 존재 등)을 기반으로 맞춤형 클러스터 분석을 사용하고 있습니다.
Jeromy Anglim


@Rob이 질문은 불규칙한 시간 간격을 가정하지는 않지만 실제로는 서로 가깝습니다 (저는 글을 쓸 당시 다른 질문은 생각 나지 않았습니다).
chl

답변:


26

종단 데이터를 분석하기위한 몇 가지 지침은 @Jeromy가 제공하는 링크에서 논의되었으므로 특히 기능적 데이터 분석에 대한 내용을주의 깊게 읽으십시오. "길이 데이터의 기능 클러스터링"또는 불규칙하게 샘플링 된 궤적의 모델 기반 클러스터링과 특히 관련된 PACE Matlab 도구 상자에 대한 인터넷 검색을 시도하십시오 (Peng and Müller, 온라인 경매에 대한 응용 프로그램을 통해 희소하게 관측 된 확률 적 프로세스의 거리 기반 클러스터링 , 응용 통계 연보 2008 2 : 1056). 재무 시계열에 대한 좋은 통계 프레임 워크가 있다고 생각할 수 있지만 그 사실을 모르겠습니다.

kmltniyi=(yi1,yi2,,yit)d(yi,yj)=t1k=1t(yikyjk)2. 누락 된 데이터는 (Calinski 기준을 계산하기 위해) 가장 가까운 이웃 유사 대치 방식과 관련된 선행 거리 측정 (고어 조정)을 약간 수정하여 처리됩니다. 실제 데이터가 어떻게 보이는지 나 자신을 나타내지 않으므로 제대로 작동하는지 말할 수 없습니다. 적어도, 그것은 "다항식 (polynomial)"형태의 종 방향 성장 곡선에서 작동하지만, 당신이 매우 특정한 패턴을 탐지 할 수있을 것입니다. 예). 잘못 정렬 된 커브를 클러스터링하는 데 관심이 있다면 다른 솔루션을 반드시 확인해야합니다. 상갈리 (Sangalli) 등의 기능적 군집화 및 정렬 및 이의 언급은 좋은 출발점을 제공 할 수있다.

kmlclusterizLongDataidt

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)

다음 두 수치 시뮬레이션 원시 데이터 (도에서 사용 Calinski 기준에 따른 다섯 클러스터 솔루션이다 FPC 용 패키지). 스케일 버전을 표시하지 않습니다 .

대체 텍스트

대체 텍스트


1
자세한 답변을 보내 주셔서 감사합니다. 나는 주 잖아 kml내 데이터에서 실행,하지만 당신은 제안으로 주로 크기보다는 곡선 모양을 기반 클러스터링, 그래서 나는 문제를 개선 할 수 있는지 확인하기 위해 몇 가지 사전 처리 단계를 시도하고있다. Sangalli 등의 작품. 내가하고 싶은 일에 대해 매우 유망 해 보입니다. 그러나 그들의 접근 방식을 구현할 수는 없습니다. 이 프로젝트에 대한 작업을 구현할 시간이 없을 것입니다. FOSS 구현에 대해 알고 있습니까?
fmark

@ fmark 내 지식에 OSS 구현이 없습니다 (하지만 최근에는 작업이 진행 중입니다). 그것들은 R에서 이용 가능한 k-means와 k-medoid를 사용합니다. 제 생각에 가장 중요한 부분은 주형 곡선을 생성하고 뒤틀림 기능을 구현하는 것입니다. 이를 위해 Morphometry / Proruste 분석을 보거나 Matlab PACE 도구 상자의 코드를 조회하여 추가 정보를 찾을 수 있습니다 (그러나 EM 또는 이와 유사한 항목으로 가득해야 함). 최선의 방법은 다음과 같습니다. 저자에게 알고리즘의 무료 구현을 요청하십시오.
chl

2
나는 긍정적 : 그들의 종이 얻는 경우에 나는 다시보고 있습니다 곡선 클러스터링을위한 K-평균 정렬 이 스스로 작업을 수행하고자하는 사람에게 유용 할 수 있습니다 좀 더 구현 세부 사항이 있습니다.
fmark

1
왜 평균을 제거하고 표준 표준으로 나눌 수 있습니까? 그러면 결과는 모양에 대한 것이 아니라 크기에 대해서는 훨씬 적습니다.
naught101

9

다른 접근법은 Wang, Xiaozhe, Kate Smith 및 Rob Hyndman의 stats.se 일반에 의해 발표되었습니다.

'시계열 데이터의 특성 기반 클러스터링'. 데이터 마이닝 및 지식 발견 13, no. 3 (2006) : 335–364 .

그들이 적다:

본 논문은 구조적 특성에 기초한 시계열 클러스터링 방법을 제안한다. 다른 대안과 달리이 방법은 거리 메트릭을 사용하여 점 값을 클러스터링하지 않고 시계열에서 추출 된 전역 기능을 기반으로 클러스터링합니다. 특징 측정은 각각의 개별 시리즈로부터 얻어지며 비 감독 신경망 알고리즘, 자체 구성 맵 또는 계층 적 클러스터링 알고리즘을 포함한 임의의 클러스터링 알고리즘으로 공급 될 수 있습니다. 시계열을 설명하는 전역 측정은 추세, 계절성, 주기성, 연속 상관 관계, 왜도, 첨도, 혼돈, 비선형 성 및 자기 유사성과 같은 기본 특성을 가장 잘 포착하는 통계 연산을 적용하여 얻습니다. 추출 된 전역 측정 값을 사용하는 방법 군집 때문에 시계열의 차원을 줄이고 누락되거나 시끄러운 데이터에 훨씬 덜 민감합니다. 또한 클러스터링 입력으로 사용해야하는 기능 세트에서 최상의 선택을 찾기위한 검색 메커니즘을 제공합니다.

R 코드는 Rob의 블로그 에서 구할 수 있습니다 .


6

시계열 클러스터링에 대한 Eamonn Keogh (UC Riverside) 의 작업을 볼 수 있습니다. 그의 웹 사이트에는 많은 리소스가 있습니다. 그가 Matlab 코드 샘플을 제공한다고 생각하므로 이것을 R로 변환해야합니다.

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