두 개의 시계열 데이터에서 한 변수(한 시계열)의 과거데이터와 다른 한 변수(시계열)의 과거데이터의 결합으로 그 변수(처음 시계열)를 선형 예측(Linear regression)을 했을 때 다른 한 변수의 과거데이터로만 선형예측 한 것이 통계적으로 유의미하고 예측에 도움을 줬다면 그것을 그래인저 인과가 있다고 말한다.
즉, 동일한 시간축의 범위를 가진 두 데이터가 있을 때 한 데이터를 다른 한쪽의 데이터의 특정한 시간간격에 대해서 선형회귀를 할 수 있다면 그래인저 인과가 있다고 한다.
시간이 지남에 따라 진화하는 변수 X가 자신의 과거 값과 X의 과거 값에 기반한 Y의 값에 대한 예측이 Y의 과거 값에만 기반한 Y의 예측보다 더 나은 경우, 진화하는 또 다른 변수 Y를 그랜저 유발한다고 말한다.
: '닭이 먼저냐 달걀이 먼저냐' 문제를 해결할 때 사용
추론불가한 문제: "닭이 먼저인가 달걀이 먼저인가?" (인과관계)
추론가능한 문제: "닭과 달걀의 생성순서 별 서로의 영향력은 어떤가?" (Granger 인과관계)
: 원인과 인과 관계를 규명하는 어렵기 때문에 상대적으로 두 요인 중 먼저 영향을 미치는 변수를 알아보고자 할 때 사용
인과관계를 확인하기 위한 통계적인 방법인 Granger causality 는 일반적으로 사람들이 생각하는 원인을 바로 찾고 관련이 있는지를 알려주는 인과관계를 말하는 것은 아니다. 사람들이 생각하는 인과는 매우 추상적이고 포괄적이기 때문에 이런 것을 과학적인 방법으로 알아내는 것은 매우 어렵다. 그럼에도 시도할 수 있는 단순하고 잘 알려진 방법중, Granger causality가 있다.
Granger 인과의 요점과 방식은 매우 간단하고 쉽지만 알고리즘의 깊은 이해는 여러가지 골치아픈 문제가 엮여 있다. 그레인저 인과관계가 모든 인과문제나 해석문제를 해결해주는 것은 아니며, 결과를 해석함에 있어 분석가의 지식, 경험, 논리가 필요하다.
예를 들어 A와 B라는 데이터가 모두 1일 단위로 집계된 데이터고 265일분의 데이터라고 가정할 때 A와 A의 시점으로부터 각각 5일 후의 데이터가 선형회귀가 된다면, A는 ?????
오해석에 대한 유의
이름이 인과관계라고 되어 있는데 사람들이 흔히 생각하는 인과와는 다르게 생각해야 하므로 이 검정의 결과를 확대해석하거나 오해석하는 것을 매우 경계해야 한다.
달걀의 개체수 증가가 미래의 닭의 개체수 증가에 인과영향이 있다는 사실이 밝혀졌다고 해서 반드시 닭의 수의 요인은 달걀의 개체수다라고 확신해서 말하는 것은 무리가 있다. 단순히 달걀의 생산량을 증가시키면 닭의 수가 늘어나게 된다고 확대해석을 하기 때문이다. 그래서 그레인저 인과관계는 줄여서 인과관계라고 하지 않고, ‘그레인저 인과관계’라고 명시하는 경우가 많다.
그것은 그레인저 인과관계가 일반적으로 인과관계를 말하는 것이 아니며 사람들이 생각하는 추상적인 인과관계를 명확히 밝혀낼 것이라는 기대감을 주지 않기 위함이다.
그래인저 인과관계는 상관관계(Correlation)처럼 결과를 해석할 때 논리적으로 결함이 없는지 여러번 고찰하고 해석할 때 매우 주의해야 한다.
Input Parameter
두 개의 시계열 변수가 필요하며 시차(lag)를 파라미터로 넣어줘야 한다.
시차는 2개의 시계열 데이트 세트 A와 B에 대해 테스트할 때 A가 B의 몇 번째 뒤의 시점까지 영향을 주는지를 확인하기 위함이다.
이 시차값은 직접설정함. 적당한 값을 찾기는 매우 어려우므로 여러 시차를 반복해서 실험해 봐야 함. 경험적 판단으로 적절한 구간을 실행해보고 논리적으로 적당한 값으로 사용해야 함. 만약 적절한 Lags를 찾기 아렵다면 알려진 몇가지 방법을 활용한다.
이 방법은 입력한 시차에 해당하는 것만 사용해 선형회귀를 수행하는 게 아니라, 시차(lags)가 N으로 주어진다면 1부터 N까지의 지연에 해당하는 모든 데이터를 전부 사용한다. 즉 N시차만 영향을 주는지가 아니라 N시차까지 영향력이 있는가를 보는 것이다.
전제조건
정상성(Stationary)
테스트하려는 두 변수가 모두 정상성을 만족해야 한다. 정상성을 만족하지 않으면 오해석할 여지가 많은 결과가 나온다. 대부분의 시계열 데이터가 정상성을 바로 만족하지 않기 때문에 정상성을 만족하도록 변형을 시도한다.
정상성이 없는 시계열 데이터를 정상성 있는 데이터로 만들기 위해서는 일반적으로 차분과 로그 변환을 많이 한다. 특히 증감률은 절대값이 심하게 크지 않는 한 로그 차분에 근사하는 수치이다.
테스트 방향(Direction)
테스트하려는 두 개의 변수 A와 B가 있을 때 양방향으로 총 2회의 검정세트로 수행하는 것이 일반적이며 결과에 따라 해석이 달라지는 어려움이 있다.
즉, 그래인저 인과 테스트를 두 번 하는 게 일반적인데 논리적으로 확실하게 한쪽 방향이 성립하지 않다고 확신하면 한 쪽은 하지 않아도 된다.
두 번의 테스트를 통해서 A가 B에 인과 영향을 주는지 테스트하고 B가 A에 인과 영향을 주는지 테스트하게 된다. 이 결과의 조합을 통해서 4가지 경우의 결과가 나온다.
이것을 다시 논리적으로 해석해야 한다. 위에서 해석이 곤란한 것은 4번째이다. 이 해석이 곤란한 이유는 뒤에 기술할 것이다.
A lags + B lags로 B의 데이터를 선형회귀한 것의 예측력 > B lags로만 B의 데이터를 선형회귀한 것의 예측력
다음 결과에 대한 조건이 통계적으로 유의미하면 A가 B에 대해 Granger Causality하다고 표현하며, 이는 인과관계가 있을 여지가 있다고 볼 수 있다. (하지만 명확하게 인과관계가 있다는 의미가 아니므로 주의!)
귀무가설 : “Granger Causality를 따르지 않는다”
p-value가 0.05 이하로 나오면 귀무가설을 기각한다.
앞서 시차(lag)가 정해진 경우에는 경우의 수를 보면 총 4개의 결과가 나올 수 있다.
변수A → 변수B = Granger Causality 성립
변수B → 변수A = Granger Causality 성립하지 않음
이 경우는 변수A가 변수B에 선행한다고 볼 수 있다. 즉 변수A가 변수A의 인과요인이 될 가능성이 높다.
변수A → 변수B = Granger Causality 성립하지 않음
변수B → 변수A = Granger Causality 성립
이 경우는 변수B가 변수A에 선행한다고 볼 수 있다. 즉 변수B가 변수A의 인과요인이 될 가능성이 높다.
변수A → 변수B = Granger Causality 성립
변수B → 변수A = Granger Causality 성립
쌍방으로 Granger Causality가 성립하는 경우로 이 경우는 제3의 외부변수(Exogenous Variable)가 영향을 공통으로 주었을 가능성이 높다. 이 경우 제3의 외부변수를 알아내던가 포기하던가 해야 한다. VAR모형(사실 Granger Causality도 VAR모형중 하나이다)을 사용해야 할 수 있다.
변수A → 변수B = Granger Causality 성립하지 않음
변수B → 변수A = Granger Causality 성립하지 않음
두 변수가 서로 인과영향을 주지 않는다고 볼 수도 있지만 단언하지는 못한다. ARIMA모형으로 추가 확인이 가능한 것으로 알려져 있다. 주의 할 점은 위의 결과가 입력값으로 주는 시차에 따라서 달라질 수 있으므로 시차에 따른 해석을 달리해야 하는 문제가 있다. 즉, 해석에 있어서 사람의 경험과 판단이 개입되어야 한다.
from statsmodels.tsa.stattools import grangercausalitytests
df['kakao_ac'].diff()
sample_outs = grangercausalitytests(df[['kakao_ac','kakao_v']], maxlag=4)
print(sample_outs)
출처: https://songseungwon.tistory.com/133
글 퀄리티가 너무 좋네요. 잘 읽었습니다.