스파르타클럽 내일배움캠프 QA/QC 5기 05/13 TIL
2026. 5. 13. 20:49ㆍ내일배움캠프 TIL
오늘은 태블로 강의 3강과 라이브 세션을 듣고 개인적으로 진행하고 있는 공모전을 진행했다.
1. 데이터 필드 생성 및 활용 (챕터 3-1)
데이터 그룹
- 차원의 멤버를 사용자 기준으로 묶어 새로운 범주를 만드는 기능
- 원본 데이터는 변경되지 않고, 새로운 차원 필드가 생성됨
- 실습 예시: 17개 시도를 6개 권역(강원, 경기, 경상, 전라, 충청, 제주)으로 그룹핑
- 그룹은 계산식으로도 구현 가능 → IF [시도] IN ('경기도','서울특별시','인천광역시') THEN '경기' ...
집합 (Set)
- 차원의 멤버를 조건에 따라 **포함(True) / 제외(False)**로 나누는 기능
- 세 가지 유형이 존재:
- 정적 집합: 멤버를 수동 선택
- 동적 집합: 조건이나 상위 N 기준으로 자동 분류
- 결합된 집합: 교집합 / 합집합 / 차집합 연산 가능
- 드릴다운 분석 활용: 집합 동작(Set Action)과 계산식을 결합하여 클릭 시 하위 카테고리가 펼쳐지는 인터랙션 구현
구간 차원과 히스토그램
- 연속형 데이터를 일정 간격(Bin Size)으로 나누어 분포를 파악
- 히스토그램: 구간 차원을 열에, 카운트를 행에 배치하여 데이터 분포 시각화
- 막대차트(범주형 비교)와 히스토그램(연속형 분포)의 차이를 구분하는 것이 중요
측정값 이름 & 측정값
- 측정값 이름(Measure Names): 모든 측정값 필드의 이름을 모아둔 가상 차원
- 측정값(Measure Values): 선택된 측정값의 실제 값을 담는 가상 측정값
- 여러 KPI(매출, 수익, 주문 수, 고객 수)를 한 뷰에 나란히 표시할 때 활용
2. 계산된 필드와 계산 수준 (챕터 3-2)
계산된 필드 기본
- 기존 데이터를 바탕으로 사용자 정의 수식을 통해 새로운 필드를 생성
- 만드는 방법: 행/열에 직접 입력(임시 계산) 또는 계산된 필드 편집기 사용
- 네이밍 컨벤션: 계산식은 C_, 매개변수는 P_, 필터는 FLTR_ 접두사 활용
행 수준 계산 vs 집계 수준 계산 ⭐
이 부분이 가장 핵심적인 개념이었다.
구분 행 수준 계산 집계 수준 계산
| 계산 시점 | 집계 전 | 집계 후 |
| 기준 데이터 | 개별 행(Row) | 집계된 결과 |
| 예시 | [수익]/[매출] | SUM([수익])/SUM([매출]) |
| 용도 | 행별 파생 변수 생성 | 비율, 평균 비교, KPI |
핵심: 동일한 수익률 계산이라도 행 수준([수익]/[매출])과 집계 수준(SUM([수익])/SUM([매출]))의 결과가 다를 수 있다. 행 수준은 각 행의 수익률을 먼저 구한 뒤 집계하고, 집계 수준은 전체 수익과 매출의 합을 구한 뒤 나누기 때문이다.
3. 매개변수와 계산식 (챕터 3-3)
매개변수(Parameter)란?
- 사용자가 지정한 단일 값을 저장하는 변수
- 대시보드에서 사용자가 선택/입력하면 계산식, 필터, 참조선 등에 반영되어 뷰가 동적으로 변함
- 필터와 달리 독립적이며, 별도로 계산식이나 필터와 연결해야 작동
매개변수 활용 실습
차원 선택 매개변수 (P_차원 선택):
IF [P_차원 선택]="고객 세그먼트" THEN [고객 세그먼트]
ELSEIF [P_차원 선택]="배송 방법" THEN [배송 방법]
ELSEIF [P_차원 선택]="제품 대분류" THEN [제품 대분류]
ELSEIF [P_차원 선택]="시도" THEN [시도]
END
측정값 선택 매개변수 (P_측정값 선택) — CASE문 활용:
CASE [P_측정값 선택]
WHEN '매출' THEN SUM([매출])
WHEN '수량' THEN AVG([수량])
WHEN '수익' THEN MAX([수익])
WHEN '할인율' THEN MIN([할인율])
END
증감비(전년비) 계산 ⭐
증감비 공식: (비교대상 - 기준) / 기준 × 100
주요 유형:
- YoY (전년비): 올해 vs 작년 같은 기간 → 계절성, 연간 성장 추세 파악
- MoM (전월비): 이번 달 vs 지난 달 → 단기 추세 감지
- WoW (전주비): 이번 주 vs 지난 주 → 캠페인 효과 분석
- DoD (전일비): 오늘 vs 어제 → 전일 대비 변동성 파악
KPI 전년비 계산식:
// C_금년 매출
IF YEAR([주문 일자])=[P_년도] THEN [매출] END
// C_전년 매출
IF YEAR([주문 일자])=[P_년도]-1 THEN [매출] END
// C_매출 전년비
(SUM([C_금년 매출]) - SUM([C_전년 매출])) / SUM([C_전년 매출])
색상 분리 팁: 양수/음수를 별도 계산식으로 분리하여 KPI 카드에서 증가(초록)/감소(빨강) 색상을 적용
4. 계산식 주요 함수 정리 (챕터 3-4)
문자열 함수
함수 용도 예시
| + (결합) | 문자열 합치기 | [시도]+" "+[시군구] |
| LEN() | 문자열 길이 | LEN([고객명]) |
| LEFT() / RIGHT() | 앞/뒤에서 추출 | LEFT([고객번호],2) |
| MID() | 중간 부분 추출 | MID([고객번호], 2, 3) |
| CONTAINS() | 특정 문자열 포함 여부 | CONTAINS([제품명], "Samsung") |
| SPLIT() | 구분자로 분리 | SPLIT([제품 코드], "-", 1) |
| UPPER() / LOWER() | 대소문자 변환 | UPPER([제품명]) |
숫자 함수
- ABS() — 절대값
- CEILING() — 올림
- FLOOR() — 버림
- ROUND() — 반올림
날짜 함수
- DATEADD('year', 1, [주문 일자]) — 날짜에 기간 더하기
- DATEDIFF('day', [주문 일자], [배송 일자]) — 두 날짜 간 차이 계산
순위 함수
- RANK() — 동점 시 같은 순위, 다음 순위 건너뜀 (1, 2, 2, 4)
- RANK_DENSE() — 동점 시 같은 순위, 연속 순위 유지 (1, 2, 2, 3)
- RANK_MODIFIED() — 동점 시 마지막 인스턴스 순위 공유
- INDEX() — 파티션 내 현재 행의 순번 반환
LOD 표현식 (Level of Detail) ⭐
차트의 집계 수준과 무관하게 특정 수준에서 계산할 수 있는 핵심 기능
FIXED 구문:
// 시도별 매출 (뷰의 세부 수준과 무관하게 시도 기준으로 집계)
{FIXED [시도] : SUM([매출])}
// 고객별 첫 구매 일자
{FIXED [고객명] : MIN([주문 일자])}
뷰에 시군구 레벨로 데이터가 표시되더라도, FIXED로 시도 레벨의 매출 합계를 함께 볼 수 있다는 점이 강력하다.
📌 대회 개요
- 주제: LiDAR 센서로 관측된 모기의 3D 좌표 시계열 → 80ms 후 위치 예측
- 입력: 40ms 간격 11개 시점 (−400ms ~ 0ms)의 (x, y, z) 좌표
- 출력: +80ms 시점의 (x, y, z) 좌표
- 평가: R-Hit@1cm — 예측과 실제 간 3D 거리가 10mm 이내면 적중(1), 아니면 실패(0). 전체 평균 적중률이 점수
- 데이터: train 10,000개 / test 10,000개 (각각 개별 CSV 파일)
📊 EDA 핵심 발견
모기 운동 특성
- 평균 속도 약 0.62 m/s, 대부분 0.1~1.0 m/s
- 궤적 직선성 평균 0.895 → 90%의 모기는 거의 직선 비행
- 방향 변화 평균 12.1°, 대부분 0~10° → 급격한 방향 전환은 드묾
- 축 간 상관 거의 0 → x, y, z 독립 예측 가능
노이즈
- 관측 노이즈 약 2.8mm (3차 다항식 잔차 기준)
- x축(3.2mm) > y축(3.0mm) > z축(2.1mm)
- 속도/가속도 계산 시 노이즈가 증폭되는 문제 확인
타겟 변위
- t=0 → +80ms 이동 거리 중앙값 46.2mm
- 108mm 근처 상한선 존재 (시뮬레이션 제한 추정)
- dx vs dy 산점도 원형 → 이동 방향 편향 없음
베이스라인 비교 (수학적 외삽)
방법 Mean Error Hit@10mm
| Static (움직임 없음) | 51.0mm | 0.49% |
| Linear 외삽 | 12.9mm | 57.88% |
| Linear + 가속도 | 16.3mm | 51.31% |
| 2차 다항식 | 33.1mm | 21.23% |
→ 단순 선형 외삽이 가장 강력. 가속도/다항식은 노이즈 증폭으로 오히려 나빠짐
난이도 분석
- Easy (91.4%): 직선 비행, Linear 오차 < 30mm
- Hard (8.6%): 빠른 속도 + 큰 방향 변화, 오차 최대 98mm
- Hard 케이스의 공통점: 관측 구간 후반부에서 방향 전환
Train vs Test
- 속도 분포 거의 동일 → 운동 패턴은 환경 무관
- x축 좌표에서 Test가 약간 더 넓음 → 절대좌표 의존 금지
🔧 모델링 과정
Phase 1: LightGBM v1 (잔차 보정)
- 전략: Linear 외삽 예측값의 잔차를 LightGBM으로 보정
- 피처: 상대좌표, 변위, 스무딩 가속도, 방향 변화 등 179개
- 결과: Hit@10mm 59.97% (대회 점수 60.12%)
- 문제: Early stopping이 21~61 라운드로 너무 빠름. 피처 중요도에서 "마지막 변위"에만 과도하게 의존. Easy 케이스 보정 0mm, Hard만 6.59mm 개선
Phase 2: LightGBM v2 (직접 예측)
- 변경: 타겟을 잔차 → 상대 변위 직접 예측으로 변경, 피처 강화
- 결과: Hit@10mm 57.36% ← 오히려 악화!
- 원인: Hard 개선(+9.08mm)했지만 Easy 악화(-0.77mm). Easy가 91.4%이므로 전체 성능 하락
- 교훈: Easy 케이스를 보호하는 잔차 보정 방식이 안전함
Phase 3: LightGBM v3 (v1 방식 + v2 피처)
- 전략: v1의 잔차 보정 + v2의 강화 피처 + Huber loss
- 피처 강화: 다중 스무딩(window 3,5,7,9), 곡률, 다중 시간 스케일 속도, 물리 기반 힌트, 교차 피처
- 하이퍼파라미터: num_leaves 127, lr 0.02, 5000 rounds
- 결과: Hit@10mm 61.96% (대회 점수 64.38%)
- Easy 8.42mm(+0.27mm 개선), Hard 49.80mm(+8.19mm 개선) — 둘 다 개선 성공
Phase 4: XGBoost + 앙상블
- 결과: LGB-XGB 상관 0.99로 거의 같은 모델 → 앙상블 효과 미미 (+0.14%p)
- 교훈: 같은 피처/타겟에 유사 알고리즘을 쓰면 다양성이 없어 앙상블 효과 없음
Phase 5: DL 모델 (CNN+GRU) + 3모델 앙상블
- DL 구조: 1D-CNN → Bidirectional GRU → Attention → 출력
- 입력: 20채널 시퀀스 (원시/스무딩 좌표, 변위, 속도, 가속도)
- 결과: DL 단독 Hit@10mm 63.53% — LGB(61.96%)보다 +1.57%p 높음
- LGB-DL 상관 0.97 → 트리 대비 다른 패턴 포착
- 3모델 앙상블 (LGB+XGB+DL): Hit@10mm 63.73% (대회 점수 65.76%)
📈 점수 변화 추이
버전 OOF Hit@10mm 대회 점수
| Linear 외삽 (기준) | 57.88% | - |
| LightGBM v1 | 59.97% | 60.12% |
| LightGBM v2 | 57.36% | - |
| LightGBM v3 | 61.96% | 64.38% |
| LGB+XGB 앙상블 | 62.10% | - |
| LGB+XGB+DL 앙상블 | 63.73% | 65.76% |
💡 핵심 인사이트 & 교훈
- 단순한 베이스라인의 힘: Linear 외삽이 57.88%로 이미 강력. 복잡한 방법(2차 다항식, 가속도 보정)이 오히려 나빴음
- 노이즈 증폭 문제: 관측 노이즈 3mm가 미분 연산 시 증폭됨. Savitzky-Golay 스무딩으로 30.5% 노이즈 감소 달성
- 잔차 보정 vs 직접 예측: 잔차 보정이 Easy 케이스를 보호하면서 안전한 개선 가능. 직접 예측은 공격적이지만 Easy 악화 위험
- Huber Loss의 효과: MAE에서 Huber로 변경 시 Hard 케이스 보정이 더 적극적으로 이루어짐
- 앙상블은 다양성이 핵심: LGB-XGB 상관 0.99 → 효과 없음. LGB-DL 상관 0.97 → 의미 있는 개선. 서로 다른 구조의 모델이 필요
- OOF vs 실제 점수 갭: OOF보다 실제 점수가 약 2%p 높게 나옴. Test가 약간 더 예측하기 쉬운 분포
'내일배움캠프 TIL' 카테고리의 다른 글
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/14 TIL (0) | 2026.05.14 |
|---|---|
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/12 TIL (0) | 2026.05.12 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/11 TIL (0) | 2026.05.11 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/08 TIL (0) | 2026.05.08 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 05/07 TIL (0) | 2026.05.07 |