10년차 데이터 과학자, 데이터 엔지니어, 머신러닝 엔지니어로 근무했으며, 쏘카와 타다에서 데이터 분석, 데이터 엔지니어링 개발, 머신러닝 알고리즘을 개발했습니다.
카일스쿨 유튜브에 데이터 커리어 관련 영상을 올리고 있으며, 어떻게 해야 강의를 수강하신 분들이 회사에서 일을 잘할 수 있을까?를 고민하며 자료를 만들고 있어요.
Google의 GDE(Cloud)로 활동하고 있어요.
카일스쿨 유튜브 : https://www.youtube.com/c/kyleschool
기술 블로그 : https://zzsza.github.io/
인스타그램 : https://www.instagram.com/data.scientist/
대표 컨텐츠 : https://github.com/Team-Neighborhood/I-want-to-study-Data-Science
데이터 과학자가 되기 위해 진행한 다양한 노력들 : https://zzsza.github.io/diary/2019/04/05/how-to-study-datascience/
講義
受講レビュー
- 初心者向けBigQuery(SQL)入門
- ブログのページビュー300万が語る「実用主義の技術ブログの書き方」
- PMのためのデータリテラシー(プロダクトデータ分析)
投稿
Q&A
3-13 리텐션 과제 제출합니다
mm j님 안녕하세요!문제 푸느라 고생하셨습니다.1, 4번 문제는 기존 쿼리를 약간만 수정하면 되는 문제인데 잘 풀어주셨네요. 1번 해석은 제가 했던 것을 그대로 하신거라 추가적으로 다른 해석도 생각해보셔요! 4번도 해석해주신 내용 토대로 그럼 무엇을 할 수 있을까?까지 생각해보시면 더더 좋을 것 같아요2, 3번에 대해 피드백을 드려볼게요2번평균 접속 일수로 보신 것 좋아요!! 기준을 바로 정하지 않고 데이터로 보는 것 좋아요팁으로 이런 데이터를 볼 때 Daily, Weekly, Monthly로 바꾸는 것이 어렵진 않을 수 있으니 마지막에 데이터를 한번 보시는 것도 추천해요(Weekly로 어떻게 변화하는지)쿼리에서 first_month를 계산하고 사용하지 않네요. 안쓴다면 지워도 동일해요CASE 마지막 조건 != 1 AND lag_month IS NOT NULL 이 부분은 앞에서 IS NULL 조건을 이미 사용해서 그냥 ELSE 'resurrected' 라고 해도 충분해요"Current가 꾸준히 증가"는 맞지 않는 것 같아요1월에 6565 → 4186으로 줄었고, 이런 경우 1월 모든 데이터가 들어갔나 확인해서 일부만 들어갔으면 해석을 제외했다고 써두면 좋아요. Current와 Dormant를 볼 때 절대 수도 볼 수 있지만 비율로도 볼 수 있어요. "지난 달 활성 유저 중 이번 달 안 온 사람"이 Dormant라서 Current/(Current+Dormant)가 월간 리텐션과 비슷하게 됩니다9월 18%, 10월 33%, 11월 32%, 12월 34%는 유지가 어렵다보다는 1/3 수준에서 안정화되었다는 서술이 더 정확합니다신규가 많을수록 다음 달 Dormant 증가는 거의 당연한 결과일 수 있어요. 지난 달 활성 유저가 늘어나면 Dormant 후보도 많아지게 됩니다신규 유저의 초기 이탈이 높다고 말하려면 Dormant를 직전 상태가 New인지, Current, Resurrected였는지 나눠서 이탈률을 비교해야 해요첫 달 결제 안하명 Dormant라는 가설은 좋은데, 액션이 바로 나와요. 쿠폰 지급을 꼭 해야 한다는 이유를 추가로 보강을 하는 것이 필요해요(만약 데이터가 없다면, 그 액션 말고 할 수 있는 것을 떠올려 보시는 것을 추천해요)결제한 유저와 안 한 유저의 리텐션 차이가 결제 때문에 남았다고 하기엔 어려워요. 원래 남은 사람이 결제했을 수도 있거든요. 쿠폰 효과 같은 것은 AB Test로 확인해야 합니다AB Test나 논리적 사고 흐름은 제 데이터 리터러시 강의를 보시면 더 도움이 될 것 같아요Action Item을 조금 더 자세히 써보시면 좋을 것 같아요. 플랫폼별 Current 유저 비율을 분석하여 => 그러면 플랫폼 정보는 이미 있기에 바로 해볼 수 있겠지요? 그럼 그 데이터까지 포함해서 가져오면 더 좋습니다(이게 3번이랑 이어질 것 같은데 그러면 문서에 별도 레포트 첨부함 이렇게 써주셔요)Current 유저의 공통 특성 파악 => 이것도 파악을 하는 것까지 해야 합니다. 지금 액션 아이템에서 2-3번째는 가설만 떠올렸을 뿐 실제 데이터 분석이 없는 상황이에요3번가설을 처음 5개 나열하고 하나씩 검증한 구조 좋습니다! 기각된 가설도 남긴 부분도 좋아요!플랫폼까지 확인해서 두 그룹 비교도 좋아요3번 가설을 채택하기엔 근거가 약하긴 합니다. 두 그룹의 차이가 소수점 둘째 자리에서 0.01 차이나는 주가 몇 개 있을 뿐이거든요. 채택과 기각을 말하려면 각 그룹의 유저 수를 봐서 실제 몇 명인지도 봐야 합니다. 지금은 비율만 있지요10주차부터 벌어진다고 작성되어 있는데 10주차는 0.09, 0.07이지만 11주차는 0.07, 0.07로 동일합니다 .한 지점의 튐은 경향이 아니긴 합니다. 뒤로 갈수록 n 자체의 숫자가 줄어서 흔들릴 수도 있어요1, 2번은 유의미한 차이가 없다라고 해주셨는데 통계적 검정을 한 것이 아니기 때문에 차이가 거의 없다라고 쓰는 것이 더 정확합니다. 유의미는 통계 용어라 통계와 같이 나와야 합니다쿼리에서는 아래 쿼리가 신경쓰이네요MIN(event_date) OVER(PARTITION BY user_pseudo_id, platform) : 한 유저가 두 플랫폼을 쓰면 first_week이 갈라집니다! 이런 케이스가 현업에서 많아서 파티션 안에 플랫폼을 넣을지도 데이터 보고 결정해야 합니다문제 푸느라 고생하셨습니다!!!
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 52
Q&A
1번 문제 질문
안녕하세요.선호님이 말씀하신 논리로 생각할 때 catch_date 컬럼을 사용해도 괜찮고, 이 문제는 좀 더 현업스럽고 의도가 있는 문제라고 생각해주시면 됩니다. 선호님의 생각 흐름도 매우 좋습니다!회사에서 데이터 조직이 아닌 다른 팀에서 한국 시간 기준으로 데이터 뽑아달라고 하는 경우가 있는데, 그 때 데이터에 대한 이해가 없어서 질문을 의도와 다르게 하는 경우가 있습니다. 그럴 때 의도를 잘 파악하고, 데이터를 확인하는 것이 데이터를 다루는 사람의 책임입니다.저희가 있는 곳이 대한민국이라 UTC 기준으로 데이터를 요청하지 않을 것이고, 요청자의 의도에 한국 시간으로 뽑아달라는 것이 내포가 되어 있다고 이해해주시면 됩니다
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 42
Q&A
app logs 데이터로 쿼리 연습
유정님 안녕하세요unnest 와 집계함수를 연속적으로 쓰려고 할 때나 unnest+집계함수+having 쓰려고 할 때는 반드시 with문으로 분리해서 사용해야 오류가 안 나는 것 같더라고요. 그러다 보니 쿼리가 길어지는데 더 가독성 좋은 쿼리 작성법이 있을 것 같습니다. ㅎㅎ이 말이 어떤 쿼리에서 발생한 걸까요? 말씀하신 경우가 항상 WITH를 써야 된다는 것은 아닐텐데 쿼리를 어떻게 바꾸셨는지 말씀해주시면 가이드를 드릴 수 있을 것 같아요.그리고 이 문제들은 쿼리 작성도 좋지만, 데이터 결과를 보고 해석을 해보는 경험을 더 추천드려요! 해석을 잘 하는 것이 중요하기에 결과 보고 해석을 어떻게 할지 고민해보셔요(현상을 파악하고 그걸 토대로 가설을 떠올리면 좋아요)
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 57
Q&A
[과제] 연습문제 쿼리 작성했습니다!
유정님 잘 작성해주셨네요!쿼리를 잘 작성해주셨고, basic2 쿼리 안에서 ORDER BY가 필요없어서 삭제해도 좋을 것 같아요ORDER BY는 쿼리문에서 제일 바깥 쿼리 한번에서만 쓰신다고 생각하시면 좋을 것 같아요. ORDER BY라는 것은 모든 값을 확인해야 하거든요(정렬을 하기 위해) 그래서 쿼리 시간이 좀 더 걸리게 됩니다. 그래서 정렬이 필요한 경우엔 제일 바깥 쿼리에서만 써주시면 좋아요
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 50
Q&A
3번 문제 질문!
넵 상관없습니다!! 논리적 구조만 맞으면 됩니다
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 52
Q&A
3-13 리텐션 과제 제출합니다
자유님 안녕하세요!과제하느라 고생하셨습니다. 쿼리에서 1, 4번은 기존 쿼리에서 살짝만 바꾸면 되는거라 해석을 좀 더 깊게 해보길 바라는 문제였고, 2번은 좀 더 복잡한 쿼리를 작성하는 문제, 3번은 실제로 분석까지 하길 희망하는 과제였어요. 1/4번 쿼리는 잘 작성하셨고 2번 쿼리에 대해 리뷰를 드려볼게요2번 문제 쿼리전체적으로 쿼리 잘 작성해주셨어요. 제가 생각하는 흐름과 비슷하게 잘 작성하셨네요다만 컬럼 중 kst가 있는데, 이 컬럼이 이후에 쓰이진 않네요. 이 쿼리를 풀 때는 event_timestamp 개념을 쓰지 않고 event_date만 쓰고 사용해도 충분합니다. 그래서 base에서 바로 daily_event로 만들어서 쓰셔도 될 것 같아요8월 한정해서가 아니라 데이터를 더 늘려서 확인해보셔도 좋을 것 같고, Weekly 기준으로도 계산해보세요! Daily보단 Weekly로 계산해보셔요! 지금 하신 것에서 크게 변하진 않을 것 같아요.LAG 계산하는 부분이 2번 있네요. 한번만 하셔도 될 것 같아요. 아래 쿼리의 LAG 대신 before_last_event 컬럼을 쓰면 되어요. CASE WHEN first_event = event_date THEN "new" WHEN DATETIME_DIFF(event_date, LAG(event_date) OVER (PARTITION BY user_pseudo_id ORDER BY event_date ASC), DAY) 14 THEN "resurrected" ELSE NULL END AS user_typefirst_event, last_event 이 컬럼을 계속 가지고 다니는데 실제로 쓰고 있진 않네요.DATETIME_DIFF를 사용하셨는데 쿼리를 확인하면 DATE_DIFF를 쓰시면 더 명확할 것 같아요(동작은 하지만 DATETIME_DIFF은 TIME에 대한 작업을 할 때 주로 쓰곤 해요)그리고 각 문제를 해석한 것에 대해 의견을 드려볼게요1번 문제그래프 자체는 잘 해석해주셨고(강의에서 다룬 내용) 그 이후에 한단계를 더 나아가면 좋습니다—> 1) 을 개선하는 것이 더 우선적일 것으로 생각됨 1주차 리텐션을 끌어올리면, 1주차 남는 유저 파이가 증가하여 2주차 이후 리텐션이 비슷하게 유지될 것을 고려하더라도 N주차 이상에도 남는 유저가 증가하여 서비스 수익성을 좀 더 확장하기 용이해짐 단, 어느정도 수익성이 안정화되면, 2)에 대한 개선을 진행하여, 남는 유저의 수가 계속 쌓이는 구조가 되도록 해야 장기 서비스의 기반이 될 수 있을 것으로 생각됨위처럼 작성해주셨는데, Action Item은 좀 더 구체적으로 들어가면 좋습니다. 좀 더 구체적으로 분석을 하는 것인데, 예를 들어 1주차에 남은 사람들은 보통 어떤 이벤트를 많이 하는지 살펴보고 그 후 "가설"을 떠올린 후, 가설이 맞는지 확인할 수 있는 데이터를 확인합니다. 어느정도 데이터가 맞는 것이 있다면 구체적인 Action Item을 제시할 수 있습니다2번8월 전반적으로 신규유저(New)는 매일 들어오고, 8월 하순으로 갈수록 우상향하는 추세 다만, 1일만 접속하고 들어오지 않는 유저가 95% 이상으로 리텐션이 무너져 있는 상황으로 복귀유저(resurrected) 상당히 낮음 - dormant 유저 정의: 접속일 이후 14일 동안 접속하지 않는 유저로 8/1 - 8/16, 8/2-8/17 이런식으로 대조해보면 잔존유저가 거의 없음 - current 유저 정의: 접속일 이후 14일 이내에 다시 접속한 유저로 New 유저 유입대비 너무 극소수 - resurrected 유저 정의: dormant 유저 기반에서 재접속한 유저로 굉장히 소수인 상황 → 일평균 95%가 넘는 이탈율을 개선하는 작업이 최우선위와 같이 남겨주셨는데, 현재 데이터 관찰은 잘 하셨고, 이걸 Weekly 기준으로 한번 그려보세요. Resurrected가 움직일 거예요. 데이터가 오르락 내리락이 된다면 '어? 이건 왜 그렇지?"라는 생각을 한 후(가설 떠올리기) 진짜 그런지 데이터를 살펴봐야 합니다. 그런 과정까지 추가해보시면 더 좋을 것 같아요쿼리도 한번 점검해보시고 다시 시각화를 해보셔요3번. 3번의 경우 간단하게 SELECT 한번으로 끝나는 문제는 아니고, 위에서 말씀드린 것처럼 데이터 보고 -> 가설 만들고 -> 살펴보고 해야 합니다. 그 과정에서 이벤트를 1번만 한 사람만 생각하는게 아니라, 여러 이벤트의 조합(검색을 했는데 결제는 안한 사람 등)으로 유저를 나눠보고 그 후에 리텐션 차이를 보는 과정이 필요합니다. 이 문제에 대해서는 조금 더 고민을 해보시는 것을 추천드려요4번.4번의 피드백은 1번과 동일합니다. 구체적으로 더 살펴보시고, 이게 왜 이렇게 나왔을까?를 살펴보시면 좋겠습니다!문제 푸시느라 고생하셨습니다! 계속 고민해보셔요
- いいね数
- 0
- コメント数
- 3
- 閲覧数
- 127
Q&A
실데이터 없이 ga 이벤트 설계를 하는 방법이 없을까요?
..님 안녕하세요!실제 데이터 없이 이벤트 설계를 해보는 것은 100% 정확한 경험은 아니라서, 인프런 AI 인턴이 말한 것처럼 해보시는 것을 추천해요데모 계정은 GA4를 체험하는거라 로그 설계를 하긴 어렵고, 간단한 웹페이지를 AI를 사용해서 개발해보시면 어떨까요?Claude Code나 Codex 등을 사용해 웹페이지를 만들고 거기서 로그 설계를 해서 실시간으로 테스트하며 보고 싶다고 하면 가이드를 줄 것 같아요. 그 과정에서 GA 로그 설계를 기획하고 직접 데이터가 남도록 볼 수 있을 것 같아요!AI 사용이 익숙하지 않으면 제가 만들어 둔 영상 보시면 감을 잡으실 수 있을 것 같아요! (구글 제품을 사용해요)https://youtu.be/yl0zuUg2vDQ?si=PWyYg8t3aKoOF4q2
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 52
Q&A
1-2 battle 테이블 설정 질문 있습니다.
네 데이터의 첫 행에 컬럼 이름들이 있어서 그걸 건너뛴거라 데이터가 잘 저장되었다면 이후 진도 나가셔도 됩니다!
- いいね数
- 0
- コメント数
- 1
- 閲覧数
- 49
Q&A
6-1. 강의 최종 과제 제출합니다.
Kay님 안녕하세요! 과제 고생하셨습니다우선..1. 혼자 스스로 다 하신 과제일까요? 내용을 보니 AI가 느껴지네요(문장/표현에서) AI를 쓰지 않고 수행해야 자신의 경험이 될 수 있으니 혹시 AI를 쓰셨다면 아래 피드백을 고려해서 시도해보셔요. AI를 쓴 것은 자신의 경험이라 하기엔 애매해서 생각하는 과정을 키우기 어렵습니다(면접에서 이런 사고 과정을 결국 다 물어봅니다)현재 분석은 퍼널 데이터와 전체적인 시계열 패턴, 2가지를 사용합니다. 그런데 결과를 보면 인사이트라고 할만한 내용이 없습니다. 잘 정리된 것 같지만 알맹이가 없습니다.왜 그러냐면, 데이터 분석은 간단하게 집계하고 끝나는 일이 아닙니다. 계속 왜 그렇지?라는 생각을 해야 합니다. 이 과정을 논리적 사고라고 부를 수 있고 MECE, Why So/So What? 등으로 전개가 됩니다. 이 부분은 데이터 리터러시 강의에 상세히 나와있습니다. 아마 데이터 리터러시 강의를 수강하지 않으신 것 같은데 데이터 리터러시 강의에서 논리적 사고와 왜 그런가?라는 관점을 익히시면 더 분석을 잘하실 수 있게 될 겁니다. 정적 분석에서 홈 -> 음식 카테고리에서 55.24%가 이탈한다면, 이탈하네?가 끝이 아니라 "어 왜 이탈을 하는걸까?" 라고 생각하며 추가적인 가설을 떠올리고 데이터를 봐야 합니다. 이렇게 추가 가설을 떠올리고 데이터를 더 깊게 보는 것이 분석 과정입니다. 단순히 집계 값만 일차원적으로 보는 것은 분석의 레벨에서 매우 얕습니다.단순히 초기 탐색 피로도가 높다고 하는 것이 아니라, 진짜 그럴까? 왜 그럴까?를 고민해보세요동적 패턴이라고 한 부분도 일자별로만 뿌렸는데, 주차별로도 볼 수도 있고 월별로도 볼 수 있습니다. 그리고 평일과 주말 패턴으로도 쪼개서 볼 수 있고 주말에 좀 더 많이 주문하더라 등, 시간대에 따라 주문하는 패턴이 다르다 등 다양하게 볼 수 있습니다. 이렇게 다양한 관점을 하나씩 다 봐야 자세한 분석이라고 볼 수 있습니다.전략에서 나온 내용은 구체적인 내용이 없습니다. 일차원적으로 이 지표가 부족하니 여기 올려야 한다!만 하는데, 구체적인 방법이 없습니다. 그렇기 때문에 인사이트라고 할만한 내용이 없는 분석 레포트가 되는 것이지요.명절에 결제 스파이크 패턴을 분석하여 타겟 쿠폰 및 프로모션을 정례화한다고 했는데, 이걸 보더라도 스파이크 패턴을 더 추가적으로 해서 Action Item을 구체적으로 제시해야 합니다. 이런 구체적인 내용이 있어야 좋은 분석입니다.정리하면 좋은 데이터 분석이라고 하면 현상을 본 후, 가설을 떠올려서 근거를 찾아 그 가설이 맞다, 아니다를 보여줘야 합니다. 단순한 데이터 해석을 넘어서서 더 자세한 분석을 해보시는 것을 추천합니다
- いいね数
- 0
- コメント数
- 3
- 閲覧数
- 64
Q&A
3-13. 리텐션 연습과제 제출합니다.
Kay님 안녕하세요!문제 푸느라 고생하셨습니다1번은 강의에 이미 답이 있으니 넘어가도 될 것 같고, 2번 쿼리도 큰 구조는 잘 작성하셨어요.다만 ORDER BY에 CASE WHEN을 쓰는 것보단, SELECT에 컬럼을 만들어서 정렬을 하거나 ORDER BY가 없어도 괜찮을 것 같아요. 스프레드시트나 다른 BI에서 어차피 정렬을 하게 됩니다.(이 CASE WHEN에 Dormant가 빠져있기도 해요)2번 쿼리에서 WHERE (next_week IS NULL) OR ... 때문에 마지막 주차에 활동한 유저는 모두 next_week이 NULL이 될 거예요. 이탈해서가 아니라 다음 주 데이터가 아직 없는건데 이탈로 정의를 한 것이지요. 그리고 2번을 시각화까지 한 후엔 간단하게라도 해석하는 연습을 하는 것이 좋습니다. 분석가는 단순히 쿼리를 작성하는 사람이 아니라 데이터를 해석하는 사람이라서요3번 관련해서는 음식 추천 기능이 재방문을 유도하는 미끼 역할로 적합하지 않다고 한 근거는 무엇인가요? 코호트 리텐션 하나만 보고 그렇다고 판단하는 것은 섣부른 판단 같아요. 추천 시스템을 쓴 집단과 아닌 집단이 여러 이벤트의 차이가 있는지도 살펴봐야 하고, 그들의 로그를 하나씩 보면서 어떤 생각으로 움직였을지 가설을 만들고 데이터를 기반으로 납득이 되는지 봐야 합니다. 지금은 코호트 하나만 보고 아니라고 한거라 적절한 답변이라 생각이 되진 않아요.(생존자 편향과 별개로 결론내리게 근거가 부족하다는 의미)4번도 해석을 한번 해보시면 좋을 것 같아요!
- いいね数
- 0
- コメント数
- 4
- 閲覧数
- 106







