projects

모델 4종 — 답을 만드는 네 가지 방식

모델 4종 — 답을 만드는 네 가지 방식

넷은 무작위 선택이 아니라 "답을 만드는 방식"의 사분면: 전역 함수형(Linear, SVR) vs 공간 분할형(RF, HGB), 분할형 안에서 평균(RF) vs 잔차 보정(HGB). 체질이 정반대인 모델들이 Stage 1에서 한 점에 수렴 → 천장은 데이터의 것(H1). Stage 2에서 같이 뛰어오름 → 효과는 feature의 것(H2).


1. Linear Regression (OLS) — 가중합이라는 가장 단순한 가설

원리: y^=Xβ\hat{y} = X\beta, 제곱 오차 최소화. 미분 = 0에서 닫힌 해:

β^=(XX)1Xy(normal equation — 반복 학습 없음, 학습 0.1초)\hat\beta = (X^\top X)^{-1}X^\top y \quad (\text{normal equation — 반복 학습 없음, 학습 0.1초})

가정의 대가: 선형성·등분산·full rank — ① 데이터 분포 축 전체가 사실 이 모델의 가정 점검이었다. 등분산 위반 → log, rank 결손 → drop='first', IR 3.05% → 가중합 표현의 충분성 보증.

체질: high bias · low variance. 계수 해석 가능 (OneHot 가중합 = "기준 대비 그룹 보정").

실측: Stage 1 0.7906 (천장 근접). CV fold std 0.060 — 유일하게 시즌 구성에 민감한 체질(③ 축 발견) → Stacking meta +0.06의 낮은 신임.


2. SVR (RBF kernel) — "충분히 가까우면 무시한다"는 손실

원리 1 — ε-insensitive loss: 예측 주위 폭 ε의 관(tube). 관 안 오차 = 0, 관 밖 점들만 해에 기여(= support vectors). 제곱 손실과 철학이 다름: "대충 맞으면 됐고, 크게 벗어난 놈만 본다".

원리 2 — RBF kernel: k(x,x)=exp(γxx2)k(x,x') = \exp(-\gamma\|x-x'\|^2) — 명시적 고차원 변환 없이 유사도로 비선형 곡면 생성(kernel trick). 가까운 점들의 의견을 부드럽게 섞음 → smooth.

비용: kernel 행렬 O(n2)O(n^2) — 일별 913K행이면 6TB로 불가능. 주간 reframing이 이 모델의 생존 조건 (full train 531초, CV fold당 35초). 거리 기반 → StandardScaler 필수.

설정·실측: C=1.0, gamma='scale', log 적용. Stage 1 0.7913 → Stage 2 0.9835. Stacking meta −0.0099 — "HGB가 아는 걸 더 느리게 알 뿐"이라는 자백.


3. Random Forest — 손떨림을 평균으로 지우는 설계

원리: decision tree(공간을 조건문으로 분할, 영역별 평균 예측)는 가정이 거의 없고(등분산 불필요, 상호작용 자동 — ① 축 tree 면제의 이유) 표현력이 높지만 분산 덩어리 — 데이터가 조금 바뀌면 분기가 통째로 바뀐다.

bagging의 처방: bootstrap 표본마다 tree를 키워 평균. 평균이 분산을 1/k로 줄이는 조건("오차의 독립")을 설계로 제조 — 데이터도 다르게(bootstrap), 분기마다 보는 feature도 다르게(무작위 부분집합) 해서 tree 간 상관을 일부러 끊는다. Voting이 우리 4모델에서 실패한 이유(오차 상관)를 내부에서 미리 해결해 둔 모델.

체질: variance를 지우는 기계 (bias는 tree 수준 유지).

설정·실측: n_estimators=100, 학습 1.7초. Stage 1 best 0.7917. Stacking meta +0.17 (2등 신임).


4. HGB (Histogram-based Gradient Boosting) — 오차를 깎는 릴레이

원리: RF가 병렬 평균이라면 boosting은 직렬 릴레이 — 두 번째 tree는 첫 tree의 잔차를, 세 번째는 남은 잔차를 학습. 매 단계가 "못 맞힌 부분"만 노림 → 반복할수록 bias가 깎인다 (RF와 정확히 반대 방향의 기계). "gradient"의 의미: 잔차 = 제곱 손실의 기울기 — 임의 손실로 일반화하면 함수 공간의 경사하강.

제동 장치: 과적합 성향이 기본값 → shrinkage(작은 걸음) + 얕은 tree + early stopping (max_iter=300은 상한, 실제 정지는 val 기준 — loss curve의 iter 82, ④ Q3).

"Histogram": 연속 feature를 256 bin으로 양자화 → 분할 후보 탐색 급감 → boosting인데 1.2초.

실측 — 이 프로젝트 서사의 백미: Stage 1 꼴찌(0.7884) → Stage 2 best(0.9856) → 튜닝 후 최종 Test 0.9858. 해석: Stage 1은 정답이 그룹 평균이라 표현력이 점수로 환전되지 않는 시험(정칙화 때문에 미세 손해). Stage 2에서 lag·계절·그룹이 얽힌 비선형 구조가 생기자 잔차 깎는 능력이 값을 받음. Stacking meta +0.78의 압도적 신임.


정리 표

답을 만드는 방식체질Stage 1학습 시간비고
Linear전역 가중합 (닫힌 해)bias↑ var↓0.79060.1slog 적용, 시즌 민감 (std 0.060)
SVR (RBF)유사도 기반 smooth 곡면중간, smooth0.7913531slog 적용, O(n²) — 주간화로 생존
RFtree 병렬 평균 (bagging)var를 지움0.79171.7s상호작용 자동, meta +0.17
HGBtree 직렬 잔차 보정 (boosting)bias를 깎음0.78841.2sStage 2 역전 → 최종 0.9858, meta +0.78

예상 질문

  1. "왜 이 4개인가?" → 수업 도구 범위 안에서 "답을 만드는 방식"의 사분면을 덮도록 — 체질이 다른 모델들이 같은 결론을 낼 때 그 결론은 모델이 아니라 데이터의 성질이 된다(Stage 1 수렴, Stage 2 동반 상승의 논거).
  2. "HGB가 Stage 1에서 꼴찌였는데 왜 버리지 않았나?" → Stage 1은 정답(그룹 평균)이 단순해 표현력이 변별되지 않는 시험. 모델 선택은 표현력이 필요해지는 Stage 2 이후로 미루는 게 설계였고, 실제로 역전됐다.
  3. "RF와 HGB 둘 다 tree인데 무엇이 다른가?" → 같은 재료, 반대 방향 — RF는 독립적 tree들의 평균으로 variance를 지우고, HGB는 순차적 잔차 학습으로 bias를 깎는다. ④ 축의 진단(bias 96.3%)에서 HGB가 최종 모델이 된 것과 정합.
  4. "SVR의 ε-tube가 SMAPE와 어울리는 이유?" → 작은 오차를 무시하는 손실 철학이 "±5% 정도는 운영상 무해"라는 수요예측 감각과 닮았다 — 다만 본 과제 평가는 R²·SMAPE 원 스케일 통일이라 손실 차이는 점수 차이로 거의 안 드러났다.