1. 트렌드 제거란?
"Trend 제거"란, 시계열 데이터의 기본 패턴을 제거하는 과정을 의미합니다.
Trend는 수년간의 상승 또는 하락 패턴이나 수월간의 주기적 패턴을 의미합니다.
Trend 제거를 하면, 데이터가 더욱 stationary해지게 되어, 시계열 예측이나 이상 탐지와 같은 통계 분석에 유용할 수 있습니다.
예를 들어, 시계열 데이터가 선형 트랜드를 가지고 있다면, Trend 제거는 데이터에 가장 잘 맞는 선을 빼는 것이 됩니다.
이 선은 데이터의 기본 패턴을 나타내고,
이것을 빼면, Trend가 아닌 데이터의 변동을 볼 수 있게 됩니다.
Trend 제거의 결과는 보통 detrended 데이터 또는 residuals라고 합니다.
2. SQL로는 어떻게 하나요 ?
In SQL, you can remove the trend in a time series data using various statistical methods, such as linear regression, polynomial regression, or moving average. The exact approach will depend on the nature of the trend and the specific requirements of your analysis.
선형 회귀 분석, 다항식 회귀 분석 또는 이동 평균과 같은 다양한 통계 방법을 사용하여 시계열 데이터의 추세를 제거할 수 있습니다. 정확한 접근 방식은 추세의 특성과 분석의 특정 요구 사항에 따라 달라집니다
For example, if the trend is a linear trend, you can use linear regression to fit a line to the data and then subtract the line from the original data to get the detrended data. The SQL code for this approach might look like:
예를 들어 추세가 선형 추세인 경우 선형 회귀 분석을 사용하여 데이터에 선을 적합시킨 다음 원래 데이터에서 선을 빼서 추세 제거된 데이터를 가져올 수 있습니다.
3. SQL 예시
Trend 테이블이
+---+------+
| x | y |
+---+------+
| 1 | 4.0 |
| 2 | 4.5 |
| 3 | 5.0 |
| 4 | 5.5 |
| 5 | 6.0 |
+---+------+
이렇게 구성되어 있다고 치고
이 예시에서 데이터 테이블에는 각각 x 값과 해당 y 값이 있는 5개의 행이 있습니다.
이 값은 x가 시간을 나타내고
y가 해당 시간에 해당하는 값을 나타내는 시계열 데이터라고 보면 됩니다.
아래와 같은 SQL 코드를 통해 계산해볼수 있습니다.
WITH trend AS (
SELECT x, y,
-- fit a line to the data using linear regression
slope * x + intercept AS fitted
FROM (
SELECT x, y,
-- calculate the slope and intercept of the line
(SUM(x * y) - COUNT(*) * AVG(x) * AVG(y)) / (SUM(x * x) - COUNT(*) * AVG(x) * AVG(x)) AS slope,
AVG(y) - AVG(x) * slope AS intercept
FROM data
)
)
-- subtract the line from the original data to get the detrended data
SELECT x, y - fitted AS detrended
FROM trend
결과 trend 테이블은 다음과 같습니다.
+---+------+-------+
| x | y | fitted |
+---+------+-------+
| 1 | 4.0 | 4.0 |
| 2 | 4.5 | 4.5 |
| 3 | 5.0 | 5.0 |
| 4 | 5.5 | 5.5 |
| 5 | 6.0 | 6.0 |
+---+------+-------+
마지막으로 추세 제거된 데이터는 다음 SELECT 문을 실행하여 계산됩니다.
-- subtract the line from the original data to get the detrended data
SELECT x, y - fitted AS detrended
FROM trend
이 예에서 추세가 제거된 데이터는 데이터가 평평한 추세를 가졌기 때문에 모두 0입니다. 데이터에 다른 유형의 추세가 있는 경우 추세 제거된 데이터도 달라집니다.
4. 다른 유형의 추세제거
+---+-------+
| x | y |
+---+-------+
| 1 | 1.0 |
| 2 | 2.25 |
| 3 | 4.0 |
| 4 | 6.25 |
| 5 | 9.0 |
+---+-------+
이러한 데이터가 있다고 가정합니다. ( quadratic trend:)
y 값은 x와 함께 증가하는 비율로 증가합니다. 트렌드 테이블은 이전과 같은 방식으로 생성됩니다.
WITH trend AS (
SELECT x, y,
-- fit a line to the data using linear regression
slope * x + intercept AS fitted
FROM (
SELECT x, y,
-- calculate the slope and intercept of the line
(SUM(x * y) - COUNT(*) * AVG(x) * AVG(y)) / (SUM(x * x) - COUNT(*) * AVG(x) * AVG(x)) AS slope,
AVG(y) - AVG(x) * slope AS intercept
FROM data
)
)
And the resulting trend table would look like this:
+---+-------+--------+
| x | y | fitted |
+---+-------+--------+
| 1 | 1.0 | 1.0 |
| 2 | 2.25 | 2.0 |
| 3 | 4.0 | 3.0 |
| 4 | 6.25 | 4.0 |
| 5 | 9.0 | 5.0 |
+---+-------+--------+
마지막으로 추세 제거된 데이터는 다음 SELECT 문을 실행하여 계산됩니다.
-- subtract the line from the original data to get the detrended data
SELECT x, y - fitted AS detrended
FROM trend
결과는 아래와 같습니다.
+---+---------+
| x | detrended |
+---+---------+
| 1 | 0.0 |
| 2 | 0.25 |
| 3 | 1.0 |
| 4 | 2.25 |
| 5 | 4.0 |
+---+---------+
보시다시피 추세선은 데이터에 잘 맞지 않는 직선입니다.
추세가 제거된 데이터는 원래 데이터에서 추세를 뺀 나머지로 추세선과의 편차를 나타냅니다.
댓글