묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차 과제] 강의 6-1 최종과제
제품 자체는 앱의 기본 flow만 갖춰진 상태다.앱 스플래시 - 로그인 - 홈 진입 후검색 / 즐겨찾기 / 주문내역 / 카테고리 페이지를 볼 수 있고restaurant -> food_detail -> cart -> payment -> order_success로 이어지는 funnel을 갖고있다. WITH login_data AS ( SELECT DISTINCT user_pseudo_id, FORMAT_DATE('%Y-%m-01', event_date) AS login_month FROM advanced.app_logs WHERE event_date BETWEEN '2022-03-01' AND '2023-01-31' ) SELECT login_month, COUNT(DISTINCT user_pseudo_id) FROM login_data GROUP BY login_month ORDER BY login_month MAU를 계산해보면,7,500에서 시작하여 23,373까지 성장했다.23년 1월 데이터는 절반 정도까지만 있으므로, 지속적인 성장세를 보여주고 있다고 판단할 수는 있겠다.하지만 런칭 후 +2달 이후로는 계속 진전 없는 모습을 보여준다. 배달 앱이기 때문에, 평일-주말에는 다른 접속률을 보여줄 것이다. 그러므로 weekly retention 지표를 활용한다.WITH base AS( SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2022-11-03' AND event_name = 'click_payment' ) , dates AS( 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 ) , first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, week) AS diff_of_week FROM dates ) , user_counts AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ORDER BY diff_of_week ) , first_week_user_count AS ( SELECT diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week) AS first_week_user_cnt FROM user_counts ) SELECT *, SAFE_DIVIDE(user_cnt, first_week_user_cnt) AS retain_rate FROM first_week_user_count weekly retention으로 살펴보면, 첫 주에 1%의 고객이 남고 그 후로는 어느정도 플래튜가 형성되는 모습이다. 따라서 아직은 PMF를 찾지 못했다고 할 수 있다.그렇다면 재접속을 하는 유저는 그렇지 않은 유저와 어떻게 다를까? 총 기간동안의 퍼널 이벤트 수는 아래와 같다.WITH base AS ( SELECT event_date , event_timestamp , event_name , user_id , user_pseudo_id , platform , MAX(IF(event_param.key = 'firebase_screen', event_param.value.string_value, NULL)) AS firebase_screen , MAX(IF(event_param.key = 'session_id', event_param.value.string_value, NULL)) AS session_id FROM `advanced.app_logs` CROSS JOIN UNNEST(event_params) AS event_param WHERE event_date BETWEEN '2022-08-01' AND '2023-01-31' GROUP BY ALL ) , filter_event_and_concat_event_and_screen AS ( SELECT * EXCEPT(event_name, firebase_screen, event_timestamp) , DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime , CONCAT(event_name, '-', firebase_screen) AS event_name_with_screen FROM base WHERE event_name IN ('screen_view', 'click_payment') ) SELECT event_name_with_screen , CASE WHEN event_name_with_screen = 'screen_view-welcome' THEN 1 WHEN event_name_with_screen = 'screen_view-home' THEN 2 WHEN event_name_with_screen = 'screen_view-food_category' THEN 3 WHEN event_name_with_screen = 'screen_view-restaurant' THEN 4 WHEN event_name_with_screen = 'screen_view-cart' THEN 5 WHEN event_name_with_screen = 'click_payment-cart' THEN 6 ELSE NULL END AS STEP_NUMBER , COUNT(DISTINCT user_pseudo_id) AS cnt FROM filter_event_and_concat_event_and_screen GROUP BY ALL HAVING step_number IS NOT NULL ORDER BY step_number 홈에서 food category를 선택하는 유저의 비율은 65%카테고리에서 식당을 고르는 유저의 비율은 91%식당에서 장바구니에 담는 유저의 비율은 58%장바구니로부터 결제하는 유저의 비율은 67% 정도이다.일단 탐색을 시작하면 카테고리, 식당에 대해 잘 찾아보는 편이고,장바구니에 담아 결제까지 하는 것에 대해서는 event 수가 급감한다. 재접속을 하는 유저들의 퍼널을 페이지 기준으로 나눠보았다.WITH base AS( SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, user_pseudo_id FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2023-01-31' ) , dates AS( 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 ) , first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, week) AS diff_of_week FROM dates ) , retain_user AS ( SELECT DISTINCT user_pseudo_id FROM first_week_and_diff WHERE diff_of_week >= 1 ) , base2 AS ( SELECT event_date , event_timestamp , event_name , user_id , user_pseudo_id , platform , MAX(IF(event_param.key = 'firebase_screen', event_param.value.string_value, NULL)) AS firebase_screen , MAX(IF(event_param.key = 'session_id', event_param.value.string_value, NULL)) AS session_id FROM `advanced.app_logs` CROSS JOIN UNNEST(event_params) AS event_param WHERE event_date BETWEEN '2022-08-01' AND '2023-01-31' AND user_pseudo_id IN ( SELECT user_pseudo_id FROM retain_user ) GROUP BY ALL ) , filter_event_and_concat_event_and_screen AS ( SELECT * EXCEPT(event_name, firebase_screen, event_timestamp) , DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime , CONCAT(event_name, '-', firebase_screen) AS event_name_with_screen FROM base2 WHERE event_name IN ('screen_view', 'click_payment') ) SELECT event_name_with_screen , CASE WHEN event_name_with_screen = 'screen_view-welcome' THEN 1 WHEN event_name_with_screen = 'screen_view-home' THEN 2 WHEN event_name_with_screen = 'screen_view-food_category' THEN 3 WHEN event_name_with_screen = 'screen_view-restaurant' THEN 4 WHEN event_name_with_screen = 'screen_view-cart' THEN 5 WHEN event_name_with_screen = 'click_payment-cart' THEN 6 ELSE NULL END AS STEP_NUMBER , COUNT(DISTINCT user_pseudo_id) AS cnt FROM filter_event_and_concat_event_and_screen GROUP BY ALL HAVING step_number IS NOT NULL ORDER BY STEP_NUMBER 한번이라도 재접속한 사람들은 웰컴 -> 홈을 넘어가는 비율이 거의 100%에 가깝다. 아무래도 login이란 허들때문일 것이다.그렇다면, login 허들을 좀 더 잘 넘기 위해 제품 온보딩을 잘 해줘야하지 않을까?확실히 프로덕트에 대한 차별점 설명이 부족하므로, 이 부분을 강화하여 '어떤 core value를 가진 배달앱'인지를 어필할 필요가 있겠다. 그리고 홈에서 카테고리로 넘어가는 비율이 73%,카테고리에서 식당 페이지로 92%,식당 페이지에서 장바구니로는 55%장바구니로부터 결제까지 이어지는 비율은 67%이다.재접속한 유저들은 홈에서 food category를 선택하는 데에 좀 더 높은 전환율을 보였다.그렇다면 이들이 다른 유저들 대비하여 추가적으로 느낀 이점은 무엇일지 고민할 필요가 있을 것이다. 재접속 기준만으로는 차이가 별로 없어서click payment 경험이 있고 재접속을 한 유저들의 퍼널을 구해봤다. 비교적 매우 높은 전환율을 보여준다.특히 카테고리를 굳이 선택하지 않고 바로 식당을 선택하는데,카테고리가 비교적 메리트있게 설계되지 않아서 그런 것인지? 라는 생각이 든다.이벤트 데이터가 더 있었다면, 식당으로 전환되는 페이지들의 비율을 살펴보면서 홈의 비중이 높지 않을까 하고 보겠지만, 지금은 그냥 그렇지 않을까 하고 추측해본다. 확실히 구매를 했고, 2번 이상 접속한 유저들의 퍼널 전환율은 매우 좋다.해당 제품이 직접 보기에는 배달 주문에 필수적인 기능들만 있지만,해당 1만 4천명 정도의 유저들이 느끼는 분명한 메리트가 있을 것이다. 그 메리트로부터 core value를 찾고, 고객들이 좋아하는 기능 중심으로 발전시켜 나가야할 것이다.
-
미해결인터랙티브 웹 개발 제대로 시작하기
animation이벤트 질문이요!
window를 ballElem로 변경하면 click했을때 작동을 하지 않는데 이유를 모르겠습니다..!<script> const ballElem=document.querySelector('.ball'); window.addEventListener('click', function(){ ballElem.style.animation='ball-ani 1s 3 forwards'; }); ballElem.addEventListener('animationend',function(){ ballElem.classList.add('end'); }); ballElem.addEventListener('animationiteration',function(){ console.log('반복'); }); </script>
-
미해결스프링 핵심 원리 - 기본편
AppConfig에서 작성한 메서드의 반환타입을 인터페이스로 정한 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 좋은 강의 감사드립니다 ! AppConfig 클래스에서 만든 메서드를 보면public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } private MemberRepository memberRepository() { return new MemoryMemberRepository(); }memberRepository의 메서드의 반환타입이 MemberRepository로 인터페이스를 반환하고 있습니다. 이때 생각해볼 수 있는 점은MemberServiceImpl의 생성자에서 요구하는 파라미터가 인터페이스이기 때문이다라고 볼 수 있는데요, 만약 인터페이스를 반환하지 않고 구현체(MemberServiceImpl)을 반환한다면 어떤 아쉬움이 남을지 고민해보았는데 답이 나오지 않습니다 ㅠㅠ 혹시 인터페이스로 반환하게 되었을 때의 장점과 구현체를 반환하게 되었을 때의 단점을 알 수 있을까요..!?
-
해결됨처음 시작하는 Infrastructure as Code: AWS & 테라폼
라우팅 테이블을 public이랑 private를 나눈 이유를 잘 모르겠습니다.
라우팅 테이블을 public이랑 private를 나눈 이유를 잘 모르겠습니다.라우팅 테이블 자체가 subnet - gateway의 mapping 용도라면 하나의 routing table에 모든 값들을 다 넣는 방식은 잘못됐을 까요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차] 6-1의 최종 과제
과제 관련 노션 링크 첨부합니다!https://www.notion.so/4-6-1-1419f4b04d5380308bbdf4a19394e924?pvs=4
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차 과제] 강의 6-1. 최종과제
4주차 최종과제 노션 링크입니다:) https://salt-baron-5c5.notion.site/4-Foodie-Express-13ea734e64b8801595f8c8c3467d9bc5?pvs=4
-
해결됨카카오 코테 6주 합격! 실전 파이썬 코딩테스트
대기업 코테 난이도
갑자기 든 생각입니다만..백준 기준으로 골드4 정도 되면 무난하다고 하셨는데신입 기준인가요? 경력직 기준인가요?무지몽매한 질문 읽어주셔서 감사합니다;
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
5-3 랜덤포레스트 평가지표 출력 결과 이상
안녕하세요. 작업형 2 모의문제 3 코드 작성후 랜덤포레스트 평가지표 (accuracy, f1_score, roc_auc score) 출력결과가 모두 1.0 으로 나오는데, 혹시 이런 경우가 있나요? (수업에선 0.7~0.8대로 출력) 없다면 문제가 뭐인지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Protobuf Packet 클라이언트 - 서버 설계
서버에서 Protobuf를 사용하고클라이언트에서 예기치 못한 이유로 사용하지 못했을 때주고 받는 Packet.id그리고 그 id에 해당하는 정보(구조체)가 같다면상관 없을 까요?ex)서버 -> S_CHAT : string msg; 구글 프로토버프로 만듬클라이언트 -> S_CHAT : string msg: 일반 구조체로 만듬
-
미해결3D 모델링 입문을 위한 라이노(Rhino) '꿀팁' Part.1
라이노 옵션
이미 단축키 설정을 예전에 해둿어서 그대로 하려고 했는데단축키가 다른부분이 있어서 1-2강에 라이노 옵션 모양을 누르는 부분부터 다시 설정하려고해여 근데 왜 저는 라이노 옵션을 볼 수 있는 톱니바퀴가 없을가요...어디로 가야 옵션들을 볼 수가 있죠 선생님 ㅠㅠ,,,,
-
미해결손에 익는 Next.js - 블로그 만들기
완강하고 질문 드립니다
우선 강의 잘 봤습니다.nextjs와 관련된 질문들이 있습니다. SSR,CRS,SSG,PPR,ISR 등은 만약 실무에서 투입한다면개발자들이 렌더링이 어떻게 되어야한다는 도메인 지식이 있는하에 결정하는건가요?그리고 블로그성 개발 관련 질문입니다.이 블로그라는게 어떻게 개발하고 만드냐는 여러가지 방법이 있겠지만 현 강의 처럼 mdx 파일에 직접 포스트를 기재를 하고 빌드해서 배포하고 올린다? 가 있고, CRUD를 구현해 블로그성 홈페이지를 만드는 방법이 있겠는데 보통 개발자분들은 어떤 방법으로 블로그를 만드는지 궁금합니다. (개인적인 의견으로 답변주심 감사하겠습니다(_ _).그리고 만약 mdx파일로 한다고 하면, md파일을 직접 작성해서 올리는것 말고 티스토리와 일반 블로그같은 UI를 생성해서 mdx파일로 올릴수있는지?도 궁금합니다.
-
해결됨실리콘밸리 빅테크 29개의 실습으로 배우는 시스템 디자인 설계
URL 단축 서비스 시스템 디자인 및 스케일링 질문있습니다.
안녕하세요!강의 마지막 부분의 scaling - partitioning 관련해서 이해가 안가는 부분이 있어서 질문 드립니다. partitioning key를 userId로 했을 때, 장단점에서장점의 '트래픽을 줄일 수 있다'에서 어떤 트래픽을 의미하는지 잘 모르겠습니다. 단점에서도 모든 방문객을 scan해야 한다고 말씀해주셨는데 이 부분도 더 자세한 설명을 해주실 수 있을까요? partition key를 userId로 할 때는 url을 생성하고 관리하는 User의 성능을 높일 때 사용하는걸까요?
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍
널널한 개발자님~ 변수명을 한글로 시도하지 말라고하셨는데요
토스페이먼츠의 어떤 프로젝트에서 일부 변수명은 한글로 작성하는 컨벤션이 존재하는거로 알고있습니다물론 모든 변수를 한글로 하는건 지양하고 영어로 풀어내기 어려운 경우 한글을 사용하는걸로 컨벤션을 작성해놓은거같은데해당 프로젝트가 자바스크립트의 컨벤션이어서 자바랑은 다른건지 궁금합니다~
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring cloud gateway mvc 모델에서 route별 timeout 설정
안녕하세요 선생님. 질문이 있어 남깁니다.spring cloud gateway mvc모델에서 route별 httpclient의 readtimeout, connectiontimeout을 설정하는 방법이 있나요?reactive한 모델에서는 metadata를 이용하여 설정하는 것 같은데, documents를 아무리 뒤져도 mvc모델에서 전역적으로 타임아웃 설정하는 법만 있고, route별 설정하는 법이 없네요.. 어떻게 설정해야할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew 실행 시 다음과 같은 오류가 계속 발생하는데 뭐가 문제일까요?
강의를 보면서 cmd 실행후 helloC:\Users\Desktop\Study\hello-spring\hello-spring> 에서 gradlew build를 실행하면 해당 에러가 계속 뜨네요. 처음엔 다른문제가 뜨길레 윈도우 계정이름도 변경하고, 버전도 확인하고 cmd관리자 권한으로도 실행해봤는데도 계속 이래요. 공부가 하고 싶습니다 좀 도와주세요 너무 답답합니다 ㅠㅠ
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
범주형 변수일 때 formula 질문있습니다
회귀분석 강의에서 범주형 변수가 있을 때 1) 그냥 ols 돌려도 된다2) 원핫인코딩 한 담에 ols 돌려도 된다 라고 말씀 주시는 것 같습니다.근데 또, 다른 강의에선 formula 생성 시 범주형 변수 일 때 C로 감싸라고 하시기도 하셨어서 조금 헷갈리는 것 같습니다. 어떤 차이가 있는지요 ?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차 과제] 강의 6-1의 최종과제
Notion 링크로 대체합니다.https://colney4844.notion.site/4-13e59b98d5db80d6937fc8fbd6e207e6?pvs=4
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
로지스틱회귀분석에서 패널티
로지스틱회귀분석에서 패널티를 줄때 입력 코드는 어떻게 쓰나요? 패널티부과안함일 경우는 그냥 아무것도 안하면 되죠~~~
-
해결됨디지털포렌식 입문자를 위한 디지털포렌식 전문가 2급 실기 시험대비 강의(Encase/Autopsy)
USB 시리얼번호 관련 질문
안녕하세요 USB 관련해서 시리얼번호 작성할 때ex) 1234567891234&0 인 경우,&0까지 작성하는 것이 맞을까요? 아니면 숫자부분만 작성하는 게 맞을까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
rmse
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요sklearn.metrics 안에 root_mean_squared_error이 있던데 이거로 rmse 구하면 안되는건가요?