본문 바로가기
비정형데이터분석

[비정형 데이터 분석] 변화 분석

by rubyda 2021. 4. 7.
728x90
Introduction

 

비정형데이터분석 과목을 수강하며 공부한 내용을 정리하는 포스팅입니다. 해당글은 순천향대학교 빅데이터공학과 우지영 교수님이 진행하시는 "비정형데이터분석" 강의를 기반으로 작성되었습니다.

 

파형 데이터에서의 변화 분석

: 파형 데이터에서 급격한 변화를 감지하고 이를 특징화 하는 방법입니다.

 

변화 분석의 종류는 다음 3가지가 있습니다.

 

  1. 평균의 변화
  2. 분산의 변화
  3. 평균과 분산의 변화

R에서는 changepoints 패키지를 사용해서 변화 분석을 할 수 있습니다. 실습을 해보면서 배운 내용을 다시 정리 해보는 시간을 가지도록 하겠습니다.

 

install.packages("changepoint")
library(changepoint)

1. 평균의 변화

set.seed(123) 
sim_mean <- c(rnorm(100, 0, 1),
              rnorm(50, 1.5, 1),
              rnorm(90, 0, 1),
              rnorm(120, -0.8, 1))

plot.ts(sim_mean)

 

다음과 같이 데이터를 생성한 후 그래프를 그려 보았습니다.

 

이제 평균의 변화가 어떠한지 분석해 보도록 하겠습니다. 사용할 함수는 cpt.mean 입니다. 

m_AMOC <- cpt.mean(sim_mean, penalty = "BIC")
plot(m_AMOC, type = "l", xlab = "Index", cpt.width = 4)

 

 

cpt.mean 에서는 method 파라미터를 사용해서 변화를 어떻게 측정할지를 옵션으로 선택할 수 있는데 가장 기본값은 AMOC입니다. 따라서 위의 예제는 AMOC로 측정된 변화입니다.

 

Method의 종류는 AMOC, PELT, BinSeg, SegNeigh등이 있습니다. 각 특징은 다음과 같습니다.

 

- AMOC: 변화점이 하나의 경우 사용되는 방법입니다.

- PELT: 정확하고 빠르지만 모든 분포에서 사용할 수 없는 단점이 있습니다.

- BinSeg, SegNeith: 정확하고 빠른 장점이 있습니다. (Binseg 방법이 SegNeigh보다 빠른 옵션으로 변화점이 여러개인 경우 통상적으로 사용 된다고 합니다.) 

 

다른 방법들로도 분석하여 비교해 보도록 하겠습니다.

m_BinSeg <- cpt.mean(sim_mean, penalty = "BIC", method = "BinSeg")
plot(m_BinSeg, type = "l", xlab = "Index", cpt.width = 4)

m_PELT <- cpt.mean(sim_mean, penalty = "BIC", method = "PELT", Q = 5)
plot(m_PELT, type = "l", xlab = "Index", cpt.width = 4)

BinSeg와 유사해 보이지만 약간의 차이가 있습니다. 그 차이를 알아보기 위해 변화가 발생한 시점을 알아보도록 하겠습니다. 사용할 함수는 cpts입니다.

# AMOC
cpts(m_AMOC)
# BinSeg
cpts(m_BinSeg)
# PELT
cpts(m_PELT)

그래프에서는 BinSeg와 PELT가 유사해 보이지만, 발생한 시점의 값을 실제로 확인해보니 차이가 존재하였습니다.

2. 분산의 변화

분산의 변화 분석을 해보도록 하겠습니다. 먼저 다음과 같이 데이터를 생성해 줍니다.

sim_var <- c(rnorm(100, 0, 1),
              rnorm(50, 0, 2),
              rnorm(90, 0, 1),
              rnorm(120, 0, 0.5))
plot.ts(sim_var)

먼저 데이터를 보고 스스로 어느 부분이 분산의 변화가 있는지 한번 생각을 해보고! 함수를 사용해서 비교해 보면서 하면 변화 분석에 대한 공부를 하는데 더 도움이 되겠죵?? 스스로 생각해 보는 연습을 해볼 필요가 있습니다!!

 

생각을 해봤다면 이제 함수를 사용해 보도록 하겠습니다. 사용할 함수는 cpt.var 입니다. Method는 PELT를 사용해보도록 하겠습니다.

v_pelt <- cpt.var(sim_var, method = "PELT")
plot(v_pelt, type = "l", cpt.col = "blue", xlab = "Index", cpt.width = 4)

어떤가요?? 생각했던 부분과 비슷한가요??

 

3. 평균과 분산의 변화

 

평균과 분산의 변화 분석을 해보도록 하겠습니다. 다음과 같이 데이터를 생성해 줍니다.

sim_mv <- c(rnorm(100, 0, 1),
            rnorm(50, 1, 2),
            rnorm(90, 0, 1),
            rnorm(120, -0.8, 0.5))
plot.ts(sim_mv)

mv_pelt <- cpt.meanvar(sim_mv, method = "PELT")
plot(mv_pelt)

 

파형 데이터에서의 변화를 감지하고 이를 특징화 하는 방법들을 알아보았습니다. 

 

현재 수업 시간에서는 휴대폰 센서 데이터를 활용하여 사람의 행동을 예측하는 분석을 진행하고 있습니다. 그렇기 위해서 신호 데이터를 사용해서 다양한 변수를 도출해야 합니다.

 

오늘 정리했던 변화 분석으로도 많은 변수들을 도출할 수 있습니다. 

 

저는 우선 변화가 발생한 횟 수, 변화가 발생한 그 위치에 값에 대한 통계적 특징(Mean, Min, Max, std 등) 을 추출해 보았는데요. 충분히 더 좋은 변수들을 추출할 수 있을것 같은데 추가적으로 새로운 변수를 추출하게 되면 포스팅에 추가하도록 하겠습니다.

 

 

 

참고)

kevin-kotze.gitlab.io/tsm/ts-2-tut/

 

Tutorial: Change points and structural breaks

Introduction When working with data in R there are many different data objects that may be incorporated within different coding paradigms. For example, you could work with basic vectors and matrixes, or you could make use of variables that are incorporated

kevin-kotze.gitlab.io

scienceon.kisti.re.kr/srch/selectPORSrchArticle.do?cn=DIKO0014967280