HomeAbout
Time Series
MACD 방법으로 시계열 데이터에서 변곡점 찾아보기
오연주
April 02, 2023
4 min

시계열 데이터는 시간의 흐름을 포함하고 있는, 일정한 시간 간격으로 측정된 데이터입니다. 일별 회원가입자 수, 일별 매출 등 데이터를 시간에 따라 나타낼 수 있다면 모두 시계열 데이터라고 할 수 있습니다.

데이터 분석가의 업무 중 하나는 시계열 데이터, 예를 들어 매출에 이상이 생겼을 때 리포팅 하고 지표가 감소한 원인을 찾아보는 것입니다. 모든 시계열 데이터를 매일 모니터링할 수 있으면 좋겠지만, 항상 중요한 지표는 많고 데이터 분석가의 시간은 부족하기 때문에 빠르게 대응을 하지 못하는 경우가 종종 생기게 됩니다. 그렇기 때문에 그래프를 직접 확인하지 않아도 시계열 데이터의 추세가 변하는 변곡점을 찾아줘서 알려준다면 업무의 효율성을 높일 수 있을 거라고 생각했습니다. 시계열 데이터에서 변곡점을 찾는 여러 가지 방법 중에서 이번 글에서는 모델링이나 복잡한 계산 없이 이동 평균(Moving Average)만을 활용하는 MACD 방법을 소개하겠습니다.

시계열 데이터 분해

yeonjuoh_data

2022년 9월 28일부터 2023년 3월 22일까지 서비스에 방문한 가상의 일별 유저 수 시계열 데이터입니다. 유저 방문 수는 주중에 증가하다가 주말에 감소하는 패턴을 보이고 있으며, 전체적인 추세로는 23년 2월 초의 증가가 눈에 띕니다. 그리고 주기적인 패턴추세로는 설명되지 않는 변동성도 확인할 수 있습니다.

이와 같이 시계열 데이터는 세 가지 요소로 나눠볼 수 있습니다.

Yt=f(Tt,St,Et)Y_{t}=f(T_{t},S_{t},E_{t})

YtY_{t}=t 시점의 데이터

TtT_{t}=추세

StS_{t}=계절성

NtN_{t}=노이즈

추세 (Trend)

TtT_{t} 추세는 시간에 따라 변화하는 데이터의 방향성을 나타냅니다. 추세를 계산하는 방법은 다양한데 가장 간단한 방법으로는 이동 평균(Moving Average)이 있습니다. 이동 평균은 각 데이터들의 평균 값으로 예를 들어, 7일 이동 평균을 계산한다면 지난 6개의 데이터와 현재 데이터까지 총 7개의 데이터 값의 평균을 구합니다.

Tt=Tt6+Tt5+Tt4+Tt3+Tt2+Tt1+Tt7T_{t}={{T_{t-6}+T_{t-5}+T_{t-4}+T_{t-3}+T_{t-2}+T_{t-1}+T_{t}}\over{7}}

이동 평균을 계산할 때는 몇 개의 데이터로 평균을 계산할건지 정해야 하는데 이를 window라 합니다. Window 수가 크면 많은 데이터로 평균을 내기 때문에 하나의 데이터가 이동 평균 값에 큰 영향을 미치지 않아 추세 파악에 도움이 되지만, 그만큼 최근 데이터의 영향이 적어지기 때문에 최근 변동성은 잘 나타나지 않습니다. 반대로 window 수가 적으면 최근 데이터 값이 반영된다는 장점은 있지만 추세 파악에는 어려움이 있을 수 있습니다.

mv

데이터에 일주일 주기의 패턴이 있어 보여 window가 7일인 이동 평균 선 MV7MV_{7}과 비교를 위해 14일 이동 평균 선 MV14MV_{14}, 28일 이동 평균 선 MV28MV_{28}를 그려보았습니다. 이동 평균 선은 값을 평균 내어 데이터의 패턴을 제거해 주기 때문에 원래 데이터 보다 추세 파악에 쉽습니다. 특히 window가 가장 큰 MV28MV_{28}은 다른 이동 평균 선처럼 주기적인 패턴이 보이지 않아 시계열 데이터의 추세를 잘 보여주고 있습니다. 하지만 그만큼 최근 데이터의 변동성이 가장 늦게 표현되는데, 23년 2월 초의 상승분이 이동 평균 선에 반영되기까지 MV28MV_{28}이 가장 오래 걸린 것을 확인할 수 있습니다.

계절성 (Seasonality)

StS_{t} 계절성은 일정한 주기를 가지고 데이터가 변동하는 패턴으로 StS_{t}의 추정치 St^\hat{S_{t}}YY에서 Tt^\hat{T_{t}}를 뺀 값으로 계산할 수 있습니다. 그래프를 보면 일별 방문 수는 7일, 주(week) 주기의 계절성을 보입니다. 즉, 평균적으로 StS_{t}StS_{t}에서 7일(window)을 더한 값과 같다고 할 수 있고, 이를 식으로 표현하면 다음과 같습니다.

St=St+7S_{t}=S_{t+7}

노이즈 (Noise)

시계열 데이터에서 NtN_{t} 노이즈는 추세와 계절성으로 설명이 되지 않는 불규칙한 변동입니다. 노이즈은 외부 요인, 데이터 수집 과정에서 오차 등으로 인해 발생할 수 있습니다.

Nt^=YTt^St^\hat{N_{t}}=Y-\hat{T_{t}}-\hat{S_{t}}

변곡점 찾아보기: MACD

앞에서 설명했듯이 일별 방문자 수는 23년 2월 초부터 증가하는 추세가 보이며, 단기간으로 나눠서 보면 주말에 감소했다가 평일에 증가하는 패턴을 보입니다. 이렇게 시계열 데이터에서 추세가 ‘변화 없음’ 또는 ‘감소’에서 ‘증가’, ‘변화 없음’ 또는 ‘증가’에서 ‘감소’로 변하는 지점을 변곡점이라 합니다. 이제 MACD 방법으로 눈으로 확인한 변곡점을 찾아보겠습니다.

MACD(Moving Average Convergence Divergence)는 주로 주가 데이터 분석에 사용되는데, 단기 이동 평균과 장기 이동 평균의 차이를 이용해 언제 매매 또는 매수를 해야 하는지 알려줍니다.

MACD=EMA12EMA26MACD=EMA_{12}-EMA_{26}

단기 이동 평균과 장기 이동 평균의 window는 MACD 방법이 소개된 당시의 주식 시장을 고려해 각각 12일, 26일로 정의합니다. MACDMACD를 계산하는 식을 보면 위에서 살펴본 이동 평균(MVMV)이 아닌 EMAEMA를 사용했습니다. EMAEMA는 지수 이동 평균(Exponentially Moving Average)의 약자로 window에 포함되는 모든 데이터에 같은 가중치를 주는 이동 평균과 달리 최근 데이터에 가중치를 더 줍니다. tt 시점의 지수 이동 평균값은 다음의 식으로 구할 수 있습니다.

EMAt=αxt+(1α)EMAt1whereα=2N+1EMA_{t}=\alpha*x_{t}+(1-\alpha)*EMA_{t-1}\quad where\quad \alpha=\frac{2}{N+1}

다시 돌아와서 MACDMACD가 0보다 크면 단기 지수 이동 평균이 장기 지수 이동 평균보다 크다는 것이고, 최근에 데이터가 상승했다는 의미입니다. 반대로 MACDMACD가 0보다 작으면 최근에 값이 하락해 단기 지수 이동 평균이 장기 지수 이동 평균보다 작다는 걸 나타냅니다.

macd

MACDMACD를 계산해 보았습니다. 주식 데이터와 달리 일별 방문자 수는 모든 날의 데이터가 있기 때문에 단기 지수 이동 평균과 장기 지수 이동 평균의 window로 각각 14일과 28일을 사용했습니다. 지수 이동 평균 선은 최근 데이터에 가중치를 더 주기 때문에 단순 이동 평균 선과 비교했을 때 최근 데이터의 변동성이 더 반영된 것을 확인할 수 있습니다. MACDMACD가 0보다 크거나 작은지를 쉽게 확인할 수 있도록 y=0y=0 지점에 회색 점선을 추가했습니다. 단기 지수 이동 평균 선과 장기 지수 이동 평균 선이 교차하는 지점에 MACDMACD가 0의 값을 가집니다.

마지막으로 SignalSignal을 계산해야 하는데 이는 MACDMACD를 또 한 번 지수 이동 평균한 값입니다. SignalSignal은 단기 이동 평균 선과 장기 이동 평균 선의 차이가 큰 지점을 찾기 위해서 필요합니다. 보통 9일의 window를 사용하지만 이번에는 7일을 사용했습니다.

signal

아래 MACDMACD 선 위에 겹쳐진 노란색 선이 SignalSignal입니다. MACDMACDSignalSignal이 교차되는 지점은 두 이동 평균 선의 격차가 가장 커지는 지점으로, 이후에는 차이가 좁혀지기 시작합니다. 그러면 근 기간 내에 두 이동 평균 선이 교차할 가능성이 있다고 할 수 있습니다. 가능성이 있다는 건 이동 평균 선이 교차할 수도 있고, 아닐 수도 있다는 걸 의미합니다.

주가 분석에서는 MACDMACDSignalSignal을 아래에서 위로 교차하면 매수 지점, 반대로 위에서 아래로 교차하면 매도 지점이라고 봅니다. 우리는 추세가 변화하는 변곡점을 찾는 게 목표이기 때문에 모든 매수 또는 매도 지점을 변곡점이라 할 수 있습니다.

inflection point

MACDMACDSignalSignal이 교차하는 지점에 점선을 추가했습니다. 단순히 두 선이 교차하는 지점을 변곡점이라 하기에는 수가 너무 많아 이해하기에도 어려울 뿐만 아니라 추세가 변화했다는 알림이 오더라도 노이즈라 여길 수 있을 거 같습니다. 그렇기 때문에 MACDMACDSignalSignal이 교차될 때 선의 기울기 차이가 어느 정도 이상 된 경우만 변곡점이라 하겠습니다. 왜냐하면 선의 기울기가 가파를수록 MACD 방법의 신뢰도가 높아지기 때문입니다.

inflection point with threshold

두 선의 기울기 차이가 7 이상인 경우만 추가했습니다. 전 그래프에서는 주기적인 패턴까지 모두 변곡점이라고 알려주었지만, 이번 그래프에서는 전체적인 추세가 변화했을 때만 표시된 것을 확인할 수 있습니다.

MACD의 장단점

MACD 방법은 간단한 계산만으로 추세를 파악할 수 있다는 점에서 분명한 장점을 가지고 있습니다. 하지만 false positive(변곡점이 있다고 하지만 실제로는 발생하지 않을 가능성)가 종종 발생한다는 문제가 있고, 데이터 특성 마다 window를 어떤 값으로 설정해야 하는지 그리고 조직마다 추세에 얼마나 민감하게 반응해야 하는지는 다르기 때문에 여러가지 값을 시도해보고 맞는 값을 찾아가는 과정이 필요합니다.


Tags

MACDtime-series

Share


Related Posts

시계열 자료분석을 활용한 고객 관심사의 선제적 반영
2023-04-01
7 min
© 2023, All Rights Reserved.
Powered By

Quick Links

About UsOfficial Page

Social Media