시계열 분류-매우 열악한 결과


11

휴대 전화 계정의 처음 21 일 동안 입력이 시계열 음성 사용 데이터 (초) 인 시계열 분류 문제를 해결하고 있습니다. 해당 대상 변수는 해당 계정이 35-45 일 범위에서 취소되었는지 여부입니다. 따라서 이진 분류 문제입니다.

지금까지 시도한 모든 방법 (다양한 정도)에서 매우 나쁜 결과를 얻고 있습니다. 먼저 k-NN 분류 (다양한 수정)를 시도했는데 결과가 매우 나빴습니다. 이로 인해 평균, 분산, 최대, 최소, 총 0 일, 총 후행 0 일, 전반 평균과 후반 평균의 차이 등의 시계열에서 기능을 추출 할 수있게되었으며 가장 예측 가능한 기능은 전체 인 것으로 보입니다. 제로 일 및 총 후행 제로 (여러 분류 알고리즘 사용). 이것은 최고 성능을 보였지만 성능은 여전히 ​​좋지 않았습니다.

다음 전략은 훈련 세트에서 제외 인스턴스가 너무 적었 기 때문에 마이너스 인스턴스를 오버 샘플링하는 것이 었습니다. 이로 인해 더 정확한 취소 예측이 이루어졌지만 더 많은 오 탐지가 발생했습니다.

아마도 시계열 사용 데이터 자체는 그다지 예측하기가 쉽지 않다고 생각하기 시작했습니다. 아마도 내가 고려하지 않은 잠재 변수가있을 수 있습니다. 데이터를 보면 이상한 행동도 보입니다. 즉, 일부 예는 사용량이 매우 적거나 감소하는 경우 (또는 전혀 없음)를 나타내며 취소하지 않으며 일부는 취소하는 사용량이 증가합니다. 아마도 이러한 모순적인 행동은 분류 자에 대한 명확한 결정 경계를 생성하지 않습니다.

오류의 또 다른 원인은 많은 교육 예제가 매우 드문 경우입니다 (예 : 사용량이 0 인 며칠). 내가 아직 시도하지 않은 한 가지 아이디어는 시계열을 세그먼트로 나누고 그런 식으로 일부 기능을 생성하는 것이지만 높은 기대는 없습니다.


1
우선, 다음과 같은 변형을 시도하는 것이 좋습니다. 사용량 데이터를 시간 / 일별로 집계하십시오. 2. 훈련 데이터에서이 시계열의 그림을 오버레이하여 두 그룹 내의 패턴을 봅니다. 3. 데이터에 적합한 다양한 시계열 / 회귀 모델을 탐색하십시오. 4. 모델 계수를 분류기의 피처로 사용하십시오.
ramhiser

나는 당신의 특징 추출 기술을 좋아합니다. 해볼 게요 데이터가 패턴을 찾기에는 너무 희박하다는 것을 확신했지만 누가 알았습니다. 감사!
user1893354

답변:


13

거리 측정 값으로 Dynamic Time warping을 사용하여 KNN을 적용하는 데 성공했습니다.

내 연구 (pdf)에 따르면이 접근법은 극복하기가 매우 어렵습니다. 아래 회로도는 github 에서 KNN 및 DTW를 파이썬으로 구현 한 것입니다 . 또는 IPython Notebook 에서보기

KNN과 DTW

훈련 데이터 세트가 매우 큰 경우 거리 매트릭스의 계층 적 군집을 수행하는 것이 좋습니다. 그런 다음 원하는 군집에서 샘플링하여 소규모 훈련 데이터 세트를 생성하십시오. 는 hclust데이터의 광범위한 시계열 특성을 나타내는 시계열을 보장합니다.


4
연구 논문에 대한 링크를 업데이트 할 수 있습니까?
tilaprimera


10

시계열 분류에 대한 두 가지 접근 방식

분류 작업을위한 시간적 구조화 된 입력을 처리하는 방법에는 두 가지 방법이 있습니다.

  1. 전용 시계열 모델 : 기계 학습 알고리즘은 시계열을 직접 통합합니다. 이 범주에서 KNN을 DTW 모델로 계산합니다.
  2. 특징 기반 접근법 : 여기서 시계열은 다른 낮은 차원의 표현으로 매핑됩니다. 이는 특징 추출 알고리즘이 시계열의 평균 또는 최대 값과 같은 특성을 계산 함을 의미합니다. 그런 다음 기능은 신경망, 임의 포리스트 또는 지원 벡터 시스템과 같은 "일반"머신 학습에 기능 매트릭스로 전달됩니다. 이 접근법은 결과에 대한 더 나은 설명이 가능하다는 장점이 있습니다. 또한 우리는 잘 개발 된 감독 머신 러닝 이론을 사용할 수 있습니다.

또한 과거에는 DTW와 함께 KNN을 성공적으로 배포했습니다. 그러나 나는 잘 설계된 기능을 사용하는 모델로 거의 항상 정확성을 능가했습니다. 또한 이진 분류를위한 DTW가있는 KNN은 O (n_t · m_ {train} · m_ {test})로 스케일링되며, n_t는 시계열의 길이이고, mtrain 및 mtest는 각각 열차 및 테스트 세트의 장치 수입니다. . 이는 계산 시간이 오래 걸린다는 것을 의미합니다.

따라서 기능 기반 접근 방식을 권장합니다.

tsfresh는 수많은 기능을 계산합니다

python 패키지 tsfresh 는 시계열을 포함하는 pandas.DataFrame에서 이러한 많은 기능을 계산합니다. http://tsfresh.readthedocs.io 에서 설명서를 찾을 수 있습니다 .

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

엄청난 양의 기능을 계산할 수 있습니다. 나중에 기능의 중요성을 필터링하고 유망 후보를 식별 할 수 있습니다.

면책 조항 : 나는 tsfresh의 저자 중 하나입니다.


멋진 게시물 주셔서 감사합니다. 저는 시계열이 매우 작습니다 (예 : 시계열 당 10 개의 데이터 포인트). 이 경우 내 데이터 세트에 tsfresh를 사용하는 것이 좋습니다? 감사합니다 :)
EmJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.