Mining Data Streams
Last updated
Last updated
Archival Storage(disk)
백업과 같이 스트림이 아카이브됨
해당 저장소에서 쿼리에 대한 답을 할 수 없음
Limited Working Storage(disk or main memory)
스트림 일부 혹은 요약본이 저장됨
쿼리에 대한 답으로 사용됨
Standing Queries
특정 시간 조건에서 영구적으로 실행됨(cron)
e.g. 온도가 25도 이상이면 알람
Ad-Hoc Queries
현재 스트림 상태에 대해 물음
e.g. 지난달 페이지를 방문한 유저수
data sampling
data filtering
distinct elements counting
moments(average, standard deviation etc.) estimating
frequent elements finding
stream: tuple(user, query, time)
a. sample queries
데이터 스트림에서 고정된 비율로 샘플링을 수행하면, 데이터 스트림의 총량이 증가함에 따라 샘플링된 데이터의 양도 비례적으로 증가함
각 쿼리에 대해 0에서 9 사이의 정수를 무작위로 할당하고, 그 값이 0인 경우 해당 쿼리를 저장하도록 함(10%)
e.g. x 쿼리는 1번, d 쿼리는 2번씩 들어오는 경우
b. sample users
쿼리 기반 샘플링으로 중복 비율이 일치하지 않는 문제를 해결하기 위해 유저 기반 샘플링을 함
전체 유저 중 10%를 샘플링하고, 샘플된 유저의 모든 쿼리를 저장
유저 중 10%를 샘플링하면, 저장되는 쿼리의 비율은 10%이므로 비율이 일치하게 됨
유저 ID를 해싱하여 10개의 버킷으로 분류한 후, 0번 버킷에 해당하는 유저를 샘플링
30%의 비율로 샘플링하려면 10개의 버킷 중 3개를 선택
e.g. 유저가 n명, 쿼리가 m개인 경우
|S|: 샘플링 크기 (Reservoir 크기), n: 현재까지 처리된 쿼리 개수 (시간을 의미), S: 샘플 집합
Reservoir Sampling
데이터 스트림의 (n+1)번째 쿼리가 들어오면, 다음 단계를 수행
쿼리를 추가하기 위해, 기존 샘플 S에 있는 항목 중 하나를 무작위로 제거
용
F: 필터 키의 집합 (list)
B: 크기 n의 비트 배열, 모든 값을 0으로 초기화
Hash Function: h(k)는 키 k를 해싱하여 범위 [0,n)의 인덱스를 반환
비트 배열 B를 n비트로 생성하고 모든 값을 0으로 초기화
필터 F에 포함된 각 키 k를 해싱하고, B[h(k)] 값을 1로 설정
데이터 스트림에서 아이템 a가 들어오면 h(a)를 계산하고 B[h(a)]==1이면 a를 반환
해싱 충돌로 인해 false positive가 발생
m: 저장된 키의 개수 (다트의 개수)
n: 비트 배열 크기 (타겟 개수)
Bloom Filter
Hash Table의 false positive문제 줄이기 위함
비트 배열 B를 n비트로 생성하고 모든 값을 0으로 초기화
k: 해시 함수의 개수
m: 저장된 키의 개수
n: 비트 배열 크기
총 쿼리 개수 =
전체)고유한 쿼리 중 중복되는 쿼리의 비율 =
10%의 쿼리를 저장한다면, 각 유저당 개의 쿼리가 저장됨
중복되는 쿼리의 확률 =
샘플에 있는 고유한 쿼리 개수 =
샘플)고유한 쿼리 중 중복되는 쿼리의 비율 =
샘플에 저장된 고유한 쿼리 중 중복된 쿼리의 비율은 전체 쿼리의 중복 비율과 일치하지 않음()
저장되는 쿼리의 비율은
n번째 쿼리가 샘플 S에 포함될 확률 =
동안에는 데이터 스트림의 처음 개의 항목을 순서대로 샘플 S에 추가
확률 로 동전을 던져 앞면이 나오면, S에 해당 쿼리를 추가
이전 시간에 포함되었던 쿼리가 계속 샘플에 남아 있을 확률 =
n+1번째 쿼리가 샘플에 포함될 확률 =
false positive 확률=
k개의 독립적인 haash function 정의 ->
필터 F에 포함된 각 키 s에 대해 모든 해시 함수 계산 후 인덱스 설정 ->
데이터 스트림에서 키 x가 도착하면, 해시()를 계산해 값 확인 -> 인 경우 x는 F에 포함된 것으로 간주
false positive 확률 =
최적의 k 값 =
m: 1 billion, n: 8 billion 인 경우 Hash Table 이용시 false positive=, Bloom Filter 이용시 k=, false positive=으로 낮춤