기계 학습-날짜 / 시간 데이터를 통한 엔지니어링 기능


45

머신 러닝 응용 프로그램의 시간 데이터를 처리하는 일반적인 / 모범 사례는 무엇입니까?

예를 들어 데이터 세트에 "2014-05-05"와 같이 이벤트 타임 스탬프가있는 열이있는 경우이 열에서 유용한 기능을 추출하는 방법은 무엇입니까?

미리 감사드립니다!

답변:


44

시간 변수와 다른 변수를 비교하고 추세를 찾는 것으로 시작하겠습니다.

예를 들어

여기에 이미지 설명을 입력하십시오

이 경우주기적인 주간 추세와 장기 상승 추세가 있습니다. 따라서 두 가지 시간 변수를 인코딩하려고합니다.

  • 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.

이를 위해서는 종종 이벤트를 시간에 매핑하는 외부 소스와 데이터를 상호 참조해야합니다.

왜 그래프입니까?

그래프가 중요하다고 생각하는 두 가지 이유가 있습니다.

  • 이상한 트렌드
    일반적인 트렌드는 아주 쉽게 자동화 할 수 있지만 (매번 추가하면됩니다) 이상한 트렌드는 종종 사람의 눈과 세상에 대한 지식이 필요합니다. 이것이 그래프가 매우 중요한 이유 중 하나입니다.

  • 데이터 오류
    너무 자주 데이터에 심각한 오류가 있습니다. 예를 들어, 날짜가 두 가지 형식으로 인코딩되었으며 그 중 하나만 프로그램에 올바르게로드 된 것을 알 수 있습니다. 그러한 문제는 무수히 많으며 놀랍게도 일반적입니다. 이것이 시계열뿐만 아니라 모든 데이터에 대해 그래프가 중요하다고 생각하는 다른 이유입니다.


7

데이터를 창으로 나누고 자기 상관 계수, 웨이블릿 등과 같은 창에 대한 기능을 찾고 학습에이 기능을 사용하십시오.

예를 들어, 온도 및 압력 데이터가있는 경우 개별 매개 변수로 분류하고 해당 창의 로컬 최소값 수와 같은 피쳐를 계산하고 모델에이 피쳐를 사용하십시오.


7

Ben Haley가 말한 모든 것 이상으로 고려해야 할 사항은 사용자 현지 시간 으로 변환하는 것 입니다. 예를 들어, 모든 사용자에 대해 오후 8 시경에 발생하는 것을 예측하려는 경우 UTC 시간을 보면 예측하기가 더 어려워집니다.


6

여러 경우에 시계열 내의 데이터 및 이벤트는 계절적입니다. 이 경우 행사의 달과 연도가 중요합니다. 따라서 이러한 시나리오에서는 이진 변수를 사용하여 이벤트가 주어진 월 / 년에 있는지 여부를 나타낼 수 있습니다.

이것이 귀하의 질문에 대답하기를 바랍니다. 친절하게 좀 더 구체적으로 당신이 무엇을 달성하려고 노력하고 있습니까


4

나르가 날짜 - 시간 객체를 놓칠 - 잘 설명의 (독특한 더욱 악화 보통과) 완전한 계절 동향을 감지 도움이 될 날짜와 시간 부분의 버킷으로 날짜 - 시간 객체를 분해

관심있는 특정 기계 학습 알고리즘은 언급하지 않았지만 k- 평균과 같은 거리 기반 클러스터링에 관심이있는 경우 날짜-시간 객체를 유닉스-시간 형식 으로 일반화 합니다. . 이를 통해 알고리즘에 대한 간단한 숫자 거리 비교가 가능하며 두 날짜 값의 거리를 간단히 나타낼 수 있습니다.

귀하의 예에서는 날짜 전용 값 2014-05-05 ~ 1399248000 (2014 년 5 월 5 일 시작을 나타내는 유닉스 시간, UTC)을 일반화합니다.

[날짜-시간을 가능한 모든 날짜-시간 부분에 버킹하여이를 달성 할 수 있다고 주장 할 수는 있지만 데이터 세트 차원이 크게 증가 할 것입니다. 따라서 유닉스-시간, 거리 측정 및 일부 날짜-시간 버킷을 결합하는 것이 좋습니다.]


3

Ben은 정적 기능 에 대해 이야기 하고 타임 스탬프 기능을 사용합니다.

확장으로, 나는 지연 기능 을 소개 것입니다 . 나는 원시 시계열을 말하는 것이 아니라 그것에 대한 집계입니다.

가장 신비로운 부분은 미래의 가치가 보이지 않는다는 것입니다. 훈련 데이터에서 해당 집계 기능을 어떻게 사용할 수 있습니까?

작은 예 : 1991 년부터 2015 년까지 매년 전기 소비량 데이터가 있으며, 2016 년에서 2020 년까지 5 년 동안의 전기 소비량을 예측하고 싶습니다. 지난 5 년 동안 전기 소비량의 평균을 2020 년의 특성 값으로 계산하지만 2016 년에서 2020 년까지는 우리에게 알려지지 않았으므로 5 년 동안 시계열을 주도하고 (래그 반대) 2010 년에서 2015 년까지 이동 평균을 수행 한 다음이 값을 2020의 피쳐 값으로 사용하십시오. 따라서 향후 5 년간의 피쳐 데이터를 구성 할 수 있습니다.

다음 단계는 이동 기능 (count \ mean \ median \ min \ max.etc)을 사용하고 다른 창을 시도하는 것입니다. 그러면 많은 기능을 구성 할 것입니다!


2

날짜 / 시간 정보에 관심이있는 내용에 따라 비우기를 원할 수도 있습니다. 예를 들어, 시작 지점과의 거리 (예 : 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

결과 변수에 대해 다른 시간 변화를 가진 그래프를 플롯하여 그 영향을 확인하십시오. 월, 일, 연도를 별도의 피쳐로 사용할 수 있으며 월이 범주 형 변수이므로 상자 / 위 스커트 플롯을 시도하고 패턴이 있는지 확인할 수 있습니다. 숫자 변수의 경우 산점도를 사용할 수 있습니다.


1

이것이 일반적인 / 모범 사례인지는 모르겠지만 문제의 또 다른 관점입니다.

날짜가있는 경우 각 필드를 "연속 변수"대신 "범주 변수"로 취급 할 수 있습니다. 요일은 {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)로 구성된 벡터로 변환됩니다. "스파 스 벡터"를 사용하면 기능의 양에 문제가 없어야합니다.

시간 데이터, 요일, 요일에 대해 비슷한 것을 수행 할 수 있습니다 ...

그것은 모두 머신 러닝 모델이 대답하고자하는 질문에 달려 있습니다.


이것은 달의 14 일과 15 일이 '유사한 것'과 같이 존재할 수있는 관계를 포착하지 못합니다. 매일 매일이 문자 적으로 다르다고 생각하는 한도 내일에 대한 예측은 불가능하다고 생각합니다. 또한 범주 형을 원-핫 인코딩 할 필요는 없으며 반드시 그런 것은 아닙니다.
Sean Owen

왜 가까운 날짜의 "근접성"을 캡처하지 못하는지 알 수 없습니다. 예를 들어, 이진 벡터를 NN에 공급하면 적절한 훈련 후에 스스로 알아낼 것입니다. 이진 벡터를 사용하는 것은 범주를 나타내는 한 가지 방법 일뿐입니다.
Paco Barter

이 경우 입력 공간에서 "is_1st"와 관련이없고 "is_1st"와 관련이없는 "is_12th"및 "is_13th"와 같은 열이 효과적으로 있습니다. 연속적인 기능으로 12 일과 13 일이 어떤 의미에서는 1 일과 12 일보다 가깝습니다. 모델이 추측하는 것에 호소하고 있지만 입력 기능이 인코딩하는 것에 대해 이야기하고 있습니다.
Sean Owen

알 겠어. 연속체 기능은 "근접성"날짜 품질을 더 잘 캡처합니다. 필자의 요점은 날짜의 숫자 값과 관련이없는 데이터 (예 : 토요일에만 구매하는 특정 패턴의 패턴)에 대한 데이터 경향이있을 수 있다는 것입니다. 따라서 날짜를 다루는 또 다른 관점을 제공합니다.
Paco Barter

@PacoBarter가 말했듯이 one-hot encoding은 범주 사이의 다른 거리를 무시합니다. 이러한 기능은 본질적으로 위상 정보이므로 대부분의 기계 학습 모델에는 위상 유형 입력이 없으므로 쉽게 해결할 수 없습니다. 거리 측정법에 대한 일부 DIY는 가능합니다.
plpopk

0

내 답변의 맥락 : 지금까지 큰 답변이있었습니다. 그러나이 특정 시계열의 미래 가치를 예측하기 위해 기계 학습 응용 프로그램에 대해 이야기하고 있다고 가정하여 대화를 확장하고 싶습니다. 그 맥락을 염두에두고 내 조언은 다음과 같습니다.

조언 : 기존의 통계 예측 전략 (예 : 지수 평활, SARIMAX 또는 동적 회귀)을 예측 성능의 기준으로 먼저 살펴보십시오. 머신 러닝은 다양한 응용 분야에 큰 가능성을 보여 주지만, 시계열에 대해서는 응용 분야에 더 나은 서비스를 제공 할 수있는 실제 통계 방법이 시도되었습니다. 최근 두 기사에주의를 기울 이겠습니다.

  1. 통계 및 머신 러닝 예측 방법 : Spyros Makridakis et al. 이 기사에서는 많은 시계열의 경우 전통적인 통계 시계열 분석이 기계 학습 (ML) 모델보다 뛰어나다 고 지적합니다. 본질적으로 ML은 과적 합하는 경향이 있으며 독립적 인 항목과 관련된 ML 모델 가정은 위반됩니다.
  2. 단순 예측 대 복잡한 예측 : Kesten C Green et al. 이 기사는 다양한 모델을 비교하거나 비교하지 않고 동료 검토 저널 기사보고 시계열 분석의 시계열 출력을 비교하고 조사합니다. 결론적으로, 연구자들은 해석하기가 더 어렵고 성능이 나쁜 모델로 분석을 복잡하게 만듭니다. 일반적으로 이는 인센티브 구조가 열악하기 때문에 발생합니다.

우수한 성능을 원한다면 MASE와 같은 여러 모델과 비교할 메트릭을 선택하고 여러 통계 (아래 참조)와 머신 러닝 모델 (위에서 언급 한 기능 개발 전략 포함)을 스윕하십시오.

건배,

통계 예측 학습을위한 자료 : Rob J Hyndman의 무료 교재 ( https://otexts.org/fpp2/) 를 검토하면서 시작하겠습니다 . 이 텍스트는 https://otexts.org/fpp2/appendix-using-r.html 분석에 쉽게 통합 할 수있는 R 패키지를 기반으로합니다 . 마지막으로, https://robjhyndman.com/hyndsight/tscv/에 설명 된대로 횡단면 교차 검증과 시계열 교차 검증의 차이점에 유의 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.