[R 시계열분석 기초] ACVF, ACF, PACF 개념 완전 정복

시계열 데이터에서 왜 필요한가?

시계열 데이터는 시간의 흐름에 따라 기록된 데이터입니다.

이 데이터를 분석할 때 중요한 건 과거 값이 현재나 미래 값에 영향을 주는지 확인하는 것이죠.

이걸 확인하려면 서로 시간 간격(lag)이 있는 값들끼리 얼마나 관련이 있는지 알아야 하는데, 그걸 측정하는 게 바로

  • 자기공분산함수(ACVF)

  • 자기상관함수(ACF)

 

자기공분산함수(Autocovariance Function, ACVF)

정의

시간차(시차) lag = k일 때, 시계열 데이터의 값

XtX_t

XtkX_{t-k}

가 얼마나 함께 변하는지 측정하는 값.

공식으로 쓰면

γ(k)=Cov(Xt,Xtk)=E[(Xtμ)(Xtkμ)]\gamma(k) = \text{Cov}(X_t, X_{t-k}) = E[(X_t – \mu)(X_{t-k} – \mu)] μ\mu

: 시계열의 평균

  • kk

    : 시차 (lag)

예)

  • k=0k=0

    → 자기자신과의 공분산 = 분산

  • k=1k=1

    → 바로 이전 값과의 공분산

  • k=2k=2

    → 두 시점 전 값과의 공분산

특징

  • γ(0)\gamma(0)

    데이터의 분산

  • 시차가 멀어질수록 공분산은 보통 작아짐

  • 단위에 영향 받음 (데이터의 크기 스케일에 따라 값이 달라져서 해석이 어렵기도 함)

 

자기상관함수(Autocorrelation Function, ACF)

정의

자기공분산함수의 정규화 버전

공식으로는

ρ(k)=γ(k)γ(0)\rho(k) = \frac{\gamma(k)}{\gamma(0)}

즉,

  • 자기공분산을 분산(자기공분산의 0시차 값)으로 나눠서 -1 ~ 1 사이 값으로 변환

  • 크기 단위 상관없이 값의 패턴만 확인 가능

특징

  • ρ(0)=1\rho(0) = 1

    (자기 자신과의 상관은 항상 1)

  • ρ(k)\rho(k)

    값이 0에 가까우면 관련성 없음

  • 1이나 -1에 가까우면 강한 양의/음의 상관관계

  • 시차(lag)가 멀어질수록 보통 점점 0에 수렴

 

요약 정리

용어 정의 공식 값의 범위
자기공분산함수(ACVF) 두 시점의 데이터 값이 얼마나 함께 변하는지 측정  

γ(k)=E[(Xtμ)(Xtkμ)] 

실수값
자기상관함수(ACF) 자기공분산을 분산으로 나눈 값, 값의 크기 단위 상관없음  

ρ(k)=γ(k)γ(0)\rho(k) = \frac{\gamma(k)}{\gamma(0)}

-1 ~ 1

실제 해석 예시

ACF 그래프를 보면

  • lag 1에서 값이 크다 → 바로 이전 값과 강한 상관

  • lag 2에서 값이 조금 줄어든다 → 2 시점 전과는 조금 약해짐

  • lag 10 이후엔 거의 0 → 그 이상 떨어진 과거 값은 현재 값에 영향 없음

이걸 보고

  • 시계열 모델링의 차수를 정하거나

  • 데이터의 자기상관성 여부를 판단

 

R에서 계산하는 법

acf(시계열데이터)

하면 자기상관함수(ACF) 그래프가 바로 나옵니다.

공분산 값이 궁금하면 acf() 안에 type="covariance" 옵션 쓰면 됩니다.

샘플 데이터 생성

우선 시계열 데이터 하나 만들어봅시다.

자기공분산함수(ACVF) 계산하기

사실 R 기본 acf() 함수 안에 type="covariance" 옵션을 주면
자기공분산함수 값을 구할 수 있습니다.

이걸 실행하면

  • y축 : 각 lag 별 자기공분산값

  • x축 : lag 값
    그래프로 나옵니다.

만약 숫자 값으로만 보고 싶으면 아래처럼!

여기서
acf_cov$acf 하면 lag 0, 1, 2, … 별 값 볼 수 있습니다.

자기상관함수(ACF) 계산하기

이번엔 기본형 ACF 값.

이것도 숫자로 확인하고 싶으면

그리고 역시 acf_cor$acf 하면 lag별 상관계수 값 볼 수 있습니다.

ACF와 ACVF 값 비교 출력

둘 다 같이 값 비교해보자.

1
2
3
4
# 자기공분산 값
acf_cov$acf
# 자기상관 값
acf_cor$acf
cs

그러면

  • lag 0에서는 ACVF가 데이터의 분산

  • ACF lag 0에서는 항상 1

그리고 각 lag에서 ACVF 값을
0시차(분산값)으로 나눈 게 ACF 값이라는 것도 확인 가능!

정리

함수 R 코드 설명
ACVF acf(data, type="covariance") 자기공분산함수 그래프
ACF acf(data) 자기상관함수 그래프

 

부분자기상관함수(Partial Autocorrelation Function, PACF)

정의

PACF는 특정 시차 k에서 두 시점 간의 순수한 상관관계만 측정하는 함수입니다.

ACF는 lag 1, 2, 3, 4… 순서대로 누적된 영향을 포함해서 측정하는 반면
PACF는 중간에 있는 값들의 영향을 제거하고,
오직 lag k에서의 직접적인 상관관계만 남긴 값.

공식 개념

직접적인 공식을 쓰진 않고, 회귀분석 기반으로 계산합니다.

예를 들어,

XtX_t

Xt2X_{t-2}

의 PACF 값은

XtX_t

Xt1X_{t-1}

Xt2X_{t-2}

로 회귀했을 때

Xt2X_{t-2}

의 회귀계수 값이 되는 것.

 

PACF 그래프 해석법

  • lag 1의 값 → lag 1과의 직접적인 상관관계

  • lag 2의 값 → lag 1의 영향을 제거하고 남은 lag 2와의 상관관계

  • lag k의 값 → lag 1부터 lag (k-1)까지의 영향을 제거하고 남은 lag k와의 상관관계

 

특징

  • ACF와 마찬가지로 값은 -1 ~ 1

  • 보통 AR(p) 모형의 차수 결정할 때 사용
    → lag p 이후로 PACF 값이 급격히 떨어지거나 0에 가까워지면 p로 판단

 

ACF vs PACF 차이

구분 설명 용도
ACF 모든 lag의 누적 효과 포함 데이터에 자기상관이 있는지 확인
PACF lag 1~(k-1)의 영향 제거하고 lag k의 직접 효과만 측정 AR 모형의 차수 결정

R 코드 예제

데이터 생성

먼저 시계열 데이터를 하나 만들어봅니다.

ACF 그래프 그리기

PACF 그래프 그리기

해석 팁

  • ACF 그래프에서 lag 1, 2, 3… 차례로 값이 서서히 감소하면
    자기상관이 존재

  • PACF 그래프에서
    lag 1만 뚜렷하게 나타나고 그 뒤는 거의 0이면
    AR(1) 모형이 적합

이 데이터는 AR(1)로 생성했으니까 PACF에서 lag 1만 뚜렷하게 나올 겁니다.

요약 정리

함수 설명 값의 범위 사용 목적
ACF lag k까지 누적 상관 -1 ~ 1 자기상관 존재 여부 확인
PACF lag 1~(k-1) 영향 제거 후 lag k와 직접 상관 -1 ~ 1 AR(p) 차수 결정

 

PACF 그래프도 한 번에

혹시 같이 보고 싶으면 이렇게도 가능!

이렇게 하면 한눈에 패턴 비교도 쏙쏙 가능!

마무리

  • ACVF : 공분산값, 단위 영향 있음

  • ACF : 정규화된 값, -1~1

  • PACF : lag k의 직접적 상관만

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다