time series analysis and mining with r

40
Time Series Analysis with R Yanchang Zhao http://www.RDataMining.com 30 September 2014 1 / 39

Upload: yanchang-zhao

Post on 29-May-2015

1.325 views

Category:

Technology


2 download

DESCRIPTION

RDataMining Slides SeriesTime Series Analysis and Mining with R

TRANSCRIPT

Page 1: Time Series Analysis and Mining with R

Time Series Analysis with R

Yanchang Zhao

http://www.RDataMining.com

30 September 2014

1 / 39

Page 2: Time Series Analysis and Mining with R

Outline

Introduction

Time Series Decomposition

Time Series Forecasting

Time Series Clustering

Time Series Classification

Online Resources

2 / 39

Page 3: Time Series Analysis and Mining with R

Time Series Analysis with R 1

I time series data in R

I time series decomposition, forecasting, clustering andclassification

I autoregressive integrated moving average (ARIMA) model

I Dynamic Time Warping (DTW)

I Discrete Wavelet Transform (DWT)

I k-NN classification

1Chapter 8: Time Series Analysis and Mining, in bookR and Data Mining: Examples and Case Studies.http://www.rdatamining.com/docs/RDataMining.pdf

3 / 39

Page 4: Time Series Analysis and Mining with R

R

I a free software environment for statistical computing andgraphics

I runs on Windows, Linux and MacOS

I widely used in academia and research, as well as industrialapplications

I 5,800+ packages (as of 13 Sept 2014)

I CRAN Task View: Time Series Analysishttp://cran.r-project.org/web/views/TimeSeries.html

4 / 39

Page 5: Time Series Analysis and Mining with R

Time Series Data in R

I class ts

I represents data which has been sampled at equispaced pointsin time

I frequency=7: a weekly series

I frequency=12: a monthly series

I frequency=4: a quarterly series

5 / 39

Page 6: Time Series Analysis and Mining with R

Time Series Data in R

a <- ts(1:20, frequency = 12, start = c(2011, 3))

print(a)

## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

## 2011 1 2 3 4 5 6 7 8 9 10

## 2012 11 12 13 14 15 16 17 18 19 20

str(a)

## Time-Series [1:20] from 2011 to 2013: 1 2 3 4 5 6 7 8 9 10...

attributes(a)

## $tsp

## [1] 2011 2013 12

##

## $class

## [1] "ts"

6 / 39

Page 7: Time Series Analysis and Mining with R

Outline

Introduction

Time Series Decomposition

Time Series Forecasting

Time Series Clustering

Time Series Classification

Online Resources

7 / 39

Page 8: Time Series Analysis and Mining with R

What is Time Series Decomposition

To decompose a time series into components:

I Trend component: long term trend

I Seasonal component: seasonal variation

I Cyclical component: repeated but non-periodic fluctuations

I Irregular component: the residuals

8 / 39

Page 9: Time Series Analysis and Mining with R

Data AirPassengersData AirPassengers: monthly totals of Box Jenkins internationalairline passengers, 1949 to 1960. It has 144(=12×12) values.

plot(AirPassengers)

Time

AirP

asse

nger

s

1950 1952 1954 1956 1958 1960

100

200

300

400

500

600

9 / 39

Page 10: Time Series Analysis and Mining with R

Decomposition

apts <- ts(AirPassengers, frequency = 12)

f <- decompose(apts)

plot(f$figure, type = "b") # seasonal figures

2 4 6 8 10 12

−40

−20

020

4060

Index

f$fig

ure

10 / 39

Page 11: Time Series Analysis and Mining with R

Decomposition

plot(f)10

030

050

0

obse

rved

150

250

350

450

trend

−40

020

4060

seas

onal

−40

020

4060

2 4 6 8 10 12

rand

om

Time

Decomposition of additive time series

11 / 39

Page 12: Time Series Analysis and Mining with R

Outline

Introduction

Time Series Decomposition

Time Series Forecasting

Time Series Clustering

Time Series Classification

Online Resources

12 / 39

Page 13: Time Series Analysis and Mining with R

Time Series Forecasting

I To forecast future events based on known past data

I For example, to predict the price of a stock based on its pastperformance

I Popular modelsI Autoregressive moving average (ARMA)I Autoregressive integrated moving average (ARIMA)

13 / 39

Page 14: Time Series Analysis and Mining with R

Forecasting

# build an ARIMA model

fit <- arima(AirPassengers, order = c(1, 0, 0), list(order = c(2,

1, 0), period = 12))

fore <- predict(fit, n.ahead = 24)

# error bounds at 95% confidence level

U <- fore$pred + 2 * fore$se

L <- fore$pred - 2 * fore$se

ts.plot(AirPassengers, fore$pred, U, L,

col = c(1, 2, 4, 4), lty = c(1, 1, 2, 2))

legend("topleft", col = c(1, 2, 4), lty = c(1, 1, 2),

c("Actual", "Forecast", "Error Bounds (95% Confidence)"))

14 / 39

Page 15: Time Series Analysis and Mining with R

Forecasting

Time

1950 1952 1954 1956 1958 1960 1962

100

200

300

400

500

600

700

ActualForecastError Bounds (95% Confidence)

15 / 39

Page 16: Time Series Analysis and Mining with R

Outline

Introduction

Time Series Decomposition

Time Series Forecasting

Time Series Clustering

Time Series Classification

Online Resources

16 / 39

Page 17: Time Series Analysis and Mining with R

Time Series Clustering

I To partition time series data into groups based on similarity ordistance, so that time series in the same cluster are similar

I Measure of distance/dissimilarityI Euclidean distanceI Manhattan distanceI Maximum normI Hamming distanceI The angle between two vectors (inner product)I Dynamic Time Warping (DTW) distanceI ...

17 / 39

Page 18: Time Series Analysis and Mining with R

Dynamic Time Warping (DTW)DTW finds optimal alignment between two time series.

library(dtw)

idx <- seq(0, 2 * pi, len = 100)

a <- sin(idx) + runif(100)/10

b <- cos(idx)

align <- dtw(a, b, step = asymmetricP1, keep = T)

dtwPlotTwoWay(align)

Index

Query

value

0 20 40 60 80 100

−1.0

−0.5

0.00.5

1.0

18 / 39

Page 19: Time Series Analysis and Mining with R

Synthetic Control Chart Time Series

I The dataset contains 600 examples of control chartssynthetically generated by the process in Alcock andManolopoulos (1999).

I Each control chart is a time series with 60 values.I Six classes:

I 1-100 NormalI 101-200 CyclicI 201-300 Increasing trendI 301-400 Decreasing trendI 401-500 Upward shiftI 501-600 Downward shift

I http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_

control.html

19 / 39

Page 20: Time Series Analysis and Mining with R

Synthetic Control Chart Time Series

# read data into R sep='': the separator is white space, i.e., one

# or more spaces, tabs, newlines or carriage returns

sc <- read.table("./data/synthetic_control.data", header = F, sep = "")

# show one sample from each class

idx <- c(1, 101, 201, 301, 401, 501)

sample1 <- t(sc[idx, ])

plot.ts(sample1, main = "")

20 / 39

Page 21: Time Series Analysis and Mining with R

Six Classes

2426

2830

3234

36

1

1520

2530

3540

45

101

2530

3540

45

0 10 20 30 40 50 60

201

Time

010

2030

301

2530

3540

45

401

1015

2025

3035

0 10 20 30 40 50 60

501

Time

21 / 39

Page 22: Time Series Analysis and Mining with R

Hierarchical Clustering with Euclidean distance

# sample n cases from every class

n <- 10

s <- sample(1:100, n)

idx <- c(s, 100 + s, 200 + s, 300 + s, 400 + s, 500 + s)

sample2 <- sc[idx, ]

observedLabels <- rep(1:6, each = n)

# hierarchical clustering with Euclidean distance

hc <- hclust(dist(sample2), method = "ave")

plot(hc, labels = observedLabels, main = "")

22 / 39

Page 23: Time Series Analysis and Mining with R

Hierarchical Clustering with Euclidean distance

64 6 66 6

66

66 6

44 4 4 4 4 4

4 4 3 33 3

3 35

55 5 5 5

3 3 3 3 5 55 5

2 22

2 22

2 22 2

11 1

1 1 1 11

1 12040

6080

100

120

140

hclust (*, "average")dist(sample2)

Hei

ght

23 / 39

Page 24: Time Series Analysis and Mining with R

Hierarchical Clustering with Euclidean distance

# cut tree to get 8 clusters

memb <- cutree(hc, k = 8)

table(observedLabels, memb)

## memb

## observedLabels 1 2 3 4 5 6 7 8

## 1 10 0 0 0 0 0 0 0

## 2 0 3 1 1 3 2 0 0

## 3 0 0 0 0 0 0 10 0

## 4 0 0 0 0 0 0 0 10

## 5 0 0 0 0 0 0 10 0

## 6 0 0 0 0 0 0 0 10

24 / 39

Page 25: Time Series Analysis and Mining with R

Hierarchical Clustering with DTW Distance

myDist <- dist(sample2, method = "DTW")

hc <- hclust(myDist, method = "average")

plot(hc, labels = observedLabels, main = "")

# cut tree to get 8 clusters

memb <- cutree(hc, k = 8)

table(observedLabels, memb)

## memb

## observedLabels 1 2 3 4 5 6 7 8

## 1 10 0 0 0 0 0 0 0

## 2 0 4 3 2 1 0 0 0

## 3 0 0 0 0 0 6 4 0

## 4 0 0 0 0 0 0 0 10

## 5 0 0 0 0 0 0 10 0

## 6 0 0 0 0 0 0 0 10

25 / 39

Page 26: Time Series Analysis and Mining with R

Hierarchical Clustering with DTW Distance

3 3 3 3 3 35 5

3 3 3 35 5 5 5

5 5 5 5 6 6 6 4 6 4 4 4 4 4 4 4 4 46 6

6 6 6 6 1 1 1 1 1 1 1 1 1 12 2

2 2 2 2 2 2 2 2

020

040

060

080

010

00

hclust (*, "average")myDist

Hei

ght

26 / 39

Page 27: Time Series Analysis and Mining with R

Outline

Introduction

Time Series Decomposition

Time Series Forecasting

Time Series Clustering

Time Series Classification

Online Resources

27 / 39

Page 28: Time Series Analysis and Mining with R

Time Series Classification

Time Series Classification

I To build a classification model based on labelled time series

I and then use the model to predict the lable of unlabelled timeseries

Feature Extraction

I Singular Value Decomposition (SVD)

I Discrete Fourier Transform (DFT)

I Discrete Wavelet Transform (DWT)

I Piecewise Aggregate Approximation (PAA)

I Perpetually Important Points (PIP)

I Piecewise Linear Representation

I Symbolic Representation

28 / 39

Page 29: Time Series Analysis and Mining with R

Decision Tree (ctree)

ctree from package party

classId <- rep(as.character(1:6), each = 100)

newSc <- data.frame(cbind(classId, sc))

library(party)

ct <- ctree(classId ~ ., data = newSc,

controls = ctree_control(minsplit = 20,

minbucket = 5, maxdepth = 5))

29 / 39

Page 30: Time Series Analysis and Mining with R

Decision Tree

pClassId <- predict(ct)

table(classId, pClassId)

## pClassId

## classId 1 2 3 4 5 6

## 1 100 0 0 0 0 0

## 2 1 97 2 0 0 0

## 3 0 0 99 0 1 0

## 4 0 0 0 100 0 0

## 5 4 0 8 0 88 0

## 6 0 3 0 90 0 7

# accuracy

(sum(classId == pClassId))/nrow(sc)

## [1] 0.8183

30 / 39

Page 31: Time Series Analysis and Mining with R

DWT (Discrete Wavelet Transform)

I Wavelet transform provides a multi-resolution representationusing wavelets.

I Haar Wavelet Transform – the simplest DWThttp://dmr.ath.cx/gfx/haar/

I DFT (Discrete Fourier Transform): another popular featureextraction technique

31 / 39

Page 32: Time Series Analysis and Mining with R

DWT (Discrete Wavelet Transform)

# extract DWT (with Haar filter) coefficients

library(wavelets)

wtData <- NULL

for (i in 1:nrow(sc)) {a <- t(sc[i, ])

wt <- dwt(a, filter = "haar", boundary = "periodic")

wtData <- rbind(wtData, unlist(c(wt@W, wt@V[[wt@level]])))

}wtData <- as.data.frame(wtData)

wtSc <- data.frame(cbind(classId, wtData))

32 / 39

Page 33: Time Series Analysis and Mining with R

Decision Tree with DWT

ct <- ctree(classId ~ ., data = wtSc,

controls = ctree_control(minsplit=20, minbucket=5,

maxdepth=5))

pClassId <- predict(ct)

table(classId, pClassId)

## pClassId

## classId 1 2 3 4 5 6

## 1 98 2 0 0 0 0

## 2 1 99 0 0 0 0

## 3 0 0 81 0 19 0

## 4 0 0 0 74 0 26

## 5 0 0 16 0 84 0

## 6 0 0 0 3 0 97

(sum(classId==pClassId)) / nrow(wtSc)

## [1] 0.8883

33 / 39

Page 34: Time Series Analysis and Mining with R

plot(ct, ip_args = list(pval = F), ep_args = list(digits = 0))

V57

1

≤ 117 > 117

W43

2

≤ −4 > −4

W5

3

≤ −8 > −8

Node 4 (n = 68)

123456

0

0.2

0.4

0.6

0.8

1Node 5 (n = 6)

123456

0

0.2

0.4

0.6

0.8

1

W31

6

≤ −6 > −6

Node 7 (n = 9)

123456

0

0.2

0.4

0.6

0.8

1Node 8 (n = 86)

123456

0

0.2

0.4

0.6

0.8

1

V57

9

≤ 140 > 140

Node 10 (n = 31)

123456

0

0.2

0.4

0.6

0.8

1

V57

11

≤ 178 > 178

W22

12

≤ −6 > −6

Node 13 (n = 80)

123456

0

0.2

0.4

0.6

0.8

1

W31

14

≤ −13 > −13

Node 15 (n = 9)

123456

0

0.2

0.4

0.6

0.8

1Node 16 (n = 99)

123456

0

0.2

0.4

0.6

0.8

1

W31

17

≤ −15 > −15

Node 18 (n = 12)

123456

0

0.2

0.4

0.6

0.8

1

W43

19

≤ 3 > 3

Node 20 (n = 103)

123456

0

0.2

0.4

0.6

0.8

1Node 21 (n = 97)

123456

0

0.2

0.4

0.6

0.8

1

34 / 39

Page 35: Time Series Analysis and Mining with R

k-NN Classification

I find the k nearest neighbours of a new instance

I label it by majority voting

I needs an efficient indexing structure for large datasets

k <- 20

newTS <- sc[501, ] + runif(100) * 15

distances <- dist(newTS, sc, method = "DTW")

s <- sort(as.vector(distances), index.return = TRUE)

# class IDs of k nearest neighbours

table(classId[s$ix[1:k]])

##

## 4 6

## 3 17

Results of majority voting: class 6

35 / 39

Page 36: Time Series Analysis and Mining with R

k-NN Classification

I find the k nearest neighbours of a new instance

I label it by majority voting

I needs an efficient indexing structure for large datasets

k <- 20

newTS <- sc[501, ] + runif(100) * 15

distances <- dist(newTS, sc, method = "DTW")

s <- sort(as.vector(distances), index.return = TRUE)

# class IDs of k nearest neighbours

table(classId[s$ix[1:k]])

##

## 4 6

## 3 17

Results of majority voting: class 6

35 / 39

Page 37: Time Series Analysis and Mining with R

The TSclust Package

I TSclust: a package for time seriesclustering 2

I measures of dissimilarity between time series to perform timeseries clustering.

I metrics based on raw data, on generating models and on theforecast behavior

I time series clustering algorithms and cluster evaluation metrics

2http://cran.r-project.org/web/packages/TSclust/36 / 39

Page 38: Time Series Analysis and Mining with R

Outline

Introduction

Time Series Decomposition

Time Series Forecasting

Time Series Clustering

Time Series Classification

Online Resources

37 / 39

Page 39: Time Series Analysis and Mining with R

Online Resources

I Chapter 8: Time Series Analysis and Mining, in bookR and Data Mining: Examples and Case Studieshttp://www.rdatamining.com/docs/RDataMining.pdf

I R Reference Card for Data Mininghttp://www.rdatamining.com/docs/R-refcard-data-mining.pdf

I Free online courses and documentshttp://www.rdatamining.com/resources/

I RDataMining Group on LinkedIn (7,000+ members)http://group.rdatamining.com

I RDataMining on Twitter (1,700+ followers)@RDataMining

38 / 39

Page 40: Time Series Analysis and Mining with R

The End

Thanks!

Email: yanchang(at)rdatamining.com

39 / 39