2021 데이터야놀자에서 들은 내용을 적어 보았습니다.
1. 밑바닥부터 시작하는 프로덕트 데이터 분석
- 매스프레소: 데이터 드리븐 프로덕트 개발
- 실험 설계
- 정형화된 프로세스 정립
- 데이터 수집
- 의사결정하기 위해 필요한 데이터 명확화
- 실험, 대조군 할당은 필수
- 데이터는 어디에 남길 것인가? 서버/클라이언트 DB 중 선택
- 성과 분석
ATE
: 실험군, 대조군 전체 비교CATE
: 조건 걸어 계층화. 유저를 그룹화한 후 그 안에서 실험군, 대조군 나눔
- 일련의 과정에서 인과 추론(
Causal Inference
)을 공부하기도 함 - 큰 사이클에서 푸는 문제들:
Metric Hirarchy
- 조직의 최상위 KPI로부터 내려가는 구조
- Focus: 최상위 지표(KPI). (ex: 구독자 수)
- 여기서 작은 단위의 지표 탐색. (ex: 유료 구독자 수)
- 문화 만들기 및 레슨런 공유
- 조직에서 다들 실험을 하고 싶어 하는데, 어떻게 해야 할까?
- 슬랙을 통해 공유
2. 깨진 데이터도 다시 보자: Dynamic Mapping의 함정
Elastic
소속- 수 십년간 사용해 온 RDBMS의 형태적인 한계로 인해 NoSQL 등의 DB가 생겨난 상태
- NoSQL
- 스키마가 일정하지 않은 데이터 저장
- 접속 로그. 시스템 메트릭, SNS 피드 등의 저장에 유용
- 데이터가 입력되는 순간 각각의 필드를 보고 데이터 타입 매핑
- Dynamic Mapping
- 입력되는 데이터를 보고 알아서 매핑하는 기능
- join 대신 서로 다른 매핑 데이터를 모을 수 있음
- 데이터 타입 호환성도 제공. “6.3” → 6.3으로 인식
- ElasticSearch
- 소수점 있는 실수 값 입력하면, 정상적으로 저장은 되지만 5.7, “6.3”같이 그대로 저장되어 있음
- Max 값을 계산할 때 오류 남. 정수로 저장됨. 5.7 → 5, “6.3” → 6
- ElasticSearch 저장하는 구조
- inverted index 사용. 저장된 텍스트 텀을 가지고 저장된 도큐먼트 아이디(위치) 저장
- query phase, fetch phase
- inverted index → index → 실제 데이터 찾는 과정
- 5.1 ~ 5.9 range 숫자를 찾으면, 소스에는 5.7이 나와야 하지만 실제로는 5로 저장되어 검색되지 않음
- 정수 타입으로 매핑이 되면, 실수가 모두 정수로 들어오게 되어 분석시 오류가 생김
- ElasticSearch도 항상 데이터를 입력하기 전에 매핑 확인해야 함
- 문제 발생시 오류 메시지 띄워 확인해야 함
- 원래 필드에 데이터가 들어가야 하는데, 필드가 계속 생성되는 오류도 있음
3. 관점에서 시작하는 데이터 엔지니어링
- 당근마켓
- 관심사가 같더라도(카페가 잘 되는지?), 카페에서 사람 관점으로 보느냐, 음료 관점으로 보느냐에 따라서 로깅하는 데이터가 달라질 수 있음
- 당근마켓이 사용자를 잘 이해하기 위해서, 어떤 관점으로 바라봐야 할까?
- 어떤 물건을 구매하는지 등
- 사용자들 카테고리화: perspective schema 생성
- 카페 예시로 다시
- 어떤 자리가 인기가 있느냐가 궁금할 때, 음료 갯수로 볼 수 있음
- 근데 해당 자리에 체류 시간이 턱없이 적다고 하면, 체류 시간을 몰랐을 때와는 완전히 다른 결과
- 클릭, 좋아요 등의 데이터는 만병통치약이 아님
- 어떤 이유로 해당 액션이 이루어졌는지 알기 어려움
- 사용자들이 여러 액션들을 하게 된 과정을 비디오로 볼 수 있으면 좋겠지만, 최대한 알 수 있도록 데이터를 설계해야 할 것
- 데이터 엔지니어의 역할
- 수동적으로, 요건대로 작업하는 경우가 많음
- 클릭 대신 클릭++ 라는 좋은 metric을 개발함. 능동적으로 이거 쓰게 해 주세요, 라는 ‘데이터 홍보팀’의 역할도 함
- 데이터 엔지니어가 능동적으로 하지 못하고 있는 이유
- R&R 불분명. 인사이트를 내는 역할 / 인사이트를 내기 위한 metric을 만드는 역할 등
- 데이터 팀을 바라보는 회사의 시각이 진화할 필요 있음
4. Data Driven Decision을 위한 데이터 플랫폼 구축기
- 카카오모빌리티
- 실험 플랫폼, 유저 행동 플랫폼 등을
Kubernetes
로 개발 - 테이블은 점점 많아지고, 일일이 SQL로 확인하기 어려운 상황
- 현재 2,800만 유저의 방대한 행동 데이터 수집
- 사내에서 데이터 활용 니즈는 증가하는데, SQL만으로는 유저의 교차 사용 패턴 등 인사이트 확인 어려움. 분석팀이 요청 사항을 모두 확인하기 어려움
- 데이터 파이프라인 통해 유저 행동 패턴 확인, 세그먼트 나눔
이벤트 스키마 정의
- 이벤트는 발생 시점에 다양한 정보를 담고 있어야 함
- Event Property, User Property
Amplitude
등에서 제공하는 이벤트 템플릿 사용하여 이벤트 스키마 정의- 이벤트 스키마는 메타데이터로 관리되어야 함. 메타데이터를 이용하여 이벤트 로그 validation check
User Data와 User segmentation
- 매출, 사용 빈도 등 고려하여 유저 CVL 관리. 데이터 분석, 마케팅에 활용
- Custom Segment 생성, 관리할 수 있는 플랫폼 제공 (User Property 이용)
- 이렇게 만든 세그먼트를 API 형태로 제공. 타겟 고객 정할 때 사용
AB Test
- 기존과 다르게 택시 호출 상품이 다양해짐
- 호출 상품에 따라 예상 요금 제공하는 기능 제안
- 기능 제공 여부를 실험을 통해 검증
- CTR 차이 거의 없고, 빠른 상품 비교 가능하다는 결과
- AB 테스트 절차가 복잡한 경우, 실험보다는 추측으로 의사결정 하게 됨
- Experimentation Platform 통해 실험 관리
- 실시간 파이프라인을 통해 주요 metric 확인 가능
- critical path
- 화면 넘어가는 단계. 호출 탐색 → 호출중 → 호출 완료 → 운행 완료
- 유저가 최근에 사용했던 도착지를 다시 사용하는 경우가 많음 → 도착지 자동 입력 기능 제공