├── images └── arma.jpg ├── .gitignore ├── tool.py ├── data.py ├── 01 TimeSeries.ipynb ├── dataset └── international-airline-passengers.csv ├── GCI.csv ├── 02 Dickey Fuller Test.ipynb └── ARIMA.ipynb /images/arma.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndersonJo/arima-python/master/images/arma.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Project 2 | .ipynb_checkpoints 3 | .idea 4 | # Python 5 | __pycache__ 6 | .pyc 7 | .py~ 8 | -------------------------------------------------------------------------------- /tool.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pylab 3 | from sklearn.metrics import mean_squared_error 4 | from sklearn.metrics import r2_score 5 | 6 | 7 | def show_result(train: np.array, test: np.array, train_pred: np.array, test_pred: np.array, lag: int): 8 | x_train = np.arange(len(train_pred)) 9 | x_test = np.arange(len(train_pred), len(train_pred) + len(test_pred)) 10 | 11 | pylab.ylim(np.min(train), np.max(test) + np.std(test) * 1.3) 12 | pylab.plot(x_train, train[lag:], linestyle="-", label='train_true', color="#555555") 13 | pylab.plot(x_train, train_pred, label='train_pred', color='blue') 14 | pylab.plot(x_test, test, label='test_true', color='#555555') 15 | pylab.plot(x_test, test_pred, label='pred_test', color='red') 16 | pylab.legend() 17 | pylab.grid() 18 | 19 | print('Lag Value:', lag) 20 | print('Train R^2:', r2_score(train[lag:], train_pred)) 21 | print('Train MSE:', mean_squared_error(train[:-lag], train_pred)) 22 | print('Test R^2:', r2_score(test, test_pred)) 23 | print('Test MSE:', mean_squared_error(test, test_pred)) 24 | -------------------------------------------------------------------------------- /data.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | from sklearn.model_selection import train_test_split 4 | from sklearn.preprocessing import StandardScaler, MinMaxScaler 5 | 6 | import pylab 7 | 8 | 9 | def to_timeseries(data, lag): 10 | data = data.reshape(-1) 11 | N = len(data[lag:]) 12 | ts = list() 13 | 14 | for i in range(N): 15 | ts.append(data[i:i + lag].tolist()) 16 | ts = np.array(ts) 17 | return ts 18 | 19 | 20 | def get_data(filename: str, lag: int, normalize=False): 21 | dataframe = pd.read_csv(filename, 22 | names=['passenger'], index_col=0, 23 | skiprows=1) 24 | dataframe.index = pd.to_datetime(dataframe.index) 25 | dataframe = dataframe.astype('float64') 26 | 27 | data = dataframe.as_matrix() 28 | _size = int(len(data) * 0.7) # 144 29 | 30 | if normalize: 31 | scaler = MinMaxScaler() 32 | data = scaler.fit_transform(data) 33 | 34 | train, test = data[:_size], data[_size:] 35 | train, test = train.reshape(-1), test.reshape(-1) 36 | 37 | ts_data = to_timeseries(data, lag=lag) 38 | ts_train, ts_test = ts_data[:_size], ts_data[_size:] 39 | 40 | return dataframe, train, test, ts_train, ts_test 41 | 42 | 43 | def diff(x: np.array, lag: int): 44 | return x[:-lag] - x[lag:] 45 | 46 | 47 | def show_diff(train, test): 48 | x_train = np.arange(len(train)) 49 | x_test = np.arange(len(train), len(train) + len(test)) 50 | 51 | pylab.plot(x_train, train, color='#aaaaaa', label='train 1 lagged diff') 52 | pylab.plot(x_test, test, color='#666666', label='test 1 lagged diff') 53 | 54 | 55 | if __name__ == '__main__': 56 | filename = 'dataset/international-airline-passengers.csv' 57 | dataframe, train, test, ts_train, ts_test = get_data(filename, lag=4) 58 | 59 | print(train.shape, ts_train.shape, test.shape) 60 | -------------------------------------------------------------------------------- /01 TimeSeries.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Time Series \n", 8 | "\n", 9 | "\n", 10 | "### Basic\n", 11 | "\n", 12 | "시간에 따른 stochastic variables 로 이루어진 데이터를 Time series data라고 하며,
\n", 13 | "정수값 $ t $ 로 인덱스되며 **동일한 시간 격차(equal-spaced time intervals)**을 갖고 있는 것을 시계열 데이터라고 합니다.
\n", 14 | "단 한개의 변수로 이루어진 time series를 **univariate** 이라고 하며, 2개 이상의 변수로 이루어진 time series를 **multivariate**이라고 합니다.\n", 15 | "\n", 16 | "\n", 17 | "### Trend, Cyclical, Seasonal, Irregular \n", 18 | "\n", 19 | "Time series는 일반적으로 4개의 요소 (Trend, Cyclical, Seasonal 그리고 Irregular)에 의해 영향을 받습니다.\n", 20 | "\n", 21 | "| Name | Description |\n", 22 | "|:-----|:------------|\n", 23 | "| **Trend(추세)** | 장기적인 관점에서 봤을때 그래프가 증가하는지, 감소하는지, 또는 정체되어 있는지등의 추세를 Trend라고 합니다.
Trend는 따라서 time series안에서 long term movement를 보는 것이 중요합니다. |\n", 24 | "| **Seasonality(계절성)** | 특정 구간동안의 (1년, 한달, 일주일..) 변동성(fluctuations)를 나타냅니다.
예를 들어서 아이스크림 판매량은 여름에 늘어나고, 외투는 겨운에 판매량이 늘어날 것입니다. 또는 피트니스센터의 고객은 매년 결심을 하는 1월 초에 가장많은 사람들이 나올것입니다. 하지만 매월초가 될수도 있고, 매주초가 될 수도 있습니다. 따라서 피트니스센터는 년, 월, 주단위 seasonality를 갖고 있다고 할수 있습니다. |\n", 25 | "| **Cycle(주기)** | Seasonality는 특정 기간에 정확하게 나타나는 변동성을 갖고 있는 반면, Cycle의 경우 특정 시간에 구애 받지 않습니다. 하지만 동일하게 특정 패턴을 갖고 있습니다. 보통 2~3년처럼 장기간에 걸친 패턴을 갖고 있을수 있습니다. 예를 들어서 business cycle의 경우에는 호황 -> 불황 -> 침체 -> 회복 의 cycle을 갖고 있습니다. | \n", 26 | "| **Irregularity(불규칙성)** | 또는 random variations이라고 불리며 예상치 못한 영향에 의해서 나타납니다. 예를 들어서 전쟁, 지진, 홍수, 혁명등등이 될 수 있습니다. |\n", 27 | "\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "### Stationary Time Series\n", 35 | "\n", 36 | "다음과 같은 조건을 갖으면 Stationary Time Series라고 할 수 있습니다. \n", 37 | "\n", 38 | "**모든 $ t $에 관하여 일정한 평균**
\n", 39 | "$ E(x_t) = \\mu $\n", 40 | "\n", 41 | "**모든 $ t $에 관하여 일정한 분산**
\n", 42 | "$ E[(x_t - \\mu)^2] = Var(x_t) = \\sigma^2 = \\gamma(0) $\n", 43 | "\n", 44 | "**covariance는 t가 아닌 s에 의존**
\n", 45 | "$ cov(y_t, t_{t+s}) = cov(y_t, y_{t-s}) = \\gamma_s $\n", 46 | "\n", 47 | "즉 평균과 분산이 각각 상수를 갖고 있으며, 시간이 지나도 평균과 분산이 변하지 않는다는 뜻입니다.
" 48 | ] 49 | } 50 | ], 51 | "metadata": { 52 | "kernelspec": { 53 | "display_name": "Python 3", 54 | "language": "python", 55 | "name": "python3" 56 | }, 57 | "language_info": { 58 | "codemirror_mode": { 59 | "name": "ipython", 60 | "version": 3 61 | }, 62 | "file_extension": ".py", 63 | "mimetype": "text/x-python", 64 | "name": "python", 65 | "nbconvert_exporter": "python", 66 | "pygments_lexer": "ipython3", 67 | "version": "3.6.1" 68 | } 69 | }, 70 | "nbformat": 4, 71 | "nbformat_minor": 2 72 | } 73 | -------------------------------------------------------------------------------- /dataset/international-airline-passengers.csv: -------------------------------------------------------------------------------- 1 | "Month","International airline passengers: monthly totals in thousands" 2 | "1949-01",112 3 | "1949-02",118 4 | "1949-03",132 5 | "1949-04",129 6 | "1949-05",121 7 | "1949-06",135 8 | "1949-07",148 9 | "1949-08",148 10 | "1949-09",136 11 | "1949-10",119 12 | "1949-11",104 13 | "1949-12",118 14 | "1950-01",115 15 | "1950-02",126 16 | "1950-03",141 17 | "1950-04",135 18 | "1950-05",125 19 | "1950-06",149 20 | "1950-07",170 21 | "1950-08",170 22 | "1950-09",158 23 | "1950-10",133 24 | "1950-11",114 25 | "1950-12",140 26 | "1951-01",145 27 | "1951-02",150 28 | "1951-03",178 29 | "1951-04",163 30 | "1951-05",172 31 | "1951-06",178 32 | "1951-07",199 33 | "1951-08",199 34 | "1951-09",184 35 | "1951-10",162 36 | "1951-11",146 37 | "1951-12",166 38 | "1952-01",171 39 | "1952-02",180 40 | "1952-03",193 41 | "1952-04",181 42 | "1952-05",183 43 | "1952-06",218 44 | "1952-07",230 45 | "1952-08",242 46 | "1952-09",209 47 | "1952-10",191 48 | "1952-11",172 49 | "1952-12",194 50 | "1953-01",196 51 | "1953-02",196 52 | "1953-03",236 53 | "1953-04",235 54 | "1953-05",229 55 | "1953-06",243 56 | "1953-07",264 57 | "1953-08",272 58 | "1953-09",237 59 | "1953-10",211 60 | "1953-11",180 61 | "1953-12",201 62 | "1954-01",204 63 | "1954-02",188 64 | "1954-03",235 65 | "1954-04",227 66 | "1954-05",234 67 | "1954-06",264 68 | "1954-07",302 69 | "1954-08",293 70 | "1954-09",259 71 | "1954-10",229 72 | "1954-11",203 73 | "1954-12",229 74 | "1955-01",242 75 | "1955-02",233 76 | "1955-03",267 77 | "1955-04",269 78 | "1955-05",270 79 | "1955-06",315 80 | "1955-07",364 81 | "1955-08",347 82 | "1955-09",312 83 | "1955-10",274 84 | "1955-11",237 85 | "1955-12",278 86 | "1956-01",284 87 | "1956-02",277 88 | "1956-03",317 89 | "1956-04",313 90 | "1956-05",318 91 | "1956-06",374 92 | "1956-07",413 93 | "1956-08",405 94 | "1956-09",355 95 | "1956-10",306 96 | "1956-11",271 97 | "1956-12",306 98 | "1957-01",315 99 | "1957-02",301 100 | "1957-03",356 101 | "1957-04",348 102 | "1957-05",355 103 | "1957-06",422 104 | "1957-07",465 105 | "1957-08",467 106 | "1957-09",404 107 | "1957-10",347 108 | "1957-11",305 109 | "1957-12",336 110 | "1958-01",340 111 | "1958-02",318 112 | "1958-03",362 113 | "1958-04",348 114 | "1958-05",363 115 | "1958-06",435 116 | "1958-07",491 117 | "1958-08",505 118 | "1958-09",404 119 | "1958-10",359 120 | "1958-11",310 121 | "1958-12",337 122 | "1959-01",360 123 | "1959-02",342 124 | "1959-03",406 125 | "1959-04",396 126 | "1959-05",420 127 | "1959-06",472 128 | "1959-07",548 129 | "1959-08",559 130 | "1959-09",463 131 | "1959-10",407 132 | "1959-11",362 133 | "1959-12",405 134 | "1960-01",417 135 | "1960-02",391 136 | "1960-03",419 137 | "1960-04",461 138 | "1960-05",472 139 | "1960-06",535 140 | "1960-07",622 141 | "1960-08",606 142 | "1960-09",508 143 | "1960-10",461 144 | "1960-11",390 145 | "1960-12",432 -------------------------------------------------------------------------------- /GCI.csv: -------------------------------------------------------------------------------- 1 | Date,NEWC,richard,ARA 2 | 2007-01-01,51.05,50.14,69.19 3 | 2007-02-01,53.64,51.55,69.96 4 | 2007-03-01,52.86,53.37,72.29 5 | 2007-04-01,54.45,50.99,71.77 6 | 2007-05-01,54.13,49.45,72.04 7 | 2007-06-01,63.2,56.55,76.47 8 | 2007-07-01,66.9,57.95,78.95 9 | 2007-08-01,69.79,59.84,86.14 10 | 2007-09-01,67.72,62.27,94.19 11 | 2007-10-01,75.19,72.68,115.34 12 | 2007-11-01,85.35,89.08,126.82 13 | 2007-12-01,89.16,95.35,126.77 14 | 2008-01-01,90.87,100.08,131.02 15 | 2008-02-01,129.52,114.33,143.56 16 | 2008-03-01,125.56,110.96,140.61 17 | 2008-04-01,126.45,108.36,139.88 18 | 2008-05-01,138.19,117.27,157.55 19 | 2008-06-01,163.38,142.41,184.56 20 | 2008-07-01,184.51,167.08,209.08 21 | 2008-08-01,160.9,156.62,190.35 22 | 2008-09-01,144.82,147.83,171.53 23 | 2008-10-01,106.92,111.58,125.53 24 | 2008-11-01,91.36,90.9,90.7 25 | 2008-12-01,78.18,78.26,78.49 26 | 2009-01-01,82.69,77.27,77.04 27 | 2009-02-01,75.03,70.21,74.6 28 | 2009-03-01,61.37,57.94,61.14 29 | 2009-04-01,62.55,62.07,65.28 30 | 2009-05-01,64.24,57.64,64.32 31 | 2009-06-01,72.64,60.64,66.34 32 | 2009-07-01,75.12,61.42,67.41 33 | 2009-08-01,73.14,63.77,70.63 34 | 2009-09-01,68.16,60.07,67.94 35 | 2009-10-01,71.74,65.26,73.48 36 | 2009-11-01,79.55,67.06,77.95 37 | 2009-12-01,81.85,73.07,79.03 38 | 2010-01-01,95.2,86.03,85.99 39 | 2010-02-01,93.25,82.88,75.7 40 | 2010-03-01,94.66,83,73.58 41 | 2010-04-01,100.21,88.79,79.72 42 | 2010-05-01,100.77,91.18,89.68 43 | 2010-06-01,98.79,92.45,93.21 44 | 2010-07-01,96.18,90.44,92.79 45 | 2010-08-01,89.41,87.88,92.71 46 | 2010-09-01,94.69,85.87,91.98 47 | 2010-10-01,97.34,91.14,99.48 48 | 2010-11-01,106.99,103.44,106.53 49 | 2010-12-01,119.47,115.5,122.31 50 | 2011-01-01,129.99,122.86,124.75 51 | 2011-02-01,127.06,118.26,119.25 52 | 2011-03-01,126.57,121.22,125.14 53 | 2011-04-01,122.26,123.38,128.02 54 | 2011-05-01,119.43,120.59,122.75 55 | 2011-06-01,119.76,118.43,122.8 56 | 2011-07-01,121.06,116.49,123.49 57 | 2011-08-01,120.71,118.26,124.81 58 | 2011-09-01,123.26,116.28,123.49 59 | 2011-10-01,119.48,110.66,119.49 60 | 2011-11-01,114.5,105.86,115.47 61 | 2011-12-01,112.28,104.23,111.58 62 | 2012-01-01,117.3,105.93,106.2 63 | 2012-02-01,117.89,105.62,99.52 64 | 2012-03-01,107.02,103.86,97.12 65 | 2012-04-01,102.95,101.53,96.45 66 | 2012-05-01,98.24,95.36,86.74 67 | 2012-06-01,88.34,86.38,87.14 68 | 2012-07-01,88.63,87.03,89.23 69 | 2012-08-01,91.53,89.09,93.87 70 | 2012-09-01,89.41,85.93,89.2 71 | 2012-10-01,83.22,83.01,86.6 72 | 2012-11-01,85.96,84.95,89.71 73 | 2012-12-01,93.08,89.44,90.51 74 | 2013-01-01,93.15,86.67,85.82 75 | 2013-02-01,94.89,85.82,88.6 76 | 2013-03-01,91.45,83.06,84.87 77 | 2013-04-01,87.33,82.02,84.87 78 | 2013-05-01,87.67,81.99,81.81 79 | 2013-06-01,82.77,77.53,75.06 80 | 2013-07-01,77.31,72.82,77.28 81 | 2013-08-01,78.31,72.74,76.01 82 | 2013-09-01,78.39,73.5,78.82 83 | 2013-10-01,81.38,81.09,84.07 84 | 2013-11-01,84.56,83.91,83.88 85 | 2013-12-01,85.86,84.97,84.04 86 | 2014-01-01,82.49,83.38,83.34 87 | 2014-02-01,77.34,77.83,78.21 88 | 2014-03-01,74.33,74.46,75.59 89 | 2014-04-01,73.37,75.54,76.84 90 | 2014-05-01,73.88,75.74,75.21 91 | 2014-06-01,71.91,74.13,73.08 92 | 2014-07-01,69.2,71.44,74.33 93 | 2014-08-01,69.49,71.2,77.4 94 | 2014-09-01,66.37,67.8,75.07 95 | 2014-10-01,64.32,65.73,72.97 96 | 2014-11-01,63.57,65.74,74.12 97 | 2014-12-01,63.53,65.68,70.47 98 | 2015-01-01,62.8,61.13,58.08 99 | 2015-02-01,71.78,63.42,62.37 100 | 2015-03-01,62.87,60.95,61.05 101 | 2015-04-01,58.55,59.11,60.3 102 | 2015-05-01,60.07,63.66,60.29 103 | 2015-06-01,60.1,61,58.6 104 | 2015-07-01,60.35,57.19,58.41 105 | 2015-08-01,58.6,54.38,55.65 106 | 2015-09-01,57.59,52,53.54 107 | 2015-10-01,52.97,50.1,52.66 108 | 2015-11-01,52.76,54.88,54.4 109 | 2015-12-01,51.96,49.66,47.56 110 | -------------------------------------------------------------------------------- /02 Dickey Fuller Test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Augmented Dickey-Fuller Test\n", 8 | "\n", 9 | "데이터가 stationary 인지 아니면 non-stationary인지 빠르게 확인하는 방법중에 하나가 Dickey-Fuller Test (ADF Test) 입니다.
\n", 10 | "가설은 다음과 같습니다.\n", 11 | "\n", 12 | "| Type | Description |\n", 13 | "|:-----|:------------|\n", 14 | "| **Null Hypothesis (H0)** | 만약 accepted된다면, 해당 time-series data는 unit root으로 표현될수 있다.
즉 stationary하지 않다는 것으로 time-dependent structure를 갖고 있다. |\n", 15 | "| **Alternate Hypothesis (H1)** | 해당 time-series 데이터는 unit root을 갖고 있지 않으며, time-dependent structure도 아니다 |\n", 16 | "\n", 17 | "\n", 18 | "* **p-value > 0.05**: Null Hypothesis (H0)를 accept하며, unit root을 갖고 있으며, **non-stationary**입니다.\n", 19 | "* **p-value <= 0.05**: Null Hypothesis (H0)를 reject하게 되며, uni root을 갖고 있지 않으며, **stationary** 입니다." 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "## Configuration" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 1, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "LAG = 12" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "## Import" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 2, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "Populating the interactive namespace from numpy and matplotlib\n" 57 | ] 58 | }, 59 | { 60 | "name": "stderr", 61 | "output_type": "stream", 62 | "text": [ 63 | "/usr/local/lib/python3.6/site-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n", 64 | " from pandas.core import datetools\n" 65 | ] 66 | } 67 | ], 68 | "source": [ 69 | "%pylab inline\n", 70 | "import math\n", 71 | "import pandas as pd\n", 72 | "\n", 73 | "from statsmodels import api as sm\n", 74 | "from sklearn.metrics import mean_squared_error\n", 75 | "from sklearn.metrics import r2_score\n", 76 | "from sklearn.preprocessing import MinMaxScaler\n", 77 | "\n", 78 | "from data import get_data, diff, show_diff" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "## Data" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 3, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "name": "stdout", 95 | "output_type": "stream", 96 | "text": [ 97 | "Train Size: (3600,)\n", 98 | "Test Size : (50,)\n" 99 | ] 100 | } 101 | ], 102 | "source": [ 103 | "TEST_SIZE = 50\n", 104 | "\n", 105 | "def get_temperature_data(normalize=True):\n", 106 | " _filename= './dataset/daily-minimum-temperatures-in-me.csv'\n", 107 | " dataframe = pd.Series.from_csv(_filename, header=0)\n", 108 | " dataframe.index = dataframe.index.to_datetime()\n", 109 | " dataframe = dataframe.astype('float64')\n", 110 | " data = dataframe.as_matrix()\n", 111 | " train, test = data[:-TEST_SIZE], data[-TEST_SIZE:]\n", 112 | " return data, train, test\n", 113 | " \n", 114 | "data, train, test = get_temperature_data()\n", 115 | "\n", 116 | "print('Train Size:', train.shape)\n", 117 | "print('Test Size :', test.shape)" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 4, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/plain": [ 128 | "" 129 | ] 130 | }, 131 | "execution_count": 4, 132 | "metadata": {}, 133 | "output_type": "execute_result" 134 | }, 135 | { 136 | "data": { 137 | "image/png": "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\nQmCC\n", 138 | "text/plain": [ 139 | "" 140 | ] 141 | }, 142 | "metadata": {}, 143 | "output_type": "display_data" 144 | } 145 | ], 146 | "source": [ 147 | "plot(np.arange(len(train)), train, label='train')\n", 148 | "plot(np.arange(len(train), len(train)+len(test)), test, label='test')\n", 149 | "legend()\n", 150 | "title('train and test dataset')" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "## Dickey-Fuller Test\n", 158 | "\n", 159 | "중요하게 볼 부분은 다음과 같습니다.\n", 160 | "\n", 161 | "1. **test statistic**: 더 negative statistic일 수록 null hypothesis를 reject합니다. (값은 낮을 수록 좋다) \n", 162 | "2. **P-Value**: 0.05 이하면 null hypothesis를 reject합니다.\n", 163 | "3. **Critical Values**: 유의수준 (level of significance)을 의미하며, 표본통계량이 기각역(rejection area)에 들어갈 확률.. 즉 오차가능성을 의미합니다. 보통 1% 또는 5%내외로 기준을 잡으며, test statistic이 critical values보다 더 낮을경우 null hypothesis을 reject를 정당화 할수 있습니다." 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 5, 169 | "metadata": {}, 170 | "outputs": [ 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "statistic: -13.9873672026\n", 176 | "P Value : 4.07449234689e-26\n", 177 | "Critical Values\n", 178 | " 1% : -3.4322\n", 179 | " 5% : -2.8624\n", 180 | " 10%: -2.5672\n", 181 | "Icbest: 16768.1985362\n" 182 | ] 183 | } 184 | ], 185 | "source": [ 186 | "test_data = diff(train, 4)\n", 187 | "\n", 188 | "adf = sm.tsa.stattools.adfuller(test_data)\n", 189 | "\n", 190 | "def plot_adf_result(adf, data):\n", 191 | " print('statistic:', adf[0])\n", 192 | " print('P Value :', adf[1])\n", 193 | " print('Critical Values')\n", 194 | " for k, v in adf[4].items():\n", 195 | " print(f' {k:3}: {v:.5}')\n", 196 | " print('Icbest:', adf[5])\n", 197 | " \n", 198 | " \n", 199 | "plot_adf_result(adf, test_data)" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "metadata": {}, 205 | "source": [ 206 | "## Hyperparameter Optimize" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 6, 212 | "metadata": {}, 213 | "outputs": [ 214 | { 215 | "name": "stdout", 216 | "output_type": "stream", 217 | "text": [ 218 | "[1] p-value:0.0 statistic:-20.9 1%:-3.43 5%:-2.86\n", 219 | "[2] p-value:9e-29 statistic:-15.9 1%:-3.43 5%:-2.86\n", 220 | "[3] p-value:7.4e-26 statistic:-13.8 1%:-3.43 5%:-2.86\n", 221 | "[4] p-value:4.1e-26 statistic:-14.0 1%:-3.43 5%:-2.86\n", 222 | "[5] p-value:2.4e-23 statistic:-12.5 1%:-3.43 5%:-2.86\n", 223 | "[6] p-value:1.4e-22 statistic:-12.2 1%:-3.43 5%:-2.86\n", 224 | "[7] p-value:4.3e-24 statistic:-12.9 1%:-3.43 5%:-2.86\n", 225 | "[8] p-value:3.2e-22 statistic:-12.0 1%:-3.43 5%:-2.86\n", 226 | "[9] p-value:1.1e-19 statistic:-10.9 1%:-3.43 5%:-2.86\n" 227 | ] 228 | } 229 | ], 230 | "source": [ 231 | "def optimize(data, n:int):\n", 232 | " for i in range(1, n):\n", 233 | " test_data = diff(data, i)\n", 234 | " adf = sm.tsa.stattools.adfuller(test_data)\n", 235 | " if adf[1] >= 0.05:\n", 236 | " continue\n", 237 | " \n", 238 | " c1 = adf[4]['1%']\n", 239 | " c5 = adf[4]['5%']\n", 240 | " print(f'[{i}] p-value:{adf[1]:<8.2} statistic:{adf[0]:<6.3} 1%:{c1:<.3} 5%:{c5:<.3}')\n", 241 | "optimize(train, 10)" 242 | ] 243 | }, 244 | { 245 | "cell_type": "markdown", 246 | "metadata": {}, 247 | "source": [ 248 | "# Airline Passenger" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": 7, 254 | "metadata": {}, 255 | "outputs": [ 256 | { 257 | "name": "stdout", 258 | "output_type": "stream", 259 | "text": [ 260 | " passenger\n", 261 | "1949-01-01 112.0\n", 262 | "1949-02-01 118.0\n", 263 | "1949-03-01 132.0\n", 264 | "1949-04-01 129.0\n", 265 | "1949-05-01 121.0\n" 266 | ] 267 | }, 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "" 272 | ] 273 | }, 274 | "execution_count": 7, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | }, 278 | { 279 | "data": { 280 | "image/png": "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\nAwMDgwec/w/GvacPSeoCgQAAAABJRU5ErkJggg==\n", 281 | "text/plain": [ 282 | "" 283 | ] 284 | }, 285 | "metadata": {}, 286 | "output_type": "display_data" 287 | } 288 | ], 289 | "source": [ 290 | "filename = 'dataset/international-airline-passengers.csv'\n", 291 | "dataframe, train, test, ts_train, ts_test = get_data(filename, LAG)\n", 292 | "\n", 293 | "train_diff = diff(train ,1)\n", 294 | "test_diff = diff(test, 1)\n", 295 | "\n", 296 | "# Visualization\n", 297 | "print(dataframe.head())\n", 298 | "show_diff(train_diff, test_diff)\n", 299 | "plot(np.arange(len(train)), train, label='train')\n", 300 | "plot(np.arange(len(train), len(train)+len(test)), test, label='test')\n", 301 | "legend()\n", 302 | "title('train and test dataset')" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 8, 308 | "metadata": {}, 309 | "outputs": [ 310 | { 311 | "name": "stdout", 312 | "output_type": "stream", 313 | "text": [ 314 | "[1] p-value:7.2e-21 statistic:-11.4 1%:-3.51 5%:-2.9\n", 315 | "[2] p-value:2.9e-20 statistic:-11.2 1%:-3.51 5%:-2.9\n", 316 | "[3] p-value:2.2e-08 statistic:-6.38 1%:-3.52 5%:-2.9\n", 317 | "[4] p-value:1.1e-20 statistic:-11.3 1%:-3.51 5%:-2.9\n", 318 | "[5] p-value:0.048 statistic:-2.88 1%:-3.52 5%:-2.9\n", 319 | "[6] p-value:1.4e-07 statistic:-6.03 1%:-3.52 5%:-2.9\n", 320 | "[12] p-value:4.7e-21 statistic:-11.5 1%:-3.51 5%:-2.9\n", 321 | "[24] p-value:1.6e-16 statistic:-9.64 1%:-3.53 5%:-2.91\n" 322 | ] 323 | } 324 | ], 325 | "source": [ 326 | "optimize(train_diff, 30)" 327 | ] 328 | } 329 | ], 330 | "metadata": { 331 | "kernelspec": { 332 | "display_name": "Python 3", 333 | "language": "python", 334 | "name": "python3" 335 | }, 336 | "language_info": { 337 | "codemirror_mode": { 338 | "name": "ipython", 339 | "version": 3 340 | }, 341 | "file_extension": ".py", 342 | "mimetype": "text/x-python", 343 | "name": "python", 344 | "nbconvert_exporter": "python", 345 | "pygments_lexer": "ipython3", 346 | "version": "3.6.1" 347 | } 348 | }, 349 | "nbformat": 4, 350 | "nbformat_minor": 2 351 | } 352 | -------------------------------------------------------------------------------- /ARIMA.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "deletable": true, 7 | "editable": true 8 | }, 9 | "source": [ 10 | "# Import" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": { 17 | "collapsed": false, 18 | "deletable": true, 19 | "editable": true 20 | }, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "Populating the interactive namespace from numpy and matplotlib\n" 27 | ] 28 | }, 29 | { 30 | "name": "stderr", 31 | "output_type": "stream", 32 | "text": [ 33 | "/usr/local/lib/python3.6/site-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n", 34 | " from pandas.core import datetools\n" 35 | ] 36 | } 37 | ], 38 | "source": [ 39 | "%pylab inline\n", 40 | "import math\n", 41 | "import pandas as pd\n", 42 | "from pandas.plotting import lag_plot, autocorrelation_plot\n", 43 | "from statsmodels.graphics.tsaplots import plot_acf, plot_pacf\n", 44 | "from statsmodels.tsa.ar_model import AR\n", 45 | "from statsmodels.tsa.arima_model import ARMA, ARIMA\n", 46 | "from statsmodels import api as sm\n", 47 | "\n", 48 | "from sklearn.metrics import mean_squared_error\n", 49 | "from sklearn.model_selection import train_test_split\n", 50 | "from sklearn.preprocessing import StandardScaler, MinMaxScaler\n", 51 | "from sklearn.metrics import r2_score\n", 52 | "\n", 53 | "from data import get_data" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": { 59 | "deletable": true, 60 | "editable": true 61 | }, 62 | "source": [ 63 | "# Data\n", 64 | "\n", 65 | "아래의 링크에서 데이터를 다운받을 수 있습니다.
\n", 66 | "[Daily minimum temperatures in Melbourne, Australia, 1981-1990](https://datamarket.com/data/set/2324/daily-minimum-temperatures-in-melbourne-australia-1981-1990#!ds=2324&display=line)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 2, 72 | "metadata": { 73 | "collapsed": false, 74 | "deletable": true, 75 | "editable": true 76 | }, 77 | "outputs": [ 78 | { 79 | "name": "stdout", 80 | "output_type": "stream", 81 | "text": [ 82 | "[Header]\n", 83 | "Date\n", 84 | "1981-01-01 20.7\n", 85 | "1981-01-02 17.9\n", 86 | "1981-01-03 18.8\n", 87 | "1981-01-04 14.6\n", 88 | "1981-01-05 15.8\n", 89 | "Name: Daily minimum temperatures in Melbourne, Australia, 1981-1990, dtype: float64\n", 90 | "\n", 91 | "Train Size: (3600, 1)\n", 92 | "Test Size : (50, 1)\n" 93 | ] 94 | }, 95 | { 96 | "data": { 97 | "image/png": "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\n", 98 | "text/plain": [ 99 | "" 100 | ] 101 | }, 102 | "metadata": {}, 103 | "output_type": "display_data" 104 | } 105 | ], 106 | "source": [ 107 | "TEST_SIZE = 50\n", 108 | "\n", 109 | "_filename= '/dataset/daily-minimum-temperature-in-melbourne/daily-minimum-temperatures-in-me.csv'\n", 110 | "dataframe = pd.Series.from_csv(_filename, header=0)\n", 111 | "dataframe.index = dataframe.index.to_datetime()\n", 112 | "dataframe = dataframe.astype('float64')\n", 113 | "print('[Header]')\n", 114 | "print(dataframe.head())\n", 115 | "dataframe.plot(grid=True)\n", 116 | "ylabel('daily minimum temperature')\n", 117 | "\n", 118 | "# Normalization \n", 119 | "scaler = MinMaxScaler()\n", 120 | "data = scaler.fit_transform(dataframe.values.reshape((-1, 1)))\n", 121 | "\n", 122 | "# Split Training and Test Data\n", 123 | "train, test = data[:-TEST_SIZE], data[-TEST_SIZE:]\n", 124 | "# train, test = train_test_split(data, test_size=0.1)\n", 125 | "# train_data, test_data = data[0:len(data)-7], data[len(data)-7:]\n", 126 | "print()\n", 127 | "print('Train Size:', train.shape)\n", 128 | "print('Test Size :', test.shape)" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 3, 134 | "metadata": { 135 | "collapsed": false, 136 | "deletable": true, 137 | "editable": true 138 | }, 139 | "outputs": [ 140 | { 141 | "data": { 142 | "text/plain": [ 143 | "" 144 | ] 145 | }, 146 | "execution_count": 3, 147 | "metadata": {}, 148 | "output_type": "execute_result" 149 | }, 150 | { 151 | "data": { 152 | "image/png": "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\ngcCH/D9L82L4UJRxOQAAAABJRU5ErkJggg==\n", 153 | "text/plain": [ 154 | "" 155 | ] 156 | }, 157 | "metadata": {}, 158 | "output_type": "display_data" 159 | } 160 | ], 161 | "source": [ 162 | "plot(np.arange(len(train)), train, label='train')\n", 163 | "plot(np.arange(len(train), len(train)+len(test)), test, label='test')\n", 164 | "legend()\n", 165 | "title('train and test dataset')" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 4, 171 | "metadata": { 172 | "collapsed": false, 173 | "deletable": true, 174 | "editable": true, 175 | "scrolled": false 176 | }, 177 | "outputs": [ 178 | { 179 | "name": "stdout", 180 | "output_type": "stream", 181 | "text": [ 182 | " passenger\n", 183 | "1949-01-01 112.0\n", 184 | "1949-02-01 118.0\n", 185 | "1949-03-01 132.0\n", 186 | "1949-04-01 129.0\n", 187 | "1949-05-01 121.0\n" 188 | ] 189 | }, 190 | { 191 | "data": { 192 | "text/plain": [ 193 | "" 194 | ] 195 | }, 196 | "execution_count": 4, 197 | "metadata": {}, 198 | "output_type": "execute_result" 199 | }, 200 | { 201 | "data": { 202 | "image/png": "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\n", 203 | "text/plain": [ 204 | "" 205 | ] 206 | }, 207 | "metadata": {}, 208 | "output_type": "display_data" 209 | } 210 | ], 211 | "source": [ 212 | "LAG = 12\n", 213 | "filename = '/dataset/time-series/international-airline-passengers.csv'\n", 214 | "dataframe, train, test, ts_train, ts_test = get_data(filename, LAG)\n", 215 | "\n", 216 | "print(dataframe.head())\n", 217 | "plot(np.arange(len(train)), train, label='train')\n", 218 | "plot(np.arange(len(train), len(train)+len(test)), test, label='test')\n", 219 | "legend()\n", 220 | "title('train and test dataset')" 221 | ] 222 | }, 223 | { 224 | "cell_type": "markdown", 225 | "metadata": { 226 | "deletable": true, 227 | "editable": true 228 | }, 229 | "source": [ 230 | "# Moving Average Model\n", 231 | "\n", 232 | "* [PennState STAT 510 - Moving Average Models(MA Models)](https://onlinecourses.science.psu.edu/stat510/node/48)\n", 233 | "\n", 234 | "* [Numpy Cookbook 참고](https://books.google.co.kr/books?id=zWHCCAAAQBAJ&pg=PA222&lpg=PA222&dq=numpy+%22moving+average+model%22&source=bl&ots=VWJa0wmEaP&sig=l_pgyToRagDVGnHA_UUo5DO0Ofg&hl=en&sa=X&ved=0ahUKEwig--Ppw4_VAhWIUrwKHWShDQoQ6AEIOTAE#v=onepage&q=numpy%20%22moving%20average%20model%22&f=false)\n", 235 | "\n", 236 | "Moving-average Model MA(q)는 AR(p)와 매우 유사하며 마찬가지로 univariate time series를 모델링 하는데 사용되는 방법중의 하나입니다.
\n", 237 | "두 모델의 차이점은 MA(q) 모델의 경우 과거의 white noise error를 사용합니다.
\n", 238 | "즉 AR(p)의 경우 과거 p값 만큼의 과거의 lagged variables사용해서 예측을 하는 반면,
\n", 239 | "MA(q) 모델은 과거의 예측 에러(forecast errors)에서 나온 값을 사용해서 예측을 합니다.
\n", 240 | "\n", 241 | "AR Model과 함께 ARMA 그리고 ARIMA 모델의 중요 컴포넌트가 됩니다.
\n", 242 | "\n", 243 | "> Moving Average Model은 Moving Average와 전혀 다릅니다.\n", 244 | "\n", 245 | "### Definition\n", 246 | "\n", 247 | "MA(q) 모델은 noise에 관하여 $ X_t $에 대해 다음과 같이 정의를 하고 있습니다.\n", 248 | "\n", 249 | "$$ X_t = c + \\epsilon_t + \\beta_1 \\epsilon_{t-1} + ... + \\beta_q \\epsilon_{t-q} $$\n", 250 | "\n", 251 | "$ \\epsilon $ 기호는 error (white noise)로 읽으면 됩니다. (epsilon이 아니라..)
\n", 252 | "noise 의 (weighted)평균으로 구해지지만 전체 시간을 모두 구하는 것이 아니라, average moving $ t $ 그리고 $ q+1 $ times가 사용됩니다.
\n", 253 | "time lags를 사용하여 다음과 같이 정의 할 수 있습니다.\n", 254 | "\n", 255 | "$$ X_t = c+ \\left(1 + \\sum^q_{k=1} \\beta_k L^k \\right) \\epsilon_t $$" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": { 261 | "deletable": true, 262 | "editable": true 263 | }, 264 | "source": [ 265 | "## Code\n" 266 | ] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "execution_count": 5, 271 | "metadata": { 272 | "collapsed": false, 273 | "deletable": true, 274 | "editable": true 275 | }, 276 | "outputs": [ 277 | { 278 | "name": "stdout", 279 | "output_type": "stream", 280 | "text": [ 281 | "[ 0.13860249 0.83298563 0.94547775 0.47590512 0.61650312]\n", 282 | "[ 1.00344739]\n" 283 | ] 284 | } 285 | ], 286 | "source": [ 287 | "from scipy.optimize import leastsq\n", 288 | "from statsmodels.regression.linear_model import GLS\n", 289 | "\n", 290 | "class MA(object):\n", 291 | " def __init__(self, lag=5):\n", 292 | " self.lag = lag\n", 293 | " self.w = np.random.rand(lag)\n", 294 | " print(self.w)\n", 295 | " \n", 296 | " def fit(self, x):\n", 297 | " mean = x.mean()\n", 298 | " a, b = leastsq(self.error, self.w, args=(x-mean,) )\n", 299 | " \n", 300 | " gls = GLS(x[1:], x[:-1]).fit()\n", 301 | " print(gls.params)\n", 302 | " return gls\n", 303 | " \n", 304 | " \n", 305 | " def error(self, w, x):\n", 306 | " return w * x[:self.lag].reshape(-1)\n", 307 | " \n", 308 | "ma = MA()\n", 309 | "gls = ma.fit(train)\n", 310 | "\n" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": 6, 316 | "metadata": { 317 | "collapsed": false, 318 | "deletable": true, 319 | "editable": true 320 | }, 321 | "outputs": [ 322 | { 323 | "name": "stderr", 324 | "output_type": "stream", 325 | "text": [ 326 | "/usr/local/lib/python3.6/site-packages/statsmodels/tsa/tsatools.py:652: RuntimeWarning: invalid value encountered in double_scalars\n", 327 | " tmp[kiter] = (macoefs[kiter]-b *macoefs[j-kiter-1])/(1-b**2)\n", 328 | "/usr/local/lib/python3.6/site-packages/statsmodels/tsa/tsatools.py:654: RuntimeWarning: divide by zero encountered in log\n", 329 | " invmacoefs = -np.log((1-macoefs)/(1+macoefs))\n", 330 | "/usr/local/lib/python3.6/site-packages/statsmodels/tools/numdiff.py:243: RuntimeWarning: invalid value encountered in subtract\n", 331 | " **kwargs)).imag/2./hess[i, j]\n", 332 | "/usr/local/lib/python3.6/site-packages/statsmodels/tools/numdiff.py:243: RuntimeWarning: invalid value encountered in multiply\n", 333 | " **kwargs)).imag/2./hess[i, j]\n", 334 | "/usr/local/lib/python3.6/site-packages/statsmodels/tsa/tsatools.py:628: RuntimeWarning: invalid value encountered in exp\n", 335 | " newparams = ((1-np.exp(-params))/(1+np.exp(-params))).copy()\n", 336 | "/usr/local/lib/python3.6/site-packages/statsmodels/tsa/tsatools.py:629: RuntimeWarning: invalid value encountered in exp\n", 337 | " tmp = ((1-np.exp(-params))/(1+np.exp(-params))).copy()\n", 338 | "/usr/local/lib/python3.6/site-packages/statsmodels/base/model.py:473: HessianInversionWarning: Inverting hessian failed, no bse or cov_params available\n", 339 | " 'available', HessianInversionWarning)\n", 340 | "/usr/local/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in greater\n", 341 | " return (self.a < x) & (x < self.b)\n", 342 | "/usr/local/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in less\n", 343 | " return (self.a < x) & (x < self.b)\n", 344 | "/usr/local/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py:1818: RuntimeWarning: invalid value encountered in less_equal\n", 345 | " cond2 = cond0 & (x <= self.a)\n" 346 | ] 347 | }, 348 | { 349 | "ename": "LinAlgError", 350 | "evalue": "Array must not contain infs or NaNs", 351 | "output_type": "error", 352 | "traceback": [ 353 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 354 | "\u001b[0;31mLinAlgError\u001b[0m Traceback (most recent call last)", 355 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mmodel_arma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mARMA\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mmodel_arma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel_arma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax_lag\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_arma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msummary\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mpred_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel_arma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 356 | "\u001b[0;32m/usr/local/lib/python3.6/site-packages/statsmodels/tsa/arima_model.py\u001b[0m in \u001b[0;36msummary\u001b[0;34m(self, alpha)\u001b[0m\n\u001b[1;32m 1631\u001b[0m \u001b[0mmastubs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\"MA.%d\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk_ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1632\u001b[0m \u001b[0mstubs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marstubs\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mmastubs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1633\u001b[0;31m \u001b[0mroots\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mr_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marroots\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaroots\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1634\u001b[0m \u001b[0mfreq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mr_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marfreq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmafreq\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1635\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mk_ma\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 357 | "\u001b[0;32m/usr/local/lib/python3.6/site-packages/statsmodels/tools/decorators.py\u001b[0m in \u001b[0;36m__get__\u001b[0;34m(self, obj, type)\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0m_cachedval\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[0;31m# Call the \"fget\" function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 97\u001b[0;31m \u001b[0m_cachedval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 98\u001b[0m \u001b[0;31m# Set the attribute in obj\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0;31m# print(\"Setting %s in cache to %s\" % (name, _cachedval))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 358 | "\u001b[0;32m/usr/local/lib/python3.6/site-packages/statsmodels/tsa/arima_model.py\u001b[0m in \u001b[0;36mmaroots\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1390\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mcache_readonly\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1391\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmaroots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1392\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mroots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mr_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmaparams\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1393\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1394\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mcache_readonly\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 359 | "\u001b[0;32m/usr/local/lib/python3.6/site-packages/numpy/lib/polynomial.py\u001b[0m in \u001b[0;36mroots\u001b[0;34m(p)\u001b[0m\n\u001b[1;32m 227\u001b[0m \u001b[0mA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdiag\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mNX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mones\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 229\u001b[0;31m \u001b[0mroots\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0meigvals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mA\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 230\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0mroots\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNX\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 360 | "\u001b[0;32m/usr/local/lib/python3.6/site-packages/numpy/linalg/linalg.py\u001b[0m in \u001b[0;36meigvals\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 887\u001b[0m \u001b[0m_assertRankAtLeast2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 888\u001b[0m \u001b[0m_assertNdSquareness\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 889\u001b[0;31m \u001b[0m_assertFinite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 890\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult_t\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_commonType\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 891\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 361 | "\u001b[0;32m/usr/local/lib/python3.6/site-packages/numpy/linalg/linalg.py\u001b[0m in \u001b[0;36m_assertFinite\u001b[0;34m(*arrays)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0marrays\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0misfinite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Array must not contain infs or NaNs\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 218\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_isEmpty2d\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 362 | "\u001b[0;31mLinAlgError\u001b[0m: Array must not contain infs or NaNs" 363 | ] 364 | } 365 | ], 366 | "source": [ 367 | "model_arma = ARMA(train, order=(4, 2, 1))\n", 368 | "model_arma = model_arma.fit(max_lag=30)\n", 369 | "print(model_arma.summary())\n", 370 | "\n", 371 | "pred_train = model_arma.predict(0)\n", 372 | "pred_test = model_arma.predict(start=len(train), end=len(train) + len(test)-1)\n", 373 | "\n", 374 | "x_train = np.arange(len(pred_train))\n", 375 | "x_test = np.arange(len(pred_train), len(pred_train) + len(pred_test))\n", 376 | "\n", 377 | "plot(x_train, train, linestyle=\"--\", label='train_true', color=\"#555555\")\n", 378 | "plot(x_train, pred_train, label='train_pred', color='blue')\n", 379 | "plot(x_test, test, label='test_true', color='#555555')\n", 380 | "plot(x_test, pred_test, label='pred_test', color='red')\n", 381 | "legend()\n", 382 | "grid()\n", 383 | "\n", 384 | "print('Lag:', model_ar.k_ar)\n", 385 | "print('Params:', model_ar.params.shape)\n", 386 | "print('Train R^2:', r2_score(pred_train, train))\n", 387 | "print('Train MSE:', mean_squared_error(pred_train, train))\n", 388 | "print('Test R^2:', r2_score(pred_test, test))\n", 389 | "print('Test MSE:', mean_squared_error(pred_test, test))" 390 | ] 391 | }, 392 | { 393 | "cell_type": "markdown", 394 | "metadata": { 395 | "deletable": true, 396 | "editable": true 397 | }, 398 | "source": [ 399 | "# ARMA (AutoRegressive Moving Average) Model\n", 400 | "\n", 401 | "ARMA(p, q) (AutoRegressive Moving Average with orders p and q) 는 AR(p) 와 MA(q) 를 합친 모델이며, univariate time series 모델링에 적합합니다.
\n", 402 | "미래의 값은.. 과거 p 관측치 그리고 random error를 합친 것으로 여깁니다.\n", 403 | "\n", 404 | "* AR(p) 모델은 momentum 그리고 주식시장에서 주로 나타나는.. mean reversion effect 를 설명합니다.\n", 405 | "* MA(q) 모델은 white noise에서 관측되는 shock effects 를 설명합니다.
shock effects는 예상치못한 이벤트로 설명될수 있습니다. 예를 들어서 서프라이즈 어닝 또는 테러공격등등..\n", 406 | "\n", 407 | "\n", 408 | "$$ \\left( 1 - \\sum^p_{k=1} \\alpha_k L^k \\right) X_t = \\left( 1 + \\sum^q_{k=1} \\beta_k L^k \\right) \\epsilon_t $$\n", 409 | "\n", 410 | "풀어쓰면 다음과 같습니다.\n", 411 | "\n", 412 | "$$ X_t = \\alpha_1 X_{t-1} + ... + \\alpha_p X_{t-p} + \\epsilon_t + \\beta_1 \\epsilon_{t-1} + ... + \\beta_q \\epsilon_{t-q} $$" 413 | ] 414 | }, 415 | { 416 | "cell_type": "markdown", 417 | "metadata": { 418 | "deletable": true, 419 | "editable": true 420 | }, 421 | "source": [ 422 | "### ARMA 코드 구현\n", 423 | "\n", 424 | "Python from statsmodels.tsa.arima_model 안의 ARMA 를 사용해서 구현할수 있습니다.
\n", 425 | "사용되는 공식은 다음과 같습니다.\n", 426 | "\n", 427 | "![alt text](images/arma.jpg \" jaja\")\n", 428 | "\n" 429 | ] 430 | }, 431 | { 432 | "cell_type": "code", 433 | "execution_count": null, 434 | "metadata": { 435 | "collapsed": false, 436 | "deletable": true, 437 | "editable": true 438 | }, 439 | "outputs": [], 440 | "source": [ 441 | "arma = ARMA(train, (29, 5))\n", 442 | "arma.endog" 443 | ] 444 | }, 445 | { 446 | "cell_type": "markdown", 447 | "metadata": { 448 | "deletable": true, 449 | "editable": true 450 | }, 451 | "source": [ 452 | "# Auto-Regressive Integrated Moving Average (ARIMA)\n", 453 | "\n", 454 | "ARIMA를 적용하기 위해서는 time series는 linear 하며 통계적 분포(normal distribution같은 statistical distribution)을 따른다고 가정합니다.
\n", 455 | "다음의 모델들의 특징을 모두 갖고 있습니다.\n", 456 | "\n", 457 | "* Autoregressive (AR)\n", 458 | "* Moving Average (MA)" 459 | ] 460 | }, 461 | { 462 | "cell_type": "markdown", 463 | "metadata": { 464 | "deletable": true, 465 | "editable": true 466 | }, 467 | "source": [ 468 | "# References \n", 469 | "\n", 470 | "* https://gejza.nipax.cz/_media/stochasticke_procesy:1302.6613.pdf\n", 471 | "* http://www.blackarbs.com/blog/time-series-analysis-in-python-linear-models-to-garch/11/1/2016#MA\n", 472 | "* http://www.uh.edu/~bsorense/arma-intro2012.pdf\n", 473 | "* http://users.dma.unipi.it/~flandoli/AUTCap4.pdf\n", 474 | "* https://en.wikipedia.org/wiki/Lag_operator\n", 475 | "* http://homepage.stat.uiowa.edu/~rdecook/stat2020/notes/ch5_pt1.pdf\n", 476 | "* http://www.blackarbs.com/blog/time-series-analysis-in-python-linear-models-to-garch/11/1/2016" 477 | ] 478 | } 479 | ], 480 | "metadata": { 481 | "kernelspec": { 482 | "display_name": "Python 3", 483 | "language": "python", 484 | "name": "python3" 485 | }, 486 | "language_info": { 487 | "codemirror_mode": { 488 | "name": "ipython", 489 | "version": 3 490 | }, 491 | "file_extension": ".py", 492 | "mimetype": "text/x-python", 493 | "name": "python", 494 | "nbconvert_exporter": "python", 495 | "pygments_lexer": "ipython3", 496 | "version": "3.6.1" 497 | } 498 | }, 499 | "nbformat": 4, 500 | "nbformat_minor": 2 501 | } 502 | --------------------------------------------------------------------------------