Search
moon
sun
3️⃣

시계열의 탐색적 자료 분석

3.1 시계열 사용되는 자료 분석

•
일반적 데이터 응용 기법
◦
히스토그램 데이터의 분포를 시각화하여서 데이터의 중심 경향과 분산을 확인
◦
도표 그리기 시계열 데이터를 선 그래프, 산점도, 막대 그래프 등의 다양한 도표로 시각화하여 데이터의 패턴을 확인
◦
그룹화 연산 데이터를 그룹으로 나누어 각 그룹에 대한 특성을 비교하고 분석 (예; 특정 기간에 대한 데이터를 그룹으로 나누어 각 그룹의 평을 비교하는 등의 분석을 수행)
•
시간 기법
◦
데이터가 서로 시간 관계가 있는 상황에서 의미 있음

3.1 친숙한 방법

시계열 데이터와 비시계열 데이터에 적용하는 과정 탐색은 동일함
•
새로운 데이터를 다룰 때 기존의 질문
1.
긴밀한 상관관계를 가지는 열이 있나요?
2.
관심 대상 변수의 전체 평균과 분산은 무엇인가요?
⇒ 도표 그리기, 요약 통계 내기, 히스토그램 적용, 산점도 사용으로 해결 가능
•
시간 고려한 질문
1.
분석값의 범위가 무엇인지?
2.
다른 논리적 단위나 기간에 따라 값이 달라지는가?
3.
데이터가 일관성을 갖고 균등하게 측정 되었는가?
4.
아니면 시간이 흐르면서 측정이나 동작 방식에 변화가 있었는가?
⇒ 히스토그램이나 산점도, 요약통계 + 시간축 고려
<그룹화 연산>

3.1.1 도표 그리기

R이 제공하는 EuStockMarkets 시계열 데이터셋(입회일business day만 포함)
•
head ()함수
◦
데이터 프레임이나 배열의 처음 몇 개의 행을 반환하는 함수
◦
기본적으로 처음 6개의 행을 반환(사용자가 원하는 개수를 지정할 수도)
head 함수
•
plot() 함수
◦
데이터를 서로 다른 시계열 그래프로 자동 분할할 수 있음
mts 객체 사용(다양한 시계열 동시에 다룸/ 단일 시계열 ts 객체 사용)
plot 함수
•
class함수
◦
R 객체의 클래스(class)를 반환하는 함수
•
frequency 함수
◦
데이터의 연간 빈도를 알아냄
•
start와 end함수
◦
일련의 데이터에서 처음과 마지막을 알아냄
frequency 함수
class 함수
start 와 end 함수
•
window 함수
◦
데이터에서 시간의 한 부분 범위를 얻을 수 있음

3.1.2 히스토그램

•
히스토그램(Histogram)
◦
도수분포표를 그래프로 나타낸 것
◦
가로축 : 계급
◦
세로축 : 도수(횟수나 개수 등)
•
히스토그램 + 시간축
◦
시간상 인접한 데이터간의 차이를 구할 수 있음
◦
차이에 대한 히스토그램을 측정할 수 있음
◦
예상치 못한 관점에서 데이터를 바라볼 수 있음
•
hist()와 hist(diff())함수
◦
히스토그램 생성 함수, 주어진 데이터 차분을 계산하는 함수
숨기기
NOT DIFF 데이터의 내제된 추세 반영한 결과 ⇒넓게 퍼져 있고 정규분포를 따르지 않음
DIFF 추세를 제거하고 시간상 인접데이터 차이를 구함 ⇒정규분포를 따르는 형태
•
추세를 제거하기 위해 시간상 인접한 데이터의 차이 구하면, 정규 분포를 따르는 형태로 변화함
•
데이터 샘플링 및 통계 요약을 하거나 질문을 던질 때 시간 규모에 관심을 가져야 함
◦
장기 도표나 차분 히스토그램 시간 규모에 따라 달라짐

3.1.3 산점도

•
산점도(Scatter plot)
◦
비시계열 , 시계열 데이터 모두 유용함
◦
두 변수의 상관관계를 점으로 나타낸것
◦
가로축 : 계급
◦
세로축 : 도수( 횟수나 개수 등)
•
산점도 + 시간축
◦
특정 시간에 대한 두 변수의 관계를 결정할 수 있음
◦
두 변수의 시간에 따른 각각의 변수 값 변동이 갖는 연관성을 결정할 수 있음
▪
두 주가 지수에 대한 산점도 예시
plot 함수 시간에 따른 서로 다른 두 주식의 가치 매우 강한 상관 관계가 있어 보임
diff() 함수로 구한 두 주식의 일일 가치 변동 실제 보이는 만큼 상관관계가 강하지 않음
•
lag 함수
◦
시간을 미루는 함수
lag 함수를 적용한 산점도
•
시간 상 먼저 알게 된 주가의 변동으로 나중의 다른 주가의 변동을 예측해야 함
◦
산점도 확인하기 전 두 주가 중 하나를 1만큼 시간 상 앞으로 당겨야 함(lag 함수)
◦
두 축의 상관 관계 사라진 것 확인 가능
◦
즉, 한 변수로 다른 변수를 예측하지 못함
•
시간에 따른 변화나 서로 다른 시점의 데이터 사이의 관계가 데이터 동작 방식을 이해하는데 유익한 정보인 경우가 많음

3.2 시계열에 특화된 탐색법

- 시계열 분석시 주요 개념
정상성stationarity
자체상관self correlation
허위상관spurious correlation
위 개념을
•
롤링윈도와 확장 윈도 함수
•
자체상관함수self correlation function
•
자기상관함수autocorrelation function
•
편자기함수partial autocorrelation function 의 기법에 적용함

3.2.1 정상성 이해하기

직관적인 정의
•
정상 시계열에서 측정된 시계열은 시스템의 안정된 상태를 반영함
•
정상 시계열은 시간이 경과해도 안정적인 통계적 속성을 가짐
•
평균, 분산이 시간에 따라 일정
정상이 아님을 보여주는 특징(예:AirPassengers 데이터)
•
평균값이 일정하게 유지되기 보다는 시간에 따라 증가함
•
연간 최고점과 최저점 사이의 간격이 증가하므로 분산이 시간에 따라 증가함
•
강한 계절성이 보임
AirPassengers 데이터셋에 대한 도표
정상성의 정의와 증강된 디키-풀러 검정(augmented Dickey-Fuller Test)
정상 과정 : 모든 시차 k에 대해 yt,yt+1,...,yt+ky_t,y_{t+1},...,y_{t+k}의 분포가 t에 의존적이지 않은 것
단위근unit root
확률보행random walk
•
yt=ϕ∗yt−1+ety_t=ϕ*y_{t-1}+e_t
◦
yty_t는 현재시간 t의 시계열 값
◦
ϕϕ는 이전 시간 t-1의 값에 곱해지는 변화율
◦
yt−1y_{t-1}는 이전시간 t-1의 시계열 값
◦
ete_t는 현재 시간 t의 무작위 오차항을 나타냄
◦
ϕ=1, 현재시간 값은 이전 시간 값에 변화 없이 무작위한 오차항이 더해진 것으로 나타남 이 경우 시계열 데이터에는 단위근이 존재하게 됨 데이터의 평균 주위로 계속해서 무작위하게 움직이게 되고 시계열 데이터가 추세를 따르지 않고 무작위하게 움직인다는 것을 확인할 수 있음
ADF 검정(augmented Dickey-Fuller Test)
•
디키-풀러 검정 Δyt=yt−yt−1=(ϕ−1)∗yt−1+etΔy_t=y_t-y_{t-1}=(ϕ-1)*y_{t-1}+e_t ΔytΔy_t는 시계열 데이터의 차분 ϕ 는 추정된 파라미터 값 ϕ 값이 1인지에 대한 검정은 yt−1y_{t-1}에서의 파라미터가 0인지에 대한 t-검정으로 볼 수 있음
•
이러한 검정들이 정상성 문제를 완벽히 판별할 수 없음
•
이 검정들은 단위근과 준 단위근을 구분하기 어려움
•
거짓 양성이 발생할 수 있음
•
검정이 특정한 한계점을 가지고 있으며, 모든 종류의 비정상 시계열 문제를 검정하지 않음
<NOTE > 귀무가설의 대안 설정 : KPSS 검정
•
ADF 검정 Augmented Dickey-Fuller Test은 단위근의 귀무가설을 상정함
•
KPSS 검정 Kwiatkowski-Phillips-Schmidt-Shin Test은 정상과정의 귀무가설을 상정함
실전
•
비정상성과 모델 평가
◦
정상성이 아닌 시계열 모델은 시계열의 평가 지표가 달라짐에 따라 정확도가 달라짐
◦
모델의 평균을 추정하는 데 비정상 평균과 분산을 사용하면 시간이 지날 수록 모델의 편향과 오차가 달라지며, 모델의 신뢰도가 저하될 수 있음
•
시계열의 정상화 위한 변환
◦
분산이 변화하는 경우에 로그와 제곱근 사용함
◦
추세는 차분을 구해 제거함(단 3회 이상 차분 계산 시 정상성 문제 해결 힘듦)
•
정규성normality 가정
◦
데이터가 정규 분포를 따른다는 것의 의미
◦
예측 모델링을 위해 사용되는 많은 통계 기법들은 종속 변수가 정규 분포를 따른다고 가정함 박스-콕스Box-Cox 변환은 종속의 변수 분포를 정규 분포에 가깝게 만들기 위해 사용됨
•
변환의 필요성 검토
◦
데이터 변환 전 원본 데이터 간의 거리와 패턴을 고려
◦
변환 후에도 중요 정보가 유지되는지 검토

3.2.2 윈도우 함수 적용

•
롤링 윈도
◦
시계열에 일반적으로 특화되어 사용되는 함수
◦
데이터 압축하거나 평활화하기 위해 사용되며 데이터를 취합함
◦
시계열 데이터의 특징을 잘 이해하고 시각화함
•
R의 filter() 함수
◦
주어진 시계열 데이터에 대해 주어진 필터(가중치)를 적용하여 필터링 된 결과를 반환
◦
이동 평균 및 계열의 선형함수와 관련된 다른 계산을 할 수 있음
## rnorm 함수로 정규분포를 따르는 난수를 100개 추출합니다 x <- rnorm(n=100, mean=0, sd=10) + 1:100 ## rep 함수로 1/n 값을 n번 반복하는 배열을 만드는 함수를 만듭니다 ## mn에 rep함수를 지정 mn <- function(n) rep(1/n, n) plot(x, type = 'l', lwd = 1) ## 기본 R의 filter 함수로 롤링 평균을 계산합니다. 각각 5개, 50개 단위로 롤링 합니다 ## mn(5) : 윈도우 수가 5개 간격으로 평균계산 ## mn(50) : 윈도우 수가 50개 간격으로 평균 계산 ## lty = 2 : 빨강 , lty = 3 : 녹색 lines(filter(x, mn( 5)), col = 2, lwd = 3, lty = 2) lines(filter(x, mn(50)), col = 3, lwd = 3, lty = 3)
R
복사
롤링 평균 평활화로 탐색적 곡선 두개를 만듬
•
이 곡선 이용하여 노이즈가 많은 데이터의 추세를 찾음
•
선형동작의 어떤 종류의 편차가 단순한 노이즈인지 조사해볼 수 있음
•
filter함수는 일차변환에 기반하므로 일차결합하지 않은 함수에서는 사용할 수 없음
•
zoo 패키지의 rollapply함수를 사용하는 것이 유용함
## 기능을 좀 더 '사용자 정의'하여 사용할 수도 있습니다. install.packages("zoo") require(zoo) ## x를 zoo 객체로 만들어 각 데이터를 인덱싱 해 줍니다 ## rollapply 함수는 데이터, 윈도우크기, 적용함수, 롤링적용 정렬 방향, ## 윈도우크기만큼 데이터가 없어도 적용할 것인가? 등의 인자 값을 지정합니다 ## rollapply 함수는 이동평균이나 합계(sum()) 함수같은 연속연산이 가능 ## align left 미래에서 과거 방향으로 이동 평균 / align right는 과거에서 미래 방향으로 이동평균 ## 미래데이터를 사용할때는 사전관찰 문제가 발생할 수 있음 ## partial = True 윈도우가 20일때, 널값이 있어 19개의 데이터포인트만 있어도 계산한다 f1 <- rollapply(zoo(x), 20, function(w) min(w), align = "left", partial = TRUE) f2 <- rollapply(zoo(x), 20, function(w) min(w), align = "right", partial = TRUE) plot(x, lwd=1, type='l') lines(f1, col=2, lwd=3, lty=2) lines(f2, col=3, lwd=3, lty=3)
R
복사
<시계열을 위한 R의 다양한 옵션>
•
ts 객체
◦
균등한 간격의 완전한 시계열을 가정
◦
시계열의 시작, 끝, 빈도만을 저장함
◦
연도와 월같이 반복되는 주기 지원
•
zoo 객체
◦
타임스탬프를 색인 속성으로 저장(균등한 주기적인 시계열을 요구하지 않음)
◦
수직이나 수평으로 출력
◦
벡터나 행렬
확장 윈도expanding window
•
시계열 분석에서 사용되는 윈도(window) 기법중 하나
•
롤링윈도rolling window와 달리, 일정한 크기의 윈도를 유지하는 대신 데이터를 확장하여 시계열 전체 데이터를 포함할 때까지 윈도를 확장함
•
안정적인 요약통계를 추정시 의미있음
•
시간에 따른 검정 통계량test statistic의 추정치 확실
•
시스템이 정상일 때 가장 잘 동작함
•
더 많은 정보 수집:실시간으로 요약통계를 추정할 때, 온라인online 상태로 유지하는데 유용함
# 확장 윈도우 plot(x, type = 'l', lwd = 1) lines(cummax(x), col = 2, lwd = 3, lty = 2) # 최대값 lines(cumsum(x)/1:length(x), col = 3, lwd = 3, lty = 3) # 평균
R
복사
•
빨강색 선: 최대값, 연두색점선: 평균
•
데이터의 특정 패턴을 나타내는데 사용
•
확장 윈도를 사용하여 계산한 최대값은 시계열 데이터의 전체적인 추세를 고려하여 증가하므로 확장윈도를 단조함수로 볼 수 있음
•
단조함수: 함수값이 증가하거나 감소하는 특성을 가지는 함수
•
확장 윈도의 장기적인 기억 때문에 근본적인 추세가 덜 두드러지고, 보다 부드러운 패턴을 나타냄, 롤링 평균보다 더 낮음
◦
cummax()와 cummin() 함수는 각각 누적 최대값과 누적 최소값을 계산하는 함수
◦
cumsum() 함수를 활용하여 누적 합계를 구할 수도 있음
•
시계열 데이터 x를 선 그래프로 그린후 cummax()함수 사용해 x의 누적 최대값 계산(시계열 데이터에서 각 지점까지의 최대값을 누적하여 계산한 것)
•
cumsum() 함수를 사용해 x의 누적 합계를 계산하고 이를 각 데이터 포인트까지의 평균으로 나누어 평균을 구함
•
첫번째 인수 x는 롤링 통계량을 계산할 데이터 자체
•
두번째 인수seq_along(x)는 데이터 x의 길이에 따라 순차적인 정수를 생성, 해당 데이터의 길이에 따라 윈도의 크기를 동적으로 조정하는 인자로 사용
◦
function(w) max(w)는 각 이동 창에 대해 최대값을 계산하는 함수를 정의
◦
function(w) mean(w)는 각 이동 창에 대해 평균을 계산하는 함수를 정의
사용자 정의 롤링 함수
•
적용 가능한 상황에서만 고려해야 함
•
특정 도메인 지식이 유용한 상황에서 특히 유용하게 사용될 수 있음
•
도메인 지식 활용
◦
주식 시장 데이터에서는 이동 평균 이상의 지표를 사용하여 특정 패턴을 탐지
•
노이즈 제거
◦
데이터에서 출렁이는 장치의 노이즈와 같은 추세가 없는 패턴을 제거하기 위해
◦
시계열 데이터의 신호와 노이즈를 분리하고 깨끗한 신호를 추출
•
패턴 탐지
◦
혈당 증가와 같은 단조로운 패턴을 탐지하여 건강 상태를 모니터링하는 데 사용

3.2.3 자체상관의 파악과 이해

•
‘자체상관’: 특정 시점의 값이 다른 시점의 값과 상관관계가 있다
ex) case1: 5월15일의 온도가 높아질때 8월15일의 온도도 같이 높아지는 상관관계(상관관계 有)
case2: 5월15일의 온도 정보만으로는 8월15일의 온도 범위의 어떤 정보도 알 수 없음(상관관계 無)
•
‘자기상관’: 특정 시점에 고정되지 않으며 자체상관을 일반화한 것, 특정 시점에 고정거리를 갖는 두 시점에 상관관계가 존재하는지와 같은 좀 더 일반적인 질문을 던져 볼 수 있음
🌟
시계열 데이터의 성질을 분석하는데 있어서 중요하게 활용되고 있는 것이 상관도표(Correlogram) 상관도표는 Auto Correlation Function(ACF)과 Partial Auto Correlation Function(PACF) 중 하나를 그래프로 표현한 것. 상관도표를 활용하여 현 시점의 자료와 시점의 차이(lag)를 가지는 자료를 비교하여 어떤 관계를 가지고 있는지를 분석할 수 있음. 즉, 상관도표를 활용하여 시점의 차이의 영향력을 알아볼 수 있음.
자기상관(Auto Correlation) 기능
•
‘계열 상관’이라고도 알려져 있음
🌟
어떤 신호와 자신을 지연함수로 시간상 지연 이동한 신호 간의 상관관계
•
상관값이 두 변수 사이의 선형 관계의 크기를 측정하는 것처럼 자기상관은 시계열의 시차 값(Lagged Values) 사이의 관계를 측정
•
시간의 흐름에 따라 독립적이지 않고 과거의 데이터의 영향을 받는 상관관계
ex) 오늘 주식의 가격이 어제 가격에 영향을 받고 내일의 가격에 영향을 줌 → 이러한 경우 시계열 자료는 자기상관관계를 갖는다
시간에 따른 상관 정도를 나타내기 위해 사용하는 통계량 → 자기 상관 함수
자기 상관 함수(Auto Correlation Func, ACF) 특징
🌟
시간에 따른 상관 정도를 나타내기 위해 사용하는 함수
•
ACF의 주기성 = 원래 과정 주기성
•
주기 함수들의 합의 자기 상관 = 각 개별 함수에 대한 자기 상관의 합
•
시차 = 0 인경우, 모든 시계열의 자기 상관 계수 = 1
•
ACF는 양과 음의 시차에 관해서 대칭
•
0이 아닌 유효한 ACF 추정을 결정하는 통계적 규칙은 +/-1.96 x sqrt(n)의 임계영역 사용하는 것
편자기 상관 함수(Partial Auto Correlation Func, PACF) = 부분 자기 상관 함수
•
어떤 것들에 대한 상관관계를 보려고 할 때, 그에 영향을 주는 요소들을 제외하고 상관관계를 볼 때 PACF 를 이용
•
자신에 대한 그 시차의 편상관
•
두 시점 사이에 존재하는 모든 정보 고려
편자기 상관 함수(PACF) 특징
🌟
시간에 따른 시차의 편상관정도를 나타내기 위해 사용하는 함수
•
어떤 데이터가 유용한 정보를 가지고, 어떤 데이터가 단기간의 고조파인지 보여줄 수 있음

자기 상관 함수(ACF) VS 편자기 상관 함수(PACF) - 노이즈가 없는 경우

두 사인 함수와 각 함수에 대한 ACF, PACF 도표

정상 데이터의 ACF는 0으로 빠르게 떨어져야함. 비정상 데이터의 경우, 시차가 1일 때의 값은 큰 양수

자기 상관 함수(ACF) VS 편자기 상관 함수(PACF) - 노이즈가 있는 경우

노이즈가 많은 두 사인 곡선과 이 둘의 합. ACF, PACF 도표

🌟
결론
•
어느 시점까지의 데이터가 현재 시점에 영향을 주는지 연산하는 함수
•
AR, MR 모델 적합성을 설정할때 필요한 함수(절단값으로 설정됨)
절단값: 아래 그림 중 값이 파란색 부분으로 들어오기 직전의 값

AR/MA 모형과 ACF/PACF 의 관계

AR(p)
MA(q)
ACF
점차적으로 감소
시차 q 이후에 0
PACF
시차 p 이후에 0
점차적으로 감소
🌟
참고

AR (Autoregression / 자기회귀)

•
이전 관측값의 오차항이 이후 관측값에 영향을 주는 모형 P 시점 전의 값이 현재 값에 영향을 줌 ex) ar(1)은 1시점 전에 의해 현재시점이 영향을 받는 모형, ar(2)는 2시점 전까지에 의해 현재 시점에 영향을 주는 모형

MA(Moving Average / 이동평균 모형)

•
관측값이 이전의 연속적인 오차항의 영향을 받는다는 모형 데이터의 평균값 자체가 시간에 따라 변화하는 경향을 시계열 모형으로 구성 한 것 ex) ACF는 3시점 이후 절단점을 보이고 PACF가 빠르게 감소하면 MA(2) 모형이라고 볼 수 있음
참고사이트

3.2.4 허위상관

허위 상관(Spurious Correlation)을 나타내는 시계열의 특징
🌟
엄청나게 강한 상관관계를 가지고 있는 것처럼 보이지만, 그 결과를 설명하는 어떤한 원인가설도 없는 경우(인과 관계를 설명할 수 없는 경우)를  허위 상관관계라고 말함
•
근본적인 추세를 가진 데이터 → 정상 시계열보다 정보가 더 많기 때문에 여러 데이터가 함께 움직일 가능성이 높음
•
계절성을 가진 데이터 → 핫도그 소비와 익사(여름) 사이의 허위 상관관계
•
시간이 지나면서 변한 데이터의 수준이나 경사의 이동 → 무의미하게 높은 상관관계를 가진, 아령처럼 생긴 분포도를 생성
•
누적 합계 → 상관관계를 실제보다 더 좋아 보이게 만들기 위한 속임수로 사용

수영장에 빠져 익사한 사람 수와 니콜라스 케이지가 출연한 영화 수의 허위 상관

일부 허위상관은 놀라울 정도로 설득력이 있어 보임(출처: https://perma.cc/6UYH-FPBX)
공적분(Cointegration)과의 관계
🌟
두 시계열 사이의 진짜 관계
•
공적분과 허위 상관 모두 높은 상관관계가 관측되어 이를 구별하는 것은 어려움
•
허위 상관은 어떤 관계도 없어도 되지만, 공적분 시계열은 서로 밀접한 관련성을 가짐
ex) ‘술 취한 사람과 그의 강아지’

3.3 유용한 시각화

•
데이터 시각화 : 데이터 분석 결과를 시각적으로 명확하게 표현하고 의사소통하는 것
◦
데이터를 한 눈에 이해할 수 있도록 함.
→ 시계열의 완벽한 탐색적 분석의 핵심은 그래프이다.
•
데이터 시각화의 효과
◦
분석할 때, 방대한 데이터에서 이상치, 패턴 등 주요 정보를 발견할 때 용이함.
◦
공유할 때, 사용자의 흥미 유발 및 몰입도를 제고시킬 수 있음.
따라서, 일반적인 질문의 해답을 구할 수 있는 방향의 시각화가 필요함.
•
복잡도에 따라 활용할 수 있는 다양한 시각화 기법
◦
종합적인 시간 분포도를 이해하기 위한 1차원 시각화
◦
시간에 따른 여러 측정치의 전형적인 궤적을 이해하기 위한 2차원 히스토그램
◦
두 개의 차원을 차지하는 시간, 또는 차원을 전혀 차지하지 않지만 내재된 시간에 대한 3차원 시각화

+ 데이터

3.3.1 1차원 시각화

여러 측정의 구성 단위가 있는 경우 시계열을 동시에 고려해야 함.
•
시각적으로 누적하여 시간에 따른 개별 분석 단위 강조하기
•
전체 회원을 대상으로 ‘붐비는’ 시기를 나타내거나 특정 회원의 ‘전체 활동 기간’ 중 활발했던 기간의 분포를 감각적으로 얻을 수 있음.
→ 간트 차트 : 프로젝트 일정관리를 위한 바(bar) 형태의 도구
# install.packages("timevis") # Gantt Chart require(timevis) library("data.table") donations <- fread("donations.csv") d <- donations[, .(min(timestamp), max(timestamp)), user] names(d) <- c("content", "start", "end") d <- d[start != end] timevis(d[sample(1:nrow(d), 20)])
R
복사
timevis(d[sample(1:nrow(d), 20)])
R
복사
‘timevis’ 함수는 d 데이터 프레임에 포함된 임의의 20개 행을 샘플링한 다음 시각화함. → 시간에 따라 데이터를 표시할 수 있는 대화형 시각화 도구를 사용하여 이루어짐.(간트 차트)
(프로젝트 관리에 유용한 차트임. 하나 이상 측정된 과정을 위한 시계열 분석에도 유용하게 사용됨.)
장점
1.
작업을 시간 및 수량적으로 일목요연하게 표시
2.
작업계획과 실적의 계속적 파악 용이
3.
작업자별, 부문별 업무성과의 객관적 상호 비교 가능
단점
1.
계획변화 및 변경 어려움.
2.
복잡하고 정밀한 일정계획 수립 어려움.
3.
작업상호간의 유기적인 관련성 파악 어려움.
4.
사전 예측 및 사후 통제 곤란

3.3.2 2차원 시각화

→ python으로 재구성
시간이 한 개 이상의 축에서 나타나는 특별한 경우
→ 매일, 매년 앞으로 나아가는 시간축과 시간, 요일 등에 따라서 시간을 펼쳐보는 경우
•
AirPassengers 데이터를 활용하여 계절성과 추세를 살펴보기
◦
월의 진행을 반영하는 축에 기반하여 각 연도의 도표 그리기
t(matrix(AirPassengers, nrow = 12, ncol = 12))
R
복사
colors<-c("green","red", "pink", "blue", "yellow","lightsalmon", "black", "gray", "cyan", "lightblue", "maroon", "purple") matplot(matrix(AirPassengers, nrow = 12, ncol = 12), type = 'l', col = colors, lty = 1, lwd = 2.5, xaxt = "n", ylab = "Passenger Count") legend("topleft", legend = 1949:1960, lty = 1, lwd = 2.5, col = colors) axis(1, at = 1:12, labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
R
복사
◦
오류가 발생하여 진행안됨. → Python으로 진행
Pass_mat = Pass_val.reshape([12,12])
Python
복사
Date_lab = ["Jan", "Fab", "Mar", "Apr", "May","Jun", "Jul","Aug", "Sep", "Oct", "Nov", "Dec"] plt.rcParams['font.family'] = 'TImes New Roman' plt.rcParams['font.size'] = 13 fig = plt.figure(figsize=(16, 8)) ax = fig.add_subplot(1, 1, 1) ax.grid(True) for i in range(Pass_Trans.shape[0]): ax.plot(Pass_Trans[:,i], color = Color_map[i]) ax.xaxis.set_major_locator(plt.MaxNLocator(12)) ax.set_xticks(np.arange(0, len(Pass_Trans)+1)) ax.set_xticklabels(Date_lab) ax.set_ylabel("Passenger Count", Fontsize = 13) ax.legend(np.arange(1949, 1961,1), loc='upper left')
Python
복사
•
모든 연도가 공유하는 month에 대해 정의한 그래프
◦
항공 여객 수의 최고치는 7월 또는 8월에 기록됨.
◦
대부분 연도의 3월은 국소적 최고치를 보임.
•
연도별 월별 곡선 도표
•
각 month에 대해 1949~1960년도에 대한 그래프 그리기
◦
월 별 탑승객 수와 연도 별 탑승객 증가 추세를 한 번에 확인
→ monthplot() 함수를 활용함 : 시계열 데이터의 월별 패턴 시각화
계절성이나 월별 변동성을 이해하는 데 도움이 됨.
1월과 7월 사이에 감소하는 추세를 볼 수 있음.
•
시계열 문맥에서 한 축은 시간, 다른 한 축은 관심 분야 단위로 구성된 2차원 히스토그램 그리기
◦
데이터의 구간을 나누어 구간화된 히트맵을 생성함.
◦
다중 시계열 데이터를 한 눈에 확인할 수 있음. / 계절성을 파악하는 데 활용함.
▪
Ex. 기준 [0, 10, 20, 30] / 데이터 [2, 13, 8, 27, 11]
→ 출력 값 [1, 2, 1, 3, 2]
np.searchsorted()
•
충분한 데이터가 없는 경우 해당 도표는 유용하게 사용되지 않음.
heatmap의 다양한 표현
•
hexbin 메서드는 육각형의 그리드형태로 값을 반환하는 그래프이다.
w1<- words[V1== 1] names(w1)<- c("type", 1:270)w1<- melt(w1,id.vars= "type") w1<- w1[,-1]names(w1)<- c("Time point", "Value") plot(hexbin(w1))
R
복사
plt.hexbin(f, df.values, gridsize = 30, cmap = "Blues") plt.xlabel("Year") plt.ylabel("Count") plt.colorbar(label = 'Frequency')
Python
복사

3.3.3 3차원 시각화

→ python으로 재구성
•
3차원 시각화 : 전체적인 윤곽을 이해하는 데 도움이 됨.
◦
소량의 데이터는 3차원으로 확장된 산점도로 표현하는 것이 2차원 히스토그램으로 표현하는 것보다 데이터의 윤곽을 이해하는 데 도움을 줄 수 있음.
◦
차원이 한 개 더 있는 만큼 다양한 시각에서 데이터의 분포를 확인할 수 있음.
require(plotly) require(data.table) months = 1:12 ap = data.table(matrix(AirPassengers, nrow = 12, ncol = 12)) names(ap) = as.character(1949:1960) ap[, month := months] ap = melt(ap, id.vars = 'month') names(ap) = c("month", "year", "count") p <- plot_ly(ap, x = ~month, y = ~year, z = ~count, color = ~as.factor(month)) %>% add_markers()%>% layout(scene=list(xaxis = list(title = 'Month'), yaxis = list(title = 'Year'), zaxis = list(title = 'PassengerCount')))
JavaScript
복사
melt() 함수를 사용하여 데이터를 재구성합니다. 이를 통해 연도와 월에 따른 항공 여객 수를 담은 데이터 프레임을 만듦.
•
Python 사용한 3D 산점도 생성 및 데이터 시각화 예시
import plotly.graph_objects as go import pandas as pd import plotly.express as px # Assuming AirPassengers data is already available in Python # Create a DataFrame months = list(range(1, 13)) ap = df # Melt the DataFrame ap_melted = pd.melt(ap.reset_index(), id_vars='month', var_name='year', value_name='count') ap_melted.columns = ['month', 'year', 'count'] # Convert month and year to categorical variables ap_melted['month'] = ap_melted['month'].astype('category') ap_melted['year'] = ap_melted['year'].astype('category') # Create 3D scatter plot fig = go.Figure(data=[go.Scatter3d( x=ap_melted['month'], y=ap_melted['year'], z=ap_melted['count'], mode='markers', marker=dict( size=5, # color=ap_melted['month'], # Color by month colorscale='Viridis', # You can change the colorscale if needed opacity=0.8 ) )]) # Update layout fig.update_layout(scene=dict( xaxis_title='Month', yaxis_title='Year', zaxis_title='Passenger Count' )) fig.show()
Python
복사
•
시계열 데이터가 아닌 경우, 데이터 분류를 위한 분포 확인 예시 → Matlab

시계열의 탐색적 자료 분석 [참고]

자기상관(autocorrelation 또는 series correlation)
어떤 신호(시계열)와 그 신호를 지연 이동한(time-lagged) 신호간의 상관관계
•
피어슨 상관 계수(link)
•
교차상관(cross-correlation)
◦
교차상관 분석 예
팔당댐 방류량과 청담대교 수위간의 CCF(Cross-Correlation Function) 결과
◦
15시간 전 방류량(tototf)이 청담대교 수위와 상관성이 가장 높았음
자기상관함수(ACF: autocorrelation function) (link)
편자기상관함수(PACF: partial autocorrelation function) : 시간 효과(추세, 계절성)를 제거하는 방식의 자기상관함수
공적분(cointegration): 허위상관성이 아닌 두 시계열의 연관성(또는 인과관계)을 보여주는 통계적 지표
•
비유: 산책하는 집주인과 강아지의 이동 경로