일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 머신러닝
- 히스토그램
- 가설검정
- 기술통계학
- word2vec
- 구글 BERT의 정석
- Pandas
- rnn
- 결정계수
- numpy
- 회귀분석
- 파이썬 pandas
- Django
- 밑바닥부터 시작하는 딥러닝
- 감성분석
- 다층 퍼셉트론
- 군집화
- 최소자승법
- 밑바닥부터 시작하는 딥러닝2
- 오래간만에 글쓰네
- 은준아 화이팅
- 텐서플로2와 머신러닝으로 시작하는 자연어처리
- 기초통계
- student t분포
- 텍스트 분류
- 차원축소
- F분포
- 자연어 처리
- 코사인 유사도
- 모두의 딥러닝
- Today
- Total
데이터 한 그릇
2) 데이터 정리 본문
- 누락된 데이터(결측 데이터)
- 시계열의 빈도 변경(업샘플링, 다운샘플링)
- 데이터 평활
- 데이터의 계절적 변동 문제 해결
- 의도치 않은 사전관찰의 방지
누락된 데이터 다루기
시계열 데이터의 경우 비시계열 데이터보다 더 많은 결측값이 발생한다
따라서 시계열의 누락된 데이터를 다루기위한 다양한 방법이 제시됐다
- 대치법: 데이터셋 전체의 관측에 기반하여 누락된 데이터를 채워 넣는 방법
- 보간법: 대치법의 한 형태로 인접한 데이터를 사용하여 누락된 데이터를 추정하는 방법
- 영향받은 기간 삭제: 누락된 데이터의 기간을 완전히 사용하지 않는 방법
누락된 데이터에 대치법을 시험하기 위한 데이터셋 준비
대치법 사용법을 알아보기 위함임
미국 정부가 발표한 월간 실업 자료(https://data.bls.gov/timeseries/LNS14000000) 데이터 저장 이후
(데이터와 교재의 내용을 확인해보니 교재에서 쓰인 데이터와 다른 데이터임을 확인, 실습 불가능할듯)
- 저장한 데이터로부터 데이터 셋 두 개를 생성
- 둘 중 하나는 데이터를 임의로 누락한 것
- 다른 하나는 시계열 기록에서 실업이 가장 높은 월에 대한 것
임의로 누락한 데이터와 일정하게 누락된 데이터에 대한 대치법이 어떻게 다르게 동작하는지 확인하는 실험 두 가지를 살펴볼 예정
require(zoo) ##zoo는 시계열 기능을 제공
require(data.table) ## data.table은 고성능 자료구조
#임의로 누락된 데이터로 구성된 데이텃셋을 생성
unemp <- fread("UNRATE.csv")
unemp[, DATE := as.Date(DATE)] > setkey(unemp, DATE)
##실업률이 높을 때 누락될 가능성이 더 높은
## 데이터로 구성된 데이터셋을 생성
high.unemp.idx <- which(unemp$UNRATE > 8)
num.to.select <- .2 * length(high.unemp.idx)
high.unemp.idx <- sample(high.unemp.idx,)
bias.unemp <- unemp[-high.unemp.idx]
data.table 패키지의 롤링 조인을 통해서 누락된 날짜와 NA값을 확인할 수 있다
롤링 조인을 사용하면 데이터셋의 시작 날짜와 종료 날짜 사이에 가용한 모든 날짜의 순서를 생성할 수 있다
그러면 데이터셋에 NA로 채워진 열을 얻게 된다
<이후 실습은 데이터셋이 없으므로 불가능하기 때문에 코드 진행은 생략>
여기선, 누락된 값을 채우는 대치법 방법을 구체적으로 살펴보려고 한다
- 포워드 필
- 이동평균
- 보간법
교재는, 위의 방식들을 이용하여 임의로 누락된 데이터셋과 체계적으로 누락된 데이터셋 모두에서 각 방법들의 성능을 비교해보려고 한다
포워드 필
포워드 필(forward fill)은 누락된 값이 나타나기 직전의 값으로 누락된 값을 채우는 가장 간단한 방법이다. 이 방법에는 어떤 수학적인 원리나 복잡한 논리가 필요 없다
만일 시간대를 내려가는 단순한 상황을 생각해봤을 때, 시간상 누락된 지점을 발견한다면 이미 기록된 데이터 이외에 확신할 수 있는 것이 없다. 따라서 가장 최근에 알려진 측정값을 사용하는 것이 타당하다.
우리는 완벽한 데이터 셋에서 임의로 null 값을 만든 것이기 때문에 누락된 정보에 대한 정답을 알고 있다. 따라서 각 방법의 성능을 확인할 수 있는데, 포워드 필의 경우 그 결과가 정답과 많이 다르지 않음을 확인할 수 있다.
백워드 필
과거의 값으로 이후에 발생한 null 값을 예측할 수 있지만, 그 반대도 가능하다
이후에 발생한 값으로 그 이전에 발생한 null 값을 예측할 수 있다
포워드 필에는 장점이 많은데, 계산이 복잡하지 않고 실시간 스트리밍 데이터에 쉽게 적용할 수 있으며 대치 작업을 능숙하게 처리한다
이동평균
이동평균(moving average) 로도 알려진 이 값은 과거의 값으로 미래의 값을 예측한다는 관점에서 보면 포워드 필과 유사하다. (대치는 예측의 한 형태) 하지만 이동평균은 최근 과거의 여러 시간대를 입력한 내용을 사용한다는 점에서 다르다.
데이터의 대치에 포워드 필보다 이동평균이 적합한 상황이 더 많으며, 전체 평균에 관한 개별 데이터값을 의심할 만한 이유가 있다면 포워드 필보다는 이동평균을 사용해야한다.
이때 사전관찰을 방지하기 위해서 누락이 발생되기 전의 데이터만 사용해야만 한다. 누락이 발생하기 이전의 값들에 대한 평균으로 누락된 값을 채워 넣는다. 하지만 사전관찰을 고려하지 않아도 되는 상황이라면 최상의 추정치는 누락된 데이터의 전과 후가 포함될 수 있다.
(예측 데이터의 입력 데이터를 만들 때는 유효하지 않다)
이때 이동평균이 무조건 산술평균일 필요는 없다. 가령 지수가중이동평균(exponentially weighted moving average)은 비교적 최근 데이터에 더 많은 가중치를 줄 수 있다. 또한 기하평균(geometric mean)은 일련의 데이터가 강한 상관관계를 가지고 시간이 지나면서 복합적인 값을 가지는 시계열에 유용하다.
직관적으로 일반적인 데이터들 처럼 전체 데이터의 평균 값으로 누락된 값을 대치하면 안될지 의문을 품을 수 있다. 하지만 전체 데이터를 사용한다는 것은 미래의 정보를 사용한다는 것과도 같으며 따라서 사전관찰 문제가 발생하게 된다
보간법
보간법은 전체 데이터를 기하학적인 행동에 제한하여 누락된 데이터값을 결정하는 방법
예를 들어, 선형 보간법은 누락된 데이터가 주변 데이터에 선형적인 일관성을 갖도록 제한한다
선형 보간법은 시간에 따라 시스템이 동작하는 방식을 이미 알고 있고, 그 지식을 활용할 때 특히 유용하고 흥미로운 방법
이동평균법과 마찬가지로 보간법도 과거, 미래 데이터 둘 다 사용할 수도 있고 하나만 사용할 수도 있다.
(마찬가지로 미래 데이터를 사용한다면 사전관찰이 있어도 상관없다는 이론적 근거가 필요하다)
유용한 경우
선형 보간법이 유용한 경우가 많은데 예를 들어서, 연도에 따른 온도 변화에 대한 추세를 이미 알고 있을 때, 온도의 주간 평균들의 평균을 고려해볼 수 있다
또 다른 예로는 성장 중인 사업의 연간 판매 데이터를 생각해볼 수 있다. 사업의 규모가 매년 선형적인 추세로 증가한다면 이러한 추세에 근거한 데이터 대치가 합리적일 것
유용하지 않은 경우
가상 데이터셋의 강수량에 대한 데이터가 누락된 예가 있다. 강수량은 선형적인 추세로 움직이지 않아서 특정 날짜 사이의 강수량을 선형적으로 추정해선 안된다
와 유사하게 일일 수면 시간 기록 중 며칠간의 데이터가 누락된 경우를 예로 들 수 있다. 특정 날짜 사이의 수면 시간을 선형적으로 추정해선 안된다. 밤새서 공부한 뒤 30분 정도의 짧은 수면과 같이 데이터에 포함될 수 있어서 누락된 데이터를 추정하기 어렵게 만든다
전체 비교
동일한 데이터셋을 대상으로 위에서 살펴본 방식을 모두 비교해볼 수 있다.
비교 지표로 평균제곱오차(mean squared error)를 살펴볼 수 있으며 세 방식이 모두 mse 에서 높은 비율로 다르다는 것을 알 수 있다.
업샘플링과 다운샘플링
시계열 데이터의 출처가 서로 다른 경우에는 샘플링 빈도가 같지 않은 경우가 많다. (어떤 시계열은 1000건 어떤 시계열은 500건)
정보가 측정되었을 당시의 실제 빈도를 변경하는 것은 불가능하지만, 수집된 데이터에 대한 타임스탬프의 빈도를 바꿔 볼 수는 있다.
이렇듯, 타임스탬프의 빈도를 늘리거나 줄이는 방법을 업샘플링(upsampling)과 다운샘플링(downsampling) 이라고 한다
다운샘플링은 원본 시계열보다 타임스탬프가 더 낮은 빈도로 발생하게끔 데이터의 부분집합을 만드는 것
업샘플링은 데이터가 실제보다 더 자주 수집된 것처럼 데이터를 표현한다
다운 샘플링
다운샘플링은 데이터의 빈도를 줄이는 모든 순간을 의미
원본 데이터의 시간 단위가 실용적이지 않은 경우
어떤 것을 너무 자주 측정하는 경우엔, 데이터의 시간 단위가 실용적이지 않다고 판단될 수 있다
예를 들어, 외부 기온을 초단위로 측정한 데이터셋이 있다면, 그 데이터셋은 지나치게 빈번하게 측정된 경우라고 할 수 있다
계절 주기의 특정 부분에 집중하는 경우
시계열의 전반적인 계절성 데이터(seasonal data) 에 신경쓰는 대신에 하나의 특정 계절에만 초점을 맞춘 부분 시계열을 생성하는 경우가 존재한다
월 단위로 구성된 원본 시계열에 다운샘플링을 적용하여 1월에 측정된 것만 초점을 맞춘 부분 시계열을 만들 수 있다
더 낮은 빈도의 데이터에 맞추는 경우
한 데이터를 낮은 빈도로 측정된 다른 데이터와 맞춰주기 위해서 다운샘플링을 해볼 수 있음
이때 일부 데이터를 단순히 삭제하기보다 데이터를 취합하거나 다운샘플링해야 한다
업샘플링
업샘플링은 단순히 다운샘플링의 반대 개념이 아니다, 업샘플링은 어떤 것을 공짜로 얻으려는 노력으로 볼 수 있다. 즉, 실제로 측정하는 것은 아니지만, 드물게 측정된 데이터에서 더 조밀한 시간의 데이터를 얻기 위한 것
하지만 이러한 작업은 굉장히 어려운 작업이라고 할 수 있음 (월단위를 주간에서 일간으로, 일간에서 5분 단위로 변환하는 것은 마법과도 같은 일이라고 교재에 명시해둠)
업샘플링을 할 때 더 많은 시간의 레이블이 추가되는 것은 맞지만 더 많은 정보 자체가 늘어나는 게 아니라는 점을 명심
시계열이 불규칙적인 상황
업샘플링을 수행하는 가장 일반적인 이유는 불규칙적으로 샘플링된 시계열을 규칙적인 형태로 변환해야하기 때문이다
입력이 서로 다른 빈도로 샘플링된 상황
때로는 사용하는 모델이 현재 보유한 데이터보다 더 높은 빈도를 요구하는 경우가 존재한다
서로 다른 빈도의 데이터를 같은 시간대로 정렬하기 위해 업샘플링이 필요하다 (사전관찰 주의)
데이터의 평활
현실의 시계열 데이터는 분석 전에 평활되는 것이 보통이다
특히 데이터를 쉽게 이해하는 목적으로 시각화 자료를 만드는 경우가 있다
평활이 필요한 이유 및 시계열에서 가장 일반적인 지수평활(exponential smoothing)을 알아볼 것
평활의 목적
데이터 평활은 측정의 오류, 높게 튀는 측정치, 이 두 개 모두를 제거하기 위해 이동평균을 사용해볼 수 있다
데이터의 평활은 누락된 데이터의 대치와 깊은 연관성이 존재한다 -> 따라서 대치 중 일부는 평활에서도 의미를 가진다
데이터 준비, 특징 생성, 예측, 시각화를 위해 평활이 사용된다
지수평활
To be continue..
'시계열 분석 > Practical TIme Series Analysis' 카테고리의 다른 글
4)시계열의 탐색적 자료 분석 (0) | 2022.10.12 |
---|---|
3)계절성 데이터, 시간대, 사전관찰의 방지 (0) | 2022.10.12 |
2)데이터 정리2 (0) | 2022.10.12 |
1) 시계열 데이터의 발견 및 다루기 (1) | 2022.10.06 |
Practical Time Series (0) | 2022.10.06 |