- 시계열 데이터의 특성과 전처리 기본 개념
- **피처 엔지니어링: Lag feature, rolling statistics, 시간 관련 파생 변수 생성`매우 중요`**
- 데이터 분할 (학습, 검증, 테스트) 방법 소개
- 회귀 모델, 결정 트리, 앙상블 모델(랜덤 포레스트, Gradient Boosting 등)
- 각 모델의 장단점 및 시계열 예측에의 활용 방안
- 성능 평가 지표
- 피처 엔지니어링 적용 및 모델 학습, 예측 진행
- 결과 시각화
---
- 특징: 일정한 주기(예: 일별, 주별, 월별)로 반복되는 변동.
- 설명: 계절적, 환경적 요인에 의해 정기적으로 나타나는 패턴.
- 센서 데이터 예시:
- 에너지 소비 센서: 여름철에는 에어컨 사용으로 전력 소비 증가, 겨울에는 난방 기기로 인해 증가.
- 환경 센서: 계절별로 온도·습도가 주기적으로 변화.
- 특징: 시간이 지남에 따라 지속적으로 증가하거나 감소하는 경향.
- 설명: 데이터의 장기적인 상승 또는 하락 패턴.
- 센서 데이터 예시:
- 기계 부품 마모 센서: 사용 시간이 길어질수록 진동 센서 값이 점점 증가.
- 산업용 온도 센서: 여름철 공장 기기 사용 증가로 인해 장기적으로 기온이 상승.
- 배터리 전압 센서: 배터리 수명이 줄어들면서 전압이 지속적으로 감소.
- 특징: 계절성과 추세가 결합된 변동.
- 설명: 계절적인 패턴이 반복되면서, 장기적으로 증가 또는 감소하는 추세도 함께 나타나는 형태.
- 센서 데이터 예시:
- 에너지 소비 센서: 점점 증가하는 전력 사용량(추세) + 계절별 변동.
- 스마트팜 환경 센서: 계절에 따라 온도·습도가 반복되면서, 장기적으로 기온 상승.
- 교통량 센서: 매년 도심 차량 수가 증가하면서, 출퇴근 시간 패턴이 반복됨.
### 4. 순환변동 (Cyclic Variation)
- 특징: 경제적, 환경적 요인에 의해 발생하는 불규칙적이고 주기가 일정하지 않은 변동.
- 설명: 계절성과 다르게 일정한 주기가 없으며, 장기적인 변화에 따라 변동.
- 센서 데이터 예시:
- 환경 센서: 미세먼지 수치가 특정 시기에 따라 불규칙적으로 증가.
- 공장 생산 라인 센서: 제품 수요 변화에 따라 가동률이 높아졌다 낮아졌다 반복됨.
- 전력망 센서: 에너지 수급 정책 변화에 따라 전력 소비 패턴이 바뀜.
### 5. 우연변동 (White Noise)
- 특징: 예측 불가능하고 규칙성이 없는 무작위 변동.
- 설명: 시계열 데이터에 포함된 노이즈 또는 오류로, 예측을 어렵게 만드는 변동.
- 센서 데이터 예시:
- 기계 진동 센서: 특정 순간 기계 이상으로 인해 갑자기 높은 진동 수치가 기록됨.
- 온도 센서: 갑작스러운 환경 변화(강풍, 폭우)로 인해 온도가 급격히 변동.
2024-01-02 ⇒ 2024, 01, 02 주말
2024-01-03 ⇒ 2024, 01, 03 평일
2024-01-04 ⇒ 2024, 01, 04
2024-01-05 ⇒ 2024, 01, 05
2024-01-06 ⇒ 2024, 01, 02
주기성이나, 특정 날짜와 같은 세부적인 정보를 모델에 제공하는 방법
1) 월별/분기별/계절별 패턴을 모델이 인식
2) 다양한 주기적인 변동 예측 가능
3) 계절성이나 주말/평일 차이를 반영
- 정의:
1) 시계열 데이터에서 과거의 관측값(시차, lag)을 현재 또는 미래의 예측 변수로 활용하는 것을 말함
예를 들어) 시계열 yt(현재시간)에 대해 yt-1,yt-2 등 과거의 값을 피처(feature)로 추가함으로써, 데이터의 자기상관성을 모델이 학습할 수 있도록 도와줌
- 왜 이렇게 할까요?
- 시계열 데이터는 시간의 흐름에 따라 변화하며, 과거의 상태가 현재와 미래 상태에 영향을 미치는 경향이 있습니다.
- Lag Feature를 통해 이러한 시간적 의존성을 캡처하여, 예측 모델이 더 정확한 예측을 할 수 있게 합니다.
- 자기상관성(correlation) 포착:
- 많은 시계열 데이터는 자기상관성이 존재합니다. 즉, 일정 시간 간격으로 과거의 데이터가 현재의 데이터에 영향을 미치기 때문에, lag feature를 추가하면 모델이 이 패턴을 학습할 수 있습니다.
- 자기상관성 이란? : 시계열 데이터에서 특정 시점의 값이 과거의 값들과 얼마나 연관되어 있는지
- 자기상관성이 높으면 과거 데이터가 현재 데이터와 강한 관계를 가짐.
- 자기상관성이 낮거나 0에 가까우면 이전 값과 현재 값이 독립적임.
- 예측 성능 향상:
- 과거의 데이터 정보를 활용하면 단순 시계열 모델보다 더 정교한 예측이 가능합니다. 예를 들어, 주식 가격, 기상 데이터, IoT 센서 데이터 등에서 이전 값들이 중요한 예측 신호로 작용합니다.
- 모델 해석성 강화:
- 어떤 시점의 과거 값이 예측에 어떤 영향을 미치는지 분석할 수 있어, 모델 해석 및 의사 결정 과정에 도움을 줍니다.
- 다양한 응용 분야:
- 금융, 에너지, 제조, 물류 등 여러 도메인에서 Lag Feature는 중요한 입력 변수로 활용됩니다.
python
import pandas as pd
# 예제 시계열 데이터 생성
data = {'value': [10, 12, 15, 14, 16, 18, 20]}
df = pd.DataFrame(data)
# t-1, t-2 lag feature 생성
df['lag_1'] = df['value'].shift(1)
df['lag_2'] = df['value'].shift(2)
print(df)
## 3.1. 정의 및 개념
- **정의:**
Rolling Statistics는 일정한 윈도우(window) 내에서 계산되는 통계량을 의미
대표적으로 이동 평균(rolling mean), 이동 표준편차(rolling std) 등이 있으며, 윈도우 내의 데이터 분포나 변동성을 파악하는 데 유용합니다.
- 중요성:
- 노이즈 완화:이동 평균은 데이터의 단기적인 노이즈를 줄이고 장기적인 추세를 부각시킵니다.
- 변동성 분석: 이동 표준편차 등은 데이터의 변동성을 평가하여, 급격한 변화나 이상치를 식별하는 데 도움이 됩니다.
- 지역적 패턴 포착: 시계열의 국부적인 특성을 반영함으로써, 예측 모델에 지역적 패턴 정보를 제공할 수 있습니다.
- Pandas의 `rolling()` 사용:`rolling(window=n)` 함수로 지정한 n 크기의 윈도우 내에서 평균, 표준편차, 분산 등을 계산할 수 있습니다.
- 윈도우 크기 선택:데이터의 특성에 따라 적절한 윈도우 크기를 선택하는 것이 중요합니다. 너무 짧으면 노이즈가 남고, 너무 길면 세부 패턴을 놓칠 수 있습니다.
- 윈도우 내 함수 적용:`.mean()`, `.std()`, `.min()`, `.max()` 등 다양한 통계 함수를 윈도우에 적용할 수 있습니다.
python
# 예제 시계열 데이터 생성
data = {'value': [10, 12, 15, 14, 16, 18, 20]}
df = pd.DataFrame(data)
# 3행 이동 평균 및 표준편차 계산
df['rolling_mean'] = df['value'].rolling(window=3).mean()
df['rolling_std'] = df['value'].rolling(window=3).std()
print("Rolling Statistics 생성 결과:")
print(df)
python
df = pd.DataFrame({'date': ['2024-02-20', '2024-02-21', '2024-02-22']})
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
3. Time Lag (`shift()`)
- 과거 데이터를 현재 행으로 이동하여 사용.
- 이전 값들을 옆에 붙이는 방식으로 이해하면 됨.
python
df['lag_1'] = df['기준 컬럼'].shift(1) # 이전 값(1 step 전)
1. Moving Average (`rolling().mean()`)
- 특정 기간(윈도우) 동안의 평균을 이동하면서 계산.
- 변동성을 줄이고 데이터 흐름을 부드럽게 함.
`min_periods=n` → 최소 n개 이상의 값이 있을 때만 평균 계산.
python
df['rolling_mean'] = df['기준 컬럼'].rolling(window=3, min_periods=1).mean()
1. 차분 (`diff()`) ⇒ 통계적관련
- 이전 시점 값과 현재 값의 차이(변화량)를 계산.
- 시계열 데이터에서 **변동성 분석 또는 추세 제거할 때 사용.
python
df['diff_1'] = df['기준 컬럼'].diff(1) # 이전 값과의 차이 계산