O-REILLY 실전 시계열분석(Practical Time Series Analysis) 책을 읽으며 필요한 내용 메모 및 정리
현재 분석중인 데이터셋 구조
보안상 데이터구조가 유사한 가상데이터를 생성했다. 실제 값과는 아예 다르다.
설비의 모델은 총 6개가 있으며 동일 장비가 수백 대 존재한다.
고장이 한 번 날 때마다 한 행으로 기록이 된다. 고장 일시와 수리 일시가 기록된다.
동일 장비(개별장비 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']
시계열 데이터 분석을 위한 전처리
- 누락된 데이터(결측처리)
- 시계열의 빈도 변경(업샘플링, 다운샘플링)
- 데이터 평활
- 데이터 계절성 해결 (정상성 관련?)
- 의도치 않은 사전관찰 방지
일반적인 데이터에서 결측치를 제거하거나 보간치를 넣는것과 다르게 시계열은 누락,결측 된 자체가 중요한 정보이다.
해당 시점에 사건이 발생하지 않았다는 뜻이다.
사전관찰 - ?
'Data science > 데이터 다루기' 카테고리의 다른 글
학습 데이터의 불균형을 해결하는 방법 (0) | 2022.04.04 |
---|
댓글