본문 바로가기
카테고리 없음

시계열 데이터 특징 분석 기법과 모델링

by 유후후우후 2025. 2. 11.

 

시계열 데이터 특징 분석 모델링

 

1. 시계열 분석이란?

시계열 분석(Time Series Analysis)은 일정한 시간 간격으로 수집된 데이터를 분석하여 미래의 패턴을 예측하는 기법입니다. 주식 시장, 경제 데이터, 기후 변화, 수요 예측 등 다양한 분야에서 활용됩니다.

시계열 데이터는 일반적인 데이터 분석과 달리 시간 의존성(Temporal Dependency)자기 상관(Autocorrelation)을 고려해야 합니다.

2. 시계열 데이터의 주요 특징

  • 추세(Trend): 데이터가 장기적으로 상승 또는 하락하는 경향
  • 계절성(Seasonality): 일정 주기마다 반복되는 패턴
  • 주기성(Cyclicality): 계절성과 비슷하지만 일정한 주기가 아닌 장기적인 변동
  • 불규칙성(Irregularity): 예측할 수 없는 변동성

3. 시계열 분석 기법

(1) 이동평균법 (Moving Average)

이동평균법은 일정 기간 동안의 평균을 계산하여 데이터를 부드럽게 만드는 방법입니다.

import pandas as pd
import matplotlib.pyplot as plt

# 데이터 로드
data = pd.read_csv("stock_prices.csv", parse_dates=["Date"], index_col="Date")

# 이동평균 계산 (30일)
data["SMA_30"] = data["Close"].rolling(window=30).mean()

# 시각화
plt.figure(figsize=(12,6))
plt.plot(data["Close"], label="Stock Price")
plt.plot(data["SMA_30"], label="30-day SMA", linestyle="dashed", color="red")
plt.legend()
plt.show()

(2) 자기 상관 함수 (ACF) & 부분 자기 상관 함수 (PACF)

자기 상관 함수(ACF)와 부분 자기 상관 함수(PACF)는 시계열 데이터의 의존성을 분석하는 데 사용됩니다.

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# ACF & PACF 플롯
plot_acf(data["Close"].dropna(), lags=30)
plot_pacf(data["Close"].dropna(), lags=30)
plt.show()

(3) 분해법 (Decomposition)

시계열 데이터를 추세(Trend), 계절성(Seasonality), 불규칙성(Residual)으로 분해하여 분석할 수 있습니다.

from statsmodels.tsa.seasonal import seasonal_decompose

# 시계열 분해
result = seasonal_decompose(data["Close"], model="additive", period=30)

# 시각화
result.plot()
plt.show()

4. 시계열 모델링

(1) ARIMA 모델 (AutoRegressive Integrated Moving Average)

ARIMA 모델은 자기회귀(AR), 차분(I), 이동평균(MA) 요소를 결합한 강력한 시계열 예측 모델입니다.

ARIMA 모델 구성 요소

  • AR (AutoRegressive): 과거 값이 현재 값에 영향을 미치는 자기 회귀 요소
  • I (Integrated): 데이터의 안정성을 위해 차분을 적용하는 과정
  • MA (Moving Average): 과거 예측 오차를 고려하여 현재 값을 조정하는 요소

Python을 활용한 ARIMA 모델 예측

from statsmodels.tsa.arima.model import ARIMA

# 모델 학습
model = ARIMA(data["Close"], order=(2,1,2))
model_fit = model.fit()

# 예측 수행
forecast = model_fit.forecast(steps=30)

# 시각화
plt.figure(figsize=(12,6))
plt.plot(data["Close"], label="Actual")
plt.plot(forecast, label="Forecast", linestyle="dashed", color="red")
plt.legend()
plt.show()

(2) SARIMA 모델 (Seasonal ARIMA)

SARIMA 모델은 ARIMA 모델에 계절성을 반영한 확장 모델입니다.

from statsmodels.tsa.statespace.sarimax import SARIMAX

# SARIMA 모델 학습
sarima_model = SARIMAX(data["Close"], order=(2,1,2), seasonal_order=(1,1,1,12))
sarima_fit = sarima_model.fit()

# 예측 수행
sarima_forecast = sarima_fit.forecast(steps=30)

# 시각화
plt.figure(figsize=(12,6))
plt.plot(data["Close"], label="Actual")
plt.plot(sarima_forecast, label="SARIMA Forecast", linestyle="dashed", color="red")
plt.legend()
plt.show()

(3) LSTM (Long Short-Term Memory) 모델

딥러닝을 활용한 LSTM 모델은 장기 의존성을 고려하여 시계열 데이터를 예측하는 데 강력한 성능을 보입니다.

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# 데이터 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data["Close"].values.reshape(-1,1))

# 데이터 준비
X, y = [], []
for i in range(60, len(data_scaled)):
    X.append(data_scaled[i-60:i, 0])
    y.append(data_scaled[i, 0])
X, y = np.array(X), np.array(y)

# LSTM 모델 구축
model = Sequential([
    LSTM(units=50, return_sequences=True, input_shape=(X.shape[1], 1)),
    LSTM(units=50),
    Dense(units=1)
])

# 모델 컴파일 및 학습
model.compile(optimizer="adam", loss="mean_squared_error")
model.fit(X, y, epochs=20, batch_size=32)

# 예측 수행
predicted_price = model.predict(X)
predicted_price = scaler.inverse_transform(predicted_price)

# 시각화
plt.figure(figsize=(12,6))
plt.plot(data["Close"].values, label="Actual Price")
plt.plot(np.arange(60, len(predicted_price)+60), predicted_price, label="LSTM Prediction", linestyle="dashed", color="red")
plt.legend()
plt.show()

5. 결론: 어떤 시계열 모델을 선택해야 할까?

시계열 데이터 분석 및 예측은 다양한 모델을 적용하여 최적의 결과를 도출하는 것이 중요합니다.

모델 비교

모델 특징 적용 사례
이동평균 (Moving Average) 단순한 평균 기반 분석 단기적인 변동성 제거
ARIMA 과거 값과 예측 오차를 활용한 모델 비계절성 데이터 예측
SARIMA ARIMA에 계절성을 반영 계절성이 있는 금융 데이터
LSTM 딥러닝 기반으로 복잡한 패턴 학습 장기 예측이 필요한 데이터

각 모델의 장단점을 고려하여, 시계열 데이터 특성에 맞는 모델을 선택하는 것이 중요합니다.