불규칙한 사용자 행동에 시간 창 강요 중단—대안 제시
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
데이터 분석
대상자
- 데이터 분석가, 실시간 데이터 처리 개발자
- 난이도: 중간 (SQL 기초 및 윈도우 함수 이해 필요)
핵심 요약
- Session Windows의 핵심 장점:
- 불규칙한 사용자 행동 분석에 적합한 동적 윈도우 전략 제공.
- 활동/비활성 간격 기반으로 이벤트 그룹화, 고정 시간 윈도우의 한계 극복.
- SESSION
윈도우 함수를 통해 SQL에서 직접 세션 윈도우 정의 가능.
- 기본 개념:
- gap duration 설정을 통해 세션 분할 기준 정의 (예: 5분 이내 간격 유지 시 동일 세션).
- 세션 기반 집계 (예: 사용자별 세션당 조회한 제품 수 계산).
- 실용성:
- Web/App 분석, IoT 센서 데이터, 금융 시장 데이터 등 다양한 시나리오 적용 가능.
섹션별 세부 요약
1. 고정 시간 윈도우의 한계
- 기존 접근 방식:
- tumbling
또는 hopping
윈도우로 시간을 고정 간격으로 나눔.
- 불규칙한 사용자 행동 (bursty behavior)을 반영하지 못함.
- 문제점:
- 세션 분석 실패, 활동 패턴 유실.
- 예: 사용자가 5분 간격으로 활동 중단 시, 고정 시간 윈도우는 두 개의 세션으로 분할.
2. 세션 윈도우의 작동 방식
- 세션 정의:
- 활동 간격에 따라 이벤트 그룹화 (예: gap duration
5분 이내 시 동일 세션).
- 동적 윈도우 생성:
```sql
SESSION WITH GAP INTERVAL '5 MINUTES'
```
- 사용 사례:
- 앱 사용자 행동, IoT 센서 데이터, 이상 감지, 금융 시장 트레이딩 활동.
3. SQL 예제 및 결과
- 예시 테이블:
```sql
CREATE TABLE user_views (user_id INT, product_id INT, viewed_at TIMESTAMP);
```
- 세션 윈도우 정의:
```sql
SELECT
user_id, product_id, viewed_at,
first_value(viewed_at) OVER (
PARTITION BY user_id ORDER BY viewed_at
SESSION WITH GAP INTERVAL '5 MINUTES'
) AS window_start,
last_value(viewed_at) OVER (
PARTITION BY user_id ORDER BY viewed_at
SESSION WITH GAP INTERVAL '5 MINUTES'
) AS window_end
FROM user_views;
```
- 결과:
- user_id = 1
의 경우, 5분 이내 간격 시 동일 세션 (22:00~22:03), 이후 새로운 세션 (22:10).
- user_id = 2
의 경우, 30초 간격으로 동일 세션.
4. 세션 기반 집계
- 집계 예시:
```sql
SELECT
user_id, window_start,
COUNT(DISTINCT product_id) AS n_viewed_product
FROM (
SELECT
- ,
first_value(viewed_at) OVER (
PARTITION BY user_id ORDER BY viewed_at
SESSION WITH GAP INTERVAL '5 MINUTES'
) AS window_start
FROM user_views
) AS session_data
GROUP BY user_id, window_start;
```
- 결과:
- user_id = 1
의 22:00 세션: 2개 제품 조회.
- user_id = 2
의 22:05 세션: 2개 제품 조회.
결론
- 세션 윈도우 활용 팁:
- gap duration을 적절히 설정하여 세션 분할 균형 유지 (예: 너무 짧으면 분할, 너무 길면 무관한 이벤트 병합).
- RisingWave의 SESSION
윈도우 함수로 실시간 이벤트 스트림 분석 시 세션 기반 인사이트 추출 가능.