# 샘플링

데이터가 많아 통계값을 보기 힘든 경우 또는 머신러닝 학습을 위해 데이터를 Train, Test로 나눌 필요가 있을 경우 샘플링을 해야 합니다

샘플링을 할 경우 "재현성"이 제일 중요합니다. 다시 실행해도 동일한 결과가 나와야 합니다.

Python의 경우 seed 값을 사용해 동일한 결과가 나오도록 유지하고 있습니다. BigQuery엔 시드값 설정을 할 수 없습니다.

RAND() 함수를 사용할 경우 매번 데이터가 달라집니다(재현성의 부재)



# FARM_FINGERPRINT

재현성을 유지하면서 샘플링 할 경우엔 FARM_FINGERPRINT 함수를 사용할 수 있습니다.

FARM_FINGERPRINT 함수는 해시 함수입니다. 특정 문자열을 입력으로 받으면 숫자로 반환합니다

특정 문자열에서 임의의 문자열(Salt Key라고 부름)을 추가해서 변환합니다

보통 해시 결과로 나온 값을 10으로 나눠서 나머지에 기반해 샘플링하곤 합니다

SELECT
  FARM_FINGERPRINT('1') AS fingerprint1,
  FARM_FINGERPRINT(CONCAT('1', 'kyle')) AS fingerprint2


SELECT
  date,
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay
FROM
  `bigquery-samples.airline_ontime_data.flights`
WHERE
  ABS(MOD(FARM_FINGERPRINT(date), 10)) < 8


만약 해시, 샘플링에 대한 내용이 궁금하다면 Hash 함수를 사용한 AB Test Sampling (opens new window) 글을 추천합니다