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 |
Tags
- sm-segmentation
- LightGBM
- SSAC
- focal loss
- loss function
- Satellite Image
- segmentation
- Satel
- 시계열
- Dice Loss
Archives
- Today
- Total
고양이는 털털해
시계열 #1 본문
예측의 개요, 예측 데이터 살펴보기
conda install -c r r-essentials
주피터 환경에서 r 실행
시계열참고도서
시계열 패키지 참고
예측의 개요¶
- 예측이란?
- 미래의 시점에서의 사건을 사전에 추측하는 것
- 예측의 필요성
- 불확실한 미래에 대한 합리적이고 효율적인 의사 결정을 지원하기 위하여 예측을 하고 예측을 참고하여 의사 결정을 한다.
예측의 과정 및 방법¶
- 예측의 과정
- 목표수립 -> (데이터 있는지 살펴보기) -> 정보수집 (수치정보, 판단정보) -> (수치 살펴보기) -> 예측실시 (수치, 판단정보 결합해서 예측) -> 예측평가 (문제 있으면 cycle 돌려서 수시로 예측)
- 주관적 예측과 객관적 예측
- 주관적 예측 : 전문가가 전문적 지식을 바탕으로 하는 예측. 수치 정보가 충분하지 않고 판단 정보가 축적된 경우 전문가의 판단을 바탕으로 하는 예측
- 객관적 예측 : 수리 정보를 수집하여 수리 모형으로 시계열을 표현한 후 그 패턴이 미래에도 지속된다는 가정하에 수리 모형을 이용하여 하는 예측
- 실제 예측은 주관적 예측과 객관적 예측을 결합한다. 이 과목에서 학습할 것은 객관적 예측
- 예측 방법
- 주관적 예측의 대표적인 방법 : 델파이 방법. 전문가 집단의 의견을 반복적으로 종합하여 합의에 의한 최상의 판단을 도출하는 방법.
- 전문가 집단 구성 -> 예측하고자 하는 변수에 대한 설문을 만들고 전문가 집단에 배포 -> 구성원의 예측 결과를 수집 요약하여 다시 전문가 집단에 배포 -> 각 구성원은 이를 바탕으로 결과 수정 -> 일정 합의에 이르기까지 단계 반복
- 문제점 : 1) 전문가가 느낌만으로 정확한 예측하기 어렵다. 2) 전문가 집단을 선정하기 어렵다. 3) 전문가가 성의 있게 응답했는지 확인하기 어렵다.
- 객관적 예측방법 : 이론모형과 비이론모형
- 이론모형은 해당 분야의 이론을 기반으로 하는 모형을 말한다. 단일방정식 모형과 연립방정식 모형이 있다.
- 단일방정식 모형은 종속 변수 하나를 다른 여러개의 독립 변수로 설명하는 모형이다.
- 연립방정식 모형은 다수의 단일방정식을 그룹으로 하는 모형이다. 변수 간 상호 관계를 표현할 수 있다. ex) 소비 = c(당기 소득, 과거소비), 소득 = f(소비, 기타요인)
- 비이론모형은 이론적 근거는 없으나 변수간 관계, 패턴을 발견하여 이러한 관계가 지속될 것을 가정하고 예측하는 모형이다. 대표적 비이론모형으로 시계열모형이 있고 대표적인 시계열모형으로 ARIMA, VAR이 있다.
- 이론모형은 해당 분야의 이론을 기반으로 하는 모형을 말한다. 단일방정식 모형과 연립방정식 모형이 있다.
- 시나리오 예측 : 미래에 발생할 수 있는 여러가지 상황을 고려하여 그 중 가능성이 높은 시나리오를 선정하여 시나리오 별 복수 예측을 하는 방식이다.
- 주관적 예측의 대표적인 방법 : 델파이 방법. 전문가 집단의 의견을 반복적으로 종합하여 합의에 의한 최상의 판단을 도출하는 방법.
얘측모형의 작성과 평가¶
- 예측모형의 작성
- 1) 모형의 식별 : 모형 형태를 가정한다.
- 2) 모형의 추정 : 미지의 모수를 도출한다.
- 3) 모형의 진단 : 잔차가 얼마나 임의적인지 검토한다. 잔차가 랜덤이면 현재 가능한 최적의 예측이라 판단하고 마무리 한다.
- 예측의 평가
- 예측의 종류
- 사전예측
- 사후예측
- 미래예측
- 예측력 평가 : 예측값과 실제값을 비교하여 계산 ; RMSE 나 RMSPE가 작을 수록 우수한 모델 $$Root\ Mean\ Sqaure\ Error\ = \sqrt{\frac{1}{T}\sum_{t=1}^T{(Y_t - \hat{Y_t})^2}}$$ $$Root\ Mean\ Square\ Percent\ Error\ = \sqrt{\frac{1}{T}\sum_{t=1}^T{(\frac{Y_t-\hat{Y_t}}{Y_t})^2}} \times 100 $$
- 예측의 종류
2강 예측데이터 - 시계열¶
시계열의 정의¶
- 시계열 : 시간에 따라 관측된 자료 $\{Y_t : t = 1,2,3, \cdots \}$ , 관측 시점 사이의 간격 시차 t가 중요하다
- 일정 간격으로 측정한 데이터로 경제, 물리, 경영, 인구, 통신공학, 사회 등 주제가 달라도 시간에 따라 측정했다면 모두 시계열이다.
- 참고 개념
- 횡단면 자료 : 일정 시점의 자료
- 패널 자료 : 횡단면 데이터를 시간에 따라 모은 것. 횡단면 자료와 시계열이 혼합되어 있는 자료
- 참고 : 인구총조사 - 시계열 연계 - 시군구
시계열 도표¶
- 시게열 도표는 시간을 가로축으로 관측값을 세로축으로 하여 시간 경과에 따라 관측값이 변한 것을 그린 그림으로 시계열 자료 특징을 보기 쉽다.
In [2]:
# 필요 패키지 불러오기
library(zoo) # rollmean()
library(ggplot2) # ggplot()
library(dplyr) # select, filter
library(tidyr) # gather
library(repr) # plot size option
library(lubridate) # year
library(patchwork) # 그래프 이어붙이기
In [3]:
# 시계열 데이터 불러오기
samsung <- read.csv('samsung.csv')
head(samsung,2)
In [4]:
options(repr.plot.width=20, repr.plot.height=7)
ggplot(data=samsung, aes(x=Date, y=Price, group =1)) +
geom_line(color = 'red') +
theme(axis.text.x=element_blank())
시계열 변동 요인¶
- 시계열정보는 주파수영역과, 시간영역의 정보가 있으며 시계열 분석을 통해 영역 정보를 찾아낸다.
- 주파수영역 정보는 주기적으로 반복되는 정보이며, 시간영역 정보는 시간에 따라 전개되는 정보이다.
- 시계열은 변동 주기에 따라 구분한다
- 시계열 도표를 통해 시계열의 변동요인을 파악할 수 있다. 분기별 GDP
- 추세변동요인 $(T_t)$ : 장기변동 10년 이상 주기
- 순환변동요인 $(C_t)$ : 경기 순환 주기 2~5년 주기
- 계절변동요인 $(S_t)$ : 1년 주기
- 불규칙변동요인 $(I_t)$ : 주기불분명, 이동평균 계산 시 평활화 가능
- 시계열 모형은 시게열 변동 요인들이 가법형, 승법형, 로그가법형 등으로 결합된다고 가정하고 있다. 시간에 따라 각 요인이 비례적으로 증가하는 경향이 크면 승법모형, 로그가법모형으로 모델을 식별하는 것이 바람직하다.
- 가법모형 : $Y_t = T_t+C_t+S_t+I_t$
- 승법모형 : $Y_t = T_t \cdot C_t \cdot S_t \cdot I_t$
- 로그가법모형 : $ \ln Y_t = \ln T_t + \ln C_t + \ln S_t + \ln I_t$
- 시계열 도표를 통해 시계열의 변동요인을 파악할 수 있다. 분기별 GDP
변수변환과 달력조정¶
- 일시적 변동이 아닌 근원적인 변동을 찾아보기 편하도록 함수를 이용하여 변환하거나 달력조정을 통해 표준화 하여 살펴본다.
- 변수변환 : 시간에 따라 변동성이 커지면서 지수적으로 증가하는 경우 log 함수, 역변환, 제곱근 변환 등을 이용해 시계열을 선형화 한다.
- 로그변환은 시게열을 선형화 하며 변동이 큰 것은 작게 하고 작은 것은 크게 하여 변동성을 일정화 하며 단위를 작은 범위로 바꾼다.
In [5]:
options(repr.plot.width=20, repr.plot.height=7)
p1 <- ggplot(data=samsung, aes(x=Date, y=Price, group=1)) +
geom_line(color='red') +
theme(axis.text.x=element_blank())
p2 <- samsung %>%
mutate(log_price = log(Price)) %>%
ggplot(aes(x=Date, y=log_price, group=1)) +
geom_line(color='blue') +
theme(axis.text.x=element_blank())
In [6]:
p1/ p2
- 달력조정 : 요일구성 등 월 길이의 차이에 따라 시계열이 변동할 때 이를 조정하여 시계열을 표준화 한다.
- 영업일수 조정 $$ Y_t = Z_t \times \frac{t월의\ 영업일수}{t월의\ 평균\ 영업일수} $$
- 달력 조정 $$ Y_t = Z_t \times \frac{365.25 \div 12}{t월의 일수} $$
안정시계열과 불안정시계열¶
- 안정시계열 stationary time series
- 구간이 달라지더라도 매 구간별 특성이 동일한 시계열. 추세적 변화, 주기적 변화가 없는 시계열
- 불안정시계열 nonstationary time series
- 시계열의 평균 및 분산이 시간에 따라 변화하는 시계열
- 경제 시계열은 대체로 추세변동요인과 계절변동요인이 뚜렷한 불안정시계열이다.
- 여러가지 방법으로 시계열을 조정한다. 대표적으로 차분과 평활화가 있다.
In [7]:
random_ts <- rnorm(100, mean = 0, sd = 1)
random_ts %>% ts.plot()
In [8]:
sin1 <- sin(1:100/100*6*pi)
sin1 %>% ts.plot()
In [9]:
sin_trend <- sin1 + 1:100*0.06
sin_trend %>% ts.plot()
In [10]:
sim_ts <- sin_trend + random_ts
sim_ts %>% ts.plot()
In [26]:
increasing_var <- rnorm(100, mean = 0, sd = 2 * sqrt(seq(from=1,to=5,length=100)))
increasing_var %>% ts.plot()
In [27]:
sim_ts_tv <- sim_ts + increasing_var
sim_ts_tv %>% ts.plot()
차분¶
- 차분 : 장기적인 변동을 제거하는데 유용한 방법
- 현재 시점에서 과거 인접 시점의 자료를 빼준다.
- 1차 차분식 : $\Delta Y_t = Y_t - Y_{t-1}$
- 3차 차분식 : $\Delta Y_t = Y_t - T_{t-3}$
- 장점 : 차분을 하면 비교 대상 시점 대비 현재 시점의 증가 또는 감소분을 알 수 있어서 누적되는 추세가 없는 시계열로 변환할 수 있다.
- 단점 : 단기 변동을 증폭시킨다.
In [13]:
sim_ts %>% ts.plot()
diff(sim_ts) %>% ts.plot()
In [14]:
p1 <- samsung %>%
mutate(log_price = log(Price)) %>%
ggplot(aes(x=Date, y=log_price, group=1)) +
geom_line(color='blue') +
theme(axis.text.x=element_blank())
p2 <- samsung %>%
mutate(diff_price = c('NA', diff(log(Price)))) %>%
ggplot(aes(x=Date, y=diff_price, group=1)) +
geom_line(color='black') +
theme(axis.text.x=element_blank(), axis.text.y=element_blank())
p1 / p2
In [15]:
gdp <- read.csv('gdp.csv')
head(gdp, 2)
In [16]:
p1 <- gdp %>%
ggplot(aes(x=quarter, y=gdp, group=1)) +
geom_line(color='blue')
p2 <- gdp %>%
mutate(diff_gdp = c(NA, NA, NA, NA, diff(gdp, 4))) %>%
ggplot(aes(x=quarter, y=diff_gdp, group=1)) +
geom_line(color='black')
p1 / p2
평활화 ; 이동평균(Moving Average)¶
- 평활화 : 주기가 짧은 변동요인을 제거하여 시계열의 기조적 흐름을 파악할 수 있다.
- 평활화의 종류
- 중심화이동평균 : 대상 시점을 중심으로 과거, 미래의 시점의 평균을 계산하므로 원래 시계열과 시차 구조가 동일하다는 장점이 있으나, 최근 시점의 이동평균 값을 계산할 수 없다는 단점이 있다.
- 3기 중심화이동평균 : $Y_t = \frac{1}{3}(Z_{t-1}+Z_t+Z_{t+1})$
- 후방이동평균 : 대상 시점을 기준으로 과거 시점의 값과 평균을 계산하므로 최근 이동평균을 구할 수 있으나, 원래 시계열보다 후행하는 단점이 있다.
- 3기 후방이동평균 : $Y_t = \frac{1}{3}(Z_{t-2}+Z_{t-1}+Z_t)$
- 가중이동평균 : 시점마다 가중치를 달리한다.
- 최근에 가중치를 주는 3기 후방가중이동평균 : $Y_t = \frac{1}{6}(3Z_t + 2Z_{t-1} + 1Z_{t-2})$
- 이중이동평균 : 이동 평균 값을 다시 이동평균한 것
- 중심화이동평균 : 대상 시점을 중심으로 과거, 미래의 시점의 평균을 계산하므로 원래 시계열과 시차 구조가 동일하다는 장점이 있으나, 최근 시점의 이동평균 값을 계산할 수 없다는 단점이 있다.
In [17]:
samsung_2021 <- samsung %>% filter(year(samsung$Date)==2021)
samsung_2021 %>%
mutate(five_center = rollmean(samsung_2021$Price, 5, fill=NA, align='center'),
five_right = rollmean(samsung_2021$Price, 5, fill=NA, align='right')) %>%
gather(key = 'key', value = 'value', Price, five_center, five_right) %>%
ggplot(aes(x=Date, y=value, group=key, color=key)) +
geom_line() +
theme(legend.text=element_text(size=20))
- 이동평균 방법마다 결측치가 있는 시기가 달라진다.
'공부 > 시계열' 카테고리의 다른 글
시계열 : arima, garch (0) | 2021.06.20 |
---|