series_decompose()

계열에 분해 변환을 적용합니다.

계열(동적 숫자 배열)이 포함된 식을 입력으로 사용하고 계절, 추세 및 잔류 구성 요소로 분해합니다.

Syntax

series_decompose(시리즈, [ 계절성,, 추세Test_points,Seasonality_threshold ])

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 형식 필수 Description
계열 dynamic ✔️ 숫자 값의 배열로, 일반적으로 메이크 계열 또는 make_list 연산자의 결과 출력입니다.
계절성 int 계절 분석을 제어합니다. 가능한 값은 다음과 같습니다.

- -1: series_periods_detect 사용하여 계절성을 자동 검색합니다. 이것은 기본값입니다.
- 기간: 예상되는 기간(bin 수)을 지정하는 양의 정수입니다. 예를 들어 계열이 bin에 있는 1 - h 경우 주별 기간은 168개의 bin입니다.
- 0: 계절성이 없으므로 이 구성 요소 추출을 건너뜁니다.
추세 string 추세 분석을 제어합니다. 가능한 값은 다음과 같습니다.

- avg: 추세 구성 요소를 로 average(x)정의합니다. 이것이 기본값입니다.
- linefit: 선형 회귀를 사용하여 추세 구성 요소를 추출합니다.
- none: 추세가 없으므로 이 구성 요소 추출을 건너뜁니다.
Test_points int 학습 또는 회귀 프로세스에서 제외할 계열의 끝에 있는 점 수를 지정하는 양의 정수입니다. 이 매개 변수는 예측 목적으로 설정해야 합니다. 기본값은 0입니다.
Seasonality_threshold real 계절성이 자동 검색으로 설정된 계절성 점수에 대한 임계값입니다. 기본 점수 임계값은 0.6입니다.

자세한 내용은 series_periods_detect 참조하세요.

반환

함수는 다음 각 계열을 반환합니다.

  • baseline: 계열의 예측 값(계절 및 추세 구성 요소의 합계, 아래 참조)입니다.
  • seasonal: 계절 구성 요소의 시리즈:
    • 마침표가 검색되지 않거나 명시적으로 0으로 설정된 경우 상수 0입니다.
    • 감지되거나 양수 정수로 설정된 경우: 같은 단계에서 계열 점의 중앙값
  • trend: 추세 구성 요소의 시리즈입니다.
  • residual: 잔차 구성 요소의 시리즈(즉, x - 기준)입니다.

참고

  • 구성 요소 실행 순서:
  1. 계절 계열 추출
  2. x에서 빼서 비계절 계열 생성
  3. deseasonal 계열에서 추세 구성 요소 추출
  4. 기준 = 계절별 + 추세 만들기
  5. 잔류 = x - 기준 만들기
  • 계절성 및 또는 추세를 사용하도록 설정해야 합니다. 그렇지 않으면 함수는 중복되며 기준 = 0 및 잔류 = x만 반환합니다.

계열 분해에 대한 자세한 정보

이 메서드는 일반적으로 주기적 및/또는 추세 동작을 매니페스트할 것으로 예상되는 메트릭의 시계열에 적용됩니다. 메서드를 사용하여 향후 메트릭 값을 예측하거나 비정상적인 값을 검색할 수 있습니다. 이 회귀 프로세스의 암시적 가정은 계절 및 추세 동작과는 별도로 시계열이 확률적이고 임의로 분산된다는 것입니다. 잔차 부분을 무시하면서 계절 및 추세 구성 요소에서 향후 메트릭 값을 예측합니다. 잔여 부분만 이상값 검색을 기반으로 비정상적인 값을 검색합니다. 자세한 내용은 시계열 분해 챕터에서 확인할 수 있습니다.

예제

주간 계절성

다음 예제에서는 주간 계절성과 추세가 없는 계열을 생성한 다음, 몇 가지 이상값을 추가합니다. series_decompose 는 계절성을 찾아 자동으로 검색하고 계절 구성 요소와 거의 동일한 기준을 생성합니다. 추가한 이상값은 잔차 구성 요소에서 명확하게 볼 수 있습니다.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose(y)
| render timechart  

계열 분해 1.

추세가 있는 주간 계절성

이 예제에서는 이전 예제의 계열에 추세를 추가합니다. 먼저 기본 매개 변수를 사용하여 를 실행 series_decompose 합니다. 추세 avg 기본값은 평균만 사용하고 추세를 계산하지 않습니다. 생성된 기준은 추세를 포함하지 않습니다. 잔류의 추세를 관찰할 때 이 예제가 이전 예제보다 덜 정확하다는 것이 분명해집니다.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose(y)
| render timechart  

계열 분해 2.

다음으로, 동일한 예제를 다시 실행합니다. 계열에서 추세가 예상되므로 추세 매개 변수에 를 지정 linefit 합니다. 긍정적인 추세가 감지되고 기준선이 입력 계열에 훨씬 더 가깝다는 것을 알 수 있습니다. 잔류는 0에 가깝고 이상값만 눈에 띄습니다. 차트에서 계열의 모든 구성 요소를 볼 수 있습니다.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose(y, -1, 'linefit')
| render timechart  

계열 분해 3.