时序模式
1. 时序模式
1.1 问题引入
- 下个月的商品销量、销售额或库存量是多少?
- 明天广州市的最高用电负荷是多少?
序列模式的概念 - 时序模式:描述基于时间或其他序列的经常发生的规律或趋势,并对其建模。
- 序列模式将关联和时间序列模式结合起来,重点考虑数据之间维度上的关联性。
1.2 序列模式的内容
- 时间序列分析
- 序列发现
- 时间序列的组合成分
- 时间序列的组合模型
2. 时间序列分析
2.1 序列分析的基本内容
用已有的数据序列预测未来。在时间序列分析中,数据的属性值随着时间不断变化的。回归不强调数据的先后顺序,而时间序列要考虑日历的影响,如节假日等。
3. 序列发现
3.1 序列分析的定义
序列分析指的是用于确定数据之间与时间相关的序列模式。这些模式与在数据(或者事件)中发现的相关的关联规则很相似,只是这些序列是与时间相关的。
3 时间序列组合成分
3.1 时间序列变化的影响因素
- 时间序列的变化主要受到长期趋势、季节变动、周期变动和不规则变动这四个因素的因素
- 长期趋势因素(T):反映了经济现象在一个较长时间内的发展方向,它可以在一个相当长的时间内表现为一种近似直线的持续向上或持续向下或平稳的趋势。
- 季节变动因素(S)是经济现象首季节变动影响所形成的一种长度和幅度固定的周期波动。
- 周期变动因素(C)也称循环变动因素,它是受各种经济因素影响形成的上下起伏不定的波动。
- 不规则变动因素(I)不规则变动又称随机变动,它是受各种偶然因素所形成的不规则变动。
4 常见的时序算法
4.1 常见的序列分析及使用范围
5 时序算法实战案例
5.1 股票收益率回归分析
- 自变量:个股的收益率
- 应变量:大盘的收益率
- 通过OLS探索是否存在关系
5.2 算法的原理
使用股票数据,并利用最小二乘法拟合股票数据的收益情况,算法采用线性回归的方式
5.3 资源
工具库
matplotlib
tushare
numpy
statsmodels
完整代码
# -*- coding: utf-8 -*-
import matplotlib.pylab as plt
from matplotlib.pylab import style
import tushare as ts
import numpy as np
import statsmodels.api as sm
style.use('ggplot') # 设置图片显示的主题样式
# 解决matplotlib显示中文问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
def get_log_return(price_data):
"""
计算对数收益率
参数
===
price_data: Series类型价格/指数数据
返回
===
log_return: 对数收益率
"""
log_return = np.log(price_data / price_data.shift(1))
return log_return
def run_main():
"""
主函数
"""
# 2016年上证指数记录
# sh_data = ts.get_k_data(code='sh', start='2016-01-01', end='2017-01-01')
sh_data = ts.get_k_data(code='hs300', start='2016-01-01', end='2017-01-01')
sh_data['log_return'] = get_log_return(sh_data['close'])
# 2016年某支股票记录
stock_data = ts.get_k_data(code='sz', start='2016-01-01', end='2017-01-01')
# stock_data = ts.get_k_data(code='300003', start='2016-01-01', end='2017-01-01')
stock_data['log_return'] = get_log_return(stock_data['close'])
y = sh_data['log_return'].dropna().values
x = stock_data['log_return'].dropna().values
x_cons = sm.add_constant(x)
res_ols = sm.OLS(y, x_cons).fit()
print(res_ols.summary())
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x, y, 'bo', label="data")
ax.plot(x, res_ols.fittedvalues, 'r--', label="OLS")
ax.legend(loc='best')
plt.show()
if __name__ == '__main__':
run_main()