데이터 분석을 위한 추출을 하면서 반복적으로 실수하는 부분에 대해 보면
늘 step by step 로직에 대한 설계에 있어서 순서를 달리할 때인 것 같다.
데이터 분석에서 목적에 맞는 데이터를 추출하는 로직 설계는 무엇보다 분석의 품질과 정합성에 중요한 핵심 요소이다.
실제로 분석을 하며 느꼈던 건 로직이 정확하지 않으면 잘못된 데이터 기반으로 결론을 짓게 되는 부분이 있었다.
✅ 로직 설계가 중요한 이유
| 이유 | 설명 |
| 🎯 분석 목적과 정렬 | 분석하고자 하는 대상/범위를 정확히 추출해야 지표가 왜곡되지 않음 |
| 🔎 지표 정의와 연결 | 분자/분모를 어떻게 집계할지에 따라 지표 해석이 달라짐 |
| 🧱 데이터 정확도 확보 | 쿼리 조건을 명확히 잡아야 중복, 누락, 오류 없이 신뢰할 수 있는 결과 가능 |
| 📉 불필요한 노이즈 제거 | 범위가 과하면 해석이 어려워지고, 정제된 데이터 없이 진행 시 정확한 판단이 힘듦 |
🧠 로직 설계 시 고려해야 할 핵심 요소
1. 분석 대상 정의
- 어떤 유저? 어떤 행동? 어떤 상품? 어떤 시점?
- 예) “첫 구매자 중에서 특정 상품을 구매한 유저” vs “전체 구매자”
2. 분석 기간 명시
- 언제부터 언제까지?
- 기준일(구매일, 유입일, 가입일 등)을 명확히
- 주문, 배송, 결제 등 시점에 대한 구분자도 명확히
예: “출시일 기준 5개월 이내 구매자만 추출”
3. 중복 여부와 집계 기준
- user_id 기준 중복 제거?
- 세션 기준? 주문 기준? 유저 기준?
예: user_id 기준으로 최초 구매만 집계할지, 전체 주문건을 집계할지, GA 기준 세션으로 집계할 지
최근에 헤맸던 부분이었는 데 세션 기준 / user_id 기준이냐에 따라 수치가 달라지고
이는 회원 수가 많아짐에 따라 수치 차이가 나는 경우가 더 늘어나는 경향이 있다.
4. 필터 조건 명확화
- 제외할 조건 명확히 정의
- 예) 미입금, 취소건 제외 / 특정 상품군만 포함 / 특정 채널 제외
5. 지표 계산을 위한 정규화 형태 설계
- 지표 계산을 쉽게 하려면 long → wide / wide → long 형태 가공도 고려
- 예) 구매 데이터에 n번째 구매 횟수를 붙여야 평균 구매 횟수 계산 가능
이 단계는 분석 지표 계산이 쉽고 정확하게 가능하도록 가공하는 구조 설계이다.
📌 예시
| 요소 | 설계 내용 |
| 분석 대상 | 자사몰 첫 구매자 중 상의 제품 구매자 |
| 분석 기간 | 2024.07.01 ~ 2024.12.01 |
| 필터 조건 | 취소/미입금 제외, product_name에 특정 제품 포함 |
| 지표 계산 | user_id 기준으로 재구매 유무 파악, n번째 구매 기준으로 구매 횟수 집계 |
| 사용 컬럼 | user_id, product_name, order_date, n_times, category, sales_channel |
→ 이 설계를 기반으로 SQL/쿼리 작성 시 혼동 없이 정확한 집계 가능
정규화 형태 설계를 진행하는 연습을 통해서 로직에 대한 정리하는 연습을 시도해보자!
✍️ 로직 설계 간소화 템플릿 활용하기!
[분석 목적] OO 제품의 재구매율을 파악하여 지속 푸쉬 여부 판단
[대상 정의] 첫 구매자 중 OO 제품 구매자
[기간 설정] 제품 출시일 + 5개월 기준
[제외 조건] 취소 / 미입금 / Npay 비회원
[지표 계산 방식] user_id 기준 재구매 건수 집계, 시리즈 내 교차 구매율 포함
[사용 컬럼] user_id, item_name, category, purchase_date, order_status, n_times
✅ 정규화 형태 설계가 중요한 이유
| 이유 | 설명 |
| 🧮 지표 계산의 정확도 확보 | 지표 정의에 필요한 조건/그룹화/순서를 정확히 반영하기 위함 |
| 🛠 복잡한 지표도 단순하게 집계 | 반복 사용되는 로직을 미리 필드로 만들어두면 계산이 쉬워짐 |
| 🔄 재사용성과 유지보수 용이 | 동일 지표 계산 시 매번 쿼리 작성이 아니라 테이블 재활용 가능 |
📌 실무 예시
- 목적: "고객의 첫 구매 이후 90일 내 재구매율" 계산
- 👇 필요한 전처리 로직
| 단계 | 설명 | 컬럼 |
| ① 유저별 구매 순서 부여 | 첫 구매 판단용 | purchase_nth (ex. 1, 2, 3...) |
| ② 첫 구매일 저장 | 기준일 계산용 | first_purchase_date |
| ③ 재구매 여부 플래그 | 지표 계산용 | is_repurchase_within_90d (1/0) |
- 👇 정규화 형태 예 (가공 테이블 형태)
| user_id | order_id | purchase_date | purchase_nth | first_purchase_date | days_since_first | is_repurchase_within_90d |
| U001 | O1001 | 2024-01-10 | 1 | 2024-01-10 | 0 | 0 |
| U001 | O1033 | 2024-02-05 | 2 | 2024-01-10 | 26 | 1 |
| U001 | O1044 | 2024-05-10 | 3 | 2024-01-10 | 120 | 0 |
→ 이 테이블이 만들어지면, is_repurchase_within_90d = 1 비율만 구하면 지표 계산 완료
즉, 전처리 및 분석에 필요한 가공 형태의 테이블이 필요하다.
🛠 주로 만드는 정규화 컬럼 유형
| 목적 | 컬럼 | 예시 설명 |
| 구매 순서 | purchase_nth, rank | 유저별 구매 순서 계산 (ROW_NUMBER() 등) |
| 기준일 | first_purchase_date | 첫 구매일 또는 첫 유입일 저장 |
| 경과 일수 | days_since_first | 특정 기준일과의 차이 계산 (DATEDIFF) |
| 행동 플래그 | is_conversion, is_repeat, is_cross_buy | 특정 행동 여부를 1/0 으로 명시 |
| 그룹화 기준 | category_group, utm_group, product_series | 같은 성격의 데이터를 묶기 위한 코드화 |
즉, 정규화 설계 = 지표 계산이 편해지도록 테이블 구조를 가공하는 것
자주 쓰는 지표에 대해 가공된 컬럼을 만들게 되면 지표 계산 로직은 집계만 남아 단순해진다
그렇다면 로직 설계에 있어서 "순서"를 고려하는 것 또한 중요하다.
데이터 추출 로직에서 “작업 순서”는 매우 중요!
특히 데이터의 출처, 구조, 전처리 방식에 따라 순서가 달라지면 결과가 완전히 바뀔 수도 있다.
즉, “같은 조건을 쓰더라도 순서에 따라 완전히 다른 데이터셋이 만들어질 수 있다”는 점이 핵심이다.
(이는 분석을 하면서도 직접 경험했고 순서에 따라 아예 다른 결과의 데이터가 만들어지는 부분)
✅ 데이터 추출 로직에서 순서가 중요한 이유
| 이유 | 설명 |
| 🎯 필터 타이밍에 따라 대상이 달라짐 | 중복 제거 전에 필터하면 제외되어야 할 데이터가 남을 수 있음 |
| ⚠️ 조인 순서에 따라 기준 테이블이 달라짐 | 주 테이블 기준으로 어떤 데이터를 붙이느냐에 따라 누락/증폭 발생 |
| 🔁 집계 전에 가공해야 하는 경우 | 구매횟수 계산 등은 집계 전에 선 가공 필요 |
| 📊 지표 계산 순서도 결과에 영향 | 비율을 먼저 구하느냐, 필터 후 구하느냐에 따라 값 달라짐 |
🧭 실무에서 체크해야 할 순서 기준 6가지
1. 대상 필터 vs 중복 제거 순서
- 일반적으로는 필터 → 중복 제거 순이 안정적
- 예: 취소건 제거 후 중복 제거
2. 조인 순서 (좌측 테이블 기준)
- 어떤 테이블이 메인인지 명확히 하고
→ LEFT JOIN, INNER JOIN 전략 설계 필요
3. 선 집계 vs 후 집계 판단
- user_id별 구매횟수는
→ 구매 테이블에 ROW_NUMBER()나 RANK()로 먼저 계산한 후
→ 그룹화하는 게 정확
4. null 처리 순서
- 조인 전 null 처리 vs 조인 후 null 처리 결과 다름
- 예: 구매 수단이 없는 건 제외할지, 기본값 처리할지 결정 필요
5. 타입 변환 시점
- 금액, 날짜 등의 타입 변환은
→ 로직 중간보다 전처리 초기에 미리 해두는 게 오류 방지에 좋음
6. 데이터 출처별 로직 분리 여부
- 여러 출처(예: GA4 + CRM + 주문 DB 등)를 사용할 땐
→ 출처별 로직을 분리 후 병합
→ 각 출처 특성을 반영해 사전 정제해야 함
📌 실무 예시: 첫 구매자 기준으로 특정 제품의 90일 내 재구매율 계산
① 취소/미입금 제외 필터
→ ② 첫 구매자 추출
→ ③ 구매 데이터에서 제품 기준 필터
→ ④ 구매 순서 부여 (ROW_NUMBER)
→ ⑤ 90일 내 재구매 여부 계산
→ ⑥ 집계 및 지표 산출
👉 위 순서를 바꾸면
예: "구매 순서 부여 전에 제품 필터"를 하면 전체 이력이 아닌 특정 제품군만 본 것이 되어 재구매율이 왜곡됨
✍️ 로직 설계 전 체크리스트
- 분석 대상은 전체 데이터에서 먼저 뽑아야 하는가?
- 필터는 전처리 전에 할까, 후에 할까?
- 어떤 테이블이 메인 기준이 되어야 하나?
- 집계 전에 필요한 가공이 있는가? (n번째 구매 등)
- 데이터 간 단위나 기준(유저 기준/세션 기준 등)이 맞는가?
- 복수 데이터 출처를 어떻게 통합할 건가?
👉 항상 해당 질문을 던지면서 로직 설계 전 데이터에 대해 체크해보는 과정을 거치도록 해야 한다.
✏️ 느꼈던 점 요약
- 어떤 순서와 기준에 따라 로직 설계하는 지에 따라 데이터 결과를 좌우할 수 있다.
- Garbage In Garbage Out 이라는 말이 괜히 나온 게 아니다.. 정합성 체크와 의도에 맞는 데이터 추출의 중요성!
💪🏻 시도할 점
- 로직 설계 전 체크리스트에 따라 데이터에 대한 질문 던지기
- 데이터 로직 설계 간소화 템플릿 활용해보기
- 데이터 정규화 형태 기반으로 분석에 용이한 테이블 설계 연습해보기
'데이터 분석' 카테고리의 다른 글
| [TIL 33] 고객 수, 중복 포함 vs 제외 어떤 기준으로 보는 게 맞을까? (0) | 2025.08.20 |
|---|---|
| [TIL 32] 지표 정의와 시점에 대한 중요성 (4) | 2025.08.11 |
| [TIL 29] 재구매 산업에서의 재구매 관련 지표 기준 잡기 (1) | 2025.07.29 |
| [TIL 28] 기준을 어떻게 보느냐에 따라 재구매율 해석이 달라진다. (0) | 2025.07.19 |
| [TIL 27] 분석 프로세스 고민, 안건 > 지표 > 가설 단계별 구체화와 그 외 다른 방법들 (0) | 2025.07.13 |