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/
Courses
Reviews
- Introduction to BigQuery (SQL) for Beginners
- Introduction to BigQuery (SQL) for Beginners
- Introduction to BigQuery (SQL) for Beginners
- Introduction to BigQuery (SQL) for Beginners
- From 3 Million Blog Pageviews: 'Pragmatic Tech Blog Writing'
Posts
Q&A
최종 과제 제출합니다.
안녕하세요. 문제 푸시느라 고생하셨습니다! 하나씩 의견을 드려볼게요.Overview 현황은 잘 남겨주셨습니다. 현황을 잘 정리해주셔서 깔끔하게 시작되는 인상을 받았습니다New, Resurrected, Dormant, Current는 시간이 흐르면서 바뀌는 값입니다. 주차마다 New 유저가 바뀝니다. 따라서 지금 작성하신 것처럼 표현하는 것보단, 주차별로 New/Resurrected/Dormant/Current의 수를 시각화하는 그래프를 그리며 해석할 것 같아요.제품을 개선하기 위한 전략 Dormant 이탈율을 개선하여 Current 유저를 증가시키는 방안으로 Dormant 유저의 마지막 이벤트가 무엇인지를 분석 —> 해당 UI & UX 를 개선 Screen_view welcome, home 화면과 로그인 화면을 우선 유저들이 지속할 수 있도록 매력적인 UI 개편하여 Dormant 유저를 줄이는 전략이 부분 쿼리에서 (dor_last_action) WHERE 조건에 screen_view가 있어서 다른 이벤트가 나오지 않을 것 같네요.이 부분 사이에 수많은 논리가 있을 수 있는데, 간단하게 정리하셔서 아쉽습니다Action Item은 구체적으로 작성해야 합니다. 지금 작성해주신 특정 화면에서 매력적인 UI를 만들자! 라는 것은 덜 구체적입니다. weclome 35% 이탈 -> UI가 매력없다는 것은 여러 가설 중 하나일 뿐입니다. 가입 직후 온보딩 이탈인지, 음식점을 보고 이탈인지 퍼널 별 전환율까지 확인해야 더 이야기를 할 수 있어요.매출 계산식과 기간을 명시하고, 테스트용 필터는 지워두면 좋을 것 같아요. 평소부터 잘 정리된 형태로!문제 푸시느라 고생하셨습니다. 조금 더 구체적 Action Item을 찾아보셔요!
- Likes
- 0
- Comments
- 2
- Viewcount
- 71
Q&A
3-13 과제
유정님 안녕하세요! 과제하시느라 고생하셨어요.1번 쿼리는 수업 시간에 다룬 것이니 쿼리는 잘 작성하셨고, 해석도 제가 강의에서 다룬 부분이라 다른 관점을 드려볼게요.'왜 8%로 급락했을까요?', '사용하는 사람들은 왜 쓰고 있을까요?'이런 질문을 한 후에, 가설을 떠올리는 것이 필요해요. 그래프를 단순히 살펴보는 것 다음엔 왜 그랬을까? 가설을 떠올리는 것이 중요하니 계속 해보셔요. 그래야 어떤 데이터를 더 살펴볼지 아이디어를 떠올릴 수 있어요.2번status_def2에서 next_diff >= 2로 잡아서 이후에 다시 돌아오지 않은 유저(next_diff IS NULL)은 Dormnat로 집계되지 않아요first_date 컬럼이 사용되지 않고 있어요.history_table에서 ORDER BY user_pseudo_id는 없어도 쿼리가 잘 동작해요. CTE 안에서 ORDER BY가 있으면 속도가 느려지니 제일 바깥쪽 쿼리에서 한번만 쓰셔도 됩니다(ORDER BY 없어도 윈도우 함수는 잘 동작합니다)이미지 시각화하신 것 잘하셨습니다. 쿼리 좀만 더 손보시고 그래프 살펴보셔요해석한 부분은 1번과 유사하게 "해석과 가설"이 필요합니다. 현재는 그래프를 읽고 묘사한 것이고, 그 이후에 "어 이건 왜 이렇게 되었지?"라는 생각을 하면서 추가적으로 데이터를 보시면 좋을 것 같아요. 이런 습관과 훈련이 데이터를 볼 때 제일 중요합니다current 600명대 = 액티브 유저 안정화라고 해주셨는데, 주간 액티브는 new + current + resurrected(12월 기준 약 7,000명). current는 연속 2주 사용자에요. 주간 액티브의 정의는 new + current + resurrected입니다. 리포트를 작성할 때 각 부분의 정의를 작성하고 시작하시면 더 좋을 것 같네요3번도 마찬가지로 가설을 단단하게 만드시면 좋겠어요가설1 : 왜 click_payment를 떠올렸는지 근거가 있을까요? 무엇을 "유의미"로 볼 것인지 기준도 정해보시면 좋을 것 같아요가설2 : 3일 연속 유저의 커브 말고 다른 유저 커브가 있어야 비교를 할 수 있어요. 비교군을 설정해주셔요.모수가 적으면 가설이 무의미한 것이 아니라 세그먼트 정의가 빡빡한 것이라고 볼 수 있어요. 조건을 완화해서 다시 보면 어떻게 되나 살펴보셔도 좋을 것 같아요.4번에서 구매빈도가 가장 높은 상위 5% 유저의 구매 패턴을 분석하여 , 해당 주차나 요일, 시간을 벤치마크하여 마케팅 푸시 메시지를 보낸다.라고 해주셨는데, 그렇다면 이후에 상위 5%의 유저를 확인한 후, 구매 패턴 분석해서 어느 시기에 마케팅 Push가 제일 좋을지 제시를 같이 해주면 좋을 것 같아요! 해석을 하고 끝이 아니라 후속 데이터도 같이 공유해주시면 더 좋은 분석이 될 수 있을 것 같아요문제 푸시느라 고생하셨습니다!
- Likes
- 0
- Comments
- 3
- Viewcount
- 73
Q&A
3-13 과제
유정님 안녕하세요! 답변을 드리려고 했는데 지금 답변에 엔터 입력이 안되네요. 인프런에 문의했는데, 월-화 이내로 답변드릴게요!
- Likes
- 0
- Comments
- 3
- Viewcount
- 73
Q&A
battle 테이블 오류
안녕하세요!이 오류는대부분 건너뛸 헤더행 설정, 컬럼 스키마 정의, 압축 일부만 해제해서 쓴 경유 발생해요. 테이블 생성할 때 설정하신 것을 캡처해서 보여주시겠어요?
- Likes
- 0
- Comments
- 2
- Viewcount
- 69
Q&A
강의 수강 목적
민지님 안녕하세요!수강 목표 모두 달성하시면 좋겠네요. 하시다가 궁금한거 있으시면 언제든 남겨주셔요!!
- Likes
- 0
- Comments
- 2
- Viewcount
- 61
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이 갈라집니다! 이런 케이스가 현업에서 많아서 파티션 안에 플랫폼을 넣을지도 데이터 보고 결정해야 합니다문제 푸느라 고생하셨습니다!!!
- Likes
- 0
- Comments
- 2
- Viewcount
- 78
Q&A
1번 문제 질문
안녕하세요.선호님이 말씀하신 논리로 생각할 때 catch_date 컬럼을 사용해도 괜찮고, 이 문제는 좀 더 현업스럽고 의도가 있는 문제라고 생각해주시면 됩니다. 선호님의 생각 흐름도 매우 좋습니다!회사에서 데이터 조직이 아닌 다른 팀에서 한국 시간 기준으로 데이터 뽑아달라고 하는 경우가 있는데, 그 때 데이터에 대한 이해가 없어서 질문을 의도와 다르게 하는 경우가 있습니다. 그럴 때 의도를 잘 파악하고, 데이터를 확인하는 것이 데이터를 다루는 사람의 책임입니다.저희가 있는 곳이 대한민국이라 UTC 기준으로 데이터를 요청하지 않을 것이고, 요청자의 의도에 한국 시간으로 뽑아달라는 것이 내포가 되어 있다고 이해해주시면 됩니다
- Likes
- 0
- Comments
- 2
- Viewcount
- 68
Q&A
app logs 데이터로 쿼리 연습
유정님 안녕하세요unnest 와 집계함수를 연속적으로 쓰려고 할 때나 unnest+집계함수+having 쓰려고 할 때는 반드시 with문으로 분리해서 사용해야 오류가 안 나는 것 같더라고요. 그러다 보니 쿼리가 길어지는데 더 가독성 좋은 쿼리 작성법이 있을 것 같습니다. ㅎㅎ이 말이 어떤 쿼리에서 발생한 걸까요? 말씀하신 경우가 항상 WITH를 써야 된다는 것은 아닐텐데 쿼리를 어떻게 바꾸셨는지 말씀해주시면 가이드를 드릴 수 있을 것 같아요.그리고 이 문제들은 쿼리 작성도 좋지만, 데이터 결과를 보고 해석을 해보는 경험을 더 추천드려요! 해석을 잘 하는 것이 중요하기에 결과 보고 해석을 어떻게 할지 고민해보셔요(현상을 파악하고 그걸 토대로 가설을 떠올리면 좋아요)
- Likes
- 0
- Comments
- 2
- Viewcount
- 83
Q&A
[과제] 연습문제 쿼리 작성했습니다!
유정님 잘 작성해주셨네요!쿼리를 잘 작성해주셨고, basic2 쿼리 안에서 ORDER BY가 필요없어서 삭제해도 좋을 것 같아요ORDER BY는 쿼리문에서 제일 바깥 쿼리 한번에서만 쓰신다고 생각하시면 좋을 것 같아요. ORDER BY라는 것은 모든 값을 확인해야 하거든요(정렬을 하기 위해) 그래서 쿼리 시간이 좀 더 걸리게 됩니다. 그래서 정렬이 필요한 경우엔 제일 바깥 쿼리에서만 써주시면 좋아요
- Likes
- 0
- Comments
- 2
- Viewcount
- 73
Q&A
3번 문제 질문!
넵 상관없습니다!! 논리적 구조만 맞으면 됩니다
- Likes
- 0
- Comments
- 2
- Viewcount
- 62






