시계열의 추세·계절성 분해와 이동통계
한 달의 숫자 차이에서 장기 방향과 계절 효과를 갈라 읽습니다.
도시 자전거 공유 서비스의 월별 이용 건수를 살펴본다고 가정해 보겠습니다. 여름에는 이용자가 늘고 겨울에는 줄어드는 경향이 있지만, 해가 지날수록 서비스 자체의 인기도도 높아질 수 있습니다.
올해 7월 이용 건수가 작년 12월보다 많다고 해서 사업이 급성장했다고 말할 수 없는 이유입니다. 두 달은 계절이 다르고, 서비스가 운영된 시점도 다릅니다.
이처럼 시간순으로 기록된 데이터를 시계열(Time Series)이라고 합니다. 시계열을 이해하려면 장기적인 방향을 보여주는 추세(Trend), 일정한 주기로 반복되는 계절성(Seasonality), 이 둘로 설명되지 않는 잔차(Remainder)를 구분해야 합니다.
여기에 이동평균과 이동표준편차 같은 이동통계(Rolling Statistics)를 사용하면 특정 기간의 변화가 얼마나 지속적이고 불안정한지도 확인할 수 있습니다. 이번 글에서는 월별 자전거 이용 데이터를 통해 이동평균, 가법·승법 분해, STL, 계절조정, 이동변동성을 계산하고, 결과를 어떻게 해석해야 하는지 살펴보겠습니다.
시계열 데이터에서는 무엇이 다른가요?
일반적인 횡단면 자료는 여러 대상의 값을 비교하지만, 시계열 자료는 같은 대상이 시간에 따라 어떻게 변하는지 살펴봅니다.
따라서 관측 순서와 관측 간격이 중요합니다. 월별 이용 건수의 순서를 섞으면 봄에 증가하고 겨울에 감소하는 패턴을 발견하기 어렵습니다.
시계열에는 수준(Level), 추세, 계절성, 불규칙 변동이 함께 나타날 수 있습니다. 예를 들어 자전거 공유 서비스의 평균 이용 규모는 한 달 약 10만 건일 수 있지만, 장기적으로 증가하면서 7~8월에는 평균보다 높고 1~2월에는 낮아지는 식입니다. 날씨나 일시적인 서비스 장애 때문에 발생하는 변동은 이러한 반복 패턴과 구별해서 다뤄야 합니다.
분해는 우선 데이터를 이해하기 위한 도구입니다. 분해 결과 자체가 미래 이용 건수를 보장하거나 이용량 변화의 원인을 입증하지는 않습니다.
실제 예제: 도시 자전거 공유 서비스의 월별 이용 건수
한 도시가 2022년 1월부터 2025년 12월까지 48개월 동안 자전거 공유 서비스의 이용 건수를 집계했다고 가정하겠습니다.
숫자의 단위는 천 건입니다.
| 항목 | 설정 |
|---|---|
| 관측 대상 | 도시 전체 자전거 공유 서비스 |
| 기간 | 2022년 1월~2025년 12월 |
| 빈도 | 월별, 48개 관측값 |
| 결과변수 | 월간 대여 건수(천 건) |
| 계절 주기 | 12개월 |
| 관심 질문 | 이용량이 장기적으로 늘어나는가? 매년 반복되는 계절 효과는 어느 정도인가? |
다음 값은 예제를 이해하기 위한 일부 관측치입니다.
| 시점 | 대여 건수(천 건) |
|---|---|
| 2024년 1월 | 66 |
| 2024년 2월 | 71 |
| 2024년 3월 | 92 |
| 2024년 4월 | 110 |
| 2024년 5월 | 123 |
| 2024년 6월 | 132 |
| 2024년 7월 | 140 |
| 2024년 8월 | 138 |
| 2024년 9월 | 126 |
| 2024년 10월 | 115 |
| 2024년 11월 | 91 |
| 2024년 12월 | 76 |
| 2024년 합계 | 1,280 |
이 12개월만 보면 한 해 안에서 여름에 높고 겨울에 낮은 패턴이 보입니다. 하지만 장기 추세를 판단하려면 2022~2025년 전체 자료를 비교해야 합니다. 계절성은 한 번의 연간 변화만으로 확정하는 것이 아니라 여러 해에 걸쳐 반복되는지를 검토해야 합니다.
추세(Trend)는 어떻게 확인하나요?
추세는 단기적인 오르내림을 제외했을 때 장기간 이어지는 방향입니다.
예를 들어 자전거 공유 서비스의 연간 이용 건수가 2022년 960천 건, 2023년 1,080천 건, 2024년 1,280천 건, 2025년 1,400천 건으로 증가했다고 가정하겠습니다. 이 값은 장기적으로 이용 규모가 커졌다는 근거가 됩니다.
| 연도 | 연간 이용 건수(천 건) | 전년 대비 증가율 |
|---|---|---|
| 2022 | 960 | — |
| 2023 | 1,080 | 12.5% |
| 2024 | 1,280 | 18.5% |
| 2025 | 1,400 | 9.4% |
전년 대비 증가율은 (당해 연도 - 전년도) ÷ 전년도 × 100으로 계산합니다. 2024년의 증가율은 (1,280 - 1,080) ÷ 1,080 × 100 ≈ 18.5%입니다.
다만 이처럼 연간 합계를 이용하면 월별 변동이 가려질 수 있습니다. 실제 분석에서는 원시 시계열과 부드럽게 추정한 추세선을 함께 그려 보고, 수준 변화나 갑작스러운 구조적 변화가 있는지도 살펴보는 것이 좋습니다.
이동평균(Moving Average)은 무엇인가요?
이동평균은 일정한 구간의 관측값을 평균한 뒤 해당 구간을 한 시점씩 이동하면서 계산한 값입니다.
단기적인 변동을 완화해 시계열의 흐름을 더 쉽게 확인할 때 사용합니다. 예를 들어 2024년 4~6월 이용 건수는 각각 110, 123, 132천 건이므로 이 구간의 3개월 이동평균은 (110 + 123 + 132) ÷ 3 ≈ 121.7천 건입니다.
| 기준 월 | 계산에 포함한 월 | 3개월 후행 이동평균(천 건) |
|---|---|---|
| 2024년 5월 | 3~5월 | 108.3 |
| 2024년 6월 | 4~6월 | 121.7 |
| 2024년 7월 | 5~7월 | 131.7 |
| 2024년 8월 | 6~8월 | 136.7 |
이 표의 이동평균은 현재 월과 이전 두 달을 사용하는 후행 이동평균입니다. 따라서 7월의 값은 5~7월만으로 계산되며 미래 값을 사용하지 않습니다. 반면 중심 이동평균은 특정 월 전후의 관측값을 사용하므로 실시간 예측의 입력값으로 무심코 사용하면 미래 정보 누수가 발생할 수 있습니다.
3개월 이동평균과 12개월 이동평균은 무엇이 다른가요?
이동평균의 구간 길이는 어떤 변동을 남기고 어떤 변동을 완화할지 결정합니다.
3개월 이동평균은 비교적 최근 변화를 빠르게 반영하지만 계절적 오르내림도 상당 부분 남을 수 있습니다. 반면 월별 자료에서 12개월 이동평균은 연간 계절 주기를 완화하는 데 유용하지만 추세의 방향 전환을 늦게 보여줄 수 있습니다.
| 이동 구간 | 장점 | 주의점 |
|---|---|---|
| 3개월 | 최근 변화에 빠르게 반응 | 계절적 변동이 남을 수 있음 |
| 6개월 | 단기 변동을 더 완화 | 방향 전환 탐지가 다소 늦음 |
| 12개월 | 연간 계절 주기 완화에 유용 | 양 끝에서 계산 불가 구간이 늘고 변화 반응이 느림 |
12개월은 짝수 구간이므로 전통적인 고전적 분해에서는 두 단계의 이동평균을 통해 중앙 정렬한 추세를 사용할 수 있습니다. 하지만 12개월 이동평균 자체가 언제나 정확한 계절조정값이 되는 것은 아닙니다. 관측 간격이 불규칙하거나 계절 패턴이 변화하는 경우에는 다른 접근이 필요합니다.
시계열 분해는 어떤 원리인가요?
시계열 분해는 관측값을 추세, 계절성, 잔차로 나누는 방법입니다.
대표적인 구조는 가법 분해(Additive Decomposition)와 승법 분해(Multiplicative Decomposition)입니다.
가법: Yt = Tt + St + Rt
승법: Yt = Tt × St × Rt
가법 모형은 계절 변동의 절대적인 폭이 수준과 관계없이 비슷할 때 적합할 수 있습니다. 예를 들어 여름철 이용량이 매년 대략 2만 건씩 더 많다면 가법 구조가 직관적입니다. 반면 이용 규모가 커질수록 여름과 겨울의 차이도 비례해서 커진다면 승법 구조를 검토할 수 있습니다.
승법 분해는 일반적으로 양수 자료에서 사용합니다. 로그 변환이 가능한 경우에는 로그를 취해 승법 관계를 가법 형태로 다룰 수도 있습니다. 하지만 0이 포함되면 로그 처리와 변환 방식에 특히 주의해야 합니다.
STL 분해는 무엇이며 왜 사용하나요?
STL(Seasonal and Trend decomposition using Loess)은 국소회귀(LOESS)를 이용해 추세와 계절성을 추정하는 방법입니다.
고전적인 분해보다 계절 패턴이 서서히 변하는 상황에 유연하게 대응할 수 있다는 장점이 있습니다.
STL은 기본적으로 가법 구조의 분해를 제공합니다. 따라서 계절 변동이 이용 규모에 비례해 증가한다면 로그 변환 등 적절한 변환을 검토할 수 있습니다.
주요 설정에는 계절 주기(period), 계절 성분의 부드러움, 추세 성분의 부드러움, 이상치의 영향을 줄이는 강건 분해 옵션 등이 있습니다. 월별 자료에서 연간 반복 패턴을 분석한다면 주기를 12로 설정하는 것이 자연스럽습니다.
다만 48개월 자료는 연간 주기가 네 번뿐이므로 계절 패턴의 안정성과 장기 추세를 정밀하게 판단하는 데 한계가 있습니다. STL 결과를 확정적인 사실로 보기보다 자료를 설명하는 추정 결과로 다뤄야 합니다.
분해 결과표의 숫자는 어떻게 읽나요?
2024년 7월 이용 건수가 140천 건이고, 같은 달의 STL 추정 결과가 다음과 같다고 가정하겠습니다.
| 구성 성분 | 2024년 7월 값(천 건) | 해석 |
|---|---|---|
| 추세(T) | 108 | 장기적으로 기대되는 기본 이용 규모 |
| 계절성(S) | +26 | 7월의 반복적인 계절 효과 |
| 잔차(R) | +6 | 추세·계절성으로 설명되지 않는 차이 |
| 실제 이용 건수(Y) | 140 | 108 + 26 + 6 |
여기서는 가법 분해를 사용했으므로 140 = 108 + 26 + 6입니다. 7월의 계절 성분이 +26천 건이라는 것은 해당 월의 이용 건수가 추세 수준보다 계절적으로 약 26천 건 높게 나타나는 패턴을 모형이 추정했다는 의미입니다.
잔차 +6천 건은 추세와 계절성으로 설명하지 못한 차이입니다. 다만 이를 특정 사건의 효과로 바로 해석할 수는 없습니다. 기상 조건, 행사, 서비스 장애, 데이터 오류처럼 다양한 요인이 잔차에 영향을 미칠 수 있기 때문입니다.
계절조정(Seasonal Adjustment)은 어떻게 하나요?
계절조정은 반복되는 계절 효과를 제거하여 시점 간 변화를 비교하기 쉽게 만드는 작업입니다.
가법 분해에서는 실제 관측값에서 추정된 계절 성분을 뺍니다.
YtSA = Yt − St = Tt + Rt
앞선 2024년 7월 예제에서는 실제 이용 건수가 140천 건이고 계절 성분이 +26천 건이므로 계절조정 이용 건수는 140 − 26 = 114천 건입니다.
이 수치는 '7월의 계절적 증가분을 제거한 수준'을 보여줍니다. 실제로 114천 건만 이용했다는 뜻은 아닙니다. 또한 계절조정값에도 일시적인 충격이나 추정오차가 포함될 수 있으므로 추세 성분과 혼동해서는 안 됩니다.
이동표준편차는 무엇을 보여주나요?
이동통계에는 이동평균 외에 이동표준편차(Rolling Standard Deviation)도 있습니다.
이동표준편차는 최근 일정 기간 동안 관측값이 얼마나 흔들렸는지 보여줍니다. 예를 들어 최근 3개월의 이용 건수가 110, 123, 132천 건이었다면 표본표준편차는 약 11.1천 건입니다. 이 수치는 평균과 달리 해당 구간의 변동 폭을 요약합니다.
다만 자전거 이용량처럼 계절성이 뚜렷한 자료에서 원시 관측값의 이동표준편차가 높다는 사실은 반드시 서비스의 불안정성이 커졌다는 뜻이 아닙니다. 계절적인 상승과 하락 때문에 변동성이 커 보일 수도 있습니다.
비정상적인 변동을 확인하려는 목적이라면 추세와 계절성을 제거한 잔차의 이동표준편차를 살펴보는 것이 더 적절할 수 있습니다. 이때도 구간 길이와 이상치의 영향을 함께 검토해야 합니다.
어떤 그래프와 진단을 함께 봐야 하나요?
시계열 분해 결과는 표보다 그래프에서 구조가 더 잘 드러나는 경우가 많습니다.
원시 시계열, 추세, 계절성, 잔차를 위에서 아래로 정렬한 분해 그래프를 사용하면 각 성분의 크기와 시간별 변화를 비교할 수 있습니다.
| 시각화·진단 | 확인할 질문 |
|---|---|
| 원시 시계열 | 장기 증가·감소와 이상한 급등락이 보이는가? |
| 추세 그래프 | 추세의 방향이나 기울기가 바뀌었는가? |
| 계절 성분 | 비슷한 시기에 반복되는 패턴이 있는가? |
| 잔차 그래프 | 설명되지 않은 특이값이나 구조가 남는가? |
| ACF(잔차 자기상관) | 분해 후에도 시간적 의존성이 남는가? |
| 이동표준편차 | 변동성의 수준이 시간에 따라 달라지는가? |
잔차에 뚜렷한 계절 패턴이나 자기상관이 계속 남는다면 선택한 분해 방법이 자료의 구조를 충분히 설명하지 못했을 수 있습니다. 다만 잔차가 완전한 백색잡음이어야만 기술적인 분해가 유용한 것은 아닙니다. 분석 목적에 따라 잔차 진단의 중요도가 달라집니다.
분석할 때 주의해야 할 점
관측 빈도와 계절 주기를 구분해야 합니다.
월별 자료의 12개월 주기와 주별 자료의 52주 안팎 주기는 다르며, 일별 자료에는 요일과 연간 계절성처럼 복수의 패턴이 존재할 수 있습니다. 한 번에 하나의 계절 주기만 처리하는 기본 STL이 모든 복합 계절성을 설명하지는 못합니다.
이동평균의 시점 정렬을 확인해야 합니다.
중심 이동평균은 과거와 미래 관측값을 함께 사용할 수 있으므로 실시간 예측이나 정책 효과 평가에서 미래 정보가 섞이지 않게 주의해야 합니다.
추세와 계절성을 원인으로 해석하지 않아야 합니다.
여름 이용량이 많다고 해서 기온만이 원인이라고 결론 낼 수 없으며, 추세가 상승한다고 해서 마케팅이 효과적이었다고 단정할 수도 없습니다. 인과관계에는 별도의 연구 설계가 필요합니다.
데이터가 짧으면 분해 결과가 불안정할 수 있습니다.
48개월 자료에서 연간 계절 주기는 네 번만 반복됩니다. 계절성이 변화했는지까지 세밀하게 판단하려면 더 긴 관측 기간이 도움이 됩니다.
미래 예측과 기술적 분해를 구분해야 합니다.
분해 결과는 시계열을 이해하는 데 유용하지만 그 자체로 예측 모형의 성능을 입증하지 않습니다. 예측이 목표라면 별도의 시계열 검증과 예측오차 평가가 필요합니다.
분석 결과는 어떻게 보고하나요?
추세·계절성 분석 결과를 보고할 때는 관측 대상과 기간, 관측 빈도, 계절 주기, 분해 방법, 이동통계 구간 길이, 주요 수치를 명확하게 제시하는 것이 좋습니다.
로그 변환이나 이상치 처리, 결측값 보정이 있었다면 해당 과정도 설명해야 합니다.
결과 보고 예시
도시 자전거 공유 서비스의 월별 이용 패턴을 분석하기 위해 2022년 1월부터 2025년 12월까지 48개월의 이용 건수를 검토하였다. 연간 이용 건수는 2022년 960천 건에서 2025년 1,400천 건으로 증가하여 장기적인 이용 규모 확대가 확인되었다. 월별 자료의 연간 반복 패턴을 살펴보기 위해 계절 주기 12개월의 가법 STL 분해를 적용하였다.
2024년 7월 실제 이용 건수는 140천 건이었으며, 추정된 추세 성분은 108천 건, 계절 성분은 +26천 건, 잔차는 +6천 건이었다. 이에 따른 7월의 계절조정 이용 건수는 114천 건이었다. 이러한 결과는 여름철 이용 증가가 반복적인 계절 패턴과 관련되며, 장기적 이용 증가 추세와 구분하여 해석할 필요가 있음을 보여준다.
실제 연구에서는 전체 시계열과 분해 그래프, 잔차 진단 결과를 함께 제시하는 것이 좋습니다.
추세와 계절성을 구분해야 변화가 보입니다
시계열의 한 시점이 높거나 낮게 나타났다는 사실만으로 장기적인 변화가 발생했다고 판단하기는 어렵습니다.
관측값에는 추세와 계절성, 일시적인 변동이 함께 섞여 있기 때문입니다.
이동평균은 단기적인 흔들림을 완화하여 흐름을 보여주고, STL 같은 분해 방법은 관측값을 추세·계절성·잔차로 나누어 해석하도록 돕습니다. 계절조정은 서로 다른 월의 값을 비교하기 쉽게 하며, 이동표준편차는 일정 기간의 변동 수준을 요약합니다.
다만 분해 결과는 데이터에 나타난 패턴을 기술하는 것이지 변화의 원인을 입증하거나 미래를 정확히 예측하는 결과는 아닙니다. 분석 목적에 맞는 기간과 주기, 분해 방법을 선택하고 결과를 원시 데이터와 함께 확인하는 것이 중요합니다.
핵심은 월별 숫자의 차이를 그대로 받아들이지 않고, 그 차이에서 장기적인 방향과 반복적인 계절 효과를 구분해 읽는 것입니다.