---
type: knowledge
domain: engineering
status: active
last-reviewed: 2026-07-06
---

# 데이터 분석 원리

> 한 줄 정의
> 데이터에서 **틀리지 않은 결론**을 꺼내는 사고 습관과 SQL 실전 함정. 저장·모델링·인덱스는 [[데이터 원리]], 실험 판정과 지표 설계는 [[지표와 실험]] — 이 문서는 분석 행위 자체를 다룬다.

## 결정이 먼저다

분석 요청을 받으면 쿼리를 짜기 전에 되묻는다: **"이 숫자로 무엇을 결정하려 하나?"** 결정이 연결되지 않은 분석은 관광이고, 결정을 알면 봐야 할 지표·분해 축·정밀도가 저절로 정해진다. "일단 다 뽑아줘"는 요청이 아니라 질문이 없다는 신호다.

## 결론을 왜곡하는 4대 편향

| 편향 | 내용 | 방어 |
|------|------|------|
| 생존자 편향 | 이탈한 유저는 데이터에 없다 — 남은 사람만 보고 "만족도 높음" | 코호트 전체 대비 잔존율로, 이탈자 표본 확인 |
| 선택 편향 | 응답한 사람 ≠ 전체 (설문·리뷰·베타 신청자) | 표본이 모집단을 대표하는지 먼저 질문 |
| 텍사스 명사수 | 쏘고 나서 과녁 그리기 — 사후 패턴 발견을 발견이라 부름 | 가설은 데이터 보기 전에, 사후 패턴은 다음 데이터로 재검증 |
| 평균의 함정 | 평균 응답 200ms 뒤에 p99 8초가 숨는다 | 분포를 본다 — 중앙값·p90·p99, 히스토그램 |

심슨의 역설(합치면 뒤집힘)·상관≠인과는 [[지표와 실험]] 참조 — 분석 보고서에서 가장 자주 깨지는 두 곳.

## Sanity Check가 쿼리보다 먼저다

> [!WARNING] 숫자가 이상하면 결론이 아니라 파이프라인부터
> 본 분석 전 4종 확인: **행 수**(예상 규모인가) · **기간 커버리지**(빠진 날짜 없나) · **NULL 비율**(핵심 컬럼) · **중복**(유니크 키 기준). 흥미로운 발견의 절반은 파이프라인 버그다 — "매출 2배 급증"의 원인이 이중 적재인 경우는 흔하다.

## SQL 실전 함정

| 함정 | 증상 | 처방 |
|------|------|------|
| NULL 3치 논리 | `NULL = NULL`은 참이 아님, `NOT IN (…NULL…)`은 항상 빈 결과 | `IS NULL` 명시, `NOT IN` 대신 `NOT EXISTS` |
| JOIN fan-out | 1:N 조인 뒤 SUM/COUNT가 부풀려짐 | **집계 먼저, 조인 나중** (서브쿼리/CTE로 그룹핑 후 조인) |
| 날짜 경계 | `BETWEEN '2026-06-01' AND '2026-06-30'`은 30일 00:00까지만 | 시각 포함 컬럼은 `>= 시작 AND < 다음날` |
| 타임존 | DB는 UTC, 비즈니스는 KST — 일별 집계가 9시간 밀림 | 집계 전 명시 변환, "오늘"의 정의를 팀 표준으로 |
| 정수 나눗셈 | `1/2 = 0` → 전환율 0% | 분자·분모 실수 캐스팅 |
| 0 나눗셈 | 분모 0에서 에러/무한 | `NULLIF(분모, 0)` |
| COUNT 삼형제 | `COUNT(*)` 행수 ≠ `COUNT(col)` 비NULL ≠ `COUNT(DISTINCT col)` | 무엇을 세는지 선언하고 선택 |

## 대시보드 — 차트 하나 = 질문 하나

- 모든 차트는 답하는 질문이 있어야 한다. 질문 없는 차트 추가가 허무 지표 양산의 시작 → [[지표와 실험]]의 3층 구조(북극성·입력·가드레일)로 선별.
- **기준선 없는 차트는 장식이다** — 목표선·전주 대비·임계값 중 하나는 그린다. "많은가 적은가"를 보는 사람이 판단하게 하지 않는다.
- 숫자 하나(빅넘버)에는 방향(↑↓)과 비교 기간을 붙인다.

## 분석 커뮤니케이션 — 숫자가 아니라 판단을 전달한다

- 보고 순서: **결론 → 그래서 뭘 하면 되는지(권고) → 근거 → 한계**. 쿼리 자랑은 부록으로.
- 불확실성을 명시한다: "데이터가 말한다"가 아니라 "이 가정(기간·세그먼트·정의) 하에서 이렇게 읽힌다."
- 지표 정의를 각주로 — "활성 유저"의 정의가 다르면 같은 숫자로 딴 얘기를 하게 된다.

## 에이전트 적용

- **text-to-SQL 에이전트의 2대 사고**: 스키마 추측(없는 컬럼 발명)과 fan-out 무지(조인 후 과대 집계). 처방: 스키마를 컨텍스트로 명시 주입 + 결과에 **검증 쿼리 페어**(행수·합계 대조) 강제.
- 분석 에이전트 파이프라인에 Sanity Check 4종을 첫 단계로 배선 — 통과 못 하면 분석 진행 대신 데이터 품질 보고.
- 에이전트가 낸 인사이트도 텍사스 명사수 검사를 통과해야 한다: 사후 패턴이면 "다음 기간 데이터로 재검증 필요" 라벨.

## 관련 문서

- [[데이터 원리]] — 저장·모델링 레이어
- [[지표와 실험]] — 지표 설계·인과 판정
- [[QA 원리]] — 검증 행위의 형제 문서
