Etc/Deep Learning

7장 시계열 분석(1) - 시계열 데이터 분류, 시계열 분석 모델, 순환 신경망(RNN), RNN계층과 셀

z.zzz 2021. 8. 21. 14:45

7.1 시계열 문제

시계열 분석이란?

특정 대상의 시간에 따라 변하는 데이터를 사용하여 추이를 분석하는 것

추세 파악 · 향후 전망 예측

예) 주가/환율 변동, 기온/습도 변화

 

시계열 형태 데이터 분류

시계열 형태 데이터 설명
불규칙 변동 시간에 따른 규칙적인 움직임과 달리, 어떤 규칙성이 없어 예측 불가능 & 우연적으로 발생하는 변동
예) 전쟁, 홍수, 화재, 지진, 파업
추세 변동 시계열 자료가 갖는 장기적인 변화 추세
추세 : 장기간에 걸쳐, 지속적으로 증가·감소하거나, 일정한 상태를 유지하려는 성향
→ 짧은 기간 동안엔 추세 변동을 찾기 어려움
예) 국내총생산(GDP), 인구증가율
순환 변동 2~3년 정도의 일정한 기간을 주기로, 순환적으로 나타나는 변동
1년 이내 주기로 곡선을 그리며 추세 변동에 따라 변동함
예) 경기 변동
계절 변동 자료에서 계절적 영향과 사회적 관습에 따라 1년 주기로 발생하는 것
보통 계절에 따라 순환하며 변동함

 

시계열 데이터 분류

· 규칙적 시계열 : 트렌드, 분산이 불변하는 시계열 데이터

· 불규칙적 시계열 : 트렌드, 분산이 변화하는 시계열 데이터

시계열 데이터를 잘 분석한다

   = 불규칙적 시계열 데이터에 특정 기법이나 모델을 적용하여, 규칙적 패턴을 찾거나 예측하는 것

 

불규칙적 시계열 데이터규칙성을 부여하는 방법 : AR, MA, ARMA, ARIMA 모델을 적용하는 것

→ 최근엔 딥러닝을 이용, 기계 스스로 시계열 데이터의 연속성을 찾아내게함

 


7.2 AR, MA, ARMA, ARIMA

시계열 분석 : 시간을 독립변수로 사용(머신러닝 - 독립변수를 사용해 종속변수를 예측함)

 

7.2.1 AR 모델

AR(AutoRegression, 자기회귀) 모델이란?

 - '이전 관측값'이 '이후 관측값'에 영향을 준다는 아이디어에 대한 모형

① 시계열 데이터에서 현재 시점을 의미

② 과거가 현재에 미치는 영향을 나타내는 모수(Φ) × 시계열 데이터의 과거 시점

③ 시계열 분석에서 오차 항을 의미(백색 잡음)

⇒ p 시점을 기준으로, 그 이전의 데이터에 의해 → 현재 시점의 데이터가 영향을 받는 모형

 

7.2.2 MA 모델

MA(Moving Average, 이동 평균) 모델이란?

 - 트렌드 상황에 적합한 회귀 모델

   //트렌드 : 평균 혹은 시계열 그래프에서 y 값

   //회귀 모델 : 어떤 자료에 대해, 그 값에 영향을 주는 조건을 고려하여 구한 평균

① 시계열 데이터에서 현재 시점

② 매개변수(θ) × 과거 시점의 오차

③ 오차 항

이전 데이터의 오차에서 → 현재 데이터의 상태를 추론(AR 모델 : 이전 데이터의 '상태'에서 추론)

 

7.2.3 ARMA 모델

ARMA(AutoRegressive Moving Average, 자동 회귀 이동 평균) 모델이란?

 - AR + MA를 섞은 모델(AR, MA 두 가지 관점에서 과거의 데이터를 사용함)

 - 윈도우를 사용 - 시계열을 따라 윈도우 크기만큼 슬라이딩됨

    //윈도우 : 주어진 전체 데이터 중, 한 번에 가져오는 데이터의 부분 집합 크기

 

7.2.4 ARIMA 모델

ARIMA(AutoRegressive Intergrated Moving Average, 자동 회귀 누적 이동 평균) 모델이란?

 - 자기 회귀이동 평균을 모두 고려하는 모형

 - 데이터의 선형 관계 + 추세까지 고려

 

💻 ARIMA 모델 구현 실습

p : 자기회귀 모델의 차수(시간 지연 수)

d : 차분 차수(데이터가 과거 값을 뺀 횟수)

q : 이동 평균 모델의 순서

forecast()

Returns

forecast ndarray

Array of out of sample forecasts

stderr ndarray

Array of the standard error of the forecasts.

conf_int ndarray

2d array of the confidence interval for the forecast

 


7.3 순환 신경망(RNN)

RNN(Recurrent Neural Network)이란?

 - 시간적으로 연속성이 있는 데이터를 처리하려고 고안된 인공 신경망

 - Recurrent(반복되는) = 이전 은닉층이 현재 은닉층입력이 되면서 반복되는 순환구조를 갖는다는 의미

 

RNN이 기존 네트워크와 다른점

기억(memory)을 가짐

    //기억 : 현재까지 입력 데이터를 요약한 정보

→ 새로운 입력이 네트워크로 들어올때마다 기억은 조금씩 수정

최종적으로 남겨진 기억 : 모든 입력 전체를 요약한 정보

 

순환 신경망 구조

 

첫 번째 입력이 들어옴 → 첫 번째 기억(h₁)이 만들어짐

두 번째 입력이 들어옴 → 기존 기억(h₁)새로운 기억을 참고하여, 새 기억(h₂)이 만들어짐

→ 입력 길이만큼 이 과정을 반복할 수 있음

RNN : '외부 입력'과 '자신의 이전 상태'를 입력받아 현재의 상태를 갱신

 

입력과 출력에 따른 RNN 유형

일대일 : 순환이 없어서 RNN이라고 발하기 어려움 (대표 사례: 순방향 네트워크)

일대다 : 입력이 하나고, 출력이 다수인 구조 (대표 사례: 이미지 캡션 - 이미지를 입력해서, 이미지에 대한 설명을 문장으로 출력함)

다대일 : 입력이 다수고, 출력이 하나인 구조 (대표 사례: 감성 분석기 - 문장을 입력해서, 긍정/부정을 출력)

다대일 예시 코드

In_layer = tf.keras.input(shape=(3,1), name='input')
RNN_layer = tf.keras.layers.SimpleRNN(100, name='RNN')(In_layer)
Out_layer = tf.keras.layers.Dense(1, name='output')(RNN_layer)

 

다대일 모델

※ 입력과 출력 사이에 '하나의 RNN 셀(cell)'만 가짐

 

+ 다대일 구조에 층을 쌓아올림

※ 입력과 출력 사이에 '두 개의 RNN 셀'만 가짐

In_layer = tf.keras.input(shape=(3,1), name='input')
RNN_layer0 = tf.keras.layers.SimpleRNN(100, name='RNN1')(In_layer)
RNN_layer1 = tf.keras.layers.SimpleRNN(100, name='RNN2')(RNN_layer0)
Out_layer = tf.keras.layers.Dense(1, name='output')(RNN_layer1)

적층된 다대일 모델

 

다대다 : 입력출력다수인 구조(대표 사례 : 자동번역기 - 언어를 번역)

다대다 구현 코드

In_layer = tf.keras.input(shape=(3,1), name='input')
RNN_layer = tf.keras.layers.SimpleRNN(100, return_sequences=True, name='RNN')(In_layer)
Out_layer = tf.keras.layers.TimeDistributed(keras.layers.Dense(1), name='output')(RNN_layer)

다대다 모델

 

동기화 다대다 : '다대다'처럼 입력과 출력다수인 구조(대표 사례: 프레임 수준의 비디오 분류 - 문장에서 다음에 나올 단어를 예측하는 언어 모델)

 

그림으로 표현한 순환 신경망 구조

 


7.3.1 RNN 계층과 셀

RNN

 - 내장된(built-in) 계층 제공

 - 셀 레벨의 API 제공

 

RNN 계층 vs RNN 셀

RNN 계층 : 입력된 배치 순서열을 모두 처리

RNN : 오직 하나의 단계만 처리

RNN 셀 = RNN 계층의 for loop 구문의 내부

RNN계층 : 셀을 래핑* → 동일한 셀을 여러 단계에 적용

     //위 그림에서도 동일한 셀x1, x2, …, xn 전체 RNN 계층(네트워크)에서 사용되고 있음

     * 래핑 : dll(dynamic linked library)나 API를 사용하기 쉽도록 한 번 더 dll 등으로 만들어 주는 것

⇒ 셀은 입력 시퀀스에서 반복됨 & return_sequences 같은 옵션을 기반으로 출력값을 계산

    //입력 시퀀스 : 신경망에 시퀀스 데이터를 입력

: 실제 계산에 사용되는 RNN 계층의 구성요소. 단일 입력과거 상태를 가져와 출력과 새로운 상태를 생성

 

+ RNN 계층과 셀을 분리해서 설명하는 이유 : 텐서플로2에서 둘을 분리해서 구현이 가능하기 때문

RNN의 활용 분야 : 자연어 처리(연속적인 단어들의 나열인 언어, 자연어 처리는 음성인식, 단어 의미 판단, 대화 등에 대한 처리가 가능), 손글씨, 센서 데이터 등 시계열 데이터 처리

 

 


시계열에서 백색잡음 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=wujuchoi&logNo=221167919012