翻译自《Demo Week: Time Series Machine Learning with timetk》
原文链接:www.business-science.io/code-tools/2017/10/24/demo_week_timetk.html
时间序列分析工具箱——timetk
timetk
的主要用途
三个主要用途:
- 时间序列机器学习:使用回归算法进行预测;
- 构造时间序列索引:基于时间模式提取、探索和扩展时间序列索引;
- 转换不同类型的时间序列数据(例如
tbl
、xts
、zoo
、ts
之间):轻松实现不同类型的时间序列数据之间的相互转换。
我们今天将讨论时间序列机器学习和数据类型转换。第二个议题(提取和构造未来时间序列)将在时间序列机器学习中涉及,因为这对预测准确性非常关键。
加载包
需要加在两个包:
tidyquant
:用于获取数据并在后台加载 tidyversetimetk
:R 中用于处理时间序列的工具包
如果还没有安装过,请用下面的命令安装:
# Install packages
install.packages("timetk")
install.packages("tidyquant")
加载包。
# Load libraries
library(timetk) # Toolkit for working with time series in R
library(tidyquant) # Loads tidyverse, financial pkgs, used to get data
数据
我们将使用 tidyquant
中的 tq_get()
函数从 FRED 获取数据——啤酒、葡萄酒和蒸馏酒销售数据。
# Beer, Wine, Distilled Alcoholic Beverages, in Millions USD
beer_sales_tbl <- tq_get(
"S4248SM144NCEN",
get = "economic.data",
from = "2010-01-01",
to = "2016-12-31")
beer_sales_tbl
## # A tibble: 84 x 2
## date price
## <date> <int>
## 1 2010-01-01 6558
## 2 2010-02-01 7481
## 3 2010-03-01 9475
## 4 2010-04-01 9424
## 5 2010-05-01 9351
## 6 2010-06-01 10552
## 7 2010-07-01 9077
## 8 2010-08-01 9273
## 9 2010-09-01 9420
## 10 2010-10-01 9413
## # ... with 74 more rows
可视化数据是一个好东西,这有助于帮助我们了解正在使用的是什么数据。可视化对于时间序列分析和预测尤为重要。我们将使用 tidyquant
画图工具:主要是用 geom_ma(ma_fun = SMA,n = 12)
来添加一个周期为 12 的简单移动平均线来了解趋势。我们还可以看到似乎同时存在着趋势性(移动平均线以近似线性的模式增长)和季节性(波峰和波谷倾向于在特定月份发生)。
# Plot Beer Sales
beer_sales_tbl %>%
ggplot(aes(date, price)) +
geom_line(col = palette_light()[1]) +
geom_point(col = palette_light()[1]) +
geom_ma(ma_fun = SMA, n = 12, size = 1) +
theme_tq() +
scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
labs(title = "Beer Sales: 2007 through 2016")
现在你对我们要分析的时间序列有了直观的感受,那么让我们继续!
timetk
教程:
教程分为两部分。首先,我们将遵循时间序列机器学习的工作流程。其次,我们将介绍数据转换工具。
PART 1:时间序列机器学习
时间序列机器学习是预测时间序列数据的一种很好的方法,但在我们开始之前,这里有几个注意点:
- 关键洞察力:将时间序列签名(时间戳信息按列扩展到特征集)用于执行机器学习。
- 目标:我们将使用时间序列签名预测未来 12 个月的时间序列数据。
我们将遵循可用于执行时间序列机器学习的工作流程。你将看到几个 timetk
函数如何帮助完成此过程。我们将使用简单的 lm()
线性回归进行机器学习,你将看到使用时间序列签名会使机器学习更强大和准确。此外,你还应该考虑使用其他更强大的机器学习算法,例如 xgboost
、glmnet
(LASSO)等。
STEP 0:回顾数据
看看我们的起点,先打印出 beer_sales_tbl
。
# Starting point
beer_sales_tbl
## # A tibble: 84 x 2
## date price
## <date> <int>
## 1 2010-01-01 6558
## 2 2010-02-01 7481
## 3 2010-03-01 9475
## 4 2010-04-01 9424
## 5 2010-05-01 9351
## 6 2010-06-01 10552
## 7 2010-07-01 9077
## 8 2010-08-01 9273
## 9 2010-09-01 9420
## 10 2010-10-01 9413
## # ... with 74 more rows
我们可以使用 tk_index()
来提取索引;使用 tk_get_timeseries_summary()
来检索索引的摘要信息,进而快速了解时间序列。我们使用 glimpse()
输出一个更漂亮的格式。
beer_sales_tbl %>%
tk_index() %>%
tk_get_timeseries_summary() %>%
glimpse()
## Observations: 1
## Variables: 12
## $ n.obs <int> 84
## $ start <date> 2010-01-01
## $ end <date> 2016-12-01
## $ units <chr> "days"
## $ scale <chr> "month"
## $ tzone <chr> "UTC"
## $ diff.minimum <dbl> 2419200
## $ diff.q1 <dbl> 2592000
## $ diff.median <dbl> 2678400
## $ diff.mean <dbl> 2629475
## $ diff.q3 <dbl> 2678400
#