Time Series Analysis
시계열 분석은 시간 순서가 있는 데이터를 연구해 추세, 계절성, 이상치를 찾고 통계 모델과 딥러닝 모델로 미래 값을 예측합니다.
시계열 분석은 시간 순서대로 기록된 데이터 포인트를 연구하는 분야입니다. 일반적으로 시간별 센서 측정값, 일일 매출, 교통 카메라가 매분 감지한 차량 대수처럼 일정한 간격으로 기록합니다. 다른 데이터 분석과 구별되는 점은 순서에도 정보가 담긴다는 것입니다. 각 관측값은 이전 관측값에 영향을 받으므로 데이터를 섞으면 관심 있는 패턴이 사라집니다. 주요 목표는 추세와 계절 패턴을 통해 시계열을 설명하고, 미래 값을 예측하며, 이상 징후를 탐지하고, 심전도(ECG)의 심장 리듬처럼 시계열 전체를 분류하는 것입니다.
추세, 계절성, 정상성#
대부분의 시계열은 몇 가지 구성 요소가 결합된 형태입니다. 추세는 장기적인 방향, 계절성은 하루, 일주일 또는 일 년처럼 고정된 주기로 반복되는 패턴, 주기는 고정된 주기 없이 나타나는 장기적인 상승과 하락, 잔차는 그 외에 남는 부분입니다. 분해는 이러한 요소를 분리하는 작업으로, 전통적으로 이동 평균을 사용하며, Robert Cleveland와 동료들이 1990년에 발표한 국소 회귀 기반 계절-추세 분해인 STL을 사용하면 더 강건하게 분해할 수 있습니다.
시계열과 시차를 둔 자기 자신 간의 상관관계인 자기상관은 이러한 구조를 드러냅니다. 시간별 데이터에서 시차 24의 값이 높으면 각 시간이 하루 전 같은 시간과 비슷하다는 뜻입니다. 많은 통계 모델은 또한 평균, 분산, 자기상관이 시간에 따라 변하지 않는 정상성을 가정합니다. 확장 Dickey-Fuller 검정은 일반적인 비정상성 유형을 확인하며, 수준 자체 대신 한 단계에서 다음 단계로의 변화를 모델링하는 차분은 추세를 제거합니다.
이 예제는 일일 주기, 완만한 상승 추세, 노이즈가 포함된 4주간의 시간별 차량 대수를 시뮬레이션하고 자기상관을 측정한 뒤 두 가지 방법으로 마지막 날을 예측합니다.
import numpy as np
import pandas as pd
# Four weeks of hourly vehicle counts: a daily cycle, a slow upward trend, and noise
rng = np.random.default_rng(0)
hours = pd.date_range("2026-03-01", periods=24 * 28, freq="h")
daily_cycle = 40 + 30 * np.sin(2 * np.pi * (hours.hour - 9) / 24)
counts = pd.Series(daily_cycle + 0.02 * np.arange(len(hours)) + rng.normal(0, 5, len(hours)), index=hours)
# Autocorrelation: how strongly each count resembles the count 1, 12, and 24 hours earlier
for lag in [1, 12, 24]:
print(f"Autocorrelation at lag {lag}: {counts.autocorr(lag):.2f}")
# Forecast the final day from the 27 days before it
history, actual = counts[:-24], counts[-24:].to_numpy()
naive = np.full(24, history.iloc[-1]) # repeat the last observed count
seasonal_naive = history.iloc[-24:].to_numpy() # repeat the same hour of the previous day
print(f"Naive MAE: {np.abs(actual - naive).mean():.1f} vehicles")
print(f"Seasonal naive MAE: {np.abs(actual - seasonal_naive).mean():.1f} vehicles")자기상관은 시차 1에서 0.92, 오후 피크가 밤의 최저점과 겹치는 시차 12에서 -0.89, 시차 24에서 0.95입니다. 마지막 관측 대수를 반복하면 시간당 평균 24.5대의 오차가 발생하고, 전날의 대수를 반복하면 5.6대의 오차가 발생합니다. 따라서 계절 나이브 예측은 예측 모델이 능가해야 하는 기준선입니다.
예측 방법#
통계적 방법은 특히 시계열이 짧을 때 여전히 강력합니다. Charles Holt와 Peter Winters가 1960년경 개발한 지수 평활법은 최근 관측값에 더 큰 가중치를 두고 추세 및 계절성 항을 추가합니다. George Box와 Gwilym Jenkins가 1970년에 널리 알린 ARIMA 모델은 자기회귀, 차분, 과거 오차의 이동 평균을 결합합니다. Meta의 Prophet은 비즈니스 데이터의 추세, 계절성, 공휴일 효과를 적합합니다.
머신러닝 모델은 시차 값과 달력 특성을 이용한 예측 모델링 문제로 예측을 다룹니다. LightGBM과 같은 그래디언트 부스팅 트리는 Walmart 매출을 대상으로 한 2020년 M5 대회에서 우세를 보였으며, 10만 개 시계열을 다룬 2018년 M4 대회는 지수 평활법과 순환 신경망을 결합한 Slawek Smyl의 하이브리드 모델이 우승했습니다. 딥러닝 모델에는 LSTM, 상태 공간 모델, 트랜스포머가 포함됩니다. Amazon의 Chronos와 Google의 TimesFM과 같은 사전 학습된 파운데이션 모델은 새로운 시계열을 제로샷 방식으로 예측합니다. 칼만 필터는 노이즈가 있는 측정값에서 객체 위치와 같은 숨겨진 상태를 실시간으로 추정하는 관련 작업을 처리합니다.
평가에서는 시간 순서를 지켜야 합니다. 무작위 교차 검증을 사용하면 모델이 미래를 보게 되며 이는 데이터 누수에 해당합니다. 따라서 롤링 원점 평가를 사용해 차단 시점 이전의 모든 데이터로 학습하고 이후 기간을 예측한 다음, 차단 시점을 앞으로 옮기면서 이 과정을 반복합니다.
동영상에서 얻는 시계열#
컴퓨터 비전은 동영상을 시계열로 변환합니다. 교통 카메라에서 객체 계수를 수행하면 분당 차량 대수가 나오고, 객체 추적을 수행하면 프레임별 위치와 속도가 나오며, 매장 카메라에서는 시간당 점유 인원 수를 얻을 수 있습니다. 이러한 시계열에는 출퇴근 시간이나 인력 수요 예측, 사고 이후 교통량이 갑자기 감소하는 상황을 표시하는 이상 탐지 등 동일한 방법을 적용할 수 있습니다. Ultralytics 분석 솔루션에서는 analytics_type="line"이 YOLO26 모델로 객체를 추적하고 30프레임마다, 즉 30fps 동영상에서 약 1초에 한 번씩 화면에 보이는 객체 수를 그래프로 표시합니다. 따라서 카메라 피드는 재생 중에 객체 수 시계열로 변환됩니다.
시계열 분석은 자연어 처리의 시퀀스 모델링과 겹치는 부분이 있습니다. 텍스트는 위치에 따라 정렬되지만 샘플링 간격은 없습니다. 탐지, 추적, 동영상 이해 모델이 동영상에서 추출한 개수와 속도는 프레임보다 훨씬 적은 공간을 차지하므로, 이를 여러 해 동안 저장하고 카메라 간에 비교할 수 있습니다.










