Today I Learned

[내일배움캠프 QA/QC 6기] TIL #053

JiJi0406 2026. 7. 28. 21:13

 

오늘은 시계열 데이터를 모델이 이해할 수 있는 Feature로 변환하는 기법 + 실전 KPI & ML 예측 대시보드를 Streamlit으로 만드는 법을 배웠다.

 

 

[ 시계열 Feature Engineering ]

1. 왜 Feature로 변환해야 하는가? 

  • 사람은 그래프만 봐도 "어? 5분 전보다 압력이 올랐네?", "최근에 변동이 좀 심한데?" 하고 한눈에 파악함.
  • 하지만 모델은 눈이 없어서 현재 행의 숫자 하나밖에 못 봄!
  • 따라서 [시간의 흐름 / 최근 변동성 / 과거 상태] 같은 정보들을 직접 Feature로 만들어서 주입해 줘야 함.
  • 주의: 컬럼을 무작정 많이 만드는 게 장땡이 아님! 설비 반응 시간과 도메인 맥락에 맞는 과거 정보를 똑똑하게 선택하는 게 핵심.

 

2. 예측 문제 정의의 4요소 

모델을 만들기 전에 이 4가지를 무조건 먼저 정의해야 함.

요소 정의 설명 및 주의사항
Target 무엇을 예측할 것인가? df["sensor"].shift(-5)처럼 미래 값으로 생성 (미래 정보 누수 주의!)
Forecast Horizon 얼마나 먼 미래를 예측할 것인가? 짧으면 현재 값 영향이 크고, 길면 장기 추세가 중요해짐 (현장 조치 가능 시간과 연결 필수)
Granularity 한 행이 의미하는 시간 단위는? 초/분/시간 단위 등 수집 주기에 맞춰 설정
Input Window 과거 얼마나 긴 구간을 볼 것인가? 모델 학습 및 Feature 생성에 쓸 연속된 과거 데이터 길이

 

3. 핵심 Feature 3대장 (Lag, Difference, Rolling) 

Feature 종류 개념 및 의미 주요 활용 및 특징
Lag Feature 과거 특정 시점의 값 (.shift(k)) 과거에 얼마였는가? (자기 자신의 과거값 or 타 센서의 반응 시차 이용)
Difference 현재 값 - 과거 값 얼마나 변했는가? (상승/하락 방향과 변화 크기 파악, 정상성 확보)
Rolling Feature 최근 구간의 이동 통계량 (Mean, Std, Range 등) 최근 공정 수준 및 불안정성 파악 (Window 길이는 센서 반응 속도에 맞춤)

 

💡Difference만 쓰면 "현재 절대적인 수준" 자체를 잃어버리므로, 보통 [현재값 + Lag + Difference]를 함께 조합해서 씀

 

4. 상태형 Feature & 센서 간 관계

  • 단순히 센서 수치만 보는 게 아니라, 현재 가동 상태(COMP_last), 가동 비율(COMP_on_ratio), "상태가 방금 막 바뀌었는지(COMP_change)" 같은 조건도 중요한 Feature가 됨
  • 다변량 센서 데이터에서는 평소에 같이 움직이던 센서 간 상관관계가 깨지는 것 자체가 이상 신호(Anomaly)의 힌트!

 

5. 시계열 데이터 분리 & 평가 

  • 시간 순서 유지: 시계열은 절대 랜덤 셔플 금지! 미래 데이터로 과거를 예측하는 누수가 생김(과거 80% Train, 최근 20% Test)
  • Gap (Embargo): Forecast Horizon이 Train/Test 경계를 넘어가면 데이터 누수가 생길 수 있으므로 경계 부분 데이터를 살짝 비워둠
  • Walk-forward Validation: 시간에 따른 성능 변화를 보기 위해 학습 구간을 뒤로 늘려가며 여러 번 검증
  • Baseline 모델: 짧은 Horizon에서는 "현재 값이 미래에도 유지된다"는 Naive Forecast가 생각보다 엄청 강력함. 복잡한 ML 모델은 무조건 이 Naive baseline보다 성능이 잘 나와야 쓸 모가 있음!

 

평가지표 3종 비교

지표 장점 단점 / 주의사항
MAE 원본 데이터와 단위가 같아서 현장 직관적 해석 쉬움 큰 오차에 특별한 가중치를 주지 않음
RMSE 제곱을 취하므로 큰 오차에 더 큰 패널티를 부여 이상치에 유독 민감함
MAPE 퍼센트(%) 비율 오차라 상대적 비교 가능 actual 값이 0 근처면 값이 폭발함 (모터 전류 등에 부적합)

 


 

[ Streamlit 실전 대시보드 구축 ]

 

1. 멀티페이지 모듈화 구조 

하나의 파일에 몰아넣지 않고, 역할별로 깔끔하게 분리

main.py (페이지 라우팅 및 공통 로직)

➔ dashboard_page.py (KPI 시각화 및 현황 모니터링)

➔ prediction_page.py (ML 모델 기반 결함/이상 예측)

 

2. KPI 대시보드 개발 패턴

  • @st.cache_data로 CSV 데이터 로딩 속도 최적화
  • 사이드바 연월 선택 시, 지난달(df_prev)과 이번 달(df_selected)을 계산해 st.metric의 delta(증감율) 속성으로 한눈에 비교
  • Plotly의 go.Indicator 게이지 차트로 목표 대비 달성률 시각화

 

3. ML 예측 대시보드 개발 패턴

  • 사전 학습된 머신러닝 모델(.pkl)을 @st.cache_data로 불러와서 재로드 방지
  • st.form()을 사용해 슬라이더, 입력창 등의 값들을 묶어서 [예측 실행] 버튼 한 번으로 폼 제출 처리 (매번 재실행되는 현상 방지)
  • model.predict_proba()로 결함 확률을 계산하고, 결과에 따라 st.success / st.error 알림창 구분 출력
  • 입력된 센서값이 전체 데이터 분포 중 어디 위치에 있는지 히스토그램 위 빨간 점선으로 표시해 직관성 극대화

 

~ 정리 ~

- 시계열 모델링에서 중요한 것은 모델이 사람처럼 과거 흐름을 알아볼 수 있게 Feature(Lag, Difference, Rolling)를 만드는 것
- 오늘 만든 Streamlit KPI 대시보드에 오늘 배운 시계열 Feature(Rolling Mean, Difference 변동폭 등)를 그대로 얹으면, 실무에서 바로 쓸 수 있는 실시간 조기경보 대시보드가 되겠죠??
- 프로젝트 때 이 두 파트를 깔끔하게 엮어서 포트폴리오로 만들어야겠다