CausalImpact 및 R : 시계열 개입 분석

R에서 시계열 개입 분석

출처 : Pixabay의 Monoar_CGI_Artis 님의 사진

면책 조항 :이 문서는 보증없이 "있는 그대로"작성되었습니다. 데이터 과학 개념에 대한 개요를 제공 할 목적으로 작성되었으며 투자 조언이나 기타 전문적인 조언으로 해석되어서는 안됩니다.

개입 (또는 시계열과 무관 한 외부 요인)은 종종 해당 계열에 영향을 미칠 수 있습니다.

예를 들어, 마케팅 캠페인은 회사의 향후 판매 수에 영향을 미칠 수 있습니다. 정부 정책의 변화는 경제 활동에 큰 영향을 미칠 수 있습니다.

개입 분석의 주된 문제는 개입이 발생하지 않았 더라면 일어 났을 일을 분석 할 수 없다는 것입니다.

R 의 CausalImpact 라이브러리는 별도의 시리즈 (개입의 영향을받지 않는 시리즈)를 공변량으로 사용하여 개입 효과를 분석 할 수 있습니다.

우리의 예

2017 년 11 월 잉글랜드 은행은 금리를 인상하기로 결정했습니다. 한 국가의 중앙 은행이 이러한 방식으로 금리를 조작하기로 결정하면 (통화 가치에 영향을 미칠 수 있음) 그러한 결정이 특정 통화를 보유함으로써 투자자가 수익을 얻을 수있는 금리에 영향을 미치기 때문입니다.

출처 : tradeeconomics.com

이와 관련하여 금리 상승이 GBP / USD의 가치에 영향을 미쳤는지 살펴보고자합니다.

이를 위해 ECB가이 기간 동안 금리를 인상하지 않았기 때문에 EUR / USD 통화가 공변량으로 선택됩니다.이 통화는 개입의 영향을받지 않는 것으로 가정됩니다.

출처 : tradeeconomics.com

관련 데이터는 Quandl을 사용하여 FRED 데이터베이스에서 가져옵니다.

다음은 두 통화의 플롯입니다.

set.seed(1)
x1 <- eurusd$Value
y <- gbpusd$Value
data <- cbind(y, x1)
dim(data)
head(data)
matplot(data, type = "l")
Source: RStudio

그 이유는 통화 데이터가 대부분의 다른 자산 가격보다 훨씬 작은 척도를 가지고 있고, 로그 척도를 사용하면 값이 너무 가까워 져서 원래 계열에서 감지 될 수있는 개입이 로그 척도를 사용할 때 감지되지 않을 수 있기 때문입니다.

이 데이터를 사용하여 기간 이전이후 기간 이 정의되고 데이터가 플로팅됩니다.

pre.period <- c(1, 230)
post.period <- c(231, 249)
impact <- CausalImpact(data, pre.period, post.period)
plot(impact)
Source: RStudio

> summary(impact)
Posterior inference {CausalImpact}
Average           Cumulative     
Actual                   1.3               25.5           
Prediction (s.d.)        1.3 (0.0099)      25.4 (0.1878)  
95% CI                   [1.3, 1.4]        [25.1, 25.8]   
                                                          
Absolute effect (s.d.)   0.0014 (0.0099)   0.0275 (0.1878)
95% CI                   [-0.018, 0.02]    [-0.349, 0.38] 
                                                          
Relative effect (s.d.)   0.11% (0.74%)     0.11% (0.74%)  
95% CI                   [-1.4%, 1.5%]     [-1.4%, 1.5%]
Posterior tail-area probability p:   0.44186
Posterior prob. of a causal effect:  56%
For more details, type: summary(impact, "report")

인과 효과의 사후 확률은 56 %입니다.

생성 된 요약 보고서를 자세히 살펴 보겠습니다. 일부 내용은 다음과 같습니다.

Although the intervention appears to have caused a positive effect, this effect is not statistically significant when considering the entire post-intervention period as a whole. Individual days or shorter stretches within the intervention period may of course still have had a significant effect, as indicated whenever the lower limit of the impact time series (lower plot) was above zero. The apparent effect could be the result of random fluctuations that are unrelated to the intervention. This is often the case when the intervention period is very long and includes much of the time when the effect has already worn off. It can also be the case when the intervention period is too short to distinguish the signal from the noise. Finally, failing to find a significant effect can happen when there are not enough control variables or when these variables do not correlate well with the response variable during the learning period.
The probability of obtaining this effect by chance is p = 0.442. This means the effect may be spurious and would generally not be considered statistically significant.

같은 예를 pycausalimpact로 분석했을 때 결과가 약간 다르게 나왔습니다.

모델은 다음과 같이 정의되었습니다.

>>> ci = CausalImpact(data, pre_period, post_period)
>>> print(ci.summary())
>>> print(ci.summary(output='report'))
>>> ci.plot()

Posterior Inference {Causal Impact}
                          Average            Cumulative
Actual                    1.34               25.46
Prediction (s.d.)         1.32 (0.0)         25.17 (0.08)
95% CI                    [1.32, 1.33]       [25.01, 25.33]
Absolute effect (s.d.)    0.02 (0.0)         0.29 (0.08)
95% CI                    [0.01, 0.02]       [0.13, 0.45]
Relative effect (s.d.)    1.15% (0.32%)      1.15% (0.32%)
95% CI                    [0.52%, 1.77%]     [0.52%, 1.77%]
Posterior tail-area probability p: 0.0
Posterior prob. of a causal effect: 100.0%
출처 : Jupyter 노트북 출력

이 라이브러리의 R 및 Python 버전은 개입을 분석하는 방식이 다릅니다. 특히 R은 이전 지식이 모델 가정에 반영되는 사전 확률에 더 많이 의존하므로 Python은 우도 함수를 최대화하기 위해 구조적 시계열 구성 요소 분석에 더 많이 의존합니다.

즉, 이전이 이제 None , 즉 prior_level_sd = None으로 설정되어 있다고 가정합니다 .

ci = CausalImpact(data, pre_period, post_period, prior_level_sd=None)
print(ci.summary())
print(ci.summary(output='report'))
ci.plot()

Posterior Inference {Causal Impact}
                          Average            Cumulative
Actual                    1.34               25.46
Prediction (s.d.)         1.35 (0.02)        25.57 (0.3)
95% CI                    [1.31, 1.38]       [24.98, 26.15]

Absolute effect (s.d.)    -0.01 (0.02)       -0.11 (0.3)
95% CI                    [-0.04, 0.02]      [-0.7, 0.47]

Relative effect (s.d.)    -0.45% (1.17%)     -0.45% (1.17%)
95% CI                    [-2.72%, 1.86%]    [-2.72%, 1.86%]

Posterior tail-area probability p: 0.37
Posterior prob. of a causal effect: 63.34%

The probability of obtaining this effect by chance is p = 36.66%.
This means the effect may be spurious and would generally not be
considered statistically significant.

결론

이 기사에서는 다음을 확인했습니다.

  • 중재를 예측하기 위해 R에서 CausalImpact 사용
  • R과 Python 버전이 서로 다른 점
  • 개입 탐지 결정에있어 사전 가정의 역할
  • 개입 분석 및 요약 보고서 생성

이 예제의 Jupyter Notebook은 아래 참조 된 MGCodesandStats 저장소에서 사용할 수 있습니다.

참고 문헌

Suggested posts

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

가장 유명한 행동 강령 중 하나입니다. "마술사는 절대 비밀을 밝히지 않습니다." 그러나 청중이 너무나 놀라워 서 '방금 일어난 일'이라는 느낌에 놀라서 비밀을 밝히지 않는 것이 거의 잔인한 순간이 있습니다.

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Auto-TS 라이브러리를 사용하여 ARIMA, SARIMAX, FB Prophet, VAR 및 ML 모델 개발

Python 코드 한 줄로 여러 시계열 예측 모델 학습

Automated Machine Learning (AutoML)은 기계 학습 파이프 라인의 일부 구성 요소를 자동화하는 것을 말합니다. AutoML은 일부 모델 개발 프로세스를 자동화하여 데이터 과학자의 워크 플로를 가속화합니다.

Related posts

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

고유 분해 및 SVD에 유용한 기저의 선형 대수 개념 이해이 기사에서는 고유 분해 또는 특이 값 분해 (SVD)와 같은 행렬 분해 방법을 이해하는 흥미로운 방법 인 기저 개념에 대해 알아 봅니다. 정의 기본은 벡터 공간 (벡터 집합)을 설명하는 데 사용되는 좌표계입니다.

판다와 에라스무스 연구 교환 분석

판다와 에라스무스 연구 교환 분석

Erasmus 프로그램 2011-12에서 발생한 20 만 개의 연구 교환으로 데이터 세트를 분석 한 결과 1987 년 이후 Erasmus 프로그램은 매년 수십만 명의 유럽 학생들에게 한 학기 또는 1 년을 해외에서 보낼 기회를 다른 유럽에서 보낼 수있는 기회를 제공합니다. 경제적 인 지원뿐만 아니라 쉬운 교환 과정을 제공합니다. 유럽의 다양한 사람, 언어 및 문화에 대한 마음과 마음을 열어주는 정말 귀중한 경험입니다.

데이터 과학을위한 8 가지 기본 통계 개념

… 평범한 영어로 설명

데이터 과학을위한 8 가지 기본 통계 개념

통계는 "수량 데이터의 수집, 분석, 해석 및 표현을 다루는 수학의 한 분야"입니다. 프로그래밍과 기계 학습을 혼합하면 데이터 과학의 핵심 기술에 대해 꽤 잘 설명 할 수 있습니다.

데이터 과학의 9 가지 거리 측정

일반적인 거리 측정의 장점과 함정

데이터 과학의 9 가지 거리 측정

감독되거나 감독되지 않는 많은 알고리즘은 거리 측정을 사용합니다. 유클리드 거리 또는 코사인 유사성과 같은 이러한 측정은 종종 k-NN, UMAP, HDBSCAN 등과 같은 알고리즘에서 찾을 수 있습니다.