데이터사이언스 기록기📚

[시계열 분석] 1장-2장 정리 본문

Data/시계열 분석

[시계열 분석] 1장-2장 정리

syunze 2024. 2. 15. 14:08

Ch.1 시계열 데이터와 분석의 정의

1. 시계열 분석

  • 정의 : 시간 순서대로 정렬된 데이터 -> 의미 있는 요약, 통계 정보 추출
  • 과거가 미래에 어떠한 영향을 주는가?로 인과관계 다루는 질문으로 요약

2. 시계열 데이터 특징

  • 기록은 시간의 흐름따라 서로 연결된 형태
  • 규칙적인 간격으로 수집되어야 함
  • 장기적으로 기록 되어야 함

 

Ch.2. 시계열 데이터 전처리 과정에서 발생할 수 있는 문제

2-1. 시계열 데이터는 어디서 찾는가

1) 학습과 실험 목적에 맞는 데이터셋 찾기

시계열 데이터의 문제점
  - 불완전한 타임스탬프 (연도 없이 월, 계절로 구성)
  - 데이터에 수평이나 수직이 될 수 있는 시간축 (시간의 경과 = 시간축으로 생각 가능)
  - 시간에 대한 다양한 관념 (연속성을 가진다!가 중요한 의미 - 사건의 정렬된 순서. 사건의 측정 간격이 일정한지 알아내기) (X축이 유의미한 방식으로 정렬 + 거리는 구체적인 의미를 가짐)
 

2) 시간형태가 아닌 데이터에서 시계열 생성

  - 타임스탬프가 찍힌 데이터 식별 -> 시계열 변환 및 다듬기 -> 다른 타임스탬프 찍힌 데이터 결합
Ex) 특정 고객과의 거래에 대한 시계열 수집
 
시계열을 구성할 수 있는 방법
  - 타임스탬프가 찍힌 이벤트 기록 (데이터에 타임스탬프 존재, 파일에 접근한 시간 기록)
  - 데이터가 명시적으로 시간을 포함하지 않지만, 데이터셋의 숨은 논리로 시간 설명 (변수 중 하나를 시간에 대응할 수 있는 경우)
  - 물리적 흔적(단일 벡터)
 

2-2. 테이블 집합에서 시계열 데이터 집합 개선하기

시계열 분석 예시
 - 시간이 지나면서 바뀌는 메일 수신자 반응
 - 멤버십 내역 : 회원이 회원 자격을 상실한 기간이 있었는지
 - 거래 내역 : 소비자가 특정 항목을 언제 구매할지 예측할 수 있는지
 
시계열 데이터 집합 조립하기
 - 서로 다른 스탬프방식 + 데이터 세분화의 수준 고려 = 데이터 목록 정렬

더보기

사전관찰
- 미래의 어떤 사실을 안다 
- 데이터를 통해 실제로 알아야 하는 시점보다 더 일찍 미래에 대한 사실을 발견하는 방법
- 미래에 일어날 일에 대한 정보가 모델에서 시간을 거슬러 전파되어 모델의 초기 동작에 영향을 주는 방법
- 사전관찰을 위한 자동화된 코드, 통계적 테스트는 없음

시계열 다룰 시 주의해야하는 특징
- 한 주의 주기를 정하는 것이 좋음(일~토 or 월~일)
- 어떤 주에 null 값이 있는지도 중요


시계열 데이터 특화된 기법
- 해결하고자 하는 문제에 맞는 형태로 데이터 간격 교정
: 구체적인 시간 정보 -> 간략하게
- 사전관찰 피하기
: 가용 데이터 생산(?)하는 타임스탬프 데이터에 사용하지 않음
: 아직 알아서 안되는 정보인 타임스탬프 사용하지 않기
- 아무일도 일어나지 않아도 관련된 모든 기간 기록하기
: 합계가 0이어도 유익한 정보

 

 

2-3. 타임스탬프의 문제점

1. 무엇에 대한 타임스탬프인지 보기
- 타임스탬프 생성과정, 방법, 시기에 대한 질문 던지기
  - 사건 기록이 실제와 일치하지 않는 경우가 있음
  -앱 기록 시점, 서버로 다운로드 된 시점 등 다양한 의미를 가질 수 있음
=> 해결방법 : 데이터 수집 및 축적에 해당하는 코드 읽기, 코드 작성한 사람과 얘기해보기
(데이터 처리 공정에 대한 이해도 필요)


2. 타임스탬프를 추측하여 데이터 이해하기
- 타임스탬프에 대한 초기 가설 세우기 (사용자를 통해 동일한 패턴인지 이례적인 패턴인지)
- 분석하며 타임스탬프에 대한 가설 시험(현지시간인지 세계 표준 시간인지)
  - 시간차이(타임 - 타임.시프트(-1)) => 분석에 활용할 수 있는 특징 => 사용자 시간대 추정 가능

 

3. 의미 있는 시간규모

- 연구 대상 도메인에 대한 지식 + 데이터 상세 수집 방식 근거

- 예) 일주일 기록, 매일 기록하지 않고 대략적인 일일 수치 추정해서 기록 -> 기억의 인지편향으로 옳지 않음 -> 일 단위에서 주 단위로 바꾸는 것이 좋음

 

2-4. 데이터 정리

1. 누락된 데이터(결측치)

- 결측치가 자주 발생하는 상황 : 비시계열 << 시계열

  • 이유 : 시간축의 시계열 데이터 샘플링하기 어려움

- 해결하는 일반적인 방법

  • 대치법(imputation) : 데이터 전체 관측에 기반하여 누락된 데이터 넣기
  • 보간법(interpolation) : 대치법의 한 형태. 인접한 데이터를 사용하여 누락된 데이터 추정
  • 영향받은 기간 삭제 : 누락된 데이터 완전히 사용하지 않는 방법

- 데이터 보존 vs 삭제 : 상황 + 기간 희생 가능여부

- 예제에 쓰이는 결측치 해결 방법

  • forward fill : 누락되기 직전 값으로 채우는 것
    • 기록된 데이터 외에 확신할 수 있는 것이 없기 때문
    • 실제값 범위를 많이 벗어나지 않음
    • 장점 : 계산 복잡하지 않음. 실시간 스트리밍 데이터에 쉽게 적용 가능, 대치 작업 능숙히 처리
    • 단점 : 실제 관측값보다 임의의 노이즈 포함할 수 있음
더보기
  • backward fill : 이후에 발생한 값을 누락 값으로 채우는 것
    • 주의할 점 : 사전관찰. 데이터 사용 -> 미래 예측하지 않음 or  (특정분야 지식 기반) 데이터 미래보다 과거를 채우는 것이 의미 있는 경우
  • 이동평균 : 전체 평균(??) + 최근 과거의 여러 시간대를 입력한 내용 사용
    • 과거의 값 -> 미래 값 예측 이라는 측면에서 forward fill과 유사
    • forward fill보다 이동평균을 사용해야 하는 상황
      • 전체 평균에 대한 개별 데이터값 의심할 만한 이유 있다면
    • 장점 : 임의의 노이즈 일부 제거할 수 있음
    • 고려할 점 : 과거 데이터만으로 이동평균값 구할 수 있는지, 사전관찰 수월하게 만들 수 있는지
    • +) 데이터셋의 평균으로 누락된 데이터 대치하기
      • 시계열에서 전체 평균을 적용 = 사전관찰(미래를 들여다 보는 것)
  •  보간법 :전체 데이터를 기하학적인 행동에 제한하여 누락된 데이터값 결정
    • 보간법 종류 : 선형, 다항식 등등 
    • 선형 보간법 : 누락된 데이터가 주변 데이터에 선형적인 일관성을 갖도록 제한
      • 사용하는 경우) 시간에 따라 시스템이 동적하는 방식 알고있을 때
      • 선험성(prior) 사용 가능 (이미 알고 있는 지식에 기반하여 선형적인 경향만 사용하겠끔 제한 가능)
    • 과거와 미래의 데이터 모두 활용 or 둘 중 하나만 활용할 수 있음
    • 주의) 미래 데이터 보간에 사용, 사전관찰을 만들지 않거나 사전관찰이 생기더라도 문제가 되지 않는다는 확신이 있어야 함
    • 사용 적절한 경우(선형적으로 움직이는 것) vs 적절하지 않는 경우 (선형적인 추세로 움직이지 않음)  
      • 적절 : 연도에 따른 온도변화 추세 알고 있음, 성장 중인 사업 판매 데이터
      • 적절X : 기상 데이터 강수량, 일일 수면시간 기록

- 결측치 주의사항

  • 데이터 무작위 누락 사실 증명하기 어려움(누락값이 무작위일 경우는 낮음)
  • 결측치가 만드는 불확실성에 대한 이해 -> 다양한 시나리오 만들기, 데이터 수집 과정에 연관된 사람들과 대화
  • 결측치 처리 방법 : 작업의 데이터 용도 설명할 수 있어야 함 (사전관찰 주의, 후속 작업이 사전관찰에 심각한 영향을 미치는지 판단할 수 있어야 함)

 

2. 업샘플링과 다운샘플링

- 정의: 업샘플링(타임스탬프 빈도 늘리는 것), 다운샘플링(타임스탬프 빈도 줄이는 것)

- 사용하는 경우 : 시계열 데이터 출처 다른 경우 

- 다운샘플링 사용하는 경우

  • 원본 데이터 시간 단위가 실용적이지 않은 경우
    • 너무 자주 측정하는 경우 - 매 n개의 요소를 추출하여 줄이기
  • 계절 주기의 하나의 특정 부분에 집중하는 경우
    • 겨울에만 측정 - 년간 1월 정보만 사용
  • 더 낮은 빈도의 데이터에 맞추는 경우 : 데이터 특성에 따라 평균 및 합계로 나타내기

- 업샘플링 사용하는 경우 : 실제로 측정한 것은 아니지만 드물게 측정된 데이터에서 조밀한 시간 데이터를 얻기 위한 것

 * 주의 : 더 많은 시간 레이블 추가는 맞음, 하지만 더 많은 정보가 추가되는 것은 아님

  •  시계열이 불규칙적인 상황 -> 규칙적으로 만들기
    • 데이터의 시차보다 더 높은 빈도로 변환 - 롤링 조인 이용 가능
  • 입력이 서로 다른 빈도로 샘플링된 경우
    • 사전관찰 주의하기!!!

=> 변수에 대한 시간적 행동 이해에 따라 다르게 해석할 수 있음

 

3. 데이터 평활

 

[데이터 전처리/Data Science] 데이터 평활(smoothing)

데이터 평활을 수행하는 데는 다양한 이유가 있고, 현실의 시계열 데이터는 분석 전에 평활되는 것이 보통 특히 데이터를 쉽게 이해하는 목적으로 시각화 자료를 만들기 위해 평활을 진행하는

min23th.tistory.com

[목차]

- 평활이 필요한 이유

- 가장 일반적인 지수평활

[평활의 목적]

- 데이터 평활해야하는 이유 : 측정의 이유, 높게 튀는 측정치를 제거하기 위해 (기기의 결함으로 측정치가 높게 뜀 -> 데이터 평활이 필요한 이유)

- 누락된 데이터의 대치와 연관성 있음

- 평활하기 위한 방법으로 사전관찰이 있거나 없는 롤링평균

- 평활할 때 다양한 질문 고려해야 함 : 평활을 하려는 이유가 무엇인지? 평활은 여러 목적에 적합할 수 있음

  • 데이터 준비 : 가공되지 않는 데이터가 부적합(이상치) -> 원칙이 필요하기에 평활이 간단히 해결할 수 있음
  • 특징 생성 : 많은 특징으로 구성된 샘플 -> 적은 차원 or 적은 특징으로 줄이기
  • 예측 : 간단한 형식의 예측은 '평균 회귀' - 평활된 특징으로 예측하여 얻을 수 있음
  • 시각화 : 노이즈가 낀 산점도에 신호추가? 그 의도는?

- 평활이 있고 없음의 결과

  •  만든 모델 - 노이즈가 낀 데이터 or 상관관계 없는 데이터 가정? 평활이 이런 가정과 절충?
  • 상용 모델도 평활 필요? -> 사전관찰을 동반하지 않는 평활 기법 선택해야 함
  • 평활에 대한 원칙을 세웠는지?
  • 하이퍼파라미터 찾는 데 Grid Search를 수행? - 교차검증에서 어떻게 시간을 인식하도록 하며, 미래의 데이터가 과거로 유출되지않는지 확인

[지수평활]

- 정의 : 최근 데이터에 많은 가중치를 주어 시간의 특성을 잘 인식할 수 있도록 함, 시간의 특성 더 잘 인식

+) 이동평균 : 결측치를 주변값의 평균으로 대치 

(p.92 참고해서 코드 한 줄이라도 작성해서 올리기)

 

[Pandas] rolling과 ewm으로 이동평균 구하기

Pandas의 rolling 및 ewm 메소드로 차트 분석에서도 사용되는 이동평균을 구해보자. 이동평균에 대해 잘 모르겠다면, 비록, 차트 분석에 맞추어 설명하였지만 이 포스트를 참조하기 바란다. 0. Data 준

amatoroi.tistory.com

 

- 단순한 지수 평활은 장기적 추세의 관점에서는 예측을 잘 수행하지 못함

- 여러가지 평활 기법  

평활 기법 사용법
홀트의 방법, 홀트-윈터스 평활   추세, 추세+계절성 모두 가진 데이터 적용가능한 지수평활 방법
칼만 필터 변동성 및 측정 오차의 조합으로 모델링
(시간 전후의 데이터 모두 고려, 과거로 정보가 유출 될 수 있음)
LOESS 지역적으로 데이터 평활하는 비모수적 방법 
(시간 전후의 데이터 모두 고려, 과거로 정보가 유출 될 수 있음)

- 예측의 형식으로 평활 사용하는 것이 일반적  

 

2-5. 계절성 데이터

- 정의 : 특정 행동의 빈도가 안정적으로 반복해서 나타나는 것 

(p.96 참고하여 작성)

 

Python Errors) 시계열 분해 STL의 TypeError 해결하기, TypeError: PeriodIndex given. Check the 'freq' attribute instead

1. statsmodels의 STL 함수를 사용해서 시계열 데이터 분해를 하고 있다가 아래의 에러를 만났다. TypeError: PeriodIndex given. Check the 'freq' attribute instead of using infer_freq. 에러메시지를 해석해 보면, PeriodInde

lovelydiary.tistory.com

 

2-6. 시간대

- 시간대를 이해하기 복잡한 이유

  • 시간대는 정치적, 사회적 결정에 의해 형성
  • 표준 시간대 정보 전송하는 표준 방법 없음(언어 or HTTP)
  • 시간대 이름, 서머타임 시작 및 종료를 결정하는 방법이 없음
  • 서머타임으로 한 해 몇 시간씩 시간의 중복 발생

+) datetime.datetime.now() : 시간대를 인식한 타임스탬프 반환하지 않음. 시간대 정보 유무와 관계 없이 datetime 객체 허용(시간대 자체에 대한 정보는 없음???)

  • 시간대 찍힌 객체는 pickle로 저장하기 어려움(pickle : 파이썬 객체 -> 바이트 저장)

- utcnow()와 now()의 차이(p.99~102 다시 보고 정리)

  • timezone(시간대 관련 작업하기 위해 객체 생성 - 시간 현지화 가능)에 대한 내용도 정리
 

datetime — 기본 날짜와 시간 형 — Python 3.9.18 문서

datetime — 기본 날짜와 시간 형 소스 코드: Lib/datetime.py datetime 모듈은 날짜와 시간을 조작하는 클래스를 제공합니다. 날짜와 시간 산술이 지원되지만, 구현의 초점은 출력 포매팅과 조작을 위한

docs.python.org

 

2-7. 사전관찰의 방지

시간 관련 데이터 전처리 - 사전관찰로 세심함이 필요!

 

- 사전관찰을 확정 진단하는 방법은 없음

- 시계열 분석은 알려지지 않는 것을 모델링하는 것 -> 모델 상용화 후 누락된 데이터 발생, 내용 반영하지 않음을 알 수 있음

- 사전관찰 방지

  • 데이터 변환(평활, 대치 ,업샘플링, 데이터 밀고당김 등) 시, 해당 시점에서 무엇을 할 수 있는지 확인하기
  • 데이터의 전송 지연도 고려 

- 사후 공정 검사, 모델 구축 계획시 필요한 사항

  • 결측치 대치 및 평활) 사전관찰의 도입이 결과에 어떤 영향을 주는가?
    • 대치와 평활이 어떻게 동작하는지 확인
  • 공정 임의 지점을 검사 -> 시간 정보가 부적절한 위치로 이동했는지 알아보기
  • 타임스탬프와 관련된 지연 확인 
  • 시간을 인식할 수 있는 에러(롤링) 검사 or 교차검증 사용
    • 시계열에서 train,test 셋 무작위로 섞는 것은 유효하지 않음!!!! - 사전관찰이기 때문
  • 의도적인 사전관찰 도입 - 모델의 동작 확인
    • 정확도에 생기는 변화에 대한 감을 익힐 수 있음
  • feature를 추가하여 성능의 큰 향상이 있는지 확인
    • 사전관찰의 경우, 특정 feature가 매우 좋은 경우가 있음

✔️참고문헌

 

실전 시계열 분석 | 에일린 닐슨 - 교보문고

실전 시계열 분석 | 시계열 분석의 모든 것 실제 환경에 특화된 시계열 데이터 분석 및 모범 사례를 다루는 실무 지침서다. ARIMA 및 베이즈 상태 공간 같은 표준적인 통계 모델과 계층형 모델을

product.kyobobook.co.kr

 

728x90

'Data > 시계열 분석' 카테고리의 다른 글

[시계열 분석] Ch.4 정리  (0) 2024.03.28
[시계열 분석] CH.3 정리  (0) 2024.02.23
Comments