본문 바로가기
Data science/데이터 다루기

실전 시계열 분석(Practical Time Series Analysis)

by 보늴 2022. 5. 23.

O-REILLY 실전 시계열분석(Practical Time Series Analysis) 책을 읽으며 필요한 내용 메모 및 정리

 

 

현재 분석중인 데이터셋 구조

보안상 데이터구조가 유사한 가상데이터를 생성했다. 실제 값과는 아예 다르다.  

설비의 모델은 총 6개가 있으며 동일 장비가 수백 대 존재한다.

이하 설비DT라 명명

고장이 한 번 날 때마다 한 행으로 기록이 된다. 고장 일시와 수리 일시가 기록된다.

동일 장비(개별장비 ID)가 시계열에 따라 여러 번 고장이 날 경우 여러 행을 가진다. 데이터셋에서 머신ID로 Group by 할 경우 고장 횟수에 따라 중복집계되며 시간에 따라 구분된다. 이하 설비DT라고 명명하겠다.

 

주의점은 고장이 날 때만 기록이 되므로 고장이 나지 않은 주는 누락된다는 것이다.

1 0 111 0 1 로 고장 난 주가 1이라고 할 때 위 데이터는 1 1 1 1 ... 인 셈이다.

누락된 주 또한 고장이 나지 않은 주로서의 의미가 대단히 크므로 시계열 분석에서 누락된 주를 생성 및 포함시켜야 한다.

 

책에서는 (max(=마지막기간)-min(=첫번째기간) +1) 을 하여 데이터가 집계된 총 기간을 계산한다. +1을 하는 것은 누락된 마지막주 혹은 첫주를 넣기 위함이다. 예시로 1,2,3,4 주가 있다면 4-1+1을 해주어야 4개의 INDEX가 산다.

 

설비DT의 경우 마지막 고장데이터가 집계된 기간 - 구매일자(설치일자) + 1 단위기간으로 계산한다.

각 장비마다 설치 및 운용된 기간이 다르기 때문이다. 어떤 장비는 작년에 구매했으며 어떤 장비는 20년 가까이 운용되었다.

 

 

Python pandas에서는 set을 이용해 각 열 유니크한 값을 만들고, 다중색인을 이용한 complete idx와 multi idx를 만들어 재색인한다. 재색인하며 누락된 값은 0으로 채워넣는다.

complete_idx=pd.MultiIndex.from_product((set(설비dt.고장일자),set(설비dt.개별장비ID))))

all_설비 = 설비dt.set_indsx(['고장일자','개별장비ID']).
				reindex(complete_idx, fill_value = 0).
                reset_index()
                
# 재색인 메서드:reidex, 색인 재설정 메서드: reset_index


all_설비.columns=['week','machine ID','defect_num']

 

 

 

 

 

 

시계열 데이터 분석을 위한 전처리

  • 누락된 데이터(결측처리)
  • 시계열의 빈도 변경(업샘플링, 다운샘플링)
  • 데이터 평활
  • 데이터 계절성 해결 (정상성 관련?)
  • 의도치 않은 사전관찰 방지

일반적인 데이터에서 결측치를 제거하거나 보간치를 넣는것과 다르게 시계열은 누락,결측 된 자체가 중요한 정보이다.

해당 시점에 사건이 발생하지 않았다는 뜻이다. 

 

 

 

사전관찰 - ? 

댓글