차분 :: 시계열 분석 - mindscale
Skip to content

차분

(데이터 프레임 날짜 인덱스 설정에서 이어집니다)

diff

다음으로, 주가에서 절대적인 가격도 중요하지만 가격이 상승하거나 하락했는지 여부도 중요합니다. 이럴 때는 차분(differencing)이라는 방법으로 가격 변동을 구할 수 있습니다.

df.Price.diff 함수를 사용하면 이전 가격과의 차이를 계산해줍니다. 예를 들어, 3월 30일의 가격과 3월 28일의 가격 차이를 계산하는 것입니다. 558에서 555로 내려간 경우, 3달러 1센트가 떨어진 것을 확인할 수 있습니다.

하지만 3월 28일의 차이는 'nan'이라는 값으로 이는 'not a number' 즉, 숫자가 아니다라는 뜻입니다. 이는 3월 28일 이전의 데이터가 없어 변동을 계산할 수 없기 때문입니다. 따라서 그날의 변동은 계산불가로 기록됩니다.

반면에, 4월 1일은 이전 날보다 10달러 16센트가 상승한 것을 확인할 수 있습니다.

이런 방법으로 우리는 가격의 변동을 살펴볼 수 있습니다.

df.Price.diff()
Date
2014-03-28      NaN
2014-03-31    -3.01
2014-04-01    10.16
2014-04-02    -0.16
2014-04-03     2.73
              ...  
2021-12-27    18.43
2021-12-28   -32.32
2021-12-29     1.13
2021-12-30   -10.04
2021-12-31   -26.46
Name: Price, Length: 1957, dtype: float64

플롯으로 그리고 싶으면 .plot()을 붙여주시면 됩니다.

df.Price.diff().plot()
<Axes: xlabel='Date'>

pct_change

플롯에서 흥미로운 점을 관찰할 수 있습니다. 가격변동의 폭이 점차 커지는 것을 볼 수 있는데요, 이는 가격 자체가 시간이 지나면서 증가하기 때문입니다. 예를 들어, 500달러에서 1% 움직이면 5달러입니다. 하지만 3000달러에서 1% 움직이면 30달러입니다. 따라서 가격 변동이 점차 커져 보이는 것입니다.

이를 보다 정확히 파악하려면 가격 변동을 퍼센트로 변환해야 합니다. 이를 도와주는 함수인 pct_change가 있습니다. pct는 퍼센트의 약자로, 가격이 얼마나 변했는지를 나타냅니다. 하지만 이 값은 실제 퍼센트가 아닌 비율입니다. 예를 들어, 0.05%가 아니라 0.5%가 변한 것으로, 이를 퍼센트로 표현하려면 100을 곱해야 합니다.

본 데이터에서는 558에서 555로 줄어든 만큼의 비율이 퍼센트가 됩니다. 실제로 원본 데이터에서 오른쪽에 Change % 컬럼이 있는데, 이는 변동된 비율을 나타냅니다. 이 값과 pct_change 값을 비교하면 동일한 것을 확인할 수 있습니다.

즉, pct_change를 사용하면 특정 날짜의 가격이 전날에 비해 얼마나 오르거나 떨어졌는지를 비율로 쉽게 파악할 수 있습니다.

df.Price.pct_change()
Date
2014-03-28         NaN
2014-03-31   -0.005390
2014-04-01    0.018291
2014-04-02   -0.000283
2014-04-03    0.004828
                ...   
2021-12-27    0.006263
2021-12-28   -0.010914
2021-12-29    0.000386
2021-12-30   -0.003427
2021-12-31   -0.009061
Name: Price, Length: 1957, dtype: float64

.plot()을 사용하면 변동 비율을 쉽게 확인할 수 있습니다. 전체 기간 동안 변동 비율은 대부분 일정하게 유지되고 극히 일부에서만 크게 변동하는 것을 알 수 있습니다.

15% 이상 급등한 날이 있었고, 반대로 하루 만에 10% 이상 급락한 날도 있었습니다. 그러나 대체로 변동 비율은 일정하며, 최악의 경우에도 -10%, 최고의 경우에도 +15% 범위 내에서 이루어집니다. 대부분의 경우 변동률은 ±5% 이하로 나타나며, 하루 평균 가격 변동률은 대략 3-4% 정도인 것이 확인됩니다.

다음으로, 이전 시간에 이어 주가 데이터에서 일정 간격으로 데이터를 선택하거나 다양한 방법으로 이동 평균을 계산해보겠습니다.

df.Price.pct_change().plot()
<Axes: xlabel='Date'>