[데이터 리터러시(Data Literacy) by 오준엽 튜터]
1. 데이터 리터러시란?
- 정의: 데이터를 읽고, 이해하고, 비판적으로 분석하는 능력
+ 분석 결과를 의사소통에 활용할 수 있는 능력
- 상세 의미
└ 데이터 수집과 데이터 원천을 이해하고
└ 주어진 데이터에 대한 다양한 활용법을 이해하고
└ 데이터를 통한 핵심지표를 이해하는 것
└ 데이터 리터러시는 올바른 질문을 던질 수 있도록 만들어 줌
- 데이터 분석에 대한 착각
└ 데이터 분석을 배운다 ≠ SQL, Python, Tableau 등 학습
but, 막상 데이터 분석 하려면 쉽지 않음
└ 데이터를 잘 분석 ≠ 문제, 목적, 결론이 나올 것
└ 데이터를 잘 가공 ≠ 유용한 정보를 얻을 것
└ 분석에 실패 ≠ 방법론, 스킬이 부족한 것
- 데이터 해석 오류 사례
① 심슨의 역설 (Simpson’s Paradox)
: '부분'에서 성립한 대소 관계가 그 부분을 종합한 '전체'에 대해서는 성립하지 않는 모순적인 경우를 의미
: 전체 데이터에 대한 결론이 언제나 개별 집단에 그대로 적용되는 것은 아님 (ex. 연령대별 코로나 백신 접종과 치명률)
② 시각화를 활용한 왜곡
: 자료의 표현 방법에 따라서 해석의 오류 여지가 존재
③ 샘플링 편향 (Sampling Bias)
: 전체를 대표하지 못하는 편향된 샘플 선정으로 인해 오류가 발생
④ 상관관계와 인과관계
: 상관관계는 두 변수가 얼마나 상호 의존적인지 파악하는 것을 의미(한 변수가 다른 변수의 추이를 따름)
: 인과관계는 실질적으로 하나의 요인으로 인해 다른 요인의 수치가 변하는 형태를 의미(원인과 결과가 명확)
: 상관관계는 늘 인과관계가 있는 것은 아니므로 양쪽 모두 파악해서 의사결정 필요
- 데이터 리터러시가 필요한 이유와 데이터 분석 접근법
: ‘생각’이 주요한 단계에서 데이터 리터러시가 필요
: 데이터 분석이 목적이 되지 않도록 ‘왜?’를 항상 생각해야 함
2. 문제정의
- 정의
: 데이터 분석 프로젝트의 성공을 위한 초석이자 첫걸음
: 분석하려는 특정 상황이나 현상에 대한 명확하고 구체적인 진술
: 프로젝트의 목표를 설정하고 분석 방향을 설정
: (X) 매출을 어떻게 늘릴 수 있을까?
(O) 지난 6개월 동안 20대 여성 고객층의 구매 전환율 감소 > 해당 타겟 전환율을 2%에서 5%로 끌어올릴 방법은?
- 문제 정의 방법론
① MECE (Mutually Exclusive, Collectively Exhaustive)
- 문제 해결과 분석에서 널리 사용되는 접근 방식
- 문제를 상호 배타적(mutually exclusive)이면서, 전체적으로 포괄적(collectively exhaustive)인 구성요소로 나누는 것
- MECE를 통해 복잡한 문제를 체계적으로 분해하고, 구조화된 방식으로 분석할 수 있음
- 주의할 점: 분류 기준이 명확하고 통일되어야 하며, 중복이나 누락이 없어야 함
② 로직 트리(Logic Tree)
- MECE 원칙을 기반으로 복잡한 문제를 더 작고 관리하기 쉬운 하위 문제로 분해하는데 사용
- 상위 문제로부터 시작하여 하위 문제로 계층적 접근
- 일반적으로 도표 형식으로 표현되어 쉽게 파악 가능
- 주의할 점: 이벤트 효과 같은 해결책은, 로직트리 가지에 넣지 않아야 함
- 로직트리 Cheat Sheet (ex. 네스카페 로직트리)
- 문제정의 핵심
: 문제의 명확한 정의 > 해결을 위한 데이터 분석 방향성 > 결과 정리 해석 > 새로운 액션플랜 수립
: SO WHAT?
└ 그래서 결국 어떻다거지? 앞에 오는 정보에 맞는 중요한 결과/핵심를 추출하는 작업
: WHY SO?
└ 왜 그러게 말할 수 있지? SO WHAT의 타당성 및 자료의 구체적인 의미를 검증하고 확인하는 작업
- 문제정의 팁
: 결과를 공유하고자 하는 사람이 누구인지 정의하기
: 결과를 통해 원하는 변화를 생각하고, (가능하면) 경영자 입장에서 바라보기
: 혼자서 충분히 고민하는 시간을 갖되, 다른 사람들과도 의견 나누기
3. 데이터의 유형
- 정성적 데이터 vs 정량적 데이터
└ 정성적 데이터(Qualitative Data)
: 비수치적인 정보로 사람의 경험, 관점, 태도와 같은 주관적인 요소 포함
: 대부분 텍스트, 비디오, 오디오 형태로 존재해 데이터로 구조화하기 어려움
: 새로운 현상이나 개념에 대한 이해를 심화하는데 사용
└ 정량적 데이터(Quantitative Data)
: 수치적 정보로 숫자 형태로 존재하기 때문에 지표 생성이 용이하고 통계적으로 분석 가능
: 정성적 데이터에 비해 객관성이 높고, 주로 설문조사, 실험, 인구통계, 지표 분석 등에 활용
구분 | 정량적 데이터 | 정성적 데이터 |
유형 | 정형/반정형 데이터 | 비정형 데이터 |
특징 및 관점 | 여러 요소의 결합으로 의미 부여 주로 객관적 내용 |
객체 하나가 함축된 의미 내포 주로 주관적 내용 |
구성 및 형태 | 수치나 기호 데이터베이스, 스프레드시트 |
문자나 언어 웹 로그, 텍스트 파일 |
위치 | DBMS, 로컬 시스템 등 내부 | 웹사이트, 모바일 플랫폼 등 외부 |
분석 | 통계 분석 시 용이 | 통계 분석 시 어려움 |
4. 지표 설정
- 정의
: 특정 목표나 성과를 측정하기 위한 구체적이고 측정 가능한 기준
: 목표 달성도를 평가하고 전략적 결정에 필요한 핵심 정보를 제공
: 문제 정의는 '어떤 문제를 풀고자 하는가?'라면, 지표는 '어떤 결과를 기대하는가?'에 대한 정량화된 기준
- 주요 지표 이해하기
① Active User (활성유저)
: 서비스에 들어오는 모든 유저? x
: 서비스마다 정의가 다르며, 정의에 따라 전략과 방향성, 이탈 유저정의 등이 달라짐
: 투자 및 서비스 개선에 중요한 역할
(ex) Active User 설정 사례
② Retention Ratio (재방문율)
: 서비스를 사용한 사람이 다시 서비스를 사용하는 비율 %
: 한번 획득한 유저가 서비스로 다시 돌아왔는가?에 대한 지표로 활성 기준은 서비스에 따라 다름
: 리텐션이 높으면 고객획득에 투자한 비용을 빠르게 회수 가능해 서비스(특히 앱) 성장에서 매우 중요한 지표
: 통상 리텐션은 시간이 지나면서 자연스럽게 감소 > 감속폭이 완만해지며 안정화되면 시장에 적합한 서비스!
(측정방법1) N-Day 리텐션
: 최초 사용일로부터 N일 후에 재방문한 Active User의 비율
: 일반적으로 사용하는 리텐션 지표로, 게임, 소셜 등 매일 접속 및 반복 행동을 유도하는 제품에 적합
: 유저가 Active User로 집계된 최초 날을 Day 0으로 설정 & 액티브 상태 된 후 N일차 리텐션 계산
: 서비스 사용주기가 길면 리텐션이 과소 평가될 여지가 있으며, 경우에 따라 N-Week, N-Month도 가능
(측정방법2) Unbounded 리텐션
: 특정 날짜를 포함하여 그 이후에 한 번이라도 재방문한 유저의 비율
: 사용 빈도가 높지 않은 서비스에 활용하기 적절한 지표(채용 사이트, 부동산 매물 서비스 등)
: Unbounded 리텐션은 이탈률의 반대 개념
: 마지막 방문일 이전에 방문하면, 실제로 방문하지 않은 날도 방문한한 것으로 계산
: 시간 흐름에 따라 리텐션 추가 발생시 이전 리텐션 값이 모두 변동되는 문제가 있음
└ 절대적인 수치보다는 지표의 변화 트렌드를 보는 용도로 활용 권장
(측정방법3) Bracket 리텐션
: 설정한 특정 기간을 기반으로 재방문율을 측정 ex. 1(0일차) / 2(1-3일차) / 3(4-6일차) / 4(7-11일차)
: Bracket 리텐션은 N-Day 리텐션을 확장한 개념 > 일/주/월 단위가 아닌 지정한 구간으로 나눔
: 활성유저가 특정한 활동을 위해 각 Bracket 내 서비스에 재방문시 잔존 유저로 해석
: 서비스 사용주기가 길거나 주기적인 경우 사용하기 적합한 지표(식료품 배달 서비스 등)
- Retention을 활용법
: 리텐션이 높은 세그먼트를 발굴 가능
: 서비스의 사용 주기에 따라 리텐션 조회 기간 조정
: 사후 분석 시 용이
③ Funnel (퍼널)
: 퍼널은 잠재고객을 유입시키며 최종적인 목표 액션을 달성할 때까지의 과정
: 모든 서비스와 비즈니스는 각 단계로 갈 수록 이용자 수가 줄어들게 됨
: 각 단계의 전환율 (or 첫 유입 대비 전환율)을 측정 & 이탈 지점 구조화
- AARRR
└ Acquisition: 유입 / Activation: 활성화 / Retention: 재방문(재구매) / Revenue: 수익 / Referral: 추천
: 디지털 마케팅시 퍼널을 활용하는 프레임워크
: 단계별 전환율을 지표화 하여 서비스 보완 지점을 찾음
④ LTV (Life Time Value, 고객 평생 가치)
: 한 명의 유저가 생애 주기* 동안 얼마만큼의 이익을 주는지를 정량적으로 지표화 한 것
* 고객 생애 주기: 한 명의 유저가 서비스를 사용하기 시작하여 이탈할 때까지의 기간
: LTV는 유저와의 관계를 측정하고, 이를 사업적 이익으로 가져가는데 중요한 지표
: LTV가 높다는 것은 해당 서비스와 관계가 좋고, 충성도가 높은 고객이 많다는 것
: LTV에 따라 CAC(Customer Acquisition Cost) 산출 및 효율적인 예산 운용이 가능
(LTV 산출 방법)
└ 산출법은 매우 다양하며 서비스/관점에 따라 다각도로 고민 필요
- 이익 x Life Time x 할인율(미래 비용에 대한 현재 가치)
- 연간 거래액 x 수익률 x 고객 지속 연수
- 고객의 평균 구매 단가 x 평균 구매 횟수
- (매출액 – 매출 원가) / 구매자 수
- 평균 구매 단가 x 구매 빈도 x 구매 기간
- (평균 구매 단가 x 구매 빈도 x 구매 기간) – (신규 획득 비용 + 고객 유지 비용)
- 월 평균 객단가 / 월 가중 평균 잔존율
(LTV 정리)
: LTV를 늘리기 위한 방안
└ 객단가 상승 / 구매 빈도를 높임 / 이탈률 감소, 이용시간을 증가 등
: LTV는 가정을 베이스로 하는 지표이기 때문에 꾸준한 모니터링이 필요
: LTV에 관심이 더 생긴다면 읽어보면 좋을 자료들
[PAP Excel로 Retention 변화에 따른 LTV 시뮬레이션하기](https://playinpap.github.io/retention-ltv-simulation/)
[토스 - 무한한 사업 전략의 세계로 건너가는 법](https://blog.toss.im/article/tossbdm)
[EO planet - 이제 LTV(고객생애가치)를 정확히 계산해 봅시다](https://eopla.net/magazines/1519)
- 북극성 지표
: 제품/서비스가 유저에게 주는 core value를 가장 잘 나타낸 것으로 제품/서비스의 ‘성공’을 정의
: 장기 성장을 위해 필수적으로 모니터링 해야 함
① 특징
: 제품/서비스 전략의 핵심
: 유저/고객이 제품/서비스에서 느끼는 가치
: 회사의 사업 목표를 나타내는 지표 중 선행지표 (후행X)
② 좋은 북극성 지표를 위한 체크리스트
□ 유저가 목적을 달성하는 때가 언제인가?
□ 모든 유저가 해당되나?
□ 측정 가능한 지표인가?
□ 측정 주기가 적절한가? (일, 주, 월, …)
□ 외부 요인으로부터 영향을 많이 받진 않는가?
□ 북극성지표의 성장이 사업의 성장과 함께하는가?
□ AARRR 퍼널 전 과정이 북극성 지표에 영향을 주는가?
□ 북극성 지표의 변화가 적어도 매주 관찰가능한가?
(cf) 나쁜 북극성 지표의 예: 회원가입수, DAU, 리텐션, 다운로드수, 페이지뷰 수 등
└ 외부 요인을 받거나, 전체 여정을 반영하지 않거나, 유저/고객이 직접 가치를 느낄 수 없거나, 츨정 불가능 한 경우
③ 북극성 지표의 유형
④ 북극성 지표가 중요한 이유
└ 방향성
: 제품/사업 조직 무엇을 포기하고 어느 것을 최적화 해야 하는지 방향성 제시
: 제품/사업 조직의 진척과 가치창출을 전사에 보여줘 적극적인 지원 유도 및 액션 실행 속도 개선
: 비즈니스 임팩트에 따라 평가가 가능해지고, 결과에 책임을 지도록 함
└ 효율 증대
: 전 직원을 하나의 목표에 집중시킴
: 서로 상반된 목표에 집중하거나, 중복으로 일하는 것을 방지 (MECE한 구조)
⑤ 북극성 지표의 구조
5. 결론 도출
- 결과와 결론의 차이
└ 결과 (보통 많이 말하는 것) - 무엇을
: 계산과 분석을 해서 나온 결과물
: 데이터 처리, 분석, 모델링 후에 얻어진 구체적인 데이터의 출력
: 숫자, 통계, 그래프, 차트 등의 형태로 나타낼 수 있음
(ex) 고객 설문 조사 데이터 분석 결과, 고객 만족도와 구매 빈도 사이에 강한 상관관계가 있음이 나타났다.
└ 결론 (실제로 우리가 필요한 것) - 그것이 왜 중요하지?
: 목적에 대해 어떤 의미가 있는지 설명하는 것
: 분석된 데이터 결과를 바탕으로 이끌어낸 의미나 통찰
: 데이터에 기반한 해석, 추론 또는 권고 사항을 포함
(ex) 고객 만족도와 구매 빈도 사이의 강한 상관관계가 나타난 결과를 토대로, 고객 만족도 향상이 전반적인 매출 증가로 이어질 수 있다는 결론을 내릴 수 있다.
- 결론 도출 시 주의사항
: 결과 - 결론 도출 시에는 스토리텔링이 필요
: 데이터를 통해 알 수 있는 범위에서만 생각해야 하지, 필요 이상으로 자기 해석을 융합하면 안됨
- 결론을 잘 정리하는 법
: 문제 정의, 지표 설정 당시의 목적 떠올리기
: 결론을 공유할 대상이 누구이며, 어떻게 변화하길 원하는지? 생각하기
① 단순하고 쉽게 전달
: 핵심 지표 위주로 전달 하되, 해당 지표에 오너십이 있는 조직에서 활용할만한 포인트 제안
: 액션 아이템을 제안 하는것이 핵심
: 지표를 해석하는 방법에 대해서도 설명
② 흥미 유발
: 상대가 궁금해할만한 내용은 뭘까? 고민하고 필터링 하기 (모든 내용 X)
: 궁금한 사람들을 위해서는 디테일한 문서 따로 공유
③ 대상자 관점에서의 접근
: 공유 받는 사람의 시선에서 이해하기 쉽도록 정리
: 논지를 뒷받침 해줄 자료 함께 첨부하고 허들이 낮은 시각화 활용
④ 시각화 팁
: 화려한 그래프 보다는 대상이 직관적으로 이해할 수 있도록 구성
: 보통 선, 막대 그래프로 거의 대부분의 리포팅이 가능
: 각 그래프의 범례와 단위 함께 표기해주기
⑤ 결론 보고서에 쓰면 좋은 플로우
: 전체 내용을 한 문장으로 요약
: 해당 보고서의 메인 주제
: 해당 보고서를 쓴 이유와 원하는 변화
: 문제 정의 단계
: 핵심 내용 전개
: 결론 및 액션 아이템
- 결국 데이터 리터러시란? 왜?를 항상 생각하기
(참고도서)
빅데이터 시대, 성과를 이끌어 내는 데이터 문해력 / 카시와기 요시키 저
로지컬 씽킹 / 데루야 하나코, 오카다 게이코 저
[SQL 코드카타]
1. SQL 작동 원리 고민하고 쿼리를 짜야
1251. Average Selling Price https://leetcode.com/problems/average-selling-price/
1) 어떤 문제가 있었나
현재 행과 이전행 값을 활용해 계산해야 한다는 생각에 빠져 쿼리를 지나치게 복잡하게 작성
2) 내가 시도해본 건 무엇인가
GROUP 적용하면 같은 그룹 행 값이 모두 SUM되는데, 그 원리를 생각하지 못함
현재 행과 이후 행의 값을 더해햐 한다는 생각에 SUM 윈도우 함수에 ROWS 범위 값을 활용함
SELECT product_id,
case when each_values <> totla_price and quantity <> units then round(totla_price/quantity,2)
else null end average_price
FROM
(SELECT p.product_id,
P.price,
U.units,
P.price*U.units each_values,
sum(P.price*U.units) over (partition by P.product_id order by units rows between current row and 1 following)totla_price,
sum(units) over (partition by P.product_id order by units rows between current row and 1 following) quantity
FROM Prices P
left JOIN UnitsSold U ON P.PRODUCT_ID = U.PRODUCT_ID
AND U.purchase_date BETWEEN P.start_date AND end_date
)A
group by 1;
3) 어떻게 해결했나
다른 풀이를 통해 보다 간결한 쿼리를 숙지하고 다시 타이핑 해봄
SELECT p.product_id, IFNULL(round(SUM(p.price*u.units)/sum(u.units),2),0) as average_price
FROM Prices p
LEFT JOIN UnitsSold u
ON p.product_id = u.product_id AND
u.purchase_date BETWEEN p.Start_date and p.end_date
GROUP BY p.product_id
4) 무엇을 새롭게 알았나
- IFNULL(Column명, "Null일 경우 대체 값")
: 해당 Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수
: IF(IS NULL(칼럼명), "Null일 경우 대체 값", 칼럼명) IF절과 동일한 내용
2. 최종 값을 출력 할 때는 distinct가 필요할지 한 번 더 체크해야
1633. Percentage of Users Attended a Contest
https://leetcode.com/problems/percentage-of-users-attended-a-contest/
1) 어떤 문제가 있었나
퍼센테이지를 구하는 문제에서 2개 테이블을 join 후, contest_id별 group by 설정을 해두니
전체 user_id 숫자(절대값)가 나오지 않고, 그룹핑 적용된 테이블 내 contest_id별 user_id 수만 추출됨
(모든 컨테스트별 비율이 100%로 환원)
2) 내가 시도해본 건 무엇인가
서브쿼리로 user 테이블의 유저수를 별도 추출하여 계산식에 삽입
3) 어떻게 해결했나
SELECT contest_id, round(COUNT(contest_id)/(select count(*) from Users)*100,2) percentage
FROM Register r
group by contest_id
order by percentage desc, contest_id
4) 무엇을 새롭게 알았나
정답처리되긴 하였으나, 값의 중복이나 null값을 고려하여 distinct나 count(user_id) 활용 필요
SELECT contest_id, round(COUNT(distinct contest_id)/(select count(user_id) from Users)*100,2) percentage
FROM Register
group by contest_id
order by percentage desc, contest_id
'TIL' 카테고리의 다른 글
[240108] 알고리즘 특강 01.자료 구조 & 파이썬 숙제 (1) | 2024.01.08 |
---|---|
[240107] 파이썬 문법 기초 (0) | 2024.01.07 |
[240104] SQL: 특강/코드카타 91 & 파이썬: 코드카타 6-7 (2) | 2024.01.04 |
[240102] SQL: 코드카타 89-90 & 파이썬: 코드카타 5 (1) | 2024.01.02 |
[231229] SQLD: JOIN, 집합연산자, 서브쿼리, 그룹함수, 윈도우함수 (1) | 2023.12.29 |