시계열 데이터는 어디서 찾는가
시계열 데이터를 찾기 위해서는 우선 어떤 데이터를 찾아야 하는지 정확히 아는 것이 중요하다. 어떤 자료가 제일 적합할지는 두 가지 목적에 따라 달라진다.
1. 학습과 실험 목적에 맞는 데이터셋 찾기
2. 시간 지향적인 형태가 아닌 데이터에서 시계열 데이터 생성하기
첫번째 목적의 경우 나의 분석이 옳은 것인지 판단할 수 있는 데이터셋을 찾아야한다. 보통 캐글과 같은 대회용 데이터셋이나 저장소 데이터셋이 적절하다. 반면 두번째 목적의 경우 타임스탬프가 찍힌 데이터를 식별하고, 이를 시계열로 변환하고, 다듬고, 또다른 데이터와 결합하여 흥미로운 시계열 데이터를 만들기 위해 다양한 방법을 고안해야한다.
미리 준비된 데이터셋을 찾으려면 시계열 데이터 저장소를 알고 있어야 한다.
UCI Machine Learning Repository
아래 사이트는 시계열 데이터가 모여져 있는 대표적인 time-series data repository인데 보면 알 수 있듯이 데이터를 쉽게 다룰 수 있도록 깔끔하게 정리된 시계열 데이터는 아니다. 따라서 데이터를 적절하게 modify하는 것이 중요해 보인다.
CompEngine
아래 사이트는 시계열 데이터를 스스로 조직화하는 데이터베이스로 약 1억 4천만 개의 데이터로 구성된 25,000건 이상의 시계열 데이터베이스를 제공한다.
일변량 시계열 vs 다변량 시계열
이름 그대로 일변량 시계열은 시간에 대해 측정된 변수가 하나만 있는 경우를 말하고 다변량 시계열은 각 타임스탬프에서 측정된 변수가 여러 개인 경우를 의미한다. 측정된 여러 변수가 서로 연관되거나, 각 변수가 서로 시간 종속성을 가지는 시계열은 다양한 분석이 가능하다.
발견된 시계열
발견된 시계열은 야생에서 직접 수집한 시계열 데이터를 의미한다.
예를 들어 회사 거래 내역을 저장하는 SQL 데이터베이스에서 특정 고객과의 거래에 대한 시계열을 수집하는 경우가 있다. 또한 회사의 하루 총 거래량의 시계열이나 여성 고객의 주당 지출 총액과 같이 동일한 데이터로 구성된 시계열도 있다.
타임스탬프가 어디에나 존재할 수 있다는 관점에서 보면 시계열이라고 명시되지 않은 구조화된 데이터에서 시계열 데이터를 찾는 것은 쉬운 일이다.
테이블 집합에서 시계열 데이터 집합 개선하기
발견된 시계열의 전형적인 예는 SQL 데이터베이스에 저장된 상태 및 이벤트형 데이터로부터 추출된 데이터이다. 전통적으로 구조화된 SQL 데이터베이스에 대량의 데이터가 지속적으로 저장되므로 매우 적절한 예시이다. 그러나 대부분의 기관이나 단체에서 시계열 분석을 고려하지 않고 데이터베이스 스키마를 설계할 때 많은 기관이나 단체는 시계열 분석을 고려하지 않기 때문에 이러한 데이터들을 다룰때는 서로 다른 테이블과 자료로부터 시계열을 수집하고 구성하여야 한다.
예시를 통해 보자.
비영리 단체가 수집한 데이터의 예시라고 보면된다.
각 회원의 가입 연도 및 현재 상태
회원 ID | 가입 연도 | 회원 상태 |
1 | 2017 | gold |
2 | 2018 | silver |
3 | 2016 | inactive |
특정 주에 보낸 이메일 중 회원이 열어본 개수
회원 ID | 주 | 열어본 이메일 개수 |
2 | 2017-01-08 | 3 |
2 | 2017-01-15 | 2 |
1 | 2017-01-15 | 1 |
회원이 기관에 기부한 시간
회원 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 |
위와 같은 자료로 회원의 전체 기부금과 열람 이메일의 전체 개수와 어떤 상관관계가 있는지 같은 많은 질문에 답할 수 있다.
추가적으로 회원이 가입 직후에 기부할지 시간이 흐른 뒤에 기부할 것인지 같은 시간 중심적인 문제도 해결할 수 있다. 하지만 데이터가 시계열 친화적인 데이터가 아니라면 누가 언제 기부를 할지 예측하는 것은 어렵다.
보유한 데이터에서 시간축을 고려하는 것부터 시작해야한다. 위의 표들은 세가지 기준으로 시간을 구분한다.
- 연간 회원 상태
- 이메일 열람에 대한 주간 누적 기록
- 기부가 이루어진 순간의 타임스탬프
데이터를 볼때는 사소한 점들까지 고려해야 한다. 예를들어 회원상태가 최근상태인지 여러 상태가 동시에 존재하는지 확인해야한다. 이 문제를 해결하는 방법중 하나는 특정 회원에 대한 기록이 하나 이상인지 확인하는 것이다.
YearJoined.groupby('memberId').count().groupby('memberStats').count()
1000
위 코드는 1000명의 회원이 각각 단 하나의 상태만 가진다는 것을 보여준다. 가입당시 데이터들 사이에 최신 상태 데이터가 섞여들어간다거나 하는 상황이 발생하면 사전관찰이라고 볼 수 있어서 시간적 위치가 확실하지 않은 변수의 사용은 지양해야한다.
사전관찰
시계열 분석에서 사전관찰이란 용어는 미래의 어떤 사실을 안다는 뜻으로 쓰인다. 이러한 지식은 모델의 설계, 학습, 검증 단계에서는 알 수 없다. 사전 관찰은 데이터를 통해 실제로 알아야하는 시점보다 더 일찍 미래에 대한 사실을 발견하는 방법이다.
사전관찰은 어떻게든 미래에 일어날 일에 대한 정보가 모델에서 시간을 거슬러 전파되어 모델의 초기 동작에 영향을 주는 방법이다. 예를 들어 모델에 대한 하이퍼파라미터를 선택할 때 데이터셋에서 다양한 시간에 모델을 시험한 다음 최적의 모델을 하나 고르면 해당 모델의 테스트를 데이터 시작 부분에서 다시 할 수 있다. 이때 한 시점에 대해 다음에 일어날 일을 아는 모델을 선택했기 때문에 문제가 발생한다.
그러나 높은 수준으로 데이터를 다룬다면 다음과 같은 이점을 가질 수도 있다.
Feature selection: 사전 관찰은 주어진 문제에 가장 유용할 가능성이 높은 기능을 식별하는 데 도움이 될 수 있으므로 모델에 가장 관련성이 높은 기능을 선택하는 데 사용할 수 있습니다.
Model selection: 사전 관찰은 유사한 데이터에 대한 이전 경험을 기반으로 주어진 문제에 대해 가장 잘 수행될 가능성이 있는 유형의 기계 학습 모델을 식별하는 데 도움이 될 수 있다.
Hyperparameter tuning: 사전 관찰은 유사한 데이터에 대한 이전의 경험을 바탕으로 주어진 문제에 대해 가장 잘 수행될 가능성이 있는 특정 모델의 하이퍼파라미터 값을 식별하는 데 도움이 될 수 있다.
결과적으로 사전 관찰은 모델링 프로세스에 정보를 제공하기 위해 기존 지식을 활용함으로써 기계 학습 모델의 성능을 향상시키는 유용한 도구가 될 수 있다.
'Drawing (AI) > Time Series' 카테고리의 다른 글
실전 시계열 분석 - Intro (0) | 2023.03.05 |
---|