Time Series Analysis with Generalized Additive Models

In this tutorial, we will see an example of how a Generative Additive Model (GAM) is used, learn how functions in a GAM are identified through backfitting, and learn how to validate a time series model.

이 튜토리얼에서는 GAM(Generative Addition Model)의 사용 예를 살펴보고, 백피팅(Backfitting)을 통해 GAM의 함수를 식별하는 방법 및 시계열 모델을 검증하는 방법에 대해 알아보겠다.


By Annalyn Ng, Ministry of Defence of Singapore & Kenneth Soo, Stanford University.

Time series header

Whenever you spot a trend plotted against time, you would be looking at a time series. The de facto choice for studying financial market performance and weather forecasts, time series are one of the most pervasive analysis techniques because of its inextricable relation to time—we are always interested to foretell the future.

시간에 대해 표시된 추세를 발견할 때마다 시계열을 볼 수 있다. 금융 시장의 실적과 일기 예보를 연구하기 위한 사실상의 선택인 시계열은 시간과 밀접하게 관련되어 있기 때문에 가장 널리 보급된 분석 기법 중 하나이다. 우리는 항상 미래를 예측하는 데 관심이 있다.

Temporal Dependent Models

One intuitive way to make forecasts would be to refer to recent time points. Today’s stock prices would likely be more similar to yesterday’s prices than those from five years ago. Hence, we would give more weight to recent than to older prices in predicting today’s price. These correlations between past and present values demonstrate temporal dependence, which forms the basis of a popular time series analysis technique called ARIMA (Autoregressive Integrated Moving Average). ARIMA accounts for both seasonal variability and one-off ‘shocks’ in the past to make future predictions.

시간 종속 모델

직관적인 예측 방법 중 하나는 최근 시점을 참조하는 것이다. 오늘의 주가는 5년 전의 주가에 비해 어제의 주가와 비슷할 것이다. 따라서 오늘 가격을 예측하는데 있어서 우리는 오래된 가격보다 최근의 가격을 더 중시할 것이다. 과거와 현재 값 사이의 이러한 상관관계는 시간적 의존성을 나타내며, 이는 ARIMA(Autogressive Integrated Moving Average)라고 불리는 인기 있는 시계열 분석 기법의 초석이 된다. ARIMA는 계절 변동과 일회성 ‘주식’을 모두 고려하여 미래를 예측한다.

However, ARIMA makes rigid assumptions. To use ARIMA, trends should have regular periods, as well as constant mean and variance. If, for instance, we would like to analyze an increasing trend, we have to first apply a transformation to the trend so that it is no longer increasing but stationary. Moreover, ARIMA cannot work if we have missing data.

그러나 ARIMA는 엄격한 가정을 한다. ARIMA를 사용하려면 추세에는 일정한 평균과 분산뿐만 아니라 규칙적인 기간이 있어야 한다. 예를 들어 증가하는 추세를 분석하려면 먼저 트렌드가 더 이상 증가하지 않고 정상성(stationary)을 갖도록 변환을 적용해야 한다. 또한 누락된 데이터가 있으면 ARIMA가 작동하지 않는다.

조건 1 : 트렌드가 더이상 증가하지 않도록 해야 함

조건 2 : 누락된 데이터가 없도록 해야 함

To avoid having to squeeze our data into a mould, we could consider an alternative such as neural networks. Long short-term memory (LSTM) networks are a type of neural networks that builds models based on temporal dependence. While highly accurate, neural networks suffer from a lack of interpretability—it is difficult to identify the model components that lead to specific predictions.

데이터를 몰드에 짜넣을 필요가 없는 대안으로서 신경망을 고려할 수 있다. Long Short-Term Memory(LSTM; 장기단기메모리) 신경망은  시간 의존성에 따라 모델을 구축하는 신경망의 일종이다. 매우 정확하지만, 신경망은 해석이 어렵다는 문제점이 있다. 즉, 특정 예측을 유도하는 모델 구성요소를 식별하는 것이 어렵다.

신경망의 경우 데이터를 전처리할 필요가 없고 사전 전제조건을 걸지 않아도 되는 장점이 있다.

하지만 해석이 어려운 단점을 갖고 있다.

General Additive Models

Besides using correlations between values from similar time points, we could take a step back to model overall trends. A time series could be seen as a summation of individual trends. Take, for instance, google search trends for persimmons, a type of fruit.

일반 가법 모형(GAM)

비슷한 시점의 값들 간의 상관관계를 사용하는 것 외에, 우리는 한 걸음 물러서서 전체적인 추세를 모델링할 수 있다. 시계열은 개별 트렌드의 총합으로 볼 수 있다. 예를 들어 과일의 일종인 감(persimmons)의 구글 검색 트렌드를 예로 들어보자.

From the Figure 1, we can infer that persimmons are probably seasonal. With its supply peaking in November, grocery shoppers might be prompted to google for nutrition facts or recipes for persimmons.

그림 1에서 우리는 감(persimmons)이 계절에 따른다는 것을 추론할 수 있다. 11월에 공급이 정점을 찍으면서, 감을 구매한 소비자들은 감의 영양에 관한 사실이나 감의 조리법을 검색할 수 있다.

time-persimmon-seasonal.png
Figure 1. Seasonal trend in google searches for ‘persimmon’, from http://rhythm-of-food.net/persimmon

그림 1. 감(persimmon)에 대한 구글의 계절적 트렌드를 분석하기 위해서는 http://rhythm-of-food.net/persimmon 에서 ‘persimmon’를 검색한다.

Moreover, google searches for persimmons are also growing more frequent over the years.

게다가, 구글에서 감에 대한 검색 경향은 해가 갈수록 더 빈번해지고 있음을 알 수 있다.

time-persimmon-increasing.png
Figure 2. Overall growth trend in google searches for ‘persimmon’, from http://rhythm-of-food.net/persimmon

그림 2 http://rhythm-of-food.net/persimmon에서 ‘감’을 검색한 구글의 전반적인 성장 추이

Therefore, google search trends for persimmons could well be modeled by adding a seasonal trend to an increasing growth trend, in what’s called a generalized additive model (GAM).

따라서, 감에 대한 구글 검색 트렌드는 증가하는 성장 트렌드(GAM이라고 불림)에 계절적 트렌드를 추가함으로써 모델링할 수 있다.

The principle behind GAMs is similar to that of regression, except that instead of summing effects of individual predictors, GAMs are a sum of smooth functions. Functions allow us to model more complex patterns, and they can be averaged to obtain smoothed curves that are more generalizable.

GAM의 이면 원리는 개별 예측 변수의 효과 합계가 아니라 부드러운 함수의 합이라는 점을 제외하면 회귀 원리와 유사하다. 함수를 사용하면 보다 복잡한 패턴을 모델링할 수 있으며, 평균을 산출하여 보다 일반화하기 쉬운 평활 곡선을 얻을 수 있다.

Because GAMs are based on functions rather than variables, they are not restricted by the linearity assumption in regression that requires predictor and outcome variables to move in a straight line. Furthermore, unlike in neural networks, we can isolate and study effects of individual functions in a GAM on resulting predictions.

GAM은 변수가 아닌 함수를 기반으로 하므로 예측 변수와 결과 변수가 선형 관계이어야 하는 회귀 분석의 선형성 가정에 의한 제약을 받지 않는다.  또한, 신경망과는 달리, 결과예측에 대해 GAM에서 개별 함수의 효과를 분리하고 연구할 수 있다.

In this tutorial, we will:

  1. See an example of how GAM is used.
  2. Learn how functions in a GAM are identified through backfitting.
  3. Learn how to validate a time series model.

이 튜토리얼에서는 다음을 수행한다.
1. GAM의 사용 예를 참조한다.
2. 백피팅(Backfitting)을 통해 GAM의 기능을 식별하는 방법을 학습한다.
3. 시계열 모델을 검증하는 방법을 배운다.

Example: Saving Daylight Time

People who have lived in regions with four seasons would know a fact: you get less sunshine during winter than in summer. To compensate for this, some countries move their clocks forward by an hour during summer months, scheduling more sunshine for evening outdoor activities and hopefully decreasing energy used for heating and lighting at home. This practice of advancing clocks during summer is called daylight saving time (DST), and was first implemented in the 1900s.

예제 : 서머타임제

사계절이 있는 지역에 살아본 사람들은 여름보다 겨울에 햇빛을 덜 받는다는 사실을 알고 있다. 이를 보완하기 위해 일부 국가에서는 여름 동안 시계를 한 시간씩 앞당기고, 저녁 야외 활동을 위해 더 많은 햇빛을 쬐도록 일정을 잡으며, 가정에서 난방과 조명에 사용되는 에너지를 줄인다. 여름에 시간을 앞당기는 관행을 서머타임 제도(DST)라고 하며, 1900년대에 최초로 실행되었다.

Actual benefits of DST are nonetheless controversial. Notably, DST has been shown to disrupt sleep patterns that affect work performance and even cause accidents. Hence, whenever it is time to adjust their clocks, people might be prompted to question the rationale for DST, and Wikipedia is one source for answers.

DST의 실제 편익은 그럼에도 불구하고 논란의 여지가 있다. 특히, DST는 업무 수행에 영향을 미치고 심지어 사고를 일으키는 수면 패턴을 교란시키는 것으로 나타났다. 따라서 시계를 조정할 때가 되면 사람들은 DST를 실시하는 이유에 대해 의문을 갖으며 Wikipedia에서 이유를 찾고자 한다.

To study trends for DST page views, we first used a Python script to extract the data from a Wikipedia database. Page view counts from 2008 to 2015 were used. Next, we used a GAM package called Prophet published by Facebook researchers to conduct our time series analysis in Python. The package is also available in R.

DST 페이지 뷰의 경향을 연구하기 위해 먼저 Python 스크립트를 사용하여 Wikipedia 데이터베이스에서 데이터를 추출했습니다. 2008년부터 2015년까지의 페이지뷰 카운트가 사용되었다. 다음으로 Facebook 연구자가 발행한 Prophet라는 GAM 패키지를 사용하여 Python에서 시계열 분석을 실시하였다.  이 패키지는 R으로도 제공되고 있다.

The Prophet package is user-friendly, allowing us to specify different types of functions comprising the resulting GAM trend. There are three main types of functions:

Prophet 패키지는 사용하기 쉽고,  GAM 트렌드를 구성하는 다양한 유형의 함수를 지정할 수 있다. 해당 함수에는 크게 세 가지 유형이 있다.

Overall Growth. This can be modeled either as a straight (linear) or slightly curved (logistic) trend. In this analysis, we use the default linear growth model.

전반적인 성장(Overall Growth)

이는 직선(선형) 또는 약간 곡선(로지스틱) 트렌드로 모델링할 수 있다. 이 분석에서는 기본 선형 성장 모델을 사용한다.

Seasonal Variations. This is modeled using Fourier series, which is simply a way to approximate periodic functions. The exact functions are derived using a process known as backfitting, to be explained in the next section. We can specify if we anticipate weekly or/and annual trends to be present. In this analysis, we include both—a weekly trend is plausible based on past studies that show less internet activity on weekends when people are likely to be outdoors, while a yearly trend might coincide with the biannual clock-turning exercise.

계절 변동(Seasonal Variations)

이것은 단순히 주기 함수를 근사하는 방법인 푸리에 급수를 사용하여 모델링한다. 정확한 함수는 다음 절에서 설명하는 백피팅이라고 하는 프로세스를 사용하여 도출한다. 주간 또는 연간 추세 예측 여부를 지정할 수 있다. 이 분석에는 둘 다 진행을 하도록 하겠다. 과거 연구에 따르면 사람들이 야외에 있을 가능성이 높은 주말에는 인터넷 활동이 적다는 것을 알 수 있는 주간 추세는 타당하지만, 연간 추세는 반년마다 진행하는 서머타임제 운동과 일치할 수 있다.

Special Events. Besides modeling regular trends, we should also account for one-off events. This includes any phenomenon, be it policy announcements or natural disasters, that would add ripples to an otherwise smooth trend. If we do not account for irregular events, the GAM might mistake them to be persistent occurrences and their effects would be erroneously propagated.

스페셜 이벤트(Special Events)

정기적인 트렌드를 모델링하는 것 외에 일회성 이벤트도 고려해야 한다. 여기에는 정책 발표나 자연 재해가 발생하더라도 원활한 추세에 파문을 가중시킬 모든 현상도 포함된다. 불규칙한 이벤트를 설명하지 않으면, GAM은 해당 이벤트를 지속적인 이벤트로 오인하여 그 영향이 잘못 전파될 수 있다.

In our analysis, special events included exact dates when US clocks are turned back and forth. We can also specify windows before and after each event where we expect significant effects. Before each time switch, for instance, online searches on DST might start increasing. But search behavior after the time switch might differ, depending on whether the clock is winded forward or backward: people might be more likely to search online for why their sleep is shortchanged, but not when they get extra snooze. Besides clock-turning dates, we also included major DST-related events. In 2010, for example, protests erupted in Israel over an unusually early switch back to winter time due to differences between the Hebrew and solar calendar. Events included in our analysis can be found in the code.

분석에 의하면, 특별한 사건은 미국 시계가 앞뒤로 움직이면서 정확한 날짜가 포함한다. 또한 중요한 이벤트를 기대할 수 있는 해당 이벤트 전과 후의 창을 지정할 수 있다. 예를 들어 서머타임제와 연관된 시간 변경 전에 온라인 검색이 증가할 수 있다. 그러나 타임 스위치 후의 검색 동작은 클럭이 앞으로 감기는지 뒤로 감기는지에 따라 다를 수 있다. 즉, 사람들은 온라인으로 sleep이 짧아지는 이유를 검색할 가능성이 높지만, 여분의 snooze가 있을 때는 그렇지 않다. 시계 돌리기 날짜 외에도 주요 DST 관련 이벤트도 포함되어 있다. 예를 들어, 2010년 이스라엘에서는 히브리력과 태양력간의 차이 때문에 이례적으로 겨울로 돌아가는 것에 대한 항의가 일어났다. 분석에 포함된 이벤트는 코드에서 찾을 수 있다.

In addition to the above, the Prophet package also requires us to specify prior values, which determine how sensitive our trend line should be to changes in data values. Higher sensitivity results in more jagged trends, which could affect generalizability to future values. Priors can be tuned when we validate our model, which we will see later in this tutorial.

위의 내용과 더불어 Prophet 패키지는 데이터 값의 변화에 대한 추세선의 민감도를 결정하는 사전 값을 지정해야 한다. 민감도가 높을수록 더 들쭉날쭉한 경향이 나타나며, 이는 미래 가치에 대한 일반화 가능성에 영향을 미칠 수 있다. 모델을 검증할 때 이전 버전을 조정할 수 있다. 이 튜토리얼의 뒷부분에서 설명한다.

For now, we can proceed to fit a GAM. Figure 3 shows the resulting functions for overall growth, special events, and seasonal variations:

현재로서는 GAM에 맞게 진행할 수 있다. 그림 3은
* 전반적 성장,
* 특수 사건,
* 계절 변동에 대한 결과 함수를 가시화한 결과이다.

time-components (tutorial).png
Figure 3. Functions comprising the GAM predicting page views of DST Wikipedia article. In the first two graphs for overall trend and special events (i.e. ‘holidays’), the x-axis is labeled ‘ds’, which stands for ‘date stamp’. Duplicate year labels appear because the grid lines do not coincide uniformly with the same date in each year.

그림 3 DST Wikipedia 문서의 페이지 뷰를 예측하는 GAM으로 구성된 함수이다. 전체 추세 및 특수 이벤트(예: ‘공휴일’)에 대한 처음 두 그래프에서 x축은 ‘ds’로 레이블이 지정되며, 이는 ‘날짜 스탬프’를 나타낸다. 그리드 선이 매년 같은 날짜와 균일하게 일치하지 않기 때문에 중복 연도 레이블이 나타난다.

We can see that overall page views of the DST Wikipedia article is generally decreasing across the years, possibly due to competing online sources explaining DST. We can also observe how spikes in page views that coincide with special events have been accounted for. Weekly trends reveal that people are most likely to read about DST on Mondays, and least likely on weekends. And finally, annual trends show that page views peak in end-March and end-October, periods when time switches occur.

DST Wikipedia 기사의 전체 페이지뷰가 해가 갈수록 감소하고 있음을 알 수 있는데, 아마도 DST를 설명하는 경쟁 온라인 소스 때문일 것이다. 또한 특별한 이벤트와 동시에 발생하는 페이지 뷰의 급상승이 어떻게 해결되었는지 관찰할 수 있다. 주간 동향에 따르면 사람들은 월요일에 DST에 대해 가장 많이 읽으며 주말에는 거의 읽지 않는 것으로 나타났다. 마지막으로 연간 동향에 따르면 페이지 뷰는 시간 전환이 발생하는 3월 말과 10월 말에 최고조에 달한다.

It is convenient how we don’t need to know the exact predictor functions to include in a GAM. Instead, we only have to specify a few constraints and the best functions would be derived automatically for us. How does GAM do this?

GAM에 포함할 정확한 예측 함수를 알 필요가 없는 것이 편리하다. 대신 몇 가지 제약조건만 지정하면 최적의 함수가 자동으로 도출된다. GAM이 이것을 진행하는 방법은 무엇인가?

Backfitting Algorithm

To find the best trend line that fits the data, GAM uses a procedure known as backfitting. Backfitting is a process that tweaks the functions in a GAM iteratively so that they produce a trend line that minimizes prediction errors. A simple example can be used to illustrate this process.

Suppose we have the following data:

백핏 알고리즘

데이터에 가장 적합한 추세선을 찾기 위해 GAM은 백피팅(Backfitting)이라고 하는 절차를 사용한다. 백핏은 예측 오류를 최소화하는 추세선을 생성하도록 GAM의 기능을 반복적으로 조정하는 프로세스이다. 이 프로세스를 설명하기 위해 간단한 예를 사용할 수 있다.

다음과 같은 데이터가 있다고 가정하자.

time-backfitting-step1.png
Figure 4. Example dataset, consisting of two predictors and an outcome variable.

그림 4 두 예측 변수와 결과 변수로 구성된 예제 데이터 집합이다.

Our aim is to find suitable functions to apply to the predictors, so that we can predict the outcome accurately.

First, we work on finding a function for Predictor 1. A good initial guess might be to multiply it by 2:

우리의 목표는 예측 변수에 적용할 적절한 함수를 찾아 결과를 정확하게 예측하는 것이다.

먼저 예측 변수 1에 대한 함수를 찾는 작업을 수행한다. 처음에는 2를 곱하는 것이 좋다.

time-backfitting-step2.png
Figure 5. Results of a model that applies a ‘multiply by 2’ function to Predictor 1.

그림 5 예측 변수 1에 ‘2의 곱셈’ 함수를 적용한 모형의 결과이다.

From Figure 5, we can see that by applying a ‘multiply by 2’ function to Predictor 1, we can predict 50% of the outcome perfectly. However, there is still room for improvement.

Next, we work on finding a function for Predictor 2. By analyzing the prediction errors from fitting Predictor 1’s function, we can see that it is possible to achieve 100% accuracy by simply adding 1 to the outcome whenever Predictor 2 has a positive value, and doing nothing otherwise (i.e. sigmoid function).

그림 5에서 예측 변수 1에 ‘2의 곱셈’ 함수를 적용하면 결과의 50%를 완벽하게 예측할 수 있음을 알 수 있다. 하지만 아직 개선의 여지가 있다.

예측변수 2에 대한 작업은 예측변수 1에 의한 연산결과의 오차를 참고하여 전체 오차를 최소화하는 방향으로 진행을 한다. 위의 예에서는 예측변수2가 양의 값을 가질 경우 1을 더하는 연산을 진행하면 전체 오차는 0이 되므로 완벽한 모델링을 확보할 수 있다.

다음으로 예측 변수 2에 대한 함수를 찾는 작업을 수행한다. 예측기 1의 함수에 맞는 예측 오차를 분석함으로써 예측기 2가 양의 값을 가질 때마다 결과에 1을 더하고, 그 외에는 아무것도 하지 않음으로써 100% 정확도를 달성할 수 있음을 알 수 있다(즉, sigmoid 함수).

This is the gist of a backfitting process, which is summed up by the following steps:

Step 0: Define a function for one predictor and calculate the resulting error.

Step 1: Derive a function for the next predictor that best reduces the error.

Step 2: Repeat Step 1 for all predictors, and further repeating the cycle to re-assess their functions if necessary, until prediction error cannot be further minimized.

Now that we’ve fitted our model, we need to put it to the test: is it able to forecast future values accurately?

이것은 백핏 프로세스의 개요이며, 다음 단계로 요약한다.

단계 0: 하나의 예측 변수에 대한 함수를 정의하고 결과 오차를 계산한다.

단계 1: 오차를 가장 잘 줄일 수 있는 다음 예측 변수의 함수를 도출한다.

단계 2: 모든 예측 변수에 대해 1단계를 반복하고 필요에 따라 예측 오류를 더 최소화할 수 없을 때까지 사이클을 반복하여 함수를 재평가한다.

이제 모델을 적합시켰으니 테스트해 봐야 한다. 미래 가치를 정확하게 예측할 수 있을까?

Validating A Time Series Model

Cross-validation is the go-to technique for assessing a model’s effectiveness in predicting future values. However, time series models are one exception where cross-validation would not work.

Recall that cross-validation involves dividing the dataset into random subsamples that are used to train and test the model repeatedly. Crucially, data points used in training samples must be independent of those in the test sample. But this is impossible in time series, because data points are time-dependent, so data in the training set would still carry time-based associations with the test set data. This calls for different techniques to validate time series models.

시계열 모델 검증

교차 검증은 미래 가치 예측에 있어 모형의 효과를 평가하기 위한 필수 기술이다. 그러나 시계열 모형은 교차 검증이 작동하지 않는 한 가지 예외사항이다.

교차 검증에는 모델을 반복적으로 훈련시키고 테스트하는 데 사용되는 데이터 세트를 랜덤 하위 샘플로 나누는 작업이 포함된다. 결정적으로, 훈련 표본에 사용되는 데이터 포인트는 검정 표본의 점과는 독립적이어야 한다. 그러나 데이터 포인트는 시간에 따라 달라지기 때문에 시계열에서는 불가능하므로 훈련 세트의 데이터는 여전히 테스트 세트 데이터와 시간 기반 연결을 유지한다. 여기에는 시계열 모델을 검증하기 위한 다양한 기술이 필요하다.

시계열에서는 훈련과 테스트용 데이터의 구분을 일반적인 방법과 동일하게 랜덤 샘플링으로 처리하면 안된다. 이는 훈련 표본에 사용되는 데이터가 검정 표본과는 독립적이어야 하기 때문이다. 시계열에서데이터는 시간에 따라 영향을 받기 때문에 이를 감안하여 훈련용과 검정용을 구분하여 사용해야 한다. 이를 위한 다양한 방법이 있다.(시간대별로 데이터를 샘플링, 세그먼트에 따라 데이터를 슬라이스하여확보)

Instead of sampling our data points across time, we can slice them based on time segments. If we want to test our model’s forecast accuracy one year into the future (i.e. forecast horizon), we can divide our dataset into training segments of one year (or longer), and use each segment to predict values in its subsequent year. This technique is called simulated historical forecasts. As a guide, if our forecast horizon is one year, then we should make simulated forecasts every half a year. Results of 11 simulated forecasts for DST’s Wikipedia page views are shown in Figure 6.

시간별로 데이터 포인트를 샘플링하는 대신 시간 세그먼트에 따라 데이터를 슬라이스할 수 있다. 모델의 예측 정확도를 1년 후(즉, 예측 범위)로 테스트하려면 데이터 세트를 1년 이상의 훈련 세그먼트로 나누고 각 세그먼트를 사용하여 다음 연도의 가치를 예측할 수 있다. 이 기술은 시뮬레이션 이력 예측이라고 한다. 참고로 예측 범위가 1년이라면, 반년마다 모의 예측을 해야 한다. 서머타임제(DST)의 Wikipedia 페이지 뷰에 대한 11개의 시뮬레이션 예측 결과는 그림 6과 같다.

* 시간별로 데이터 포인트를 샘플링하는 것보다는

* 세그먼트에 따라 데이터를 슬라이스 하여 분석 데이터를 확보할 수 있다.

time-forecast (tutorial).png
Figure 6. Simulated historical forecasts of DST’s Wikipedia page views.

In Figure 6, the forecast horizon was one year, and each training segment comprised three years worth of data. For example, the first forecast band (in red) uses data from January 2008 to December 2010 to predict views for January 2011 – December 2011. We can see that apart from the first two simulated forecasts, which were misled by the unusually high page activity in 2010, predictions generally overlapped well with actual values.

To better assess the model’s accuracy, we can take the mean prediction error from all 11 simulated forecasts and plot that against the forecast horizon, as shown in Figure 7. Notice how error increases as we try to forecast further into the future.

그림 6 DST의 Wikipedia 페이지 뷰 이력 예측 시뮬레이션.

그림 6에서 예측 범위는 1년이었고, 각 훈련 세그먼트는 3년치 데이터로 구성되었다. 예를 들어, 첫 번째 예측 대역(빨간색)은 2008년 1월부터 2010년 12월까지의 데이터를 사용하여 2011년 1월부터 2011년 12월까지의 뷰를 예측한다. 2010년의 비정상적으로 높은 페이지 활동에 의해 오도된 최초의 두 개의 시뮬레이션 예측과는 별도로, 예측은 일반적으로 실제 값과 잘 겹친다는 것을 알 수 있다.

* 그림에서 보면 3년치의 데이터를 이용하여 모델링을 훈련하고

* 훈련된 모델링을 이용하여 1년치를 예측한다.

* 예측테스트 결과 실제값과 예측값이 잘 일치하는 경향을 보여준다는 것을 알 수 있다.

모델의 정확성을 더 잘 평가하기 위해, 그림 7과 같이 시뮬레이션된 11개의 모든 예측에서 평균 예측 오류를 추출하여 예측 범위에 대해 플롯할 수 있다. 향후의 예측에 수반해, 에러가 증가하는 것에 주목해 주기 바란다.

* 그림상에서 보면 초기대비 시간이 지남에 따라 예측 오류가 증가한다는 것을 알 수 있다.

time-error (tutorial).png

Figure 7. Prediction errors across the forecast horizon. The red line represents the mean absolute error across the 11 simulated forecasts, while the black line is a smoothed trend of that error.

Recall that one of the parameters we need to tune is the values of priors, which determine how sensitive our trend should be to changes in data values. One way to do this is to try different parameter values and compare the resulting errors via plots such as Figure 8. As we can see, an overly-large prior leads to a less generalizable trend, and thus larger errors.

그림 7. 예측 범위의 예측 오류.

* 빨간색 선은 11개의 시뮬레이션된 예측에 대한 평균 절대 오차

* 검정색 선은 해당 오차의 평활 추세이다.

조정해야 하는 매개 변수 중 하나는 데이터 값의 변화에 대한 추세 민감도를 결정하는 이전 값이다. 이를 위한 한 가지 방법은 다른 매개변수 값을 시도하고 그림 8과 같은 플롯을 통해 결과 오류를 비교하는 것이다. 보시다시피, 이전 버전이 지나치게 크면 일반화할 수 있는 경향이 낮아지고, 따라서 오류가 커지게 된다.

* 매개변수에 따라 데이터값의 변화가 민감하게 변화하면 해당 모델을 일반화하기가 어렵다.

* 즉 일반화할 수 있는 경향이 낮아지고 오차가 커지게 됨을 의미한다.

time-errorCompare (tutorial).png

Figure 8. Comparison of prediction errors resulting from different prior values.

Besides tuning priors, we can also tweak settings for the base growth model, seasonality trends, and special events. Visualizing our data also helps us to identify and remove outliers. For instance, we can improve predictions by excluding data from 2010, during which page view counts were unusually high.

그림 8. 서로 다른 직전값에 따른 예측 오차 비교

사전 튜닝 외에도 기본 성장 모델, 계절성 동향, 특별 이벤트 설정도 조정할 수 있다. 또한 데이터를 시각화하면 특이치를 식별하고 제거할 수 있다. 예를 들어 페이지 뷰 수가 비정상적으로 많았던 2010년의 데이터를 제외함으로써 예측을 개선할 수 있다.

* 사전튜닝 외에 기본성장모델/계절성/특별 이벤트 설정도 조정가능

* 데이터 시각화를 통하여 특이치 식별/제거 가능

Limitations

As you might have surmised, having more training data in a time series need not necessarily lead to more accurate models. Anomalous values or rapidly changing trends could upend any prediction efforts. Worse still, sudden shocks that permanently affect a time series could also render all past data as irrelevant.

Therefore, time series analysis works best for trends that are steady and systematic, for which we can assess with visualizations.

제한 사항

추측했듯이 시계열에 훈련용 데이터가 더 많다고 해서 모형이 더 정확하다는 보장이 없다. 비정상적인 값이나 빠르게 변화하는 추세는 예측 노력을 방해할 수 있다. 더욱이 시계열에 영구적으로 영향을 미치는 갑작스러운 충격(이상치)은 과거의 모든 데이터를 무의미하게 만들 수도 있다.

따라서 시계열 분석은 시각화로 평가할 수 있는 안정적이고 체계적인 경향에 가장 적합하다.

* 시계열 분석은 시각화로 평가가능하고 안정적이며 체계적인 경향을 예측하는데 가장 적합하다고 할 수 있다.

Summary
  • Time series analysis is a technique to derive a trend across time, which might be used to predict future values. A Generalized Additive Model (GAM) does this by identifying and summing multiple functions that results in a trend line that best fits the data.
  • Functions in a GAM can be identified using the backfitting algorithm, which fits and tweaks functions iteratively in order to reduce prediction error.
  • Time series analysis works best for trends that are steady and systematic.

Did you learn something useful today? There’s more.

Get intuitive explanations of over 10 classic data science algorithms by the same authors in their brand new book: Numsense! Data Science for the Layman (no math added)

Annalyn Ng has worked as a data analyst at Disney Research, Cambridge University, and Singapore’s military.

Kenneth Soo was the top student in the University of Warwick for all 3 years as a math/statistics undergraduate, and is starting his MS in Statistics at Stanford University.

Original. Reposted with permission.

요약

시계열 분석은 시간 경과에 따른 경향을 도출하는 기술로, 미래 가치를 예측하는 데 사용할 수 있다. GAM(Generalized Additive Model)은 데이터에 가장 적합한 추세선을 만드는 여러 함수를 식별하고 합산하여 이 작업을 수행한다.

* GAM의 기능은 예측 오차를 줄이기 위해 반복적으로 함수에 맞게 조정되는 백핏 알고리즘을 사용하여 구할 수 있다.
* 시계열 분석은 안정적이고 체계적인 경향에 가장 적합합니다.

Related:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s