R을 이용하여 계절성 검증하기
2022. 7. 19.Career/Data
계절성 파악, 왜 하는 걸까?
- 수요 예측이 가능하다 → 정밀한 공급 계획이 가능하다
* 위 논문에서 많이 등장하는 ARIMA란 ? Auto-regressive Integrated Moving Average 모형은 시계열 데이터 기반 분석 기법으로 많이 사용되는 모델
R의 Seasonal Plot을 이용한 계절성 검증
1. 들어가기 전에
a. 데이터를 tsibble 형태로 변환하여 시계열 분석이 쉽도록 한다.
b. tsibble : tibble 객체를 이용하여 시계열 데이터를 잘 다룰 수 있도록 조정한 객체
c. tibble : R의 전통적인 데이터 구조인 DataFrame을 변환하여 여러 패키지를 사용하기 쉽도록 제공하는 구조
* tsibble에 대한 설명이 잘 나와있는 자료
#Create tsibble y <- tsibble( year = 2015:2019, observation = c(123, 39, 78, 52, 110), index = year ) y |
![]() |
2. Victoria주 전력 수요(Electricity Demand) 계절성 검증
a. fpp3 패키지 안에 있는 vic_elec 이라는 샘플 데이터를 사용
b. vic_elec 데이터는 Victoria 주의 2012 ~ 2014년도의 시간별 전력 수요 정보가 있는 tsibble 형태의 데이터
head(vic_elec) # # A tsibble: 6 x 5 [30m] <Australia/Melbourne> # Time Demand Temperature Date Holiday # <dttm> <dbl> <dbl> <date> <lgl> # 1 2012-01-01 00:00:00 4383. 21.4 2012-01-01 TRUE # 2 2012-01-01 00:30:00 4263. 21.0 2012-01-01 TRUE # 3 2012-01-01 01:00:00 4049. 20.7 2012-01-01 TRUE # 4 2012-01-01 01:30:00 3878. 20.6 2012-01-01 TRUE # 5 2012-01-01 02:00:00 4036. 20.4 2012-01-01 TRUE # 6 2012-01-01 02:30:00 3866. 20.2 2012-01-01 TRUE vic_elec %>% filter(year(Time)==2014) %>% gg_season(Demand, period="day") + theme(legend.position = "bottom") + labs(y="MWh", title = "Electricity Demand : Day") |
![]() |
vic_elec %>% gg_season(Demand, period="week") + theme(legend.position = "bottom") + labs(y="MWh", title = "Electricity Demand : Week") |
![]() |
- gg_season : 기본 계절 패턴을 보다 명확하게 볼 수 있고 패턴이 변화하는 연도를 식별하는 데 유용한 Seasonal Plot
- 일 단위로 분석하였을 때에는 새벽 시간 보다 낮 시간 동안의 전력 수요가 많은 경향을 보인다.
- 주 단위로 분석하였을 때에는 주중의 전력 수요가 주말과 비교하였을 때 더 많은 경향을 보인다.
- 계절성을 검증할 때에는 내가 필요한 주기가 아니어도 모든 주기에 대해 검증해보는 것이 좋다.
vic_elec %>% gg_season(Demand, period="year") + theme(legend.position = "bottom") + labs(y="MWh", title = "Electricity Demand : Year") |
![]() |
#Monthly_Year Polar Plot monthly_elec <- vic_elec %>% group_by_key() %>% index_by(Year_Month = ~ yearmonth(.)) %>% summarise( total = sum(Demand) ) head(monthly_elec) monthly_elec %>% gg_season(total, period="year", polar = TRUE) + theme(legend.position = "bottom") + labs(y="MWh", title="Electricity Demand By Monthly : Polar Plot") |
![]() ![]() |
- 모든 년도에서 봄과 가을에 비해 여름과 겨울 전력 수요가 크게 증가하는 경향을 보인다.
- 특히 모든 년도에서 여름 전력 소비량은 크게 증가하고 있으며,
- 봄에서 여름으로 넘어가는 시점은 5월에서 8월까지 전력 수요가 상승하는 경향을 보인다.
- 다만, 여름은 일관적으로 수요가 많은데에 비해 겨울은 일부 시간대에 전력 수요가 크게 튀는 경향이 있다.
- 그 이유가 뭘까..? 겨울에 중간 중간 한파가 있었다거나 ? 또는 이상치..?
# Temperature and Demand Plot vic_elec %>% filter(year(Time) == 2014) %>% autoplot(vars(Temperature, Demand)) |
![]() |
#Scatter Plot with Temperature and Demand vic_elec %>% janitor::clean_names() %>% filter(year(time) == 2014) %>% ggplot(aes(x = temperature, y = demand)) + geom_point() + labs(x = "Temperature (degrees Celsius)", y = "Electricity demand (MWh)") |
![]() |
- geom_point : 산점도 그래프를 그리는 데에 사용되는 함수
- 온도와의 상관 관계를 파악하기 위하여 시간에 따른 전력 수요, 온도 그래프를 나란히 그려보았다.
- 꽤 비슷한 모양을 가지고 전개됨을 알 수 있었고, 온도와 전력 수요 간의 어떠한 상관 관계가 있음을 파악했다.
- 추가적으로 온도와 전력 수요의 상관 관계를 확인하기 위하여 시간 변수를 무시하고 온도와 전력 수요만을 가지고 산점도 그래프(Scatter Plot)을 통해 파악하고자 하였다.
- 전력 수요의 경우 온도가 낮은 경우와 높은 경우 증가하는 2차 곡선 형태의 패턴을 보임을 알게 되었다.
- 이는 아마 겨울철 난방, 여름철 냉방을 위한 전력 수요가 반영되었기 때문이 아닐까...
참고 자료
'Career > Data' 카테고리의 다른 글
matplotlib로 그래프 그려 성장 추이 찾기 (0) | 2021.09.02 |
---|---|
마지막 접속 일자 데이터 체크 하기 (0) | 2021.07.26 |
Clickhouse Limit by 구문으로 최신 데이터 불러 오기 (0) | 2021.07.05 |
Clickhouse RunningAccumulate()로 누적값 구하기 (0) | 2021.06.30 |
Clickhouse Query로 YoY(year-over-year) 구하기 (0) | 2021.04.18 |
Career/Data의 다른 글