[BigQuery] 다시 활성화된 사용자 행동 변화 분석을 위한 사전 준비 질의

1946 단어 BigQuery
같은 바퀴의 재발명을 3번이나 했다고 생각해서 Qiita에 방법을 남겼어요
구상 독자: 미래의 자신

하고 싶은 일


잠시 사용하지 않았지만 다시 사용하기 시작한 사용자의 행동은 이전과 달라졌나요?의 통계 정보
가정, 서비스 특성, 로그 디자인과 사용 규약에 따라 어떤 변화가 달라졌는지 알고 싶거나 조사하고 싶기 때문에 빅Query의 SQL에는'동일한 사용자 내에서 이전과 이후를 구분하는 기간'의 SQL만 남는다.

여기


일반적인 용어를 모르기 때문에, 여기서 자신의 흐름의 정의를 정리한다.
Phase(N): 이 서비스를 열심히 사용하는 동안.활동 기간이란 일정 기간 동안 비워둔 후 여러 번 활성화된다고 가정하기 때문에 N번째 활동 기간에 PhaseN을 쓴다.
Phase와 Phase 사이에 있습니다.휴면기간이란 통상적인 의미와 달리 미래에서 볼 때 다시 활동을 시작할 줄 아는 기간을 가리킨다
그림에서 보듯이 바로 이런 느낌이다.

행동 로그:time(Date형, 분할표에 자주 사용되는 구역), id(개인의 정보, 장치의 ID나 쿠키의 값 등을 식별하는 데 사용되는 값), action(흥미로운 행동은 보통이다. 실제로는 여러 개가 있어야 한다)의 형식으로 모든 action에 저장된 일지에 빅Query(event 표)에 저장됩니다.
다시 말하면 "span은 일정 간격 이상(약 1개월 정도)에서 행동일지를 id와 Phase로 나누어 동작을 분석한다"는 것이다.

SQL 샘플


WITH
  ordered_action AS (
    SELECT
      *,
      ROW_NUMBER() OVER (PARTITION BY id ORDER BY time DESC) as ordered #idごとにaction=hogeが発生した順番を付与
    FROM
      dataset.event
    WHERE
      action='hoge'
  ),

  span_action AS (
    SELECT
      a.*,
      CASE WHEN DATE_DIFF(time, time, DAY) > 28 THEN 1 ELSE 0 END as span # Phaseの最初はspan=1になる。ちなみにMONTH>=1にすると 1/31~2/1でもtrueになるので注意
    FROM
      ordered_action a
    LEFT OUTER JOIN #外部結合にしないと最初のログが消える
      ordered_action b
    ON
      a.id=b.id
      AND
      a.ordered+1=b.ordered #ここの同一テーブルでJOINの処理のサンプルがなかなか見つけられずに車輪の再発明を繰り返している
  ),

  phase_action AS (
    SELECT
      *,
      SUM(span) OVER (PARTITION BY VISID ORDER BY DATE_TIME ROWS UNBOUNDED PRECEDING) as phase #cumsumすることでpahseがインクリメンタルされる
    FROM
      span_action
)

SELECT
  id,
  pahse,
  count(*) #action hogeの数を数えてるだけ。ここまでくれば真にやりたいことに合わせて煮るなり焼くなりできるはず
FROM
  phase_action
GROUP BY
  id, phase

좋은 웹페이지 즐겨찾기