린스토리

[Pandas] EWMA 적용하기 본문

Python/Pandas

[Pandas] EWMA 적용하기

rinaaaLee 2022. 6. 30. 15:22

EWMA (Exponentially Weighted Moving Average) _ 지수가중평균

시간순서대로 나열되어 있는 데이터에 활용되며, 현재를 기준으로 오래된 값엔 낮은 가중치를 부여하고, 최근 값은 높게 부여하여 평균값을 도출하는 것

 

시계열 데이터를 다루다가 현재와 가까운 값이 더 중요함을 알려주고 싶어 고민하다가, 

EWMA를 적용한 데이터로 가공하자는 생각이 들었다.

이를 Pandas에서 api로 제공하여 손쉽게 사용할 수 있는 방법을 소개하고자 한다. (자세한건 여기)


Pandas_ewma

내가 EWMA를 적용한 방식은 다음과 같다.

EWMA with fixed weights

이 수식을 위 api를 활용해 적용하면, 

import pandas as pd

df = pd.DataFrame({'test': [540, 320, 680, 120, 960, 450]})

df['test_ema'] = round(df['test'].ewm(alpha=0.07, adjust=False).mean(), 0)

결과는 다음과 같다.

adjust=False

이 방식은 가중치가 일정하다. 만약 가중치 또한 시간에 따라 다르게 주고 싶다면 "adjust=True"로 변경하면 되고, 이 값이 default이다. 적용하게 되면 결과는 다음과 같이 나온다. 적용된 수식도 같이 첨부한다.

adjust=True
EWMA with dynamic weights


자세한 사용 방식은 공식 홈페이지를 보면 설명되어있다. 

EWMA를 적용하기 위해 알고리즘으로 짜서 적용했었는데 이렇게 간단하게 api로 제공되니 코드도 짧아지고 
여러모로 pandas의 기능이 고맙다. 앞으로 더 더 알아봐야지!!

 

Comments