inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

[빠짝스터디 3주차 과제] 리텐션 연습문제

해결된 질문

138

Sunny

작성한 질문수 4

0

1) Weekly Retention을 구하는 쿼리를 바닥부터 스스로 작성해보세요

WITH base AS (
  SELECT
    DISTINCT
      user_id,
      user_pseudo_id,
      event_name,
      DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime,
      DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul")) AS event_date
  FROM `advanced.app_logs`
), first_week_and_diff AS (
  SELECT
    *,
    DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week
  FROM (
    SELECT
      DISTINCT
        user_pseudo_id,
        DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week,
        DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week
    FROM base
  )
)

SELECT
  diff_of_week,
  COUNT(DISTINCT user_pseudo_id) AS user_cnt,
  ROUND(SAFE_DIVIDE((COUNT(DISTINCT user_pseudo_id)), (FIRST_VALUE(COUNT(DISTINCT user_pseudo_id)) OVER(ORDER BY diff_of_week))), 3) AS retention
FROM first_week_and_diff
GROUP BY diff_of_week
ORDER BY diff_of_week

2) Retain User를 New+Current+Resurrected+DormantUser로 나누는 쿼리를 작성해보세요.

3) 주어진 데이터에서 어떤 사람들이 리텐션이 그나마 높을까요? 찾아보세요

4) Core Event를 “click_payment” 라고 설정하고 Weekly Retention을 구해주세요

WITH base AS (
  SELECT
    DISTINCT
      user_id,
      user_pseudo_id,
      event_name,
      DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime,
      DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul")) AS event_date
  FROM `advanced.app_logs`
), first_week_and_diff AS (
  SELECT
    *,
    DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week
  FROM (
    SELECT
      DISTINCT
        user_pseudo_id,
        DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week,
        DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week
    FROM base
  )
)

SELECT
  diff_of_week,
  COUNT(DISTINCT user_pseudo_id) AS user_cnt,
  ROUND(SAFE_DIVIDE((COUNT(DISTINCT user_pseudo_id)), (FIRST_VALUE(COUNT(DISTINCT user_pseudo_id)) OVER(ORDER BY diff_of_week))), 3) AS retention
FROM first_week_and_diff
GROUP BY diff_of_week
ORDER BY diff_of_week

sql Google-Analytics firebase google-sheets bigquery

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. Sunny님께서 주신 질문에 대한 답변을 드리겠습니다. 리텐션 분석을 수행하면서 생기는 다양한 문제와 SQL 쿼리 작성에 대한 고민이 담겨 있는 것 같아요.

Weekly Retention 쿼리 작성

Weekly Retention 쿼리를 작성하셨네요. 이 쿼리는 사용자의 첫 주차와 현재 주차 간의 차이를 계산하여 각 주차의 리텐션을 구하는 핵심 로직을 담고 있습니다. 이 쿼리는 DISTINCT 키워드를 사용하여 중복 사용자 ID를 제외하고 계산하는 것이 중요하며, 리텐션 계산 시 SAFE_DIVIDE 함수를 사용해 오류를 방지하는 것도 좋은 방법입니다.

하지만 FIRST_VALUE(COUNT(DISTINCT user_pseudo_id)) OVER(ORDER BY diff_of_week) 부분은 쿼리에서 오류가 발생할 수 있어요. 적절한 COUNT 함수의 사용은 필요하지만, OVER 절 안에서 집계 함수를 바로 사용하는 것은 올바르지 않습니다. 대신 COUNT의 결과를 서브 쿼리에 따로 계산한 후 사용하는 접근이 필요합니다.

User 유형 분류

유저를 New, Current, Resurrected, Dormant로 나누는 것은 복잡할 수 있지만, 각 기준을 명확히 정의해 두는 것이 중요합니다. New는 첫 방문한 유저, Current는 최근 6주 내 재방문, Resurrected는 7주 이상 경과 후 6주 내 재방문, Dormant는 7주 이상 경과하면서 재방문 없는 유저로 구분하셨습니다. 이러한 기준을 기반으로 데이터를 분류하며, 시각화 자료를 통해 각 유형의 수를 비교 분석하면 좋습니다.

Core Event “click_payment” 기준 Weekly Retention

마지막으로 “click_payment” 이벤트를 기준으로 Weekly Retention을 계산하고 있습니다. 이를 위해 필터를 [WHERE event_name = 'click_payment']로 추가하는 것을 잊지 마세요.

유사 질문 및 관련 답변

이 주제와 유사한 질문에 대한 답변들이 인프런에 있습니다. 예를 들어, “3-7 리텐션 SQL 쿼리 작성하기 연습 (Weekly, Monthly)”“3-7. Weekly 리텐션 쿼리 작성 및 질문” 같은 답변들을 참고하시면 도움이 될 것입니다. 이러한 답변들은 쿼리의 가독성과 효율성, 그리고 쿼리 작성 시 주의할 점을 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최종 과제 제출

0

82

3

BigQuery 활용편 18강 질문있습니다!

0

84

1

리텐션 공부하다가 궁금한게 생겨 질문드립니다

0

83

2

안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다

0

75

2

biquery 테이블 생성 오류 이슈

0

55

2

동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다

0

73

2

[과제] 퍼널 PIVOT 테이블 작성하기

0

67

2

array 등

0

63

2

N day 리텐션 쿼리 관련 질문

0

63

2

이동평균 계산 시 order by 기본값은 뭔가요?

0

69

2

윈도우 연습문제 1번 질문

0

65

1

user_id에 NULL이 나오는데 정상인가요?

0

72

2

3-13 리텐션 과제 제출

0

94

2

최종 과제 제출

0

130

3

weekly retention 구하기 과제

0

90

2

1-9. 피벗 쿼리 작성

0

81

2

app_logs 테이블 생성 문제

0

73

2

Weekly Retention 구하기 완성하였습니다.

0

77

2

[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료

0

106

2

3-7 Weekly, Monthly Retention 쿼리 작성

0

92

2

정성 데이터 분석 방법 문의

0

165

1

최종 과제 제출

0

108

3

1-6 예시 문제 풀이

0

69

2

최종과제 제출

0

145

2