daily report

Daily Work Report: 2026-01-16

Beauty Insight Editor

Daily Work Report: 2026-01-16

Subject: Forecast Engine 고도화를 위한 전략적 숨 고르기 (Strategic Pause for Forecast Engine Refinement)

1. Executive Summary (요약)

  • Forecast Implementation Attempt: Prophet 모델과 Google Trends 선행지표를 결합한 수요 예측 엔진 구현을 시도했으나, 데이터 정합성 문제로 잠정 중단 및 고도화(Refinement) 모드로 전환했습니다.
  • Performance & UX Priority: 실시간 예측 연산으로 인한 페이지 로딩 지연(10초+)을 제거하기 위해 예측 기능을 비활성화하고 'Instant Load' 환경을 구축했습니다.
  • Coming Soon Overlay: 사용자 경험을 해치지 않으면서 기대감을 줄 수 있도록, 차트 영역에 "AI 분석 엔진 고도화 중 (Coming Soon)" 오버레이를 적용했습니다.
  • Backend Robustness: 향후 재가동을 대비해 Pytrends 429 에러 방지 및 'Export-Correlated Mock Data' 생성 로직을 백엔드에 심어두었습니다.

2. Technical Implementation (구현 상세)

Backend (FastAPI/Python)

  • Smart Mock with Business Logic (src/forecasting/trends.py):
    • 기존 랜덤 워크(Random Walk) 방식의 Mock 데이터가 비즈니스 현실과 동떨어진 결과(예: 이유 없는 급락)를 초래함.
    • 이를 해결하기 위해 실제 수출 실적(Export Value)의 추세를 30% 반영하는 Correlated Mock 로직을 구현하여 데이터 정합성을 높임.
  • Model Regularization (src/forecasting/engine.py):
    • Google Trends, 환율 등 외부 변수(Regressors) 간의 다중공선성(Multicollinearity)을 방지하기 위해 prior_scale=0.05의 강력한 규제(Regularization)를 적용.
  • Stability Engineering:
    • Google Trends API(Pytrends)의 429 Too Many Requests 에러를 회피하기 위해 Random Sleep (10~20s) 및 타임스탬프 기반 캐싱(Caching) 전략 도입.

Frontend (Next.js/TypeScript)

  • UI/UX Refinement (TrendsChart.tsx):
    • 불완전한 예측 데이터를 노출하는 대신, Coming Soon 오버레이를 적용하여 "서비스 점검 중"이 아닌 "기능 고도화 중"이라는 긍정적 메시지 전달.
    • Framer Motion을 도입하여 부드러운 Fade-in 효과와 Pulse Animation(반짝임)으로 고급스러운 느낌 강조.
  • Performance Optimization (indicators.ts):
    • fetchForecast API 호출을 주석 처리하여, 대시보드 진입 속도를 약 10초 → 0.5초로 획기적으로 단축.

3. Troubleshooting Log (문제 해결 로그)

Issue 1: Mock Data Mismatch (Business Logic)

  • [증상] Google Trends API 차단 시 생성되는 Mock 데이터가 실제 수출 호황기에도 '하락세'를 그려, 예측 모델이 "미래 급락"을 예고하는 심각한 왜곡 발생.
  • [원인] Mock 데이터 생성 로직이 단순히 '과거 평균 유지' 또는 '랜덤 변동'에 의존했기 때문. 경제학적 관점에서 실제 수출(Export)과 선행 지표(Trends)는 양의 상관관계를 가져야 함.
  • [해결] trends.py에서 Mock 데이터 생성 시 (0.7 * Base) + (0.3 * Normalized_Export_Trend) 공식을 적용. 데이터가 없을 때도 **"수출이 잘 되면 트렌드도 좋았을 것이다"**라는 합리적 가정을 주입.

Issue 2: Non-China Forecast Spikes

  • [증상] Non-China(비중국) 지역 예측치가 특정 시점에 3배 이상 급등하는 이상치(Outlier) 발생.
  • [원인] China 예측치(차감 항목)가 Mock 데이터의 영향으로 과도하게 낮아지면서, 상대적으로 Non-China 잔여량이 폭증한 계산상의 착시.
  • [해결]
    1. Frontend 차트 리렌더링 시 Dynamic Cap (과거 최고치의 1.5배) 적용.
    2. Mock Data의 기본 레벨(Level)을 80 → 50으로 하향 조정하여 변동성 축소.

Issue 3: Backend Startup Error

  • [증상] trends.py 수정 후 서버 재시작 시 NameError: name 'List' is not defined 발생.
  • [원인] Type Hinting 사용 시 from typing import List 구문 누락.
  • [해결] 누락된 Import 구문 추가하여 정상 구동 확인.

4. Key Learnings & Decisions (배운 점 및 의사결정)

  • Strategic Retreat for Quality:
    • 기술적으로 동작한다고 해서 비즈니스적으로 유의미한 것은 아닙니다. 억지로 예측 값을 보여주는 것보다, **"현재 더 완벽한 모델을 준비 중이다"**라고 솔직하게 커뮤니케이션하는 것이 사용자 신뢰(Trust)를 유지하는 데 더 유리하다는 판단을 내렸습니다.
  • Data Integrity over Availability:
    • 데이터가 없을 때 무작정 채워넣기(Imputation)보다는, **도메인 지식(경제학적 상관관계)**을 활용해 합리적인 가상의 데이터를 생성하는 것이 AI 모델의 환각(Hallucination)을 줄이는 핵심임을 재확인했습니다.

Beauty Insight Editor

Sharing insights on K-Beauty trends and data-driven export strategies. We help brands expand globally with the power of AI.