////
Search
2️⃣

시계열 데이터의 발견 및 다루기

2.1 시계열 데이터는 어디서 찾는가?

어떤 시계열 데이터가 적합한지는 목적성에 따라 달라짐
학습과 실험 목적에 맞는 데이터 셋 찾기 → 미리 준비된 데이터 셋
시간 지향적인 형태가 아닌 데이터에서 시계열 데이터 생성 하기 → 발견된 시계열
미리 준비된 데이터 셋
UCI 머신 러닝 저장소
약 80개의 시계열 데이터 셋을 보유
Iris 표본 data, 시간당 공기질의 표본, 아마존 파일 접근 로그 기록, 당뇨병 환자의 활동, 섭취 음식, 혈당 정보 기록 등
여러 가지 문제점
불완전한 타임 스탬프
데이터에 수평이나 수직이 될 수 있는 시간축
시간에 대한 다양한 관념
학습과 실험 목적에 맞는 데이터 셋 찾기 → 미리 준비된 데이터 셋
시간 지향적인 형태가 아닌 데이터에서 시계열 데이터 생성 하기 → 발견된 시계열
어떤 시계열 데이터가 적합한지는 목적성에 따라 달라짐
학습과 실험 목적에 맞는 데이터 셋 찾기 → 미리 준비된 데이터 셋
시간 지향적인 형태가 아닌 데이터에서 시계열 데이터 생성 하기 → 발견된 시계열
미리 준비된 데이터 셋
UCI 머신 러닝 저장소
약 80개의 시계열 데이터 셋을 보유
Iris 표본 data, 시간당 공기질의 표본, 아마존 파일 접근 로그 기록, 당뇨병 환자의 활동, 섭취 음식, 혈당 정보 기록 등
여러 가지 문제점
불완전한 타임 스탬프
데이터에 수평이나 수직이 될 수 있는 시간축
시간에 대한 다양한 관념
학습과 실험 목적에 맞는 데이터 셋 찾기 → 미리 준비된 데이터 셋
시간 지향적인 형태가 아닌 데이터에서 시계열 데이터 생성 하기 → 발견된 시계열
미리 준비된 데이터 셋
UCI 머신 러닝 저장소
약 80개의 시계열 데이터 셋을 보유
Iris 표본 data, 시간당 공기질의 표본, 아마존 파일 접근 로그 기록, 당뇨병 환자의 활동, 섭취 음식, 혈당 정보 기록 등
여러 가지 문제점
불완전한 타임 스탬프
데이터에 수평이나 수직이 될 수 있는 시간축
시간에 대한 다양한 관념
UEA(U of East Anglia) 및 UCR(U of Califonia) 시계열 분류 저장소
요가 동작 분류 작업 (link)
목적 : 각 요가 동작의 분류
csv 맨 좌측 열은 레이블, 나머지 열은 시간의 순서 (좌측에서 우측 방향으로 시간의 흐름 해석)
x축은 시간에 대한 명확한 레이블은 없지만 단위 시간을 사용했으며, x축이 균등하게 퍼져있음이 중요한 포인트
와인 데이터셋 (link)
스펙트럼 (spectrum) : 빛의 파장 대 강도에 대한 그래프로 시계열과 상관 없어 보이지만,x축은 유의미한 방식으로 정렬 돼 있고 그 거리는 구체적 의미를 가져 시계열 분석에 적용할 수 있음 → 파장 등과 같이 x축의 순서로 얻는 추가정보는 시간적 요소는 없지만, 데이터가 일련의 정렬된 형태를 띠므로 시계열 아이디어를 적용할 수 있음
곡선의 정점은 높은 흡수율을 보인 지역의 파장을 의미하며, 파장은 x축을 따라 간격이 균등하고, 흡수율을 나타내는 y축도 선형적인 척도를 가짐
정부 시계열 데이터셋
정부 데이터셋은 탐구적 분석 및 시각화 목적으로만 사용하는 것이 좋음.
그 이유는 매우 복잡한 문제를 다루는 것이 주이기 때문에 이를 통해 무언가 배우는 것은 어려우며,    많은 전문가들도 실업률 예측 등 예측을 성공한 경우가 드물기 때문
NOAA 국립환경정보센터, 미국 노동 통계국, 미국 질병통제예방센터, 세인트루이스 연방준비은행
그 외의 데이터 저장소
CompEngine: 높은 수준의 상대적 시계열 분석의 수행 및 촉진
R 패키지: 시계열로 구성된 대회용 데이터를 제공
발견된 시계열
발견된 시계열은 야생(일상)에서 직접 수집한 시계열 데이터
발견된 시계열 예시
SQL 데이터베이스 내 특정 고객과의 거래에 대한 시계열 데이터
기업의 하루 총 거래량, 여성 고객의 주당 지출 총액 데이터
다변량 시계열 데이터 (3가지 지표)→ 18세 미만 고객 주당 지출 총액, 65세 이상 여성 고객 주당 지출 금액, 회사가 광고에 쓴 주당 지출 총액
타임스탬프가 찍힌 이벤트 기록 (데이터베이스에서 타임스탬프를 확인할 수 있는 예시)
파일에 접근한 시간을 기록하기만 해도 시계열 구성 가능
임의시점과 그 이후 시점의 타임스탬프로 시간의 변화량을 모델링하여 시간에 대한 시간축과 시간 변화량에 대한 값축으로 시계열 구성 가능. 변화량의 일부를 합해 더 큰 기간에 대한 평균, 총합을 산출하여 각각을 개별적으로 기록 가능
시간을 대체하는 ‘시간이 없는’ 측정
데이터셋의 숨은 논리로 시간이 설명되는 경우: 알려진 비율에 따라 센서가 수축하듯 어떤 실험 매개변수에 의해간격이 발생하면 ‘간격 대 값’으로 데이터를 생각할 수 있음→ 변수 중 하나를 시간에 대응할 수 있다면 시계열이 있다고 봄 (cf. 와인 스펙트럼 파장)
물리적 흔적 : 현대에는 물리적으로 생성된 흔적을 디지털 형태로 저장하며 이는 이미지 파일, 데이터베이스에 한 필드의 단일 벡터와 같은 형태로 저장됨 (시계열)
어떤 시계열 데이터가 적합한지는 목적성에 따라 달라짐
학습과 실험 목적에 맞는 데이터 셋 찾기 → 미리 준비된 데이터 셋
시간 지향적인 형태가 아닌 데이터에서 시계열 데이터 생성 하기 → 발견된 시계열
미리 준비된 데이터 셋
UCI 머신 러닝 저장소
약 80개의 시계열 데이터 셋을 보유
Iris 표본 data, 시간당 공기질의 표본, 아마존 파일 접근 로그 기록, 당뇨병 환자의 활동, 섭취 음식, 혈당 정보 기록 등
여러 가지 문제점
불완전한 타임 스탬프
데이터에 수평이나 수직이 될 수 있는 시간축
시간에 대한 다양한 관념
UEA(U of East Anglia) 및 UCR(U of Califonia) 시계열 분류 저장소
요가 동작 분류 작업 (link)
목적 : 각 요가 동작의 분류
csv 맨 좌측 열은 레이블, 나머지 열은 시간의 순서 (좌측에서 우측 방향으로 시간의 흐름 해석)
x축은 시간에 대한 명확한 레이블은 없지만 단위 시간을 사용했으며, x축이 균등하게 퍼져있음이 중요한 포인트
와인 데이터셋 (link)
스펙트럼 (spectrum) : 빛의 파장 대 강도에 대한 그래프로 시계열과 상관 없어 보이지만,x축은 유의미한 방식으로 정렬 돼 있고 그 거리는 구체적 의미를 가져 시계열 분석에 적용할 수 있음 → 파장 등과 같이 x축의 순서로 얻는 추가정보는 시간적 요소는 없지만, 데이터가 일련의 정렬된 형태를 띠므로 시계열 아이디어를 적용할 수 있음
곡선의 정점은 높은 흡수율을 보인 지역의 파장을 의미하며, 파장은 x축을 따라 간격이 균등하고, 흡수율을 나타내는 y축도 선형적인 척도를 가짐
정부 시계열 데이터셋
정부 데이터셋은 탐구적 분석 및 시각화 목적으로만 사용하는 것이 좋음.
그 이유는 매우 복잡한 문제를 다루는 것이 주이기 때문에 이를 통해 무언가 배우는 것은 어려우며,    많은 전문가들도 실업률 예측 등 예측을 성공한 경우가 드물기 때문
NOAA 국립환경정보센터, 미국 노동 통계국, 미국 질병통제예방센터, 세인트루이스 연방준비은행
그 외의 데이터 저장소
CompEngine: 높은 수준의 상대적 시계열 분석의 수행 및 촉진
R 패키지: 시계열로 구성된 대회용 데이터를 제공
발견된 시계열
발견된 시계열은 야생(일상)에서 직접 수집한 시계열 데이터
발견된 시계열 예시
SQL 데이터베이스 내 특정 고객과의 거래에 대한 시계열 데이터
기업의 하루 총 거래량, 여성 고객의 주당 지출 총액 데이터
다변량 시계열 데이터 (3가지 지표)→ 18세 미만 고객 주당 지출 총액, 65세 이상 여성 고객 주당 지출 금액, 회사가 광고에 쓴 주당 지출 총액
타임스탬프가 찍힌 이벤트 기록 (데이터베이스에서 타임스탬프를 확인할 수 있는 예시)
파일에 접근한 시간을 기록하기만 해도 시계열 구성 가능
임의시점과 그 이후 시점의 타임스탬프로 시간의 변화량을 모델링하여 시간에 대한 시간축과 시간 변화량에 대한 값축으로 시계열 구성 가능. 변화량의 일부를 합해 더 큰 기간에 대한 평균, 총합을 산출하여 각각을 개별적으로 기록 가능
시간을 대체하는 ‘시간이 없는’ 측정
데이터셋의 숨은 논리로 시간이 설명되는 경우: 알려진 비율에 따라 센서가 수축하듯 어떤 실험 매개변수에 의해간격이 발생하면 ‘간격 대 값’으로 데이터를 생각할 수 있음→ 변수 중 하나를 시간에 대응할 수 있다면 시계열이 있다고 봄 (cf. 와인 스펙트럼 파장)
물리적 흔적 : 현대에는 물리적으로 생성된 흔적을 디지털 형태로 저장하며 이는 이미지 파일, 데이터베이스에 한 필드의 단일 벡터와 같은 형태로 저장됨 (시계열)

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

데이터 예시
시간이 지나면서 바뀌는 메일 수신자의 반응: 메일을 읽었나요? 읽지 않았나요 ?
멤버십 내역: 회원이 회원 자격을 상실한 기간이 있었나요 ?
거래 내역: 소비자가 특정 항목을 언제 구매할지 예측할 수 있나요?
시계열 데이터 집합 조립하기
세 개의 table 가정
표 2-1 각 회원의 가입 연도 및 현재 상태
회원ID
가입 연도
회원 상태
1
2017
gold
2
2018
silver
3
2016
inactive
표 2-2 특정 주에 보낸 이메일 중 회원이 열어본 개수
회원ID
열어본 이메일 개수
2
2017-01-08
3
2
2017-01-15
2
1
2017-01-15
1
표 2-3 회원이 기관에 기부한 시간
회원ID
타임스탬프
기부금
2
2017-05-22 11:27:49
1,000
2
2017-04-13 09:19:02
350
1
2017-01-01 00:15:45
25
시계열 데이터를 이용 분석
시간축 선택 예를 들어 이메일 개수와 기부의 상관관계를 밝히고 싶은 연구가 있다고 했을 때, 두 개의 시간축 중에 어떤 시간축으로 결정하여 데이터 프레임을 합치는게 좋을지 결정
데이터가 의미하는 것과 독자가 생각한 의미가 일치하는지 확인 회원의 가입연도와 회원의 상태에 관한 데이터 프레임 가입했을 당시의 등급? vs. 가입한 이후 현재의 등급 상태? Or ? 이렇듯 값이 언제 할당되었는지 알 수 없는 상태 변수의 사용은 지양 해야
만일 과거 데이터 분석에 현재 상태를 적용하게 되면 그땐, 알 수 없는 시계열 모델에 무언가를 입력해주기 때문에 사전관찰(look-ahead) 로 볼 수 있다
사전 관찰이란?
시계열 분석에서 사전관찰이란 미래의 어떤 사실을 안다는 뜻으로, 데이터를 통해 실제로 알아야 하는 시점보다 더 일찍 미래에 대한 사실을 발견하는 방법
한 시점에 대해 다음에 일어날 일을 아는 모델을 선택한다면 문제가 발생할 수 있다-시계열 데이터가 어떤 단위(년,주,일)로 나뉘어져 있다면 단위 정의에 대해서 따져 봐야함 (월~일 or 일~토 or ??)
만일 사람의 활동을 분석한다면 한 주를 사람의 활동 주기와 유사하도록 일요일부터 토요일 또는 월요일부터 일요일로 정하는 게 좋음 → Null 값의 표시
이메일 데이터에 주목했을 때, 어떤 회원이 단 한 번도 이메일을 열람하지 않은 주가 있는지 파악, 제대로 표기 되었는지 확인
Null 값이 비어있는 정보기 때문에 쓸모없는 게 아니라 Null 그 자체가 의미를 포함하고 있기 때문에 중요
코드 구현
발견된 시계열을 구성하기
시계열 분석 시의 시계열 데이터 프레임끼리 merge 하는 과정
위의 테이블들 예시에서 주 단위로 기부금 데이터를 취합하면 이메일 데이터와 기간 단위의 비교가 가능해지고, 이메일 응답과 기부가 어떤 식으로 연관이 있는 지에 대해 합리적으로 조사할 수 있음
전 주의 열람된 이메일의 개수를 주어진 주의 기부금 예측 변수로 취급할 수 있음
시계열 단위가 동일하다는 가정 하에 분석이 진행된다는 것이 중요
코드 구현
<요약>
1.
해결하고자 하는 문제에 맞는 형태로 데이터의 간격을 교정
2.
사전 관찰을 피하고 가용 데이터를 생산하는 타임스탬프를 데이터에 사용하지 않음
3.
Null 기록
4.
사전 관찰을 피하기 위해 아직 알아서는 안되는 정보를 생산하는 타임스탬프를 데이터에 사용하지 않음
타임스탬프는 시계열 분속에 유용하지만 다루기 어려운 측면이 있음
타임스탬프를 통해 데이터의 특징(시간,요일)을 특정할 수 있으며, 특히 사람의 행동과 관련된 데이터는 더 중요함

2.3 타임스탬프의 문제점

무엇에 대한 타임스탬프인가
타임스탬프의 생성의 본질
타임스탬프의 생성 과정, 방법, 시기 질문
발생 사건의 기록이 실제와 일치하지 않을 수 있음
타임스탬프의 목적과 의미 이해해야 함
구체적인 예시
모바일 앱을 사용한 식사 일기 데이터의 경우, 기록된 시간의 의미를 추론해야 함
사용자의 섭취 시간을 직접 기록했는지, 자동으로 생성되었는지 등을 고려해야 함
타임스탬프는 현지 시간인지, 세계 시간인지에 대한 명확한 정보가 필요함
해결 방법
데이터 수집과 처리 코드를 읽어보고 작성자와의 대화
시스템의 동작을 검증하고 데이터 처리 과정을 이해
타임스탬프의 본래 의미를 이해해야 잘못된 질문을 줄일 수 있음
데이터 이해의 최종 책임
데이터 이해하는 것은 사용자의 책임임
타임스탬프 생성 과정을 직접 실험해보고 이해해야 함
데이터셋의 구조와 처리 과정을 이해해야 함
타임스탬프를 추측하여 데이터 이해하기
과거의 처리 공정이나 문서화 되지 않은 데이터를 다룰 때 실제 작동하는 처리 공정을 파악하기 어려울 수 있음
타임스탬프의 의미를 추론하기 위해 몇 가지 조사가 필요함
접근방법
데이터를 살펴 본 후 타임스탬프의 초기 가설 설정
여러 사용자 데이터를 분석하여 동일한 패턴이 유지되는지 확인하고, 이례적인 패턴을 탐색
타임스탬프의 의미에 대한 가설을 종합적으로 시험
가설에 대한 예시 질문
타임스탬프가 현지 시간을 의미하는가? 아니면 세계 표준 시간을 의미하는가?
시간이 사용자의 행동을 반영하는가? 아니면 외부 제약을 반영하는가?
현재 시간과 세계 표준 시간
타임스탬프의 저장 시간
대부분의 경우, 서버의 위치에 따라 협정 세계시 또는 단일 시간대로 저장됨
사용자 위치와는 독립적으로 저장되지만, 가끔 현지 시간에 맞춰 저장되는 경우도 존재
모바일 식사 일기 데이터
현지시간 기반이라고 가정시, 데이터에서 시간당 식사 횟수를 나타내는 히스토그램을 통해 사용자의 활동 패턴을 분석할 수 있음
데이터의 일일 추세를 파악하여 낮과 밤 구분같은 하루 패턴 발견 가능
시간대별로 사용자를 분류하여 개별 사용자에 대한 분석⇒계산 복잡, 부정확한 결과
협정 세계시에 기반한 타임스탬프는 사용자의 정확한 시간대를 파악하지 못해도 사용자 기록을 기반으로 사용자의 활동 추적 및 패턴 파악에 유용함
## Python df['dt'] = df.time - df.time.shift(-1)
Python
복사
시간 차이의 의미하는 dt열 생성
각 사용자의 dt를 분석하여 일반적인 사용자 시간대를 확인, 밤 시간의 시작 시점을 특정할 수 있음
사용자와 네트워크의 행동
모바일 식사 일기 데이터
사용자의 식사 자체의 문제인가
업로드 방식이 타임스탬프에 영향을 미쳤는가
분석 방법
dt열에서 0 집합 파악 ⇒사용자의 행동 또는 네트워크 사건에 대한 질적인 결정 내릴 수 있음
유사한 dt의 집합의 주기성 ⇒사용자의 행동과 관련될 가능성이 큼
타임스탬프의 생성 방법에 대한 정보가 제한적이더라도 현재 가용한 데이터로 유용한 결론을 도출할 수 있음
시간대
UTC 기반 타임스탬프
대부분의 데이터베이스 및 스토리지 시스템은 UTC를 기본값으로 사용
UTC 이외의 타임스탬프
API 호출과 같이 시간에 특화된 데이터 객체를 사용하지 않은 경우 존재 ⇒문자열 사용하여 타임스탬프를 생성함
수동으로 생성된 데이터
시간대 연관성이 없는 여러 지역의 소규모 기관에 의해 ‘수동으로’ 만들어진 데이터가 존재함 ⇒ 비지니스 분석가, 현장 생물학자에 의해 생성된 스프레드 시트 등
의미 있는 시간 규모란
타임스탬프의 시간 단위는 연구의 대상 도메인과 데이터 수집 방식에 맞게 결정되어야 함
일일 판매 데이터 기록
매일 기록하지 않고 대략적인 일일 수치 추정하면서 한 주의 마지막 날까지 기록한 수치 보고한다고 가정
관리자의 기억력과 인지 편향으로 인한 측정 오류 발생 가능성 존재 ⇒ 판매 데이터의 시간 단위를 주 단위로 변환하여 계통 오차(systematic error) 줄임 ⇒ 요일에 따른 편향을 고려한 모델 개발 필요
<note> 기한 할인의 심리적 요소
기한할인(time discounting)은 심리학적 거리(psychological distance)에 기인한 현상임
동떨어진 것을 추정하거나 평가할 때 더 낙관적이고 덜 현실적이게 되는 경향을 말함
최근에 비해 오래된 데이터가 일정하게 편향된다고 예측함
기록된 시간과 다른 시기에 수작업으로 입력하여 생성한 데이터 주의 필요
혈당 데이터
초 단위로 기록된 혈당 데이터를 다룰 때는 평균값 활용이 적절함
혈당 데이터의 처리 시간에 따른 생리학적인 변화와 장치 오류 최소화가 필요함
<note> 사람은 시간의 흐름을 인지합니다
시간의 흐름에 따라 사람은 다양한 방식으로 응답함
사람의 시야에서 시계 속도를 조작할 때 그 사람의 혈당치가 빠르게 변화함을 보여주는 사례

2.4 데이터 정리

누락된 데이터 다루기
데이터 누락 발생 예시
환자가 필요한 진료를 받지 않는 경우
환자의 건강 상태가 좋아서 추가 진료가 필요 없는 경우
환자를 잊었거나 치료가 불충분했던 경우
의학 장치가 제멋대로 기술적인 오작동을 일으킨 경우
데이터의 입력 시 오류가 발생한 경우
누락된 데이터 해결하기
Imputation (대치법) : 데이터셋 전체의 관측에 기반하여 누락된 데이터를 채워 넣는 방법
Interpolation (보간법) : 대치법의 한 형태로 인접한 데이터를 사용하여 누락된 데이터를 추정하는 법
영향 받은 기간 삭제 : 누락된 데이터의 기간을 완전히 사용하지 않는 방법
코드 구현
날짜로 레이블링된 데이터 값으로 채우기
포워드 필(Forward Fill) - Last ovservation carried forward(LOCF)
Molnar, Frank J., Brian Hutton, and Dean Fergusson. "Does analysis using “last observation carried forward” introduce bias in dementia research?." Cmaj 179.8 (2008): 751-753.
코드 구현
이동평균(Moving Average, MA)
여러 시간대의 내용을 활용하여 채우는 방법 (평균, 중앙값 등을 활용) 
사전관찰 → 미래 데이터가 사용되면 선형성에 영향을 미칠 수 있음.
코드 구현
보간법(Interpolation)
전체 데이터를 기하학적인 행동에 제한하여 누락된 데이터 값을 결정함.
선형 또는 스플라인 보간법이 적절한 경우가 많지만 강수량과 같이 선형적인 추세로 움직이지 않는 특정 날짜 사이의 데이터에 활용하는 것은 적절치 않으므로, 데이터의 특성을 파악하는 것이 중요함
코드 구현
Linear Interpolation(선형 보간법) (link)
Polynomial Interpolation (link)
코드 구현
업샘플링과 다운샘플링
샘플링(Sampling): 수집된 데이터에 대한 타임스탬프의 빈도를 늘이거나 줄이는 방법
다운샘플링
원본 시계열보다 타임스탬프가 더 낮은 빈도로 발생하게끔 데이터의 부분집합을 생성
1.
원본 데이터의 시간 단위가 실용적이지 않은 경우
2.
계절 주기의 특정 부분에 집중하는 경우
3.
더 낮은 빈도의 데이터에 맞추는 경우
계절 주기의 특정 부분에 집중하는 경우(1월에 측정된 것에만 초점을 맞춘 부분 집합 생성)
코드 구현
업샘플링
데이터가 실제 원본 시계열보다 더 자주 수집된 것처럼 데이터를 표현
1.
시계열이 불규칙한 상황
2.
입력이 서로 다른 빈도로 샘플링 된 상황
코드 구현
데이터 평활
데이터 평활 : 평활(Smoothing)이란, 무작위적 변화로 생기는 효과를 줄이는 방법을 의미 → 데이터 내의 불규칙성(irregularities)을 제거하기 위함.(noise, outlier?)
데이터 평활 : 이동 평균, 지수 평활(Exponential Smoothing), 가중 평균, … etc
평활의 목적
1.
데이터 준비 : 가공되지 않은 데이터 전처리
2.
특징 생성 : 많은 특징으로 구성된 샘플을 적은 차원 혹은 특징으로 줄일 수 있음
3.
예측 : 평균 회귀(mean reversion)는 평활된 특징으로 예측하여 얻을 수 있음
4.
시각화
지수 평활
모든 시점의 데이터를 같은 가중치로 평균을 계산 → 이동 평균
조금 더 최근 데이터일수록 더 많은 가중치를 부여하여 시간의 특성을 잘 인식하도록 함 → 따라서, 지수 평활법은 최근의 자료에 더 큰 가중치를 주고 현 시점에서 멀수록 작은 가중치를 주어 지수적으로 과거의 비중을 줄여 미래값을 예측하는 방법임
책에서의 지수평활법
지수평활법
Fn+1=αZn+(1α)Fn=αZn+(1α)[αZn1+(1α)Fn1]=αZn+α(1α)Zn1+(1α)2Fn1=αZn+α(1α)Zn1+(1α)2[αZn2+(1α)Fn2]=αZn+α(1α)Zn1+α(1α)2Zn2+α(1α)3Zn3+\begin{split} F_{n+_1} &= \alpha Z_n + (1-\alpha) F_n\\ &= \alpha Z_n + (1-\alpha)[\alpha Z_{n-1} + (1-\alpha)F_{n-1}]\\ &=\alpha Z_n + \alpha(1-\alpha)Z_{n-1} + (1-\alpha)^2 F_{n-1}\\ &=\alpha Z_n + \alpha(1-\alpha)Z_{n-1} + (1-\alpha)^2[\alpha Z_{n-2} + (1-\alpha)F_{n-2}]\\ &\qquad\qquad\qquad\qquad\qquad\qquad\vdots \\ &= \alpha Z_n + \alpha(1-\alpha) Z_{n-1} + \alpha(1-\alpha)^2Z_{n-2} + \alpha(1-\alpha)^3Z_{n-3} + \dotsc \end{split}
Fn+1F_{n+1} : nn시점 다음의 예측값
α\alpha : 지수평활계수
부연 설명
ZnZ_n : nn시점의 관측값
코드 구현

그 외의 평활 기법

홀트의 방법(Holt’s method) & 홀트-윈트스의 평활(Holt-Winters smoothing) → 추세를 가진 데이터와 추세 및 계절성을 모두 가진 데이터에 적용 가능한 지수평활 기법
칼만 필터(Kalman filter) : 변동성 및 측정 오차의 조합으로 시계열 과정을 모델링하여 데이터를 평활함. → [영상 처리에서 SORT의 핵심 기술로 객체 추적에 활용됨. (참고 link)]
뢰스(LOESS) : 지역적으로 데이터를 평활하는 비모수적 기법
전체 코드
R_240320_SY.R
4.3KB

2.5 계절성 데이터

계절성(seasonality)
특정 행동의 빈도가 규칙적인 간격으로 반복해서 나타나는 것 (e.g. 일일, 주간, 연간, 특정 요일 등)
계절성을 제거하는 비계절화(deseasonalized) 과정이 수행되기도 함
e.g. 여름에 휴가철 관련 소비의 증가는 계절성 요인이 존재하는 것으로, 경제의 전체적인 추세를 파악하기 위해 비계절화 과정이 필요 → 제거하지 않을 경우 특정 분기의 경제가 불안정하다고 판단할 수 있음
산점도 그래프와 선 그래프
선 그래프 → 계절성 유무와 시계열의 종류(additive, multiplicative)
산점도 그래프 → 데이터의 분산
추세를 모델이 요구하는 바에 따라 로그변환 또는 차분변환으로 변형
전체 값이 커질수록 계절성의 변동도 커짐(고점과 저점 사이의 크기)
시계열 분해
계절성(Seasonal), 추세(trend), 나머지(remainer, residual)로 분해 가능
잔차는 시계열의 시작과 끝에서 가장 큼
특정 분해가 고려되지 않은 것을 통해 시계열의 종류(가산적, 배수적)를 알 수 있음
계절성의 부분계열(1월 값으로 구성된 계열과 같이)을 평활화하는 Loess가 계절성 요소 발견
Loess(local polynomial regression) 평활법: 시계열 데이터의 특정 윈도우에 대해 가중하여 평활화를 수행하며 자료를 쪼개서 가중회귀 분석을 수행하는 방법
s.window = “periodic”이라면 평활은 평균에 의해 대체됨
계절성을 띄는 값은 삭제되고, 나머지는 추세를 발견하기 위해 평활화 필요
Loess는 데이터를 평활화하는 데에 계산적 부담이 큼 → sliding window와 연관(인접 지점 기반 평활된 값 추정)
계절성 데이터와 순환성 데이터 계절성 시계열은 일련의 동작이 정해진 기간 동안 반복되는 시계열 서로 다른 속도의 계절성을 반영하는 여러 개의 주기성이 있을 수 있음 순환성 시계열도 반복적인 동작을 보이지만 기간이 가변적 (호황과 불황의 주기처럼 불확실한 기간이 있는 비즈니스 주기/ 화산)

2.6 시간대

시간대(time zone)는 지역별 시간의 차이를 나타내는 시간의 구분선(영국 그리니치 천문대 기준)
지구의 24개 시간대를 나눠 각 지역에 해당하는 표준 시간 정의
일광 절약 시간제(Daylight Saving Time, DST) 및 시간대 정보 교환에 대한 표준 방법이 없음
시간대를 가진 객체와 그렇지 못한 객체를 비교하면 TypeError 발생
파이썬을 사용한 시간대 관련 작업
주요 라이브러리
datetime : 기본적인 날짜 및 시간 작업을 위한 표준 라이브러리
pytz : 시간대 관련 작업을 위한 라이브러리
dateutil : 날짜 및 시간 파싱 및 계산을 위한 편리한 함수와 클래스를 제공하는 라이브러리
pandas : 데이터 분석 라이브러리(pytz 및 dateutil 라이브러리에 기반의 시간대 기능 제공)
코드 구현
일광 절약 문제 → 특정 시간이 두 번 존재하거나 존재하지 않는 시간도 있음
PDT(Pacific Daylight Time) : 태평양 시간대(US/Pacific)
PDT-1 : 일광 절약이 적용된 시간
DST(Daylight Saving Time) : 일광 절약 시간
일광 절약의 고려는 데이터의 성질에 따라 유용성이 달라짐
비행 중인 비행기를 위해 날씨를 예측했는데, 여객기의 위치가 급격하게 변하는 상황 ⇒ 시간대를 넘어갈 때마다 날씨 상황이 달라지기 때문에 이를 고려하는 것이 중요)
코드 구현

2.7 사전관찰의 방지

사전관찰이 잘못 도입될 경우 변수를 의도한 것보다 덜 또는 더 잘못된 방향으로 흘러갈 수 있음
시계열 분석은 알려지지 않은 것을 모델링하는 것이기 때문에 사전 관찰의 영향을 확정 진단하는 데에는 어려움이 있으며 모델 사용 이후에 문제를 확인할 수 있음 → 지속적인 경계 필요
일반적인 점검 목록(사후 공정 검사/모델 구축)
누락된 데이터를 대치하거나 평활할 때, 결과에 대한 사전관찰의 도입의 영향 (대치와 평활의 동작 방법 및 성능)
매우 적은 데이터셋으로 처리의 전체 공정 구축(e.g. data.table의 일부 행)
공정의 각 단계별 임의 지점 검사(시간 정보가 적절한 위치인지)
데이터 또는 데이터 프레임의 열에 대해 타임스탬프와 관련된 지연이 무엇인지 (타임스탬프가 서버에 업로드 된 시간인지, 실제로 언제 ‘발생했는지’)
롤링 검사 또는 교차검증 (시계열에서는 각 sample을 무작위로 뒤섞는 것은 유효하지 않음)
의도적으로 사전 관찰을 도입하여 모델의 동작 확인 (다양한 사전 관찰 시도로 정확도에 생기는 변화 확인 → 노이즈가 많고, 약한 신호를 가진 데이터셋에는 사전관찰이 도입된 모델이 적합하지 않을 수 있음)
특징을 점진적으로 추가해 성능 향상 확인 (사전관찰의 한 가지 징후는 특정 특징이 예기치 않게 매우 좋은데, 왜 좋은지를 설명할 방법이 없는 경우임 → 이유에 대한 설명 목록의 맨 위에는 항상 ‘사전관찰’이 있어야 함)