Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 미니프로젝트
- 크롤링
- 데이터전처리
- 개인정보수집유효기간
- kt에이블스쿨
- 에이블스쿨
- 상어중학교
- map
- 모델링
- 취준
- 코딩
- 코테공부
- BFS
- C++
- 코테
- Queue
- python
- 코테준비
- 스터디
- 머신러닝
- 파이썬
- dfs
- 백준
- 코테연습
- 알고리즘
- 코딩테스트
- Ai
- 프로그래머스
- 21609
- 음수와 size 비교
Archives
- Today
- Total
얼레벌레
[5주차] 시계열 분석 본문
시계열 데이터란?
순서가 있고, 시간의 간격이 같은 데이터
ex) 음성, 주식데이터, 문장
시계열 데이터를 분석하는 것은, 시간의 흐름에 따른 패턴을 분석하는 것이다.
흐름을 어떻게 정리할 것인지에 따라 모델링 방식이 달라진다.
- 전통적 시계열 모델링 : x는 관심사가 아님, y만 가지고 과거 데이터들을 보며 패턴을 추출하여 예측
- y(t) = w1*y(t-1) + w2*y(t-2) + w3*y(t-3) + w0
- AR, MA, ARMA, ARIMA, SARIMA, SARIMAX
- ML 기반 시계열 모델링 : x와 y의 관계를 통해 패턴을 찾음
- 특정 시점 데이터들과 예측대상시점과의 관계로부터 패턴을 추출하여 예측
- y(t+1) = w1x1(t) + w2x2(t) + w3x3(t) + w4x4(t) + w0
- feature engineering이 중요해짐.
- DL 기반 시계열 모델링 : 흐름을 그룹지어서 N일 동안의 흐름을 가지고 예측
- 특정 구간(timestamp) 데이터들(2차원)과 예측대상시점과의 관계로부터 패턴을 추출하여 예측
- CNN, RNN(LSTM)을 기반으로 예측
시계열 모델링 절차: 모델 생성 => 잔차 분석 (train err) => 검증 => 예측평가 (잔차분석(val_err), 평가지표)
시계열 전처리
- 날짜 인덱스 만들기 - 전처리를 통해 시간 간격을 일정한 간격으로 맞춰야 한다.
- 사전 확인 오류를 방지하는 y값 만들기
사전 확인 오류란? 특정 시점에 알 수 없는 데이터를 분석 단위로 묶어서 분석 및 예측하는 오류
feature들의 시점(t)과 target의 시점(t+1)은 달라야 한다!
ex) y(t+1)을 예측해야 하는데 feature engineering으로 추가한 변수가 최근 3일간 이동평균이라고 할 때, 그 추가한 변수가 y(t+1), y(t), y(t-1)의 평균이면 안됨 => 예측해야 할 데이터가 현재 시계열에 포함되면 안됨 - NaN 조치
시계열에서 NaN 조치 : ffill, bfill, .interpolate - Cross Validation
- forward chaining
평가
기술적 평가
- 잔차 분석
- ACF, PACF
- ACF (자기상관함수, Auto Correlation Function): y(t)와 y(t-n) 간의 상관성
시간 단위 n이 커질수록 ACF는 0에 근접
t날을 기준으로 그 전날, 전전날 과의 상관계수 구함 - PACF (편자기상관함수, Partial Auto Correlation Function) : y(t)와 y(t-n)간 순수한 상관관계
순수한 두 값의 관계를 구할건데, 다른 것들도 영향을 줬을 수 있으니까 그 다른것들의 영향을 빼고 상관관계를 구함
오차를 구해서 오차끼리의 관계를 구하는 것
ex) 마트 yt = w*y(t-1) + err(t)
범죄율 y(t-2) = u*y(t-1) + err(t-2) 라고 하고, y(t-1)이 인구수라고 했을 때
바트와 범죄율 사이의 순수한 상관관계를 구하기 위해 err(t)와 err(t-2)간의 관계를 구하는 것
- ACF (자기상관함수, Auto Correlation Function): y(t)와 y(t-n) 간의 상관성
- 검정 : 정상성 검정, 정규성 검정, 자기상관 검정, 분산성 검정
- white noise : 시간의 흐름에 따라, 아무런 패턴이 없는, 의미없는 값들의 연속 (우리가 더이상 분석해낼 수 없는 값들)
=> 특징 : 정규분포, 평균이 0, 분산 일정, 값들 간 상관성이 없음 (ACF와 PACF가 0)
모델이 잘 만들어 졌다면 y = f(x) + err 수식에서 잔차 err는 white noise에 가까워야 한다.
즉, 모델이 잘 만들어 졌다면 오차는 아무런 패턴이 없어야 하는 것
=> 잔차 분석은 남아있는 오차 안에 아직 패턴이 존재하는 지 확인하는 과정. - 정상성 검정 :
대립가설을 채택해야 함 (정상(stationary) 데이터이다) => p-value < 0.05
stationary(정상성) : 평균일정, 분산일정, 특정 두 시점간의 공분산 일정 - 정규성 검정 : 귀무가설이 채택되어야 함 (정규분포이다) => p-value > 0.05
- white noise : 시간의 흐름에 따라, 아무런 패턴이 없는, 의미없는 값들의 연속 (우리가 더이상 분석해낼 수 없는 값들)
- ACF, PACF
- ML Metric
- RMSE, MAE
- AIC(SARIMA)
시계열 데이터 분해 => trend(추세 패턴) + seasonality(계절성 패턴) + 잔차
잔차가 white noise에 가깝다면, trend와 seasonality로 원본데이터를 잘 설명할 수 있다는 것
전통적 시계열 모델링
- AR (Auto Regressive) : 자기 자신을 종속변수(target) y(t)로 하고, 이전 시점의 데이터 y(t-1), y(t-2), ...를 독립변수(feature)로 갖는 모델
- 전제 조건 : y가 stationary 해야 함. (평균일정, 분산일정, 공분산일정)
- AR(p): y(t) = c + w1*y(t-1) + w2*y(t-2) + w3*y(t-3) + ... + wp*y(t-p) + err(t)
- MA (Moving Average) : 자기 자신을 종속변수(target) y(t)로 하고, 해당 시점과 그 과거의 예측 오차들을 독립변수로 갖는 모델
- 전제 조건 : y가 stationary
- MA(q) : y(t) = m0 + err(t) + m1*err(t-1) + m2*err(t-2) + ... + mq*err(t-q)
오차들에 가중치를 넣어서 구함.
- ARMA : AR+MA
- ARIMA : ARMA에 데이터 차분을 포함시킨 모델이 ARIMA, 'trend 모델링'이라고 부름
- I (Integration, 차분)
차분을 통해서 stationary한 데이터가 되는가? (만약 trend만 존재한다면 가능)
I(d) : d번 차분 => 하이퍼 파라미터 결정 필요 (보통 1이나 2로 주는데, 1이 일반적) - 튜닝할 때 p, d, q 값을 적절히 찾아야 함.
- 자동화 : Auto ARIMA (Grid Search 튜닝과 유사)
- 한계 : 계절성 데이터는 제대로 모델링 안됨 (주기를 가지면 자기상관성이 여전히 남아있음)
- I (Integration, 차분)
- SARIMA : ARIMA + 계절성 모델
- 파라미터가 p, d, q, m, P, D, Q (m이 주기 => m=7이라고 하면 7일 단위로 전, 전전, 전전전, ... 계산)
- 튜닝할 때 먼저 ARIMA의 p, d, q 값 찾고 ACF, PACF 에서 주기를 확인하고 m을 결정
p, d, q의 최적화와 유사한 방식으로 P, D, Q 최적화 - 자동화 : Auto SARIMA (Grid Search 튜닝과 유사)
- SARIMAX : SARIMA(ARIMA+계절성모델) + X(features)
- SARIMA에 linear regression 결합
# ARIMA 학습
sm.tsa.SARIMAX(train, order=(p, d, q)).fit()
# 모델 선언 시 train이 포함되고, .fit()으로 학습시킴
# ARIMA 예측
model.predict(n) : train 기간에 대한 예측
model.forecast(n) : train 기간 이후에 대한 예측
#SARIMA 학습
sm.tsa.SARIMAX(train, order=(p, d, q), seasonal_order=(P, D, Q, m)).fit()
#SARIMAX 학습
sm.tsa.SARIMAX(train, order=(3, 1, 3), seasonal_order=(3, 0, 0, 7), exog=x_train).fit()
#SARIMAX 예측
model.forecast(val_size, exog=x_val)
'취업 > KT AIVLE SCHOOL' 카테고리의 다른 글
[7주차] AI 모델 해석 및 평가 (0) | 2022.09.12 |
---|---|
[6주차] 미니프로젝트 2차 (0) | 2022.09.12 |
[5주차] 머신러닝 모델링 - 성능 (0) | 2022.09.12 |
[5주차] 머신러닝 모델링 - 기초 (0) | 2022.09.12 |
[4주차] 미니프로젝트 1차 (0) | 2022.09.05 |