이번에 알아볼 개념은 Shapelet 입니다.
Shapelet은 시계열 분류(Time series Classification)에서 활용되는 부분 시계열을 의미합니다.
더 자세히는 어떤 의미인지 다음 내용들을 통해서 알아보겠습니다.
1. Shapelet이란?
- Shapelet은 시계열 데이터의 분류(Time Series Classification)와 패턴 인식(Pattern recognition)에서 중요한 부분적인 패턴 또는 하위 sequence를 의미합니다.
- 이는, 시계열 데이터에서 특정 클래스와 관련된 중요한 패턴을 찾아내고, 그 패턴이 나타나는 위치나 빈도를 바탕으로 분류 문제를 해결해나가는데 사용됩니다.
- 시계열 분류의 의미에서 Shapelet을 해석해보자면,
* Shapelet은 특정 클래스의 대표적인 부분 시퀀스로 시계열 데이터에서 클래스에 중요한 특정 패턴이면서 다른 클래스에서는 이러한 패턴이 나타나지 않는 부분을 의미한다고 보시면 되겠습니다.
- 말로만 설명을 들으면 잘 이해가 안갈 수 있으니, 파이썬 코드를 통해서 shapelet에 대한 예제를 만들어보고 시각적으로 이해해보겠습니다.
- 아래 그림은 numpy 함수를 통해서 두 시계열 클래스를 만들어보고, 그 둘을 구분할 수 있는 부분 하위 시퀀스인 shapelet을 만들어본 예제 코드입니다.
* 구현된 그림을 보시면, 파란색으로 표시된 Class 1과 주황색 점선으로 표시된 Class 2는 둘 다 기본적으로 Sine 함수를 따르고 있습니다. Class 1에는 랜덤한 일정수준의 noise를 주었고 Class 2에는 갑작스러운 상승 패턴을 포함해서 그려보았습니다.
* 여기서 볼 수 있듯이 1과 2를 구분하는 가장 극명한 패턴은 갑작스럽게 Class2가 상승하는 패턴인데요. 이 패턴을 포착하고 이를 바탕으로, 해당 패턴이 전체 시계열에 포함되는지 (또는 몇번이나 포함되는지 등)로 클래스를 구분할 수 있다는 것입니다.
* 시계열 분류 데이터를 많이 접해보시게 된다면, 전반적인 패턴 자체가 달라버리는 것은 상대적으로 쉬운 시계열 분류 문제이지만, 전반적인 패턴이 비슷하고 일부 패턴이 다른 게 더 판단하기 어려운 경우가 많은데요.
* Shapelet은 이러한 부분적인 패턴 중 서로 다른 클래스 구분에 결정적인 차이를 주는 것을 의미 한다고 보시면 되겠습니다.
2. 수식을 통해서 알아본 Shapelet을 찾는 과정(시계열 분류)
- 이번에는 수식을 통해서 Shapelet을 어떻게 찾아내는지 알아보도록 하겠습니다.
1) 먼저, 시계열인 x가 있다고 했을때 여러 Shapelet 후보군 S를 생성합니다. 각 Shapelet인 s는 S라는 후보군 집합의 요소라고 보시면 되겠습니다. 이때 s는 x의 모든 부분 구간에서 Sliding window를 통해 생성됩니다.
* 즉 위에 있는 s들은 해당 클래스와 다른 클래스의 구분을 극대화할 수 있는 shapelet의 후보군의 집합을 의미한다고 보시면 되겠습니다.
2) 이제 1)에서 도출된 shapelet을 가지고 시계열간의 거리를 계산해봅니다.
* 위에서 L은 shaplete s의 길이를 의미합니다. 즉, 특정 shapelet 후보인 s가 해당 x라는 시계열 시퀀스 내에서 동일한 길이의 부분에 대해서 각각 대응해서 유클리디안 거리를 구하고 그 중 가장 짧은 거리값을 구하는 것입니다.
3) 이제 위 과정을 각 클래스 별로 해보는 것입니다. 즉, 각 클래스 C 에서 shapelet s가 얼마나 잘 나타나는지를 평가해보는 것입니다. 이를 위해, 해당 클래스에 속하는 모든 시계열인 xi에 대해 shapelet s와의 최소 거리를 계산 한 후, 평균 거리를 구합니다.
4) 이제 각 클래스 내에서 구해진 shapelet을 활용한 distance를 다른 클래스에서 적용해서 구해보는 것입니다. Shapelet s가 다른 클래스에서 잘 나타나지 않는지, 즉 다른 클래스와 얼마나 구별되는지 평가하기 위해, 다른 클래스에서의 평균거리를 구하는 것입니다.
* 여기서 s는 추출된 시계열이 속한 클래스 C 에서 나온것이고, C'인 다른 클래스를 의미합니다.
* 즉, 특정 클래스에서 도출된 shapelet 중 어떤 것이 다른 클래스와의 구별에 가장 좋은지를 판단하는 과정으로, 특정 클래스에서 해당 shapelet을 활용했을때의 거리와 다른 클래스에서 해당 shapelet을 활용했을때의 거리차이가 극명하게 난다면, 이는 클래스 구분에 좋은 shapelet이라고 할 수 있다는 것입니다.
5) 이때 이 Shaplet의 Class 구별력을 수식으로 표현해보면 아래와 같습니다.
* s는 C 라는 클래스에서 파생된 shapelet인데, C'이라는 클래스에 적용했을때 그 유클리디안 거리의 차이가 크면 위에서 정의한 Score 값이 1보다 클 것이고, 이를 통해서 해당 클래스를 다른 클래스와 구분하는데 대표적인 shapelet을 선정할 수 있는 것입니다.
댓글