Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 데이터프레임의 조정된(Adjusted) EWM과 비조정(Non-adjusted) EWM 계산하기

데이터 분석에서 지수 가중 평균(EWM, Exponentially Weighted Mean)은 최근 데이터에 더 큰 가중치를 부여하는 이동 평균 기법입니다. 판다스(pandas)의 ewm() 메서드는 adjust 매개변수를 통해 두 가지 방식의 계산을 지원합니다.

예를 들어, 다음과 같은 데이터프레임이 있을 때 조정된(adjusted) EWM과 비조정(non-adjusted) EWM의 결과는 각각 아래와 같습니다.

adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.750000 12.750000
2 2.615385 12.230769
3 2.615385 13.425000
4 4.670213 14.479339
non adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.666667 12.666667
2 2.555556 12.222222
3 2.555556 13.407407
4 4.650794 14.469136

해결 방법

이 문제를 해결하려면 아래 단계를 따르면 됩니다.

  • 데이터프레임을 정의합니다.

  • df.ewm(com=0.5).mean()을 사용하여 감쇠 인자(com)가 0.5인 조정된(adjusted) EWM을 계산합니다. adjust=True가 기본값입니다.

df.ewm(com=0.5).mean()
  • df.ewm(com=0.5, adjust=False).mean()을 사용하여 감쇠 인자가 0.5인 비조정(non-adjusted) EWM을 계산합니다.

df.ewm(com=0.5,adjust=False).mean()

참고: adjust 매개변수의 차이

adjust=True(기본값)는 가중치를 상대 가중치의 합으로 나누어 정규화하는 방식이며, 결측값(NaN) 처리에도 유연합니다. 반면 adjust=False는 재귀적(recursive) 방식으로 계산하여 첫 번째 값에 더 큰 영향을 받습니다. 따라서 두 방식의 결과 값에는 미세한 차이가 발생합니다.

예제 코드

import numpy as np
import pandas as pd
df = pd.DataFrame({'Id': [1, 2, 3, np.nan, 5],
                   'Age': [12,13,12,14,15]})
print(df)
print("adjusted ewm:\n",df.ewm(com=0.5).mean())
print("non adjusted ewm:\n",df.ewm(com=0.5,adjust=False).mean())

출력 결과

Id Age
0 1.0 12
1 2.0 13
2 3.0 12
3 NaN 14
4 5.0 15
adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.750000 12.750000
2 2.615385 12.230769
3 2.615385 13.425000
4 4.670213 14.479339
non adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.666667 12.666667
2 2.555556 12.222222
3 2.555556 13.407407
4 4.650794 14.469136

위 결과에서 볼 수 있듯이, Id 열에 포함된 NaN 값은 EWM 계산 시 자동으로 건너뛰며, 조정된 방식과 비조정된 방식은 약간 다른 가중치 값을 산출합니다. 시계열 데이터의 추세 분석이나 금융 데이터 스무딩에 EWM을 활용할 때는 이러한 차이를 고려하여 적절한 옵션을 선택하는 것이 중요합니다.