ADP (R)

[Adp 실기 기출 풀이] 25회 시계열 문제 (풀이중)

멋쟁이천재사자 2022. 8. 15. 15:19

9월 25일 26회 시험을 준비하고 있습니다.

25회 기출 문제 중 시계열 문제를 재구성하여 풀어보려고 합니다.

 

문제

다음은 2001년 1월부터 20년간 한국 방문 해외관광객 수(visistors)를 월별로 기록한 252 개 데이터이다

데이터 x는 아래 scipt 를 실행하여 생성하시오.

library(sarima)
library(dplyr)
set.seed(5678)  
ss <- sim_sarima(252, model=list(sar=0.8,nseasons=12, sigma2=1))

data.frame(r=ss) %>%   
  mutate(no=row_number()) %>% 
  mutate(visitors=100000+no*100+round(no*r*10)) %>%
  select(no, visitors) %>% 
  mutate(visitors=ifelse(no %in% c(99,121,245),NA,visitors)) -> x

 

1. 주어진 데이터에 대해서 EDA 하시오(5점)
2. 주어진 데이터에 대해 전처리하시오(5점)
3. 시계열 예측 모형을 수립하라(15점)
4. 수립한 모델을 평가하고 활용 의견을 기술하라(5점)

 

답안

 

1. 주어진 데이터에 대해서 EDA 하시오

 

summary(x)

 

visitors 에 3건의 결측치가 존재한다

library(tseries)
library(forecast)
x %>%
  mutate(visitors = ifelse(is.na(visitors),0,visitors)) %>% 
  select(visitors) %>% 
  ts(frequency = 12, start = c(2001,01)) %>% 
  #monthplot(choice = "seasonal", cex.axis = 0.8)
  autoplot()

결측치를 중위수인 111833 으로 대치하여 시각화를 해보자.

library(tseries)
library(forecast)
x %>%
  mutate(visitors = ifelse(is.na(visitors),111833,visitors)) %>% 
  select(visitors) %>% 
  ts(frequency = 12, start = c(2001,01)) %>% 
  autoplot()

 

추세가 존재하며, 시간의 흐름에 따라 분산이 증가함

par(mfrow=c(1,2))

x %>%
  mutate(visitors = ifelse(is.na(visitors),111833,visitors)) %>% 
  select(visitors) %>% 
  ts(frequency = 12, start = c(2001,01)) -> temp

acf(temp);pacf(temp)

 

acf 는 천천히 감소하는 모습으로 자기상관이 보이며, pacf 는 빠르게 감소하며 12개월 후에 튀는 부분이 있는 것으로 보아 계절성을 보이는 것으로 예측된다.

 

2. 주어진 데이터 결측치에 대해 전처리하시오

..

..

 

3. 시계열 예측 모형을 수립하라

auto.arima(temp)

 


4. 수립한 모델을 평가하고 활용 의견을 기술하라

..

 

 

Study 이력

 

monthplot(temp, choice = "seasonal", cex.axis = 0.8)
There were 18 warnings (use warnings() to see them)

1월과 7월에 주기적으로 감소하는 경향?

 

x %>%
  mutate(visitors = ifelse(is.na(visitors),111833,visitors)) %>% 
  select(visitors) %>% 
  stl(s.window = 20, t.window = 20)

Error in stl(., s.window = 20, t.window = 20) : 
  오로지 단변량 시리즈만이 허용됩니다

 

ndiffs 를 이용하여 필요한 차분 수를 확인하면 1이고, 해당 차분을 거친 후의  acf pacf 도표를 분석하자

ndiffs(temp)      # 1
par(mfrow=c(1,2)) 
acf(diff(temp));pacf(diff(temp))

 

 

 

 

 

 

기출문제자료

 

2.  한국 방문 해외관광객 수를 시계열 모델을 생성하여 분석. no(1~252)와 num(약 100,000 ~ 6,000,000?) 범위의 수치형 feature 2개 주어짐. 결측값의 효과적 처리방법과 계절성을 포함하는 시계열 모델을 제시하고 이 모델이 실제 업무에 적용될 수 있는지 판단.

 - 일반적인 date형식의 자료가 주어지지 않아서, 플롯을 그려보고 대략적인 계절성을 파악하여 이 방문객들이 월단위인지 연단위인지 일단위인지 파악해야했다. 결측값이 3개 있는지라 일단 0으로 채워서 플롯을 그려보니 12를 주기로 계절성을 나타내고 있어서 시계열 freq가 월별이라고 간주하고 모델링했다.

 

2. 시계열 분석

: 데이터 전처리 (이유), 계절성을 반영한 시계열 분석, 시계열 분석시 고려할 사항 (데이터 : No. 방문객 수)

: 계절성을 반영하기 위한 SARIMA를 이용해야 하는데 패키지가 안깔려 있어서 책을 보니 pip를 이용해 깔아도 된다고 해서 시도했다가 pip upgrade를 해야한대서 혹시나 컴퓨터가 다운될까봐 못풀었다,,

: 시계열은 자주 출제되니 잘 준비해야 할듯

출처 : https://cafe.naver.com/sqlpd/36991 

 

 

[ADP 실기] 시계열 SARIMA 공부하셨던 분 있나요? [16]
https://cafe.naver.com/sqlpd/16423
시계열 ARIMA 관련 댓글들..
1차 차분한 결과를 seasonal 과 피리어드에, 2차 차분을 알리마에 놓으면 됩니다.

 

 

https://blog.naver.com/prototype920/222778941551
 - 데이터가 시간이 흐름에 따라 추세/계절성/이분산을 보이고 있어서 로그변환 및 차분을 통해 추세와 이분산을 제거한 후 acf/pacf 플롯을 그렸더니 acf는 점진적 감소, pacf는 1시점에서 절단되는 모습을 보여 AR(1)을 예상했다. SARIMA(p,d,q)(P,D,Q,M)에서 각 계수에 대한 정확한 이해가 없어서 그냥 SARIMA(1,1,0)(1,1,0,12)로 모델링하고 제출했다.
[출처] (220618) 제25회 ADP실기 시험 후기|작성자 한얼

 

 

2. 시계열

- SARIMAX 코드를 갖고 있어서 해당 코드를 활용하였습니다.

- 인덱스에 날짜가 없어 제 마음대로 한 행에 하루라고 가정하고 날짜 인덱스를 부여하였습니다.

- 시계열과 차분시계열 시각화 해서 대충 시계열 데이터가 앞 뒤 값의 영향을 받으니 linear intepolation 한다고 하고 pd에 있는 메쏘드 활용해서 적용하였습니다.

- PQR과 pqr을 각각 1~3까지 놓은 조합(3^6개 조합)으로 모형을 적합해보고, 가장 나은 성능을 갖는 파라미터를 도출했습니다.

- 데이터를 시간 순으로 split하고, 구축한 모델의 성능과 단순 이동평균으로 예측했을 때의 성능을 비교했을 때 시간이 뒤로 갈수록 예측 오차가 커짐을 확인하였습니다.

- 따라서 이 모델을 그대로 실제에 적용하긴 어렵고, 지속적으로 모델을 갱신하며 학습하면 실제 예측에도 활용할 수 있을 거라고 적었습니다.

출처 : https://cafe.naver.com/sqlpd/36930