2025/02/26 TIL

김학열·2025년 2월 26일
  • 커리 큘럼

1일차: 머신러닝을 활용한 시계열 예측

1. 데이터 이해 및 전처리

- 시계열 데이터의 특성과 전처리 기본 개념
- **피처 엔지니어링: Lag feature, rolling statistics, 시간 관련 파생 변수 생성`매우 중요`**
- 데이터 분할 (학습, 검증, 테스트) 방법 소개

2. 머신러닝 모델 소개 및 적용

- 회귀 모델, 결정 트리, 앙상블 모델(랜덤 포레스트, Gradient Boosting 등)
- 각 모델의 장단점 및 시계열 예측에의 활용 방안
- 성능 평가 지표

3. 실습: 머신러닝 기반 시계열 모델 구축

- 피처 엔지니어링 적용 및 모델 학습, 예측 진행
- 결과 시각화

---

시계열 데이터 형태

1. 계절변동 (Seasonal Variation)

- 특징: 일정한 주기(예: 일별, 주별, 월별)로 반복되는 변동.
- 설명: 계절적, 환경적 요인에 의해 정기적으로 나타나는 패턴.
- 센서 데이터 예시:
    - 에너지 소비 센서: 여름철에는 에어컨 사용으로 전력 소비 증가, 겨울에는 난방 기기로 인해 증가.
    - 환경 센서: 계절별로 온도·습도가 주기적으로 변화.
    
    

2. 추세변동 (Trend Variation)

- 특징: 시간이 지남에 따라 지속적으로 증가하거나 감소하는 경향.
- 설명: 데이터의 장기적인 상승 또는 하락 패턴.
- 센서 데이터 예시:
    - 기계 부품 마모 센서: 사용 시간이 길어질수록 진동 센서 값이 점점 증가.
    - 산업용 온도 센서: 여름철 공장 기기 사용 증가로 인해 장기적으로 기온이 상승.
    - 배터리 전압 센서: 배터리 수명이 줄어들면서 전압이 지속적으로 감소.
    

3. 계절적 추세변동 (Seasonal Trend Variation)

- 특징: 계절성과 추세가 결합된 변동.
- 설명: 계절적인 패턴이 반복되면서, 장기적으로 증가 또는 감소하는 추세도 함께 나타나는 형태.
- 센서 데이터 예시:
    - 에너지 소비 센서: 점점 증가하는 전력 사용량(추세) + 계절별 변동.
    - 스마트팜 환경 센서: 계절에 따라 온도·습도가 반복되면서, 장기적으로 기온 상승.
    - 교통량 센서: 매년 도심 차량 수가 증가하면서, 출퇴근 시간 패턴이 반복됨.
    

    

### 4. 순환변동 (Cyclic Variation)

- 특징: 경제적, 환경적 요인에 의해 발생하는 불규칙적이고 주기가 일정하지 않은 변동.
- 설명: 계절성과 다르게 일정한 주기가 없으며, 장기적인 변화에 따라 변동.
- 센서 데이터 예시:
    - 환경 센서: 미세먼지 수치가 특정 시기에 따라 불규칙적으로 증가.
    - 공장 생산 라인 센서: 제품 수요 변화에 따라 가동률이 높아졌다 낮아졌다 반복됨.
    - 전력망 센서: 에너지 수급 정책 변화에 따라 전력 소비 패턴이 바뀜.
    
    

### 5. 우연변동 (White Noise)

- 특징: 예측 불가능하고 규칙성이 없는 무작위 변동.
- 설명: 시계열 데이터에 포함된 노이즈 또는 오류로, 예측을 어렵게 만드는 변동.
- 센서 데이터 예시:
    - 기계 진동 센서: 특정 순간 기계 이상으로 인해 갑자기 높은 진동 수치가 기록됨.
    - 온도 센서: 갑작스러운 환경 변화(강풍, 폭우)로 인해 온도가 급격히 변동.

- 네트워크 트래픽 센서: 사이버 공격이나 예기치 못한 사용량 급증으로 인해 데이터 전송량이 급격히 변동.

- 시계열 다루는 방법

1. 날짜를 년, 월, 일로 나누기

    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) 계절성이나 주말/평일 차이를 반영
    

2. Lag Feature

2.1. 정의 및 개념

    - 정의:
    1) 시계열 데이터에서 과거의 관측값(시차, lag)을 현재 또는 미래의 예측 변수로 활용하는 것을 말함
    예를 들어) 시계열 yt(현재시간)에 대해 yt-1,yt-2 등 과거의 값을 피처(feature)로 추가함으로써, 데이터의 자기상관성을 모델이 학습할 수 있도록 도와줌
    - 왜 이렇게 할까요?
        - 시계열 데이터는 시간의 흐름에 따라 변화하며, 과거의 상태가 현재와 미래 상태에 영향을 미치는 경향이 있습니다.
        - Lag Feature를 통해 이러한 시간적 의존성을 캡처하여, 예측 모델이 더 정확한 예측을 할 수 있게 합니다.
    

2.2. 중요성 및 활용 이유

    - 자기상관성(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. Rolling Statistics

    ## 3.1. 정의 및 개념
    
    - **정의:**
        
        Rolling Statistics는 일정한 윈도우(window) 내에서 계산되는 통계량을 의미
        
        대표적으로 이동 평균(rolling mean), 이동 표준편차(rolling std) 등이 있으며, 윈도우 내의 데이터 분포나 변동성을 파악하는 데 유용합니다.
        
    - 중요성:
        - 노이즈 완화:이동 평균은 데이터의 단기적인 노이즈를 줄이고 장기적인 추세를 부각시킵니다.
        - 변동성 분석: 이동 표준편차 등은 데이터의 변동성을 평가하여, 급격한 변화나 이상치를 식별하는 데 도움이 됩니다.
        - 지역적 패턴 포착: 시계열의 국부적인 특성을 반영함으로써, 예측 모델에 지역적 패턴 정보를 제공할 수 있습니다.
    

3.2. 생성방법

    - 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)

        
  • pandas 시계열 데이터 다루기
    1. 날짜형식으로 변환

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')

2. 날짜 요소 뽑기 : .dt.

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)  # 이전 값과의 차이 계산
profile
QA/QC 1기 김학열

0개의 댓글