inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

revalidateTag 사용 시 ReviewDetail 리렌더링

해결됨

한 입 크기로 잘라먹는 Next.js

revalidateTag를 사용하더라도 결국 Review page가 모두 리렌더링 되는 것으로 보입니다. 이는 자연스러운 동작일까요? 그렇다면,ReviewDetail에서 사용하고 있는 API (책 상세 정보 가져오기)는 굳이 호출될 필요가 없는데 추가 호출이 되는 것 아닐까요? 이런 상황에서 revalidateTag를 사용하는 게 좋은 방법이 맞는지 궁금합니다!

  • react
  • typescript
  • next.js
sunwon lee 댓글 3 좋아요 0 조회수 193

sum 사용시 numeric_only=True

미해결

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요 선생님, 새소식에 이제 sum 사용시 numeric_only=True 작성이 필요하다고 했는데 sum을 사용하는 모든 항목에서 아래와 같이 사용하면 되는건가요? sum(numeric_only=True) 간단하게 합계를 구할때도 .sum(numeric_only=True)로 작성을 해야하나요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김응룡 댓글 2 좋아요 0 조회수 173

초심자의 향후 학습방향에 대해 조언을 듣고 싶습니다~!

해결됨

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

2-5. 문서의 필드목록 및 필드 값 취득하기 강의 중 아래의 내용과 관련입니다. 이후 과정들은 배우고 익히는 데 시간이 많이 걸리지만, 그리 효용성이 높지 않은, 비교적 특이한 케이스에 사용되는 코드들이기 때문입니다. 그래서, 여기까지 읽기를 마치고 여러분의 업무를 하나씩 자동화해보시다가 한/글 누름틀과 셀필드로는 해결되지 않는 문제를 만나셨을 때 다시 찾아오셔서 이후 과정을 이어 읽어주시기를 권장드립니다. 라고 말씀하셨는데요. 즉, 정주행 독파 보다는 발췌독을 통한 학습을 권장하시는데.. 제가 궁금한 점은 이렇게 발췌독이 가능한가가 궁금합니다. 무슨 말이냐면, 2-5 강의까지 오는데만도 저로서는 상당히 어려웠습니다. 이해 안되는 것들을 여러 번 다시 보면서 고민해 보니 지금은 그래도 1-1 ~ 2-5 강의 까지의 내용은 어느정도 이해할 수 있게는 된 거 같습니다. 막혔던 부분이 그 이후의 강의 내용을 통해 해소되는 것도 여러 번 있었던 거 같습니다. (순차적으로 들어도 이해될 수 있는 순서로 강의 내용이 배치된다면 더욱 좋을 거 같다는 의견을 조심스레 드려 봅니다.) 아무튼 어떤 것을 이해해야 그 보다 더 복잡한 것을 이해할 수 있고 이런 식의 느낌을 받는데요. 더 어려운 기법까지 배워보고는 싶은데.. 제 수준에서는 발췌독으로 필요한 부분만 찾아서 듣는 것 만으로 이해가 가능할지 모르겠어서요. 여기서 강의해 주신 더 어려운 기법을 배우고자 하는 코딩 초심자에게도 정주행 보다도 발췌독을 권장하실까요? 두서 없는 질문이지만, 배움의 욕심은 많고 실력은 부족한 초심자에게 일코님은 어떤 조언을 주실지 들어보고 싶습니다. 거북이 같이 왔지만 2-5까지 오고 또 그 과정의 코드들이 실행되는 경험을 한 게 정말 즐거웠고 감사드립니다. 오래 걸리겠지만 실력을 더 높이고 싶습니다!

  • python
  • 한컴오피스
  • 레벨업
learner 댓글 1 좋아요 1 조회수 107

가설검정 유의수준

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요, 혹시 가설검정 (ttest, correlation, anova) 에서 유의수준 0.05가 아닌 0.01, 0.10 등으로 수정하고 싶을 경우 어떤 파라미터를 추가하면 될지 문의드립니다.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김선혁 댓글 2 좋아요 0 조회수 107

메시지 브로커

해결됨

실전! FastAPI 활용(비동기)

안녕하세요, Redis Pub/Sub 수강 중 위와 같이 메시지 브로커에 문제가 있는 것 같은데, 백엔드 지식이 부족해서 정확히 어떤 부분에서부터 원인을 찾아야할지 모르겠습니다. 서버/컨테이너 재시작 해봤는데 동일한 걸로 봐서 다른 문제인 것 같아서 도움 요청드립니다. https://github.com/wozlsla/fastapi-async/blob/prac/src/shared/message_broker.py

  • python
  • FastAPI
  • websocket
  • asyncio
  • pubsub
짐니 댓글 2 좋아요 0 조회수 139

insert into 구문

미해결

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

insert into 구문 따라하면서 익히고 있는데 결과값이 선생님과 상이하게 나와서 질문드려요 ㅜㅜ 어디서 뭘 잘못하고 있는 걸까요...? 그리고 char이랑 varchar이 뭔지 자세하게 설명해 주실수 있으실까요...?

  • sql
  • mysql
  • oracle
  • dbms/rdbms
  • mssql
iliili8717 댓글 2 좋아요 0 조회수 200

6-1 sort_values를 통해 눈으로 확인한 후 print문으로 정답을 도출해도 될까요?

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

# sort_values를 통해 눈으로 확인한 후 print문으로 정답을 도출해도 될까요? a=pd.to_datetime(df['출동시간']) b=pd.to_datetime(df['도착시간']) df['seconds']=(b-a).dt.seconds df.groupby('소방서')['seconds'].mean().sort_values(ascending=False) print(round(4839.533333/60))

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
ienna02 댓글 2 좋아요 0 조회수 130

PDF 자료 문의

미해결

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

안녕하세요 선생님, 강의 잘 듣고 있습니다. 그런데 혹시 강의자료를 PDF로 전달 받을 수 있을까요?

  • sql
  • mysql
  • oracle
  • dbms/rdbms
  • mssql
iliili8717 댓글 2 좋아요 0 조회수 175

수강 연장 문의

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요~ 수강이 11월 25일 만료인데 11월 30일까지 연장 가능할지 문의드립니다. seraut@naver.com

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
모레 댓글 2 좋아요 0 조회수 100

한가지 방법으로 풀기 오류

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

ValueError : The feature names should match those that were passed during fit. Feature names unseen at fit time: Feature names seen at fit time, yet now missing: 원핫인코딩 후 타겟 설정후 한가지 방식으로 풀기와 동일하게 진행했는데 pred = model . predict ( test ) 위와 같은 문제가 발생되는데 이유가 무엇일가요? 실제시험때는 문제없었거든요 원인 및 답변 방안 문의드립니다 train=pd.get_dummies(train) test=pd.get_dummies(test) from sklearn.model_selection import train_test_split target=train.pop( 'TotalCharges' ) X_tr, X_val, y_tr, y_val = train_test_split(train,target,test_size= 0.2 ,random_state= 0 ) print (X_tr.shape, X_val.shape, y_tr.shape, y_val.shape) from sklearn.ensemble import RandomForestRegressor model=RandomForestRegressor(random_state= 0 ) model.fit (X_tr,y_tr)

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
FU 댓글 2 좋아요 0 조회수 248

작업형 2 모의고사 3에서 평가 값이 강의내용이랑 달라요

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

강의 내용 그대로 코딩했는데 평가 값이 다를 수 있나요? 강의에서는 xgb에서 max_depth 값을 키울수록 평가값이 커졌는데 제가 했을 땐 값을 키울수록 평가결과가 작아져서요

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
juji0318 댓글 2 좋아요 0 조회수 132

[빠짝스터디 4주차] 최종 과제

해결됨

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

노션 링크 첨부합니다. https://focapa.notion.site/4-141094a2b89980b080c6e19f8b5c4a48?pvs=4

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
아더 댓글 1 좋아요 0 조회수 191

[빠짝 스터디 최종 과제] 6-1의 최종 과제

해결됨

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

https://www.notion.so/yijin87/Foodie-4-1430181a6e9b808c9426fb5475909a23?pvs=4 노션링크로 대체합니다.

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
김세현 댓글 1 좋아요 0 조회수 143

[빠짝스터디 4주차 과제] 강의 6-1의 최종 과제

해결됨

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

노션으로 작성하여 링크 첨부합니다. https://sapphire-spade-aa6.notion.site/1435677c375480a997e3d8bf961008dd

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
정가인 댓글 1 좋아요 0 조회수 126

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

해결됨

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

6주차 과제 - 1) Weekly Retention을 구하는 쿼리를 바닥부터 스스로 작성해보세요 with base as ( select distinct user_pseudo_id , event_name , date(datetime(timestamp_micros(event_timestamp),'Asia/Seoul')) AS event_date from advanced.app_logs where event_date between '2022-08-01' and '2022-11-01' ) , retention_base as ( select distinct date_trunc(event_date, week(monday)) as event_week , min(date_trunc(event_date , week(monday)) ) over(partition by user_pseudo_id order by event_date)as first_week , user_pseudo_id from base ) , middle as ( select event_week , first_week , date_diff(event_week, first_week, day) as diff , user_pseudo_id from retention_base ) , final as ( select diff , count(distinct user_pseudo_id) as user_cnt from middle group by all ) select diff , first_value(user_cnt) over(order by diff asc) as first_visit_users , user_cnt , round((user_cnt/first_value(user_cnt) over(order by diff asc)), 2) from final - 2) Retain User를 New + Current + Resurrected + Dormant User로 나누는 쿼리를 작성해보세요. --한달내 유저가 얼마나 많은 이벤트를 발생시키는지? --지속적으로 사용한다의 정의를 이벤트를 고려할 것인지 아니면 방문만 볼것인지 신규 유저(New) : 제품을 처음 사용하는 유저 --각 달에 첫 로그를 남긴 유저 기존 유저(Current) : 제품을 지속적으로 사용하는 유저 --한달내에 복귀 유저(Resurrected) : 과거에 사용 -> 비활성 -> 다시 제품을 사용한 유저 휴면 유저(Dormant) : 일정 기간 제품을 사용하지 않은 비활성화 사용자 --해당 주 이외에 - 3) 주어진 데이터에서 어떤 사람들이 리텐션이 그나마 높을까요? 찾아보세요 --함께 고민해보면 좋을 가이드라인 - 휴면 유저를 어떻게 복귀 유저로 부활시킬 수 있을까? - 어떻게 신규 유저를 계속 늘릴 수 있을까? - 기존 유저가 감소하지 않으려면 어떻게 해야할까? - 4) Core Event를 “click_payment”라고 설정하고 Weekly Retention을 구해주세요 with base as ( select distinct user_pseudo_id , event_name , date(datetime(timestamp_micros(event_timestamp),'Asia/Seoul')) AS event_date , min(date_trunc(datetime(timestamp_micros(event_timestamp),'Asia/Seoul') , week(monday)) ) over(partition by user_pseudo_id order by event_week)as first_all_week from advanced.app_logs where event_date between '2022-08-01' and '2022-11-01' ) , retention_base as ( select distinct -- extract(event_date from week) as event_week , min(date_trunc(event_date , week(monday)) ) over(partition by user_pseudo_id order by event_week)as first_week -- , 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 , user_pseudo_id from base where event_name = “click_payment” ) , middle as ( select event_week , first_week , date_diff(event_week, first_week, day) as diff , user_pseudo_id from retention_base ) , weeks as ( select distinct first_week from base ) , final as ( select diff , min(first_week) as first_Week , count(distinct user_pseudo_id) as user_cnt from middle group by all ) select diff , first_value(user_cnt) over(order by diff asc) as first_visit_users , user_cnt , round((user_cnt/first_value(user_cnt) over(order by diff asc)). , 2) --safe_divide() 사용하면 좋음 from final 1번 문제(15분) 주차별 각 카테고리별 평균 할인율이 가장 높았던 기간과 할인율을 구하는 쿼리를 작성해주세요 단, 날짜 데이터를 YYYY-MM-DD 23:59:39 이런 형태로 변경해주세요 with raw as (select a.user_id , a.item_id , a.actual_price 90 , b.category , b.list_price 100 , (b.list_price-a.actual_price)/ b.list_price as discount , a.transaction_date from transaction_data a left join item_info b on a.item_id=b.item_id ) select FORMAT_TIMESTAMP('%Y-%m-%d 23:59:59', TIMESTAMP(DATE_TRUNC(DATE(transaction_date), WEEK(MONDAY)))) AS week_start_date, -- 주차의 월요일 날짜를 “YYYY-MM-DD 23:59:59” 형식으로 변환 , category , avg(discount) as avg_discount from raw group by 1,2 order 3 desc limit 1 2번 문제(10분) 2024년 1월에 가장 많은 매출을 기록한 카테고리를 구하는 쿼리를 작성해주세요 with raw as (select a.user_id , a.item_id , a.actual_price 90 , b.category , b.list_price 100 , (b.list_price-a.actual_price)/ b.list_price as discount , a.transaction_date from transaction_data a left join item_info b on a.item_id=b.item_id where extract(month from a.transaction_date) = 1 and extract(year from a.transaction_date) = 2024 ) select category , sum(actual_price) as gmv from raw group by 1 order gmv desc limit 1 3번 문제(10분) 유저별 총 구매 금액이 200만원 이상인 유저들이 가장 많이 구매한 카테고리를 찾는 쿼리를 작성해주세요 with raw as (select a.user_id , a.item_id , a.actual_price , b.category , b.list_price , a.transaction_date , sum(a.actual_price) over(partition by user_id) as user_gmv from transaction_data a left join item_info b on a.item_id=b.item_id where ) select category , count(item_id) as cnt_item , count(distinct item_id) as cnt_item , sum(actual_price) as gmv from raw where user_gmv group by 1 order 2 desc --가장많이의 정의가 구매건수라면 order 3 desc --가장많이의 정의가 유니크한 상품수라면 order 4 desc --가장많이의 정의가 gmv 매출이라면 limit 1

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
Luna Chae 댓글 1 좋아요 0 조회수 162

회귀분석 및 사후검정

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요 선생님, 회귀분석 ols(종속변수~독립변수, data=df).fit() 위 코드에서 fit()은 반드시 넣어줘야 하는 부분인가요? 머신러닝이 아닌 회귀분석을 실시할 때 학습(fit)을 시키는 것이 생소하기도 하고... R과 코드가 유사하다고 하셨는데 R에서는 fit()을 사용하지 않았던 것 같아서 조금 헷갈립니다. 챗gpt에 물어보니 fit()을 호출하지 않으면 회귀모델을 정의만 할 뿐 실제 계산이나 검정이 되지 않는다고 설명하던데.. 그럼 여기에서는 fit을 '학습'보다는 '분석'이라고 이해해도 될까요? 분산분석 사후검정(투키와 본페로니)은 df_melt(데이터 재구조화)에서만 작동하나요? 아래와 같이 df['A'] 등 집단을 쭉 입력하면 안되는 것 같아서요 tukey_result = pairwise_tukeyhsd(df['A'], df['B'], df['C'], df['D'], alpha=0.05)

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김진주 댓글 1 좋아요 0 조회수 144

notion 초대 주세요

미해결

코딩테스트 [ ALL IN ONE ]

안녕하세요 강의 수강해서 보고 있는데 노션 워크스페이스 공유가 안오네요 제 이메일은 wowls1227@icloud.com 입니다.

  • python
  • 코딩-테스트
  • 알고리즘
김재진 댓글 2 좋아요 0 조회수 143

[빠짝스터디 4주차 과제] 강의 6-1의 최종과제

해결됨

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

https://ambiguous-serpent-eb1.notion.site/4-6-1-10208045473b80789c2ccd0823506890

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
김성호 댓글 1 좋아요 0 조회수 134

[인프런 빅쿼리 빠짝스터디 3주차] 리텐션 연습문제

해결됨

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

1. Weekly Retention WITH base AS ( SELECT DISTINCT DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), MONTH) AS event_month, user_id, user_pseudo_id, event_name, platform, event_params FROM advanced.app_logs ), user_visit_base AS ( SELECT user_pseudo_id, MIN(event_week) OVER (PARTITION BY user_pseudo_id) AS first_visit_week, event_week AS visit_week FROM base ), user_visit_weekdiff AS ( SELECT first_visit_week, DATE_DIFF(visit_week, first_visit_week, week) AS week_diff, COUNT(DISTINCT user_pseudo_id) AS visit_users FROM user_visit_base GROUP BY ALL ) SELECT first_visit_week, week_diff, visit_users, SAFE_DIVIDE(visit_users, FIRST_VALUE(visit_users) OVER (PARTITION BY first_visit_week ORDER BY week_diff ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS retention FROM user_visit_weekdiff 2. Retain User → New User, Current User, Resurrected User, Dormant User -- 한 달(30일)을 기준으로 구분하였다. -- 신규 유저: 최근 한 달 이내 새로 방문 -- 기존 유저: 최근 한 달 이내 재방문, 그 이전 한달에도 방문 -- 복귀 유저: 최근 한 달 이내 재방문, 그 이전 한달에는 방문 X -- 휴먼 유저: 최근 한 달 이내 재방문 X WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, user_pseudo_id FROM advanced.app_logs ), user_first_last AS ( SELECT user_pseudo_id, MIN(event_date) AS first_date, MAX(event_date) AS last_date FROM base GROUP BY user_pseudo_id ), last_event_date AS ( SELECT MAX(event_date) AS current_date FROM base ), user_activity AS ( SELECT user_pseudo_id, event_date, LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date) AS next_event_date, CASE WHEN DATE_DIFF(LEAD(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date), event_date, DAY) > 30 THEN 1 ELSE 0 END AS dormant_history FROM base ), user_types AS ( SELECT u.user_pseudo_id, u.first_date, u.last_date, led.current_date, MAX(us.dormant_history) AS dormant_history, CASE WHEN DATE_DIFF(led.current_date, u.last_date, DAY) > 30 THEN 'dormant_user' WHEN DATE_DIFF(u.last_date, u.first_date, DAY) <= 30 THEN 'new_user' WHEN MAX(us.dormant_history) = 1 THEN 'resurrected_user' ELSE 'current_user' END AS user_type FROM user_first_last AS u CROSS JOIN last_event_date AS led LEFT JOIN user_activity AS us ON u.user_pseudo_id = us.user_pseudo_id GROUP BY u.user_pseudo_id, u.first_date, u.last_date, led.current_date ), first_week_and_diff AS ( SELECT ut.user_type, fw.user_pseudo_id, fw.event_date, DATE_DIFF(DATE_TRUNC(fw.event_date, WEEK(MONDAY)), DATE_TRUNC(ut.first_date, WEEK(MONDAY)), WEEK) AS diff_of_week FROM base AS fw JOIN user_types AS ut ON fw.user_pseudo_id = ut.user_pseudo_id ), user_cnt_by_type_and_week AS ( SELECT user_type, diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY user_type, diff_of_week ), retention_base AS ( SELECT user_type, diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER (PARTITION BY user_type ORDER BY diff_of_week) AS first_user_cnt FROM user_cnt_by_type_and_week ) SELECT user_type, diff_of_week, ROUND(SAFE_DIVIDE(user_cnt, first_user_cnt), 2) AS retention_rate FROM retention_base ORDER BY user_type, diff_of_week 3. retention이 높은 그룹? current user: 최고 0.41 (4~5주차) new user: 최고 0.11 (1,3주차) resurrected user: 최고 0.14 (9~12주차) dormant user: 최고 0.09 (3주차) 리텐션이 그나마 높은 그룹: current user current user, resurrected user 리텐션 분포의 경우 상승세 → 하강세 경향성을 보여 피크를 찍을 때 즈음 어떤 이벤트가 있었다고도 추측할 수 있다. 4. click_payment 이벤트를 중점으로 본 Weekly Retention? WITH base AS ( SELECT DISTINCT DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, event_name, user_id, user_pseudo_id FROM advanced.app_logs WHERE 1=1 AND event_name = "click_payment" ), event_week_and_first_week AS ( SELECT DISTINCT DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id ORDER BY event_date), WEEK(MONDAY)) AS first_week FROM base ), retention_base AS ( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY day_of_week) AS total_user FROM ( SELECT DATE_DIFF(event_week, first_week, WEEK) AS day_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM event_week_and_first_week GROUP BY day_of_week ) ) SELECT day_of_week, ROUND(SAFE_DIVIDE(user_cnt, total_user), 2) AS retention FROM retention_base ORDER BY day_of_week

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
김성호 댓글 1 좋아요 0 조회수 159

[빠짝스터디 4주차 과제] 최종 과제

해결됨

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

SELECT DISTINCT LEFT(FORMAT_DATE('%Y%m%d', event_date), 6) AS login_month, COUNT(DISTINCT user_pseudo_id) as count FROM advanced.app_logs GROUP BY LEFT(FORMAT_DATE('%Y%m%d', event_date), 6) 2022년 8월부터 2023년 1월까지의 MAU를 살펴보니(MAU기준은 로그인 기록), 첫 달인 2022년 8월에는 미진했지만 그 후로 점차 증가하는 것을 볼 수 있습니다. 특히 9월은 8월 대비 2배에 가까운 성장률을 보였고 10월에는 1.5배 이상의 성장률을 보이면서 점차 사용자가 확대되고 있는 것을 알 수 있습니다. WITH base AS ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week, DATE_TRUNC(MIN(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week FROM `advanced.app_logs` ), first_week_diff AS ( SELECT user_pseudo_id, DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week FROM base ), user_counts AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_count FROM first_week_diff GROUP BY diff_of_week ) SELECT diff_of_week, user_count, ROUND(SAFE_DIVIDE(user_count, FIRST_VALUE(user_count) OVER (ORDER BY diff_of_week ASC)), 2) AS retention_rate FROM user_counts ORDER BY diff_of_week; 주 리텐션율을 살펴보면, 첫 주에는 당연히 1%이지만 그 후로 확연히 주마다 접속하는 사용자가 줄고 있습니다. Foodie Express는 아직 Product Market Fit을 발견하지 못한 것으로 보입니다. WITH base AS ( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2022-12-31' -- 데이터 길게보기 ), first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week,first_week, WEEK) AS weeks_after_first_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 ) ), active_users AS( SELECT first_week, weeks_after_first_week, COUNT(DISTINCT user_pseudo_id) AS avtive_users FROM first_week_and_diff GROUP BY first_week, weeks_after_first_week ) SELECT first_week, weeks_after_first_week, avtive_users, FIRST_VALUE(avtive_users) OVER(PARTITION BY first_week ORDER BY weeks_after_first_week) AS cohort_users FROM active_users AS a ORDER BY first_week, weeks_after_first_week; 첫 주에 1,211의 사용자가 있었으나 1주차에 32명으로 급감했습니다 (약 2.6% 유지) 2-8주차에는 비교적으로 안정적이었고, 9주차에서 20주에는 사용자가 좀 더 증가하였습니다. 특히 14주차에 142명으로 가장 많은 사용자가 있었습니다. 이를 살펴보면, 초기에 감소 후에 오히려 사용자 수가 증가하는 패턴을 보이고 오히려 앱을 사용하면 사용할 수록 더 활발하게 앱을 사용하는 것을 알 수 있습니다. 따라서 어떻게든 사용자들을 앱에 유입시켜서 사용하게 만들어야합니다. 특히 주말, 공휴일 또는 음식 주문이 많은 근무 시간 이후에 비활성 사용자에게 정기적인 푸시 알림이나 메시지를 보내면 좋을 것 같습니다. (음식을 많이 시켜먹는 주말이나, 공휴일 또는 퇴근시간때쯤 맞춰서 푸시알림을 준다) 공휴일에 좀 더 사용자가 증가하는 경향을 보이는 것 같은데, 이 때는 사용자 유입이 많으므로 소액 할인 쿠폰을 제공하는 것이 효과적일 것이라고 판단됩니다. 무엇보다도 정기적인 알림을 통해 앱 사용 습관을 들이는 것이 중요해 보입니다!

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
hayeonkimmie 댓글 0 좋아요 0 조회수 192

인기 태그

인프런 TOP Writers

주간 인기글