时序分析 21 高斯混合模型 (中)

时序分析 22 高斯混合模型 (中)

…接上

    金融时序经常呈现不平稳的状态,同时金融市场也会处于不同的阶段。例如牛市和熊市,高波动期/中波动期/低波动期。有时候市场价格和过去的价格是正相关的而有时是负相关的;有时和某些变量呈现线性关系而有时呈现非线性关系。

    我们在分析时序数据时,判断和预测市场所处的阶段非常重要。本系列文章前面所讨论的隐含马尔可夫模型就是对此类问题的一种方法,本篇文章着重讨论如何使用高斯混合模型来对时序数据分段。

    高斯混合模型的基本逻辑是假设每一个阶段是由高斯过程所产生,该过程的参数是可估计的。在这种假设下,GMM使用期望最大化方法(EM)来求得问题的最优解。

    下面我们就用实际的数据和例子来演示这个方法和过程,此例所要探究的市场阶段为平稳期(低波动律)和风险期(高波动率)。

导入包和确定工作环境

%load_ext watermark
%watermark

%load_ext autoreload
%autoreload 2

from IPython.display import display
from IPython.core.debugger import set_trace as bp
# import standard libs
from pathlib import PurePath, Path
import sys
import time
import os
import pickle
os.environ['THEANO_FLAGS'] = 'device=cpu,floatX=float32'

# get project dir
pp = PurePath(Path.cwd()).parts[:-1]
pdir = PurePath(*pp)
data_dir = pdir/'data'
script_dir = pdir / 'scripts' 
sys.path.append(script_dir.as_posix())

# import python scientific stack
import pandas as pd
pd.options.display.float_format = '{:,.4f}'.format
import pandas_datareader.data as web
import numpy as np
import sklearn.mixture as mix
from sklearn.model_selection import TimeSeriesSplit
import statsmodels.tsa.api as smt
import statsmodels.api as sm
import scipy.stats as stats
from numba import jit
import math
import pymc3 as pm
from theano import shared, theano as tt
from multiprocessing import cpu_count

# import visual tools
from mpl_toolkits import mplot3d
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
%matplotlib inline
import plotnine as pn
import mizani.breaks as mzb
import mizani.formatters as mzf
import seaborn as sns
savefig_kwds=dict(dpi=300, bbox_inches='tight')
# import util libs
from tqdm import tqdm
import warnings
warnings.filterwarnings("ignore")
#from utils import cprint
import cprint
# set globals
plt.style.use('seaborn-talk')
plt.style.use('bmh')
plt.rcParams['font.family'] = 'Bitstream Vera Sans'#'DejaVu Sans Mono'
#plt.rcParams['font.size'] = 9.5
plt.rcParams['font.weight'] = 'medium'
plt.rcParams['figure.figsize'] = 10,7

blue, green, red, purple, gold, teal = sns.color_palette('colorblind', 6)
RANDOM_STATE = 777

print()
%watermark -p pandas,pandas_datareader,numpy,sklearn,statsmodels,scipy,pymc3,matplotlib,seaborn,plotnine

Last updated: 2020-12-20T18:17:08.204910+08:00

Python implementation: CPython
Python version : 3.7.3
IPython version : 7.4.0

Compiler : MSC v.1915 64 bit (AMD64)
OS : Windows
Release : 10
Machine : AMD64
Processor : Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
CPU cores : 8
Architecture: 64bit

The autoreload extension is already loaded. To reload it, use:
%reload_ext autoreload

pandas : 1.1.5
pandas_datareader: 0.9.0
numpy : 1.16.2
sklearn : 0.20.3
statsmodels : 0.12.1
scipy : 1.2.1
pymc3 : 3.7
matplotlib : 3.3.3
seaborn : 0.9.0
plotnine : 0.7.1

我们先用测试数据试一下,

  • 假设我们在分析三年的交易数据(252*3)
  • 平稳期(stable)的收益均值为2.5%,波动率为9%
  • 风险期收益均值为-1%࿰
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值