머신 러닝 응용 프로그램의 시간 데이터를 처리하는 일반적인 / 모범 사례는 무엇입니까?
예를 들어 데이터 세트에 "2014-05-05"와 같이 이벤트 타임 스탬프가있는 열이있는 경우이 열에서 유용한 기능을 추출하는 방법은 무엇입니까?
미리 감사드립니다!
머신 러닝 응용 프로그램의 시간 데이터를 처리하는 일반적인 / 모범 사례는 무엇입니까?
예를 들어 데이터 세트에 "2014-05-05"와 같이 이벤트 타임 스탬프가있는 열이있는 경우이 열에서 유용한 기능을 추출하는 방법은 무엇입니까?
미리 감사드립니다!
답변:
시간 변수와 다른 변수를 비교하고 추세를 찾는 것으로 시작하겠습니다.
이 경우주기적인 주간 추세와 장기 상승 추세가 있습니다. 따라서 두 가지 시간 변수를 인코딩하려고합니다.
day_of_week
absolute_time
트렌드가 발생하는 몇 가지 일반적인 시간 프레임이 있습니다.
absolute_time
day_of_year
day_of_week
month_of_year
hour_of_day
minute_of_hour
이 모든 경향을 찾으십시오.
이상한 트렌드도 찾으십시오. 예를 들어 드물지만 지속적인 시간 기반 추세가 나타날 수 있습니다.
is_easter
is_superbowl
is_national_emergency
etc.
이를 위해서는 종종 이벤트를 시간에 매핑하는 외부 소스와 데이터를 상호 참조해야합니다.
그래프가 중요하다고 생각하는 두 가지 이유가 있습니다.
이상한 트렌드
일반적인 트렌드는 아주 쉽게 자동화 할 수 있지만 (매번 추가하면됩니다) 이상한 트렌드는 종종 사람의 눈과 세상에 대한 지식이 필요합니다. 이것이 그래프가 매우 중요한 이유 중 하나입니다.
데이터 오류
너무 자주 데이터에 심각한 오류가 있습니다. 예를 들어, 날짜가 두 가지 형식으로 인코딩되었으며 그 중 하나만 프로그램에 올바르게로드 된 것을 알 수 있습니다. 그러한 문제는 무수히 많으며 놀랍게도 일반적입니다. 이것이 시계열뿐만 아니라 모든 데이터에 대해 그래프가 중요하다고 생각하는 다른 이유입니다.
데이터를 창으로 나누고 자기 상관 계수, 웨이블릿 등과 같은 창에 대한 기능을 찾고 학습에이 기능을 사용하십시오.
예를 들어, 온도 및 압력 데이터가있는 경우 개별 매개 변수로 분류하고 해당 창의 로컬 최소값 수와 같은 피쳐를 계산하고 모델에이 피쳐를 사용하십시오.
로 벤 과 나르가 날짜 - 시간 객체를 놓칠 - 잘 설명의 (독특한 더욱 악화 보통과) 완전한 계절 동향을 감지 도움이 될 날짜와 시간 부분의 버킷으로 날짜 - 시간 객체를 분해
관심있는 특정 기계 학습 알고리즘은 언급하지 않았지만 k- 평균과 같은 거리 기반 클러스터링에 관심이있는 경우 날짜-시간 객체를 유닉스-시간 형식 으로 일반화 합니다. . 이를 통해 알고리즘에 대한 간단한 숫자 거리 비교가 가능하며 두 날짜 값의 거리를 간단히 나타낼 수 있습니다.
귀하의 예에서는 날짜 전용 값 2014-05-05 ~ 1399248000 (2014 년 5 월 5 일 시작을 나타내는 유닉스 시간, UTC)을 일반화합니다.
[날짜-시간을 가능한 모든 날짜-시간 부분에 버킹하여이를 달성 할 수 있다고 주장 할 수는 있지만 데이터 세트 차원이 크게 증가 할 것입니다. 따라서 유닉스-시간, 거리 측정 및 일부 날짜-시간 버킷을 결합하는 것이 좋습니다.]
Ben은 정적 기능 에 대해 이야기 하고 타임 스탬프 기능을 사용합니다.
확장으로, 나는 지연 기능 을 소개 할 것입니다 . 나는 원시 시계열을 말하는 것이 아니라 그것에 대한 집계입니다.
가장 신비로운 부분은 미래의 가치가 보이지 않는다는 것입니다. 훈련 데이터에서 해당 집계 기능을 어떻게 사용할 수 있습니까?
작은 예 : 1991 년부터 2015 년까지 매년 전기 소비량 데이터가 있으며, 2016 년에서 2020 년까지 5 년 동안의 전기 소비량을 예측하고 싶습니다. 지난 5 년 동안 전기 소비량의 평균을 2020 년의 특성 값으로 계산하지만 2016 년에서 2020 년까지는 우리에게 알려지지 않았으므로 5 년 동안 시계열을 주도하고 (래그 반대) 2010 년에서 2015 년까지 이동 평균을 수행 한 다음이 값을 2020의 피쳐 값으로 사용하십시오. 따라서 향후 5 년간의 피쳐 데이터를 구성 할 수 있습니다.
다음 단계는 이동 기능 (count \ mean \ median \ min \ max.etc)을 사용하고 다른 창을 시도하는 것입니다. 그러면 많은 기능을 구성 할 것입니다!
날짜 / 시간 정보에 관심이있는 내용에 따라 비우기를 원할 수도 있습니다. 예를 들어, 시작 지점과의 거리 (예 : 2015 년 1 월 1 일)에 관심이 있고 몇 개월 단위로 측정하려는 경우 1 개월 (2015 년 1 월 1-31 일), 2로 코딩하면됩니다. (2015 년 2 월 1-28 일), 3, 4, 5, 6 등. 시작 날짜 사이의 거리가 거의 같으므로 이는 연속적인 연속 형식으로 시간 거리를 나타냅니다. 그리고 6.5 개월이라고 말하고 2015 년 6 월 반쯤임을 알 수 있기 때문에 계속 말합니다. 그러면 실제 날짜 코딩에 대해 걱정할 필요가 없으며 일반적인 분류 방법을 모두 사용할 수 있습니다.
일 단위로 측정하려는 경우 MySql에 'to_days'기능이 있다는 것을 알고 있습니다. 분류 전에 데이터를 가져 오기 위해이 기능을 사용하는 경우. 파이썬은 아마도 비슷한 것이 있거나 mork가 제안한 유닉스 타임 형식을 사용합니다.
도움이 되었기를 바랍니다!
이것이 일반적인 / 모범 사례인지는 모르겠지만 문제의 또 다른 관점입니다.
날짜가있는 경우 각 필드를 "연속 변수"대신 "범주 변수"로 취급 할 수 있습니다. 요일은 {1, 2 ..., 31} 세트에 값이 있고, 월은 {1, ..., 12}에 값이 있으며, 연도에는 최소값과 최대 값을 선택합니다 세트를 만듭니다.
그런 다음 일, 월 및 연도의 특정 숫자 값이 데이터에서 추세를 찾는 데 유용하지 않을 수 있으므로 이진 표현을 사용하여 숫자 값을 인코딩하고 각 비트는 피처가됩니다. 예를 들어, 월 5는 0 0 0 0 1 0 0 0 0 0 0 0
(1 0은 5에서 1, 1은 각각 1 비트입니다).
예를 들어 "연도 설정"에서 10 년을 사용하면 날짜는 43 개의 피처 (= 31 + 12 + 10)로 구성된 벡터로 변환됩니다. "스파 스 벡터"를 사용하면 기능의 양에 문제가 없어야합니다.
시간 데이터, 요일, 요일에 대해 비슷한 것을 수행 할 수 있습니다 ...
그것은 모두 머신 러닝 모델이 대답하고자하는 질문에 달려 있습니다.
내 답변의 맥락 : 지금까지 큰 답변이있었습니다. 그러나이 특정 시계열의 미래 가치를 예측하기 위해 기계 학습 응용 프로그램에 대해 이야기하고 있다고 가정하여 대화를 확장하고 싶습니다. 그 맥락을 염두에두고 내 조언은 다음과 같습니다.
조언 : 기존의 통계 예측 전략 (예 : 지수 평활, SARIMAX 또는 동적 회귀)을 예측 성능의 기준으로 먼저 살펴보십시오. 머신 러닝은 다양한 응용 분야에 큰 가능성을 보여 주지만, 시계열에 대해서는 응용 분야에 더 나은 서비스를 제공 할 수있는 실제 통계 방법이 시도되었습니다. 최근 두 기사에주의를 기울 이겠습니다.
우수한 성능을 원한다면 MASE와 같은 여러 모델과 비교할 메트릭을 선택하고 여러 통계 (아래 참조)와 머신 러닝 모델 (위에서 언급 한 기능 개발 전략 포함)을 스윕하십시오.
건배,
통계 예측 학습을위한 자료 : Rob J Hyndman의 무료 교재 ( https://otexts.org/fpp2/) 를 검토하면서 시작하겠습니다 . 이 텍스트는 https://otexts.org/fpp2/appendix-using-r.html 분석에 쉽게 통합 할 수있는 R 패키지를 기반으로합니다 . 마지막으로, https://robjhyndman.com/hyndsight/tscv/에 설명 된대로 횡단면 교차 검증과 시계열 교차 검증의 차이점에 유의 하십시오 .