한국어

윈도우 함수로 시계열 데이터의 힘을 활용하세요. 데이터 분석을 위한 필수 개념, 실용 예제, 고급 기술을 다룹니다.

시계열 분석: 윈도우 함수 마스터하기

시계열 데이터는 순차적이고 시간에 의존적인 특성으로 특징지어지며, 모든 산업 분야에서 흔히 사용됩니다. 주가 추적 및 웹사이트 트래픽 모니터링부터 센서 판독값 분석 및 판매 추세 예측에 이르기까지, 시계열 데이터에서 의미 있는 통찰력을 추출하는 능력은 정보에 입각한 의사 결정을 위해 매우 중요합니다. 윈도우 함수는 테이블 또는 데이터 프레임의 현재 행과 관련된 일련의 행에 대해 계산을 수행할 수 있는 강력하고 유연한 도구 세트를 제공하므로 시계열 분석에 필수적입니다.

시계열 데이터 이해

시계열 데이터는 시간 순서로 인덱싱된 데이터 포인트의 시퀀스입니다. 데이터 포인트는 다음과 같은 다양한 지표를 나타낼 수 있습니다.

시계열 데이터를 분석하면 미래 값을 예측하고, 이상값을 감지하며, 비즈니스 프로세스를 최적화하는 데 사용할 수 있는 패턴, 추세 및 계절성을 식별할 수 있습니다.

윈도우 함수 소개

윈도우 함수는 윈도우 집계 또는 분석 함수라고도 하며, 전통적인 집계 함수(예: SUM, AVG, COUNT)처럼 행을 단일 결과 집합으로 그룹화하지 않고 현재 행과 관련된 일련의 행에 대해 계산을 수행할 수 있습니다. 이 기능은 이동 평균, 누적 합계 및 기타 시간 기반 메트릭을 계산해야 하는 경우가 많은 시계열 분석에 특히 유용합니다.

윈도우 함수는 일반적으로 다음 구성 요소로 구성됩니다.

  1. 함수: 수행할 계산(예: AVG, SUM, RANK, LAG).
  2. OVER 절: 계산에 사용되는 행의 윈도우를 정의합니다.
  3. PARTITION BY 절(선택 사항): 데이터를 파티션으로 나누며, 윈도우 함수는 각 파티션에 독립적으로 적용됩니다.
  4. ORDER BY 절(선택 사항): 각 파티션 내의 행 순서를 지정합니다.
  5. ROWS/RANGE 절(선택 사항): 계산에 사용되는 현재 행을 기준으로 하는 행 집합인 윈도우 프레임을 정의합니다.

주요 개념 및 구문

1. OVER() 절

OVER() 절은 윈도우 함수의 핵심입니다. 함수가 작동할 행의 윈도우를 정의합니다. 인수가 없는 간단한 OVER() 절은 전체 결과 집합을 윈도우로 간주합니다. 예를 들면 다음과 같습니다.

SQL 예:

SELECT
  date,
  sales,
  AVG(sales) OVER()
FROM
  sales_data;

이 쿼리는 sales_data 테이블의 모든 날짜에 대한 평균 판매량을 계산합니다.

2. PARTITION BY

PARTITION BY 절은 데이터를 파티션으로 나누며, 윈도우 함수는 각 파티션에 별도로 적용됩니다. 데이터 내의 서로 다른 그룹에 대한 메트릭을 계산하려는 경우 유용합니다.

SQL 예:

SELECT
  date,
  product_id,
  sales,
  AVG(sales) OVER (PARTITION BY product_id)
FROM
  sales_data;

이 쿼리는 각 제품의 평균 판매량을 별도로 계산합니다.

3. ORDER BY

ORDER BY 절은 각 파티션 내의 행 순서를 지정합니다. 이는 실행 합계, 이동 평균 및 기타 시간 기반 메트릭을 계산하는 데 필수적입니다.

SQL 예:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date)
FROM
  sales_data;

이 쿼리는 시간에 따른 판매량의 누적 합계를 계산합니다.

4. ROWS/RANGE

ROWSRANGE 절은 계산에 사용되는 현재 행을 기준으로 하는 행 집합인 윈도우 프레임을 정의합니다. ROWS 절은 실제 행 번호를 기준으로 윈도우 프레임을 지정하고, RANGE 절은 ORDER BY 열의 값을 기준으로 윈도우 프레임을 지정합니다.

ROWS 예:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
  sales_data;

이 쿼리는 지난 3일 동안(현재 날짜 포함)의 이동 평균 판매량을 계산합니다.

RANGE 예:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
  sales_data;

이 쿼리는 지난 2일 동안(현재 날짜 포함)의 이동 평균 판매량을 계산합니다. RANGE에는 숫자 또는 날짜/시간 데이터 유형의 정렬된 열이 필요합니다.

시계열 분석을 위한 일반적인 윈도우 함수

1. 롤링/이동 평균

이동 평균이라고도 하는 롤링 평균은 시계열 데이터의 단기적 변동을 완화하고 장기적인 추세를 강조하기 위해 널리 사용되는 기법입니다. 지정된 시간 윈도우에 걸쳐 값을 평균하여 계산됩니다.

SQL 예:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
  sales_data;

이 쿼리는 7일 이동 평균 판매량을 계산합니다.

Python 예제(Pandas 사용):

import pandas as pd

# 'date' 및 'sales' 열이 있는 'sales_df'라는 Pandas DataFrame이 있다고 가정

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

글로벌 애플리케이션 예제: 다국적 소매업체는 30일 이동 평균을 사용하여 일별 판매량 변동을 완화하고 다양한 지역의 기본 판매 추세를 식별할 수 있습니다.

2. 누적 합계

누적 합계는 현재 행까지의 값의 합계를 계산합니다. 시간 경과에 따른 총 누적 값을 추적하는 데 유용합니다.

SQL 예:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
  sales_data;

이 쿼리는 시간에 따른 판매량의 누적 합계를 계산합니다.

Python 예제(Pandas 사용):

import pandas as pd

# 'date' 및 'sales' 열이 있는 'sales_df'라는 Pandas DataFrame이 있다고 가정

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

글로벌 애플리케이션 예제: 국제 전자상거래 회사는 누적 판매량을 사용하여 다양한 시장에서 신제품 출시로 발생한 총 수익을 추적할 수 있습니다.

3. 리드 및 래그

LEADLAG 함수를 사용하면 각각 후속 행 또는 선행 행의 데이터에 액세스할 수 있습니다. 이는 기간 간 변경 사항을 계산하고, 추세를 식별하며, 서로 다른 기간의 값을 비교하는 데 유용합니다.

SQL 예:

SELECT
  date,
  sales,
  LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
  sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
  sales_data;

이 쿼리는 전날 대비 판매량의 차이를 계산합니다. LAG(sales, 1, 0) 함수는 이전 행(오프셋 1)의 판매 값을 검색하고 이전 행이 없는 경우(예: 첫 번째 행) 0(기본값)을 반환합니다.

Python 예제(Pandas 사용):

import pandas as pd

# 'date' 및 'sales' 열이 있는 'sales_df'라는 Pandas DataFrame이 있다고 가정

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)

글로벌 애플리케이션 예제: 글로벌 항공사는 리드 및 래그 함수를 사용하여 서로 다른 주에 동일한 노선의 티켓 판매량을 비교하고 잠재적인 수요 변동을 식별할 수 있습니다.

4. 순위 및 밀집 순위

RANK()DENSE_RANK() 함수는 지정된 순서를 기준으로 파티션 내 각 행에 순위를 할당합니다. RANK()는 갭이 있는 순위를 할당하고(예: 1, 2, 2, 4), DENSE_RANK()는 갭이 없는 순위를 할당합니다(예: 1, 2, 2, 3).

SQL 예:

SELECT
  date,
  sales,
  RANK() OVER (ORDER BY sales DESC) AS sales_rank,
  DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
  sales_data;

이 쿼리는 판매 값을 내림차순으로 순위를 매깁니다.

글로벌 애플리케이션 예제: 글로벌 온라인 마켓플레이스는 순위 함수를 사용하여 각 국가 또는 지역에서 가장 많이 팔린 제품을 식별할 수 있습니다.

고급 기술 및 애플리케이션

1. 윈도우 함수 결합

더 복잡한 계산을 수행하기 위해 윈도우 함수를 결합할 수 있습니다. 예를 들어 누적 합계의 이동 평균을 계산할 수 있습니다.

SQL 예:

SELECT
  date,
  sales,
  AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
  (
    SELECT
      date,
      sales,
      SUM(sales) OVER (ORDER BY date) AS cumulative_sales
    FROM
      sales_data
  ) AS subquery;

2. 조건부 집계와 함께 윈도우 함수 사용

특정 조건을 기반으로 계산을 수행하기 위해 조건부 집계(예: CASE 문 사용)와 함께 윈도우 함수를 사용할 수 있습니다.

SQL 예:

SELECT
  date,
  sales,
  AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
  sales_data;

이 쿼리는 판매량이 100보다 큰 날짜에 대해서만 이동 평균 판매량을 계산합니다.

3. 시계열 분해

윈도우 함수는 시계열을 추세, 계절성 및 잔차 구성 요소로 분해하는 데 사용할 수 있습니다. 여기에는 이동 평균을 계산하여 추세를 추정하고, 계절성 패턴을 식별한 다음, 추세 및 계절성 구성 요소를 빼서 잔차를 구하는 작업이 포함됩니다.

4. 이상 감지

윈도우 함수는 이동 평균 및 표준 편차를 계산하여 시계열 데이터에서 이상값을 감지하는 데 사용할 수 있습니다. 특정 범위(예: 이동 평균에서 +/- 3 표준 편차)를 벗어나는 데이터 포인트는 이상값으로 플래그가 지정될 수 있습니다.

산업 전반의 실용적인 예

1. 금융

2. 소매

3. 제조

4. 의료

올바른 도구 선택

윈도우 함수는 다음을 포함하여 다양한 데이터 처리 도구 및 프로그래밍 언어에서 사용할 수 있습니다.

도구 선택은 특정 요구 사항과 기술 전문 지식에 따라 다릅니다. SQL은 관계형 데이터베이스에 저장된 데이터에 적합하며, Python 및 Spark는 대규모 데이터 세트를 처리하고 복잡한 분석을 수행하는 데 더 유연합니다.

모범 사례

결론

윈도우 함수는 시계열 분석을 위한 강력한 도구로, 이동 평균, 누적 합계, 리드/래그 값 및 기타 시간 기반 메트릭을 계산할 수 있습니다. 윈도우 함수를 마스터하면 시계열 데이터에서 귀중한 통찰력을 얻고 보다 정보에 입각한 의사 결정을 내릴 수 있습니다. 금융 데이터, 판매 데이터, 센서 데이터 또는 웹 트래픽 데이터를 분석하는 경우에도 윈도우 함수는 전통적인 집계 기술을 사용하여 감지하기 어려운 패턴, 추세 및 이상값을 식별하는 데 도움이 될 수 있습니다. 윈도우 함수의 주요 개념과 구문을 이해하고 모범 사례를 따르면 다양한 산업에서 광범위한 실제 문제를 효과적으로 해결하기 위해 윈도우 함수를 활용할 수 있습니다.

시계열 분석: 데이터 통찰력을 위한 윈도우 함수 마스터하기 | MLOG