projects

시간 의존성 축 — 교과서 + history 통합 노트

시간 의존성 축 — 교과서 + history 통합 노트

time-dependency-flow의 4개 질문을 교과서 개념 + 우리가 밟은 절차의 history로 확장한 노트.

약자 정리

약자Full name한국어
ACFAutocorrelation Function자기상관함수
PACFPartial Autocorrelation Function편자기상관함수
STLSeasonal-Trend decomposition using LOESSLOESS 기반 계절-추세 분해
LOESSLocally Estimated Scatterplot Smoothing국소 회귀 평활
ADFAugmented Dickey-Fuller (test)확장 디키-풀러 검정
AR(p)Autoregressive (process of order p)p차 자기회귀 과정
MA(q)Moving Average (process of order q)q차 이동평균 과정

Q1. 시간 신호가 실제로 존재하는가 — 존재 증명

교과서: 회귀의 침묵하는 가정, 행들의 독립

회귀는 관측치들이 서로 독립(i.i.d.)이라고 가정한다. 시계열은 이를 정면으로 위반하는 게 보통 — 자기 과거와의 닮음을 재는 도구가 자기상관:

ρk=Corr(yt,  ytk)\rho_k = \mathrm{Corr}(y_t,\; y_{t-k})

도구 1: 합의 분산 공식 (간접 증거)

Var(Xi)=Var(Xi)+ijCov(Xi,Xj)\mathrm{Var}\Big(\sum X_i\Big) = \sum \mathrm{Var}(X_i) + \sum_{i \neq j} \mathrm{Cov}(X_i, X_j)

일별 판매가 독립이면 주간 합의 분산 = 7σ27\sigma^2. 양의 상관이 있으면 7σ2[1+6ρˉ]7\sigma^2[1+6\bar\rho]로 부푼다. 이 식은 거꾸로 풀 수 있다 — 주간 분산 실측이 이론값의 6.15배1+6ρˉ=6.151+6\bar\rho = 6.15ρˉ0.86\bar\rho \approx 0.86. 모델 없이 집계 산수만으로 존재와 크기를 동시에 획득.

도구 2: 잔차 진단 (직접 증거)

교과서 원칙: 모델이 일을 다 했다면 잔차는 백색잡음이어야 한다 (고전 도구: Durbin-Watson, 일반화: 잔차 ACF). Stage 1 잔차 ACF lag-1 = 0.7001 — 이번 주 빗나간 방향으로 다음 주도 빗나감. 잔차에 시간 패턴이 통째로 잔존.

history와 구조

  1. 간접 증거(6.15배)는 모델링 , 주간 reframing 검토에서 — 사전 예상의 근거
  2. Stage 1 = 의도된 대조군 (시간 없는 모델을 천장에 수렴시킴)
  3. 직접 증거(잔차 ACF 0.70)가 확인 사살 — 천장 밖 20.51%의 상당량이 시간의 자리
  4. 결정: 시계열 FE 투자 확정 → Stage 2

핵심 논리: 한 증거는 데이터의 성질에서(모델 무관), 다른 증거는 모델의 실패 패턴에서(모델 경유) — 독립된 두 경로의 합치 = 삼각측량.

예상 질문: "ρ̄ 0.86과 잔차 ACF 0.70이 왜 다른가?" → 다른 양. 0.86은 원시 판매의 평균 상관(신호 전체), 0.70은 store·item 효과 제거 후 잔차의 상관. 시간 의존성 일부가 그룹 정체성과 겹치므로 후자가 약간 작은 게 자연스럽다.


Q2. 신호의 구조 — 어느 lag에, 어떤 주기로

각 도구가 서로 다른 질문에 답한다.

ACF — "어디에 상관이 있나" (누적)

모든 lag의 ρk\rho_k 나열. 간접 경로(메아리) 포함 총 상관. 패턴 읽기: 느린 감쇠 = 추세, 일정 간격 봉우리 = 계절성.

실측 해석: lag-52 = +0.64 — "1년 전 같은 주와 산점도를 찍으면 뚜렷한 우상향, 작년 이맘때로 올해의 절반 이상이 맞는다". lag-26 = −0.38 — 반년 전과는 역방향(성수기↔비수기). 두 숫자는 한 쌍으로 읽는다: 위상까지 맞물린 +산(52)/−골(26)은 연간 주기 외엔 설명 불가.

PACF — "직접 경로는 무엇인가"

lag 1~k−1의 영향을 통제한 뒤 남는 lag k의 상관 = yty_tyt1,,ytky_{t-1},\ldots,y_{t-k}에 회귀했을 때 ytky_{t-k}의 계수. 모델 식별표: AR(p)면 ACF는 천천히 감쇠, PACF는 lag p에서 절단(cut-off).

실측 해석: lag-1 = +0.89 — "지난주 하나로 이번 주 대부분이 결정". lag-2 = +0.20 — "지난주를 알아도 지지난주가 추가로 주는 정보가 조금 있다". lag-3부터 절벽 — "3주 전 이전은 전부 lag-1·2를 경유한 메아리". → lag를 수십 개 만들 필요 없음. (주의: PACF 절벽은 단기 직접 경로 이야기 — lag_52는 ACF·STL이 잡은 별도 구조, 출처가 다른 feature)

STL — "성분별로 얼마나 강한가"

yt=Tt+St+Rt,FS=max(0,  1Var(R)Var(S+R))y_t = T_t + S_t + R_t, \qquad F_S = \max\Big(0,\; 1 - \frac{\mathrm{Var}(R)}{\mathrm{Var}(S+R)}\Big)

"계절 성분을 빼면 잔차 출렁임이 몇 % 줄어드나" — η²와 같은 분산 몫 정신.

실측 해석: 분산 성분 747(계절)/236(추세)/89(잔차) → F_S 0.89 > F_T 0.71 — 이 시계열의 모양은 사실상 계절이 만든다, 계절이 추세의 3배. ACF와 독립 방법으로 같은 결론(삼각측량). 검증 일화: notebook의 강도 식 분모 swap을 분산 성분으로 검산해 발견, 보고서는 재계산값 사용.

ADF — "이 구조가 안정적인가"

lag·rolling은 "과거-현재 관계의 시간 불변"(정상성) 전제 위에서 작동. ADF는 H0H_0 = 단위근(비정상). 비정상이면 차분 처방.

실측 해석: 500개 시계열 중 96.2% 정상 — "2013년에 배운 규칙을 2017년에 적용해도 된다는 안전 보증". 나머지 3.8%는 유의수준 5%의 500회 검정에서 우연만으로도 나올 수준. → 차분 불필요.

네 답 → feature 명세

lag_1·2(PACF 직접 경로) + lag_52(ACF·STL 연간 주기) + rolling 4주(STL 추세) + sin·cos(달력). 79개 중 임의 선택이 하나도 없다 — feature마다 "어느 진단의 어느 측정값 때문"이라고 출처를 댈 수 있다.

한 문장: "신호는 1년 주기로 강하게 반복되고(ACF·STL), 직접 기억은 2주면 끝이며(PACF), 구조는 기간 내내 안정적이다(ADF)."

예상 질문: "PACF lag-1(0.89)과 Q1의 ρ̄(0.86)이 비슷한 건 우연?" → 정합이다. 둘 다 인접 시점 직접 상관을 다른 방법으로 잰 것 — 가까워야 정상이고, 실제로 그랬다는 게 측정 신뢰를 더한다.


Q3. 어떻게 누수 없이 번역하나 — 안전한 시공

교과서: 데이터 누수 — 가장 달콤한 부정행위

정의: 예측 시점에 알 수 없는 정보가 feature에 스며드는 것. 증상이 좋은 점수라는 게 무서운 점 — 검증은 훌륭한데 실전에서 무너진다. 비유: 시험 전날 답안지를 본 학생의 모의고사 만점.

시계열 FE의 누수 3경로:

  1. 전기간 통계 — rolling·그룹 통계를 전체 기간으로 계산 → train 행에 test 기간 값 혼입
  2. 전기간 인코딩 — target encoding 등을 전체로 fit → test의 target 정보가 train으로
  3. 미래 보간 — 결측을 앞뒤 값으로 채움 → '뒤'가 미래
  • 우리 데이터 특유의 4번째: 500개 시계열이 한 테이블 — 통째로 shift하면 시계열 간 오염(남의 답안지).

교과서: 구조적 방어 — shift

원칙은 "조심해서 계산"이 아니라 미래 참조가 불가능한 연산 구조:

lagk(t)=ytk(시간순 정렬 후 k칸 밀기 — 미래를 참조할 방법이 없음)\text{lag}_k(t) = y_{t-k} \quad (\text{시간순 정렬 후 } k\text{칸 밀기 — 미래를 참조할 방법이 없음})

rolling은 shift(1) 후 창 평균 → "이번 주 포함 평균"(누수)이 아니라 "지난주까지의 평균"(안전).

결측의 갈림길

lag_52는 각 시계열 첫 52주에서 정의 불가. 보간(누수 위험) vs 제거(데이터 손실) — 판단 기준은 "잃는 데이터가 감당 가능한가". 26,000행(20%) 제거, 130K→104K. 버리면 잃는 건 데이터 20%, 채우다 새면 잃는 건 점수 전체의 신뢰성. 104K도 79열 대비 풍족(1,300:1), 잘리는 건 정보 가치 낮은 첫 해.

우리가 실제로 한 순서

  1. (store, item) 500그룹으로 묶고 시간순 정렬 — 시계열 간 오염 차단
  2. 그룹 안에서 shift → lag_1·2·4·52
  3. rolling은 shift 후 평균 — 전기간 통계 차단
  4. 주차·월 → sin·cos (미래 참조 자체가 없는 feature)
  5. NaN 행 제거 (보간 기각) — 26K행, 130K→104K
  6. 최종 79열 = OneHot 69(store 9 + item 49 + month 11) + numerical 10
  7. StandardScaler train에서만 fit — 거리 기반 모델(SVR RBF)의 스케일 독점 방지 + 마지막 누수 통로 차단
  8. split도 시간 cutoff — ③ 평가 축으로 연결

예상 질문

  • "20% 손실이 아깝지 않나?" → 손실의 대가로 산 것이 평가의 신뢰성. 정직한 104K > 오염된 130K.
  • "누수 없음을 사후에 어떻게 확인?" → 본질은 설계 보장. 간접 증거: CV-Test 격차 Δ ≤ 0.007 — 누수가 있으면 CV가 비정상적으로 부푼다.

Q4. 효과는 얼마이고, 모델과 무관한가 — 검증

교과서: 통제 실험 — 차이의 귀속

과학 실험 제1원칙: 한 번에 하나만 바꾼다(ablation). Stage 2에서 바꾼 것은 입력뿐(58→79열), 모델 4종·hyperparameter는 Stage 1과 동일 고정 (notebook: "순수 FE 효과 측정"). 향상이 4개의 다른 모델에서 비슷한 폭이면 효과는 모델의 것일 수 없다 — 공통 원인은 바뀐 입력뿐.

실측: Δ R² = +0.1775 ~ +0.1972, 4모델 전부 좁은 구간 → 효과의 주인은 feature.

교과서: importance — 한 방법을 믿지 않는 이유

  • 불순도 기반(MDI): 학습 중 분기의 불순도 감소 합. 공짜지만 학습 데이터 기준 + high-cardinality 편향
  • permutation: feature를 셔플해 성능 하락 측정. 모델 불문·검증 기준이지만 상관 feature 간 과소평가 가능

→ 처방은 교차 확인. 실측: 방법 불문 lag_52 ≈ 94% 압도적 1위. 사슬 정합: Q2 진단의 예고 서열(연간 ≫ 단기 ≫ 추세)과 사후 importance 서열(lag_52 ≫ lag_1 ≫ rolling) 일치.

잔차 재진단 — 같은 청진기를 치료 후에

Q1의 도구(잔차 ACF)를 다시: 0.70 → 0.24. 시간 구조 대부분이 잔차에서 feature로 이동한 직접 증거. 0이 아닌 0.24는 잔여 구조의 정직한 기록 — Stage 3과 최종 결론(외생 변수)의 복선.

흡수율 — "가능했던 것 대비"의 척도

흡수율=RS22RS121RS12\text{흡수율} = \frac{R^2_{S2} - R^2_{S1}}{1 - R^2_{S1}}

Stage 1이 못 먹은 분산 20.51% 중 94.5%(best→best; HGB 단독 96.1%) 흡수. → H2 적중, 잔여 ~1.4%는 Stage 3의 질문으로.

예상 질문

  • "importance 94% 단일 집중은 위험하지 않나?" → 운영 관점에선 단일 의존 리스크(신상품 cold-start). 본 과제의 질문("시간 신호의 정체")에는 명확한 답 = 발견. 한계 절에 별도 기재.
  • "왜 hyperparameter를 동일하게 뒀나?" → 튜닝까지 했다면 향상분이 feature 덕인지 튜닝 덕인지 분리 불가. 튜닝 효과는 Stage 3에서 별도 측정(+0.0002) — 그 작은 값이 역으로 "Stage 2의 점프는 거의 전부 feature"를 사후 확정.

한 줄 사슬 요약

존재(6.15배·ACF 0.70) → 구조(ACF·PACF·STL·ADF가 각자의 질문에 답해 feature 명세로) → 시공(누수 3경로를 구조로 차단, 130K→104K·58→79열) → 검증(통제 실험 Δ+0.18~0.20, lag_52 94%, 잔차 0.70→0.24, 흡수율 94.5%) — H2 적중, 잔여 1.4%는 Stage 3로.