요약

  • 시계열 데이터 전처리는 흩어진 데이터를 결합하고 타임스탬프를 정렬하여 분석 가능한 형태로 변환하는 가장 중요한 단계임
  • 데이터의 생성 시점과 시간대 정보를 명확히 파악하고 도메인 지식에 근거하여 분석에 적합한 시간 단위를 설정해야 함
  • 결측치는 데이터의 특성에 따라 포워드 필이나 이동평균 같은 대치법 또는 선형 보간법을 활용하여 적절히 보완함
  • 분석 목적에 맞춰 업샘플링이나 다운샘플링으로 빈도를 조정하고 지수평활 등을 통해 노이즈를 제거하여 추세를 부각시킴
  • 미래의 정보가 과거를 예측하는 모델에 반영되는 사전관찰 편향을 방지하기 위해 모든 전처리 과정에서 엄격한 검증이 필수적임

1. 개요

시계열 데이터 전처리 과정에서 발생할 수 있는 문제점 파악 화려한 모델링 이전에 따분하고, 반복적이며 세심한 데이터 전처리 과정이 가장 중요한 단계

  • 의미있는 데이터를 찾고 이를 시계열 데이터로 전환하기
  • 흩여져 있는 데이터들을 결합하기
  • 불규칙적이거나 누락된 시계열 데이터를 보완하는 리샘플링
  • 서로 다른 타임스탬프를 가진 데이터들을 동일한 시간대 축으로 정렬하기

1.1 발견된 시계열

발견된 시계열이란?

저자가 만든 용어 일상생활에서 발생한 자료로 시계열 분석 목적이 아니며, 별도 비용 없이 기록된 데이터를 의미한다. 시간 지향적인 형태가 아니라도 시계열 데이터로 변환하고 정렬하여 새로운 시계열 데이터를 생성할 수 있다. 예를 들어, 스펙트럼 데이터의 x축이 파장이라고 할 때 x축의 값이 유의미한 방식으로 정렬되고 의미를 가진다면 새로운 시계열 데이터로 볼 수 있음

타임스탬프로 볼 수 있는 대표적인 경우 3가지

  1. 타임스탬프가 찍힌, 즉 시간 기록인 존재
  2. 시간을 의미하지 않지만 시간대를 의미하는 데이터
    1. 특정 간격대를 지닌 값을 하나의 시간축으로 이용
  3. 물리적 흔적
    1. 이미지 등 한 필드의 단일 벡터 형식으로 저장된 경우

2. 시계열 데이터 다루기

시계열 분석을 위해서는 데이터를 분석에 맞는 형태로 만들어야 한다. 이 과정에서 발생하는 많은 문제점들을 방지하기 위해 데이터 특성들을 사전에 고려한 후에 분석에 맞게 가공해야 한다. 시계열 데이터를 다루기 전에 고려해야 하는 상황은 다음과 같다.

첫째, 가장 먼저 각 데이터의 시간축을 고려한다.

아래와 같이 데이터의 시간 기준이 다른 데이터가 아래와 같을 때, 시간 기준이 모두 다르다. 이때 각 데이터가 어느 시점에 맞춰졌는지 확인이 필요하다. 즉, 회원 상태가 연간 상태를 의미하는지, 가장 최근 상태인지 검토가 필요하다.

  • 연간 회원 상태
  • 회원별 이메일 열람에 대한 주간 누적 기록
  • 회원별 기부가 이뤄준 순간의 타임스탬프

이 때 회원별 하나의 상태만 있다고 하자. 그러면 이는 회원이 가입한 연도에 대해서 가입당시의 상태인지 현재 상태인지를 나타낼 가능성이 있다. 이를 명확히 파악하고 구분하는 것이 중요하다.

왜냐하면, 시계열 분석은 주로 과거의 자료를 기반으로 미래를 예측한다. 그러나 회원 상태가 과거 기준이 아닌 현재 상태 기준인 경우 과거 자료가 아닌 이미 일어난 미래 데이터를 기반으로 미래를 예측하는 문제가 발생하며, 이를 사전관찰(look-ahead)이라고 한다.

사전관찰이란?

  • 사전관찰은 미래의 어떤 사실을 안다는 뜻으로 데이터를 통해 실제로 알아야 하는 시점보다 더 일찍 알게된 사실을 발견한 내용이다.
  • 이처럼 미래에 일어날 일이 모델에서 시간을 거슬러 적용되어 모델의 초기 학습에 영향을 준다.
  • 예를 들어, 모델의 하이퍼파라미터 조정할 때 다양한 시간대를 적용한 모델을 테스트하여 최적의 하이퍼 파라미터를 찾는다. 그러나 특정 시점에 미리 일어날 일을 모델에 적용했기 때문에 문제가 발생한다.

둘째, 데이터의 타임스탬프 표기 방식을 확인한다.

시계열 데이터의 시간축을 확인했다면, 해당 시간을 표기하는 방식도 검토해야 한다. 예를 들어 주(week) 단위의 시계열 데이터의 경우 시간으로 표기했는지, 1W(첫째주)와 같은 방식으로 표기했는지 다를 수 있으며, 한 주의 시작이 일요일에서 월요일인지 월요일에서 일요일인지 다를 수 있기 때문에 시간축 표기 방식을 검토해서 통일시켜야 한다.

셋째, 데이터와 관련된 모든 기간에 값을 채우기 위해 누락 값을 처리한다.

예를 들어 회원별 이메일 열람 기록을 주간으로 기록한 데이터의 경우, 특정 주에는 이메일을 열람하지 않은 경우가 있을 수 있으므로 어떤 시간축에 누락 값(null)이 있는지 확인해야 한다. 이러한 경우, 회원별 이메일 열람 첫 주와 마지막 열람 주 사이의 주를 계산하고 데이터 수와 비교하여 누락된 값이 있는지 검토한다. 이처럼 누락된 값일지라도 다른 정보들처럼 유익한 정보이다.


3. 타임스탬프 문제점

3.1 무엇에 대한 타임스탬프

가장 먼저 생성 과정, 방법, 시기에 대한 질문이 필요하다. 발생 사건과 기록은 일치하지 않는 경우 종종 발생한다. 즉, 데이터의 타임스탬프가 실제 발생한 시각인지 데이터베이스에 기록된 시간인지 알아야한다.

그러기 위해서 적절한 문서화를 통해 명료성을 확보해야하며, 사건의 시간이 무엇에 의해 정해졌는지 최대한 확인해야 한다. 예를 들어 데이터에 시간이 기록되어도 해당 시간이 어느 나라 시간을 의미하는지? 사용자의 현지 시간인지? 세계 시간인지? 등 시간에 대한 정보가 없다. 이러한 문제점을 해결하기 위해서는 데이터 수집 및 축적을 다루는 코드를 까보거나 관련 담당자와 이야기해야 한다.

또한, 분석가는 위에서 확인한 프로세스가 맞는지 추가적으로 검증해야 한다. 따라서, 데이터 처리 공정을 잘 이해하면 향후 발생하는 문제점을을 방지할 수 있다.

3.2 타임스탬프 추측을 통한 데이터 이해

타임스탬프는 사용자 위치와 독립적이지만, 서버의 위치에 따라 협정 세계시(Coordinated Universal Time, UTC) 또는 단일시간대로 저장된다. 데이터의 시간대 패턴을 파악하지 못했다면 협정 세계시(UTC) 기반이라고 결론내릴 수 있다.

또한, 사용자가 기록한 절대적인 시간의 차이를 기반으로 유추할 수 있다. 식사 시간 기록을 예로 들면, 아침-점심-저녁 각 식사 시간마다 절대적인 시간차이가 존재하고, 저녁과 아침 간 절대적 시간 차이가 크기 때문에 사용자의 시간을 유추할 수 있다.

3.3 의미 있는 시간 규모

데이터의 도메인 지식과 상세한 수집 방식을 근거로 적당히 가감하여 타임스탬프의 시간 단위를 기록해야 한다.

일일 판매량 데이터를 특정 사람이 한 주 마지막에 기억을 더듬어 입력한다면, 기억력과 인지편향으로 요일별 판매 데이터가 왜곡될 수 있다. 이를 방지하기 위해 일 단위를 주 단위로 바꾸는 것을 고려할 수 있다.

또한, 물리적인 지식과도 연관이 있다. 혈당 데이터를 기록하는데 있어 혈당이 급격하게 변하는 속도에 한계가 있기 때문에 이를 초 단위로 기록하기 보다 평균값을 이용하여 활용할 수 있다.

즉, 데이터의 도메인 지식과 수집 방법을 바탕으로 분석 모델에 알맞는 타임스탬프의 시간 단위를 정의해야 한다.


4. 시계열 데이터 정제

들어가기 앞서 나에게 정의가 모호했던 용어로 윈도우와 롤링에 관한 개념을 다시 살펴보겠다.

우선 윈도우(window)란 시계열 데이터에서 특정 크기의 구간(subset 또는 slice)을 의미한다. 예를 들어 ‘지난 3일’이라는 기간이 될 수도 있고, ‘30분 간격’이라는 구간이 될 수 있다.

롤링(rolling)은 왼도우(window)를 이동시키면서통계값을 계산하는 연산이다. 예를 들어 이동평균(rolling mean), 이동 합(rolling sum)이 있다.

즉, 두 개념을 결합하여 결측치를 처리할 있다. 예를 들어, window = 3, 이동평균(rolling mean) 적용의 의미는 윈도우 크기가 3으로 시계열 데이터를 순차적으로 3개를 포함하는 구간을 만들어 각각의 평균을 계산하는 의미이다.

4.1 결측치 처리

결측치 처리

시계열 데이터에서 누락된 데이터는 비시계열 자료보다 매우 흔한 일이다. 왜냐하면, 시간축의 시계열 데이터를 샘플링하기 어렵기 때문이다. 예를 들어 환자가 치료를 받지 않는 이유는 매우 다양하므로 시간축에 진료 기록이 누락될 가능성이 매우 높다. 따라서, 이러한 누락된 값을 처리하는 일반적인 방법은 다음과 같다.

  • 데이터 보존 방법
    • 대치법(imputation): 전체 관측에 기반하여 누락된 데이터를 채움
    • 보간법(interpolation): 대치법 중 하나로 전체가 아닌 인접한 데이터를 사용하여 누락된 데이터를 채움
  • 데이터 삭제 방법
    • 영향받은 기간 삭제: 누락된 기간을 완전히 사용하지 않는 방법

데이터 보존 방법은 크게 대치법과 보간법이 있으며, 대치법의 대표적인 예로 포워드 필(forward fill)과 이동평균(moving averag)가 있다. 보간법의 대표적인 예는 선형 보간법(linear interpolation)이 있다.

이처럼 누락된 데이터를 처리하는 방법은 이어지는 다음 작업의 데이터 용도를 설명할 수 있어야 한다.

4.1.1 대치법(imputation)

포워드 필

포워드 필(forward fill)누락된 값 기준 바로 직전에 값으로 누락된 값을 채우는 가장 간단한 방법이다. 시간상 누락된 지점 발견 시 이미 기록된 데이터 외에 확신할 수 있는 것은 없다. 따라서 가장 최근에 알려진 측정값을 사용하는 것이 타당하다. 화려하고 복잡한 방법도 있지만, 일부 환경에서는 간단한 포워드 필을 사용하는 것이 가장 타당하다.

예를 들어 환자 진료 기록 데이터의 경우 환자가 정상이라면 더이상 측정되지 않는다. 따라서 재진단하지 않아도 과거 정상의 값으로 대치해도 되도 타당하다. 이처럼 단순한 포워드 필을 사용하는 이유를 제시해야한다. 사전지식을 통해 크게 변하지 않는 데이터는 단순한 방법인 포워드 필 적용이 가능하다.

장점

  • 계산이 단순함
  • 실시간 스트링 데이터에 쉽게 활용
  • 대치 작업 처리 능숙

백워드 필

백워드 필(backward fill)은 포워드 필과 반대로 누락된 값 기준 바로 이후에 값으로 누락된 값을 채우는 방법이다. 그러나 이는 앞서 설명한 사전관찰이기 때문에 미래를 예측하지 않거나 도메인 지식에 기반하여 미래보다 과거를 채우는게 의미가 있는 경우에만 사용해야 한다.

이동평균

이동평균(moving average) 은 롤링 평균 또는 중앙값으로 데이터를 대치하는 방법이다. 과거의 값으로 미래를 예측한다는 관점에서 포워드 필과 유사하다. 그러나 이동평균은 최근 과거의 여러 시간대를 고려하는 점에 있어서 포워드 필과 차이가 있다(포워드 필은 직전의 한 시점의 값만 고려한다).

노이즈가 많은 데이터의 경우 포워드 필이 아닌 이동평균 사용이 적합한 상황이다. 왜냐하면, 노이즈가 많은 데이터의 경우 누락된 값의 직전의 값 또한 많은 노이즈를 포함하고 있어 대치된 값이 실제 값보다 임의의 노이즈를 포함한다.

반면에 노이즈가 많은 데이터에서 평균을 이용하면 노이즈를 일부 제거할 수 있다. 따라서, 변동성이 큰 데이터는 과거자료의 대푯값(평균 또는 중앙값)으로 대치함으로써 직전 자료의 노이즈를 그나마 제거할 수 있다.

또한, 이동평균도 사전관찰을 방지하기 위해서 누락된 값 발생 이전의 값만을 사용해야 한다. 물론 사전관찰을 고려하지 않는 상황이라면 누락된 데이터의 전과 후를 포함하여 추정에 사용가능한 정보를 최대화시킬 수 있는 장점은 있다. 그러나 미래를 예측하는 입력변수에는 적용하면 안된다.

이동평균 값으로 산술평균을 고집하지 않아도 된다.

  • 지수가중이동평균(exponentially weighted moving average): 비교적 최근 데이터에 더 많은 가중치를 부여
  • 기하평균(geometric mean): 일련의 데이터가 강한 상관관계일 때 시간이 지나면서 복합적인 값을 가지는 시계열 자료에 유용

이동평균 유의사항

  • 이동평균에 의한 대치법은 데이터의 분산을 감소시킴(다시 말해, 데이터를 잘 설명하지 못한다)
  • 그러나 이로 인해 정확도, R2통계량, 다른 오류 지표 등 향후 시계열 모델 성능 평가 지표 계산시 과대 평가
  • 이는 시계열 모델에서 종종 마주치는 문제로 반드시 기억해야할 내용

4.1.2 보간법(interpolation)

보간법은 전체 데이터를 기하학적 형태로 제한하여 누락된 값을 결정하는 방법이다. 보간법은 과거와 미래 자료를 모두 활용하거나 둘 중 하나만 활용할 수도 있다. 다시 말하지만, 미래 자료를 사용하는 것은 사전 관찰로 사용할 때 명확한 근거를 제시해야 한다.

대표적인 예시인 선형 보간법(linear interpolation) 은 누락된 데이터 주변 데이터에 선형적 일관성을 갖도록 제한한다. 선형 보간법은 이미 알고 있는 지식을 통해 데이터가 선형적인 패턴을 갖는 것을 이미 알고 있을 때 활용할 수 있다.

예를 들어 성장중인 기업의 연간 판매 데이터의 경우 사업 규모가 매년 선형적으로 증가하는 추세라면 선형 보간법을 적용할 수 있다. 동일한 상황에서 이동평균을 사용한다면 대치값이 실제값을 과소 평가할 수 있다.

그러나 비선형 상황에서 선형(또는 스플라인) 보간법은 적절하지 않다. 예를 들어 기상 데이터인 강수량의 경우, 선형적 패턴을 보이지 않으므로 특정 날짜의 누락된 값을 선형적으로 추정해서는 안된다.

4.2 시계열 빈도 변경(업샘플링과 다운샘플링)

시계열 빈도 불일치

  • 시계열 자료의 출처가 서로 다른 경우 시계열 빈도가 같지 않은 경우는 매우 많아 시계열 빈도를 바꿔주어야 한다.
  • 다운샘플링(downsampling): 시계열 빈도를 줄임(예. 일 월)
  • 업샘플링(upsampling): 시계열 빈도를 늘림(예. 분기 월)

4.2.1 다운샘플링

원본 자료의 시간 빈도가 실용적이지 못함

어떤 것을 너무 자주 측정하는 경우이다. 예를 들어 매초 외부 기온을 측정한다고 하자. 흔히 우리는 1시간 단위로 온도를 확인하는 것을 비추어 볼 때 이는 빈번하게 측정한 자료고 나아가 데이터 저장 등 비용 문제를 일으킨다.

이와 같이 너무 자주 측정된 시계열 자료를 다운샘플링을 통해 특정 개수의 요소로 추출할 수 있다.

계절 주기의 특정 부분에 집중

전반적인 계절성 데이터가 아닌 하나의 특정 계절에 초점을 맞춘 경우이다. 예를 들어 특정 월의 자료에 대한 변동성을 파악하고 싶은 경우 특정 월만 추출하는 다운샘플링을 통해 연 단위의 자료를 활용할 수 있다.

더 낮은 빈도에 데이터에 맞춤

빈도가 다른 시계열 자료 비교를 위한 경우이다. 다운샘플링을 통해 더 낮은 시계열 빈도에 데이터에 맞출 수 있다.

이때 일부 데이터를 삭제하기 보다 평균이나 합계 등 단순한 방법을 사용할 수 있고, 최근 값에 가중치를 더 주는 가중치 평균을 적용할 수 있다(단 위와 같은 방법은 특정 기간 내 데이터의 대푯값으로 앞서 설명한 데이터 대치법과는 다르다).

4.2.2 업샘플링

업샘플링은 단순히 다운샘플링의 반대가 아니다. 업샘플링을 통한 빈도는 실제로 일어날 수 있는 시간 빈도의 데이터이다. 이는 실제 측정값이 아니라 더 조밀한 시간대를 얻기 위한 것이다.

업샘플링 주의할 점

현재 데이터의 한계점을 유념하고, 더 많은 시간 레이블을 얻은 것은 맞지만, 더 많은 정보 자체가 추가된 것은 아니다.

시계열이 불규칙한 상황

업샘플링을 사용하는 가장 일반적인 이유는 불규칙적으로 샘플링된 시계열 자료를 규칙적인 형태로 변환하기 위함이다. 이는 데이터 사이 시차보다 더 높은 빈도로 전체 데이터를 변화해야 하는 상황으로 롤링 조인을 사용할 수 있다.

입력이 서로 다른 빈도로 샘플링

특정 모델이 현재 데이터보다 더 높은 빈도를 요구하는 상황이다. 따라서 동일한 시간대로 정렬하기 위해 업샘플링이 필요하다. 이때 늘 사전관찰에 주의해야 한다. 그러나 알려진 상태로만 추측하는 경우 안전하게 진행할 수 있다.

예를 들어 매월 초 당월의 실업률이 발표된다고 하자. 이때 해당 월의 실업률은 모두 동일하게 지속된다는 추정에 기반하기 때문에 해당 월 말에 실업률을 아는 것은 사전관찰이 되지 않는다.

4.3 데이터 평활

4.3.1 개요

시계열 데이터 분석 전 데이터는 평활되는 것이 일반적이다. 이상치 값이 실제 값일 수 있지만 근본적인 공정을 반영한 결과가 아닐 수 있다. 예를 들어 측정 기기의 오류로 인한 결과로 측정 기기에 대한 문제이지 값의 문제가 아닌 것이다. 이러한 이유로 데이터의 평활이 필요하다.

데이터 평활은 누락된 값을 대치하는 대치법과도 연관이 있다. 평활계산에는 윈도(window)를 이용하는데, 이는 데이터의 위치에 대한 문제로 사전관찰이 있거나 없는 롤링 편균 모두가 적용될 수 있기 때문이다.

4.3.2 지수평활

지수평활은 모든 시점에 데이터를 똑같이 취급하는 것이 아니라 최근 측정된 값 일수록 더 많은 가중치를 부여한 방법으로 시간의 특성을 더 잘 인식할 수 있는 방법이다. 이는 데이터 전체의 평균값을 이용하는 이동평균과는 대조적이다.

라는 특정 시간에 평활된 값은 다음과 같이 계산된다. 이를 한 시점 이전인 에서 평활된 값도 아래와 같이 계산되며, 이를 활용하면 를 좀 더 복잡하게 작성된다. 즉, 할인계수(discount factor, ) 값을 조절하여 최근 값의 적용할 가중치를 조정하는 것으로 값이 작을수록 최근 값()을 더 이용하도록 한다.

예를 들어 첫 번째, 두 번째 데이터가 각가 3, 6이라고 하자. 이때 할인계수()를 0.7로 가정하면 시계열의 두 번째 예측값은 다음과 같이 계산된다.

평활요인(smoothing factor) 이라 불리는 파라미터 값은 기존 평균 정보를 유지하는 것에 비해 현재의 값을 얼마나 갱신하는지 영향을 미친다. 이는 값이 클수록 갱신이 되는 값이 현재 값에 더 빨리 가깝도록 한다는 의미이다. 즉, 최근값을 더 많이 이용한다는 뜻으로 값이다.

즉 위 할인계수()에 대한 식을 평활요인() 인 관한 식을 작성하면 다음과 같다. 다시 말해 값이 클수록 최근값을 더 이용한다.

Python 내 ewm() 활용

일반적으로 지수가중함수인 ewm() 을 이용하며, mean() 메서드를 추가로 활용하여 지수가중평균을 적용하여 데이터를 평활한다.

위 평활요인에 관한 일반식을 활용하여 가중평균 값에 대한 식은 다음과 같다.

# value 값에 평활요인(alpha)이 0.05인 지수가중평균 값 적용
df['Smooth.5'] = df.ewm(alpha = 0.05).mean().value

지수평활의 한계점과 대처 방안

  • 지수평활은 장기적인 추세 데이터에서 예측을 잘 수행하지 못한다.
  • 홀트의 방법(Holt’s method): 추세 데이터에 활용
  • 홀트-윈터스의 평활(Holt-Winters smoothing): 추세와 계절성 모두 가진 데이터에 활용
  • 칼만 필터(Kalman Filter): 변동성 및 측정 오차의 조합으로 시계열 과정을 모델링을 통해 데이터 평활

5. 계절성 및 시간대

5.1 계절성

데이터의 계절성은 특정 행동의 빈도가 안정적으로 반복해서 나타거나 동시에 여러 빈도가 다르게 발생하는 것을 의미한다. 예를 들어 특정 한 사람의 3년간 패턴을 보면 일간 식사 패턴, 주간 수면 패턴, 월간 교통 패턴 등 다양하지만 계절적인 변화를 갖는 경향이 있다.

계절성의 식별 및 처리는 모델링 과정의 한 부분이다. 시각화를 통해 데이터이 추세를 확인할 수 있으며, 모델이 요구하는 바에 따라 로그 및 차분 변화가 필요할 수 있다.

예를 들어, 절대적인 값들이 커지는 일반적인 값의 추세의 경우 시점별 값을 비교를 용이하기 위해 로그 또는 차분 변환을 한다. 또한, 분산이 점차 커지는 분산 크기의 추세의 경우 또 다른 변환 방법이 필요하다.

계절성과 순환성 데이터

  • 계절성 데이터: 일련의 동작이 정해진 기간 동안 반복되는 시계열로 24시간, 12개월과 같이 서로 다른 속도의 계절성을 반영하는 여러 개의 주기성 존재가 가능
  • 순환성 데이터: 반복적인 동작이지만, 기간이 가변적인 시계열로 주식시장의 호황기 또는 불황기와 같이 불확실한 기간을 가짐

5.2 시간대

Python 내 datetime, pytz, dateutil 라이브러리 활용하여 시간대 탐색ㅁ

Python 에서 datetime모듈 내 now() 함수를 이용하여 사용자의 실시간 시간 정보를 얻을 수 있지만, 시간대에 대한 정보는 존재하지 않는다. 즉, 아래와 같이 시간대를 전달해야 정확한 정보를 얻을 수 있다.

import datetime
print(datetime.datetime.utcnow()) 
# 사용자 실시간 정보 (시간대 정보 없음)
print(datetime.datetime.now())
# 사용자 실시간 정보를 국제표준시(UTC)로 설정한 시간(시간대 정보 존재)
print(datetime.datetime.now(datetime.timezone.utc))

아래 예시는 시간대 정보가 없는 datetime 타입의 시간대를 미국 태평양 시간대(US/Pacific) 기준 시간임을 지정하는 내용이다.

  • 미국 태평양 시간대(US/Pacific)를 western 객체로 지정
  • localize() 함수를 통해 datetime 타입의 시간 정보를 미국 태평양 시간대 기준의 시간으로 지정
import pytz
western = pytz.timezone('US/Pacific')
loc_dt = western.localize(datetime.datetime(2025, 11, 23, 12, 34, 0))
loc_dt

위에서 지정한 미국 태평양 시간대를 astimezone 함수를 통해 다른 시간대로 변환할 수 있다.

london_tz = pytz.timezone('Europe/London')
london_dt = loc_dt.astimezone(london_tz)

참고사항

  • 위에서 활용한 datetime 객체의 시간 정보인 datetime(2025, 11, 23, 12, 34, 0) 라는 시간은 변함이 없다.
  • 해당 시간을 표현하는 시간대 정보만 변경된 것이다.
  • 다시 말해, 시간대 정보가 없던 시간을 미국 태평양 시간대(US/Pacific)으로 설정한 후 유럽 런던 시간대(Europe/London)으로 변환

pytz의 localize()를 사용해야 하는 이유

동일한 시간 정보(datetime(2018, 5, 15, 12, 34, 0)를 입력해도 아래 두 결과물은 다르다.

  • tzinfo를 사용한 경우: 2018-05-15 12:34:00 LMT-0001
  • localize()를 사용한 경우: 2018-05-15 12:34:00 BST+0100
f = '%Y-%m-%d %H:%M:%S %Z%z
print(datetime.datetime(2018, 5, 15, 12, 34, 0, tzinfo = london_tz).strftime(f))
print(london_tz.localize(datetime.datetime(2018, 5, 15, 12, 34, 0)).strftime(f))

이러한 이유는 tzinfo 는 일광절약시간대(DST)를 적용하지 않기 때문이다. 실제로 런던에서 2018년 5월 15인 영국 섬머 타임제(British Summer Time, BST)를 이용한다. 이처럼 localize()는 일광절약시간대(DST)를 고려하여 영국 썸머 타임인 BST로 표기되고, DST를 적용하지 않은 tzinfo는 지방평균시를 의미하는 LMT로 표기됐다.

따라서, BST+0100 의 의미는 영국에서 평소보다 1시간 빠른 시간대를 이용하고 있다는 의미이다.

일광절약시간대(DST)란?

여름철 해가 떠 있는 시간이 길어 에너지 절약 효과를 위해 시계를 1시간 앞당겨 이용하는 제도이다. 국가마다 다르지만 일반적으로 봄에 1시간 앞으로 이동(DST 시작)하고, 가을에 1시간 뒤로 이동(DST 끝)한다.


6. 사전관찰 방지

사전관찰을 진단하는 통계적 방법은 없다. 시계열 분석은 알려지지 않은 것을 모델링하는 것으로 잘 설계된 모델과 사전관찰이 있는 모델을 구분하기에 어렵다. 즉, 모델을 상용화한 이후에 누락된 데이터가 발생하거나 훈련 과정에서 보였던 내용을 반영하지 않은 순간을 발견할 수 있다.

이러한 문제를 방지하기 위한 좋은 방법은 끊임없이 경계하는 것이다. 데이터의 평활, 대치, 업샘플링, 롤링 등을 수행할 때 마다, 주어진 시점에서 무엇을 알 수 있는지에 관한 질문을 스스로에게 던져야 한다. 또한 발견된 시계열 정보와 가용 데이터 사이의 현실적인 지연 시간도 포함해야 한다. 예를 들어 한 달에 한 번 모델을 재학습할 수 있을 때, 시간에 따라 어떤 모델이 어떤 데이터에 적용되어야 하는지 파악해야한다. 가령 7월에 학습된 모델을 7월에 시험하는 것은 불가능하다.

일반적인 점검 목록은 다음과 같다.

  • 누락된 데이터 대치 및 평활 과정에서 사전관찰이 어떠한 영향을 미칠지 신중하게 생각
  • 데이터 정제 단계 별 임의의 시점을 검사하여 시간 정보가 뜻하지 않게 부적절한 시간대에 위치하는지 점검
  • 각 종류의 데이터에 대한 타임스탬프에 대한 정보를 명확히 인지
  • 시간을 인식할 수 있는 에러(롤링) 검사 또는 교차검증을 통해 미래 시점의 데이터가 과거의 데이터로 만든 모델로 유출되는 것을 방지
  • 의도적으로 사전관찰을 도입하여 모델의 동작을 확인하여 정확도에 생기는 변화에 대한 감을 익히기
    • 노이즈가 많고 신호가 약한 데이터가 아닌 경우 사전관찰이 도입된 모델이 매우 좋아보일 수 있음
  • 특성(feature)를 천천히 추가해서 성능의 큰 향상이 있는지 점검
    • 사전관찰의 주요 특징은 특정 feature가 매우 좋은데, 왜 좋은지를 설명할 방법이 없는 경우이다.

참고자료