在本篇文章中将试图使用高斯混合模型 (GMM) 对股市中的不同市场行情进行聚类分析

介绍

通过过去的十年的发展,普通人越来越容易进入股票市场,每天进出市场的资金量创历史新高。

作为投资者,你可以通过多种方式培养何时买入或卖出的经验和直觉。其中一种最简单的方法是咨询朋友或其他投资者,但他们很快就会用相互矛盾的观点淹没你。

本篇文章将试图用严谨的数学工具而不是生硬的意见解决这个赚钱的黄金问题——我应该什么时候买入或卖出?

我将演示如何使用高斯混合模型来帮助确定资金何时进入或退出市场。

从数学上讲,任何给定时间的市场行情都可以称为“市场状态”。行情通常可以解释为任意数量的概念,例如熊市或牛市;波动大小等等。我们可以根据一些特征将交易日的状态进行聚类,这样会比每个对每个概念单独命名要好的多。

由于市场行情没有明确的定义——因此也没有代表市场的响应变量——所以使用无监督机器学习模型来确认市场状态可能要比监督式模型好很多,这也是本篇文章的理论假设。

有监督与无监督机器学习

这两种方法的区别在于使用的数据集是否有标记:监督学习使用有标注的输入和输出数据,而无监督学习算法没有确定的输出。数据集的标注是响应变量或试图预测的变量包含数值或分类值。因此,当使用监督机器学习算法时,预测变量是明确定义的。一个非常简单但强大的监督学习的例子是线性回归。通过x预测y

高斯混合模型(GMM)

高斯混合模型是p维空间中多个正态分布的重叠。 空间的维度由变量的数量生成。 例如,如果我们有一个变量(标准普尔 500 指数回报),GMM 将基于一维数据进行拟合。 GMM 可用于模拟股票市场以及其他金融应用程序的状态。 股市回报的一个特征是由高波动日产生的重尾。 在分布的尾部捕获高度波动的日子的能力对于在建模过程中捕获信息十分重要。

上图代表了一些具有 4 个集群的多模态数据。 高斯混合模型是一种用于标记数据的聚类模型。

使用 GMM 进行无监督聚类的一个主要好处是包含每个聚类的空间可以呈现椭圆形状。 高斯混合模型不仅考虑均值,还考虑协方差来形成集群

GMM 方法的一个优点是它完全是数据驱动的。 提供给模型的数据就可以进行聚类。 重要的是,每个集群的标签可以是数字,因为数据驱动了潜在的特征,而不是人类的意见。

GMM 的数学解释

高斯混合模型的目标是将数据点分配到n个多正态分布中的一个。 为此,使用期望最大化 (EM) 算法来求解每个多正态分布的参数。

第 1步:随机初始化起始正态分布参数

第 2 步:执行E步(Expectation),根据当前的参数值,计算样本隐藏变量的期望;

第 3 步:执行M步(Maximum),根据当前样本的隐藏变量,求解参数的最大似然估计;

第 4 步:计算(数据给状态的分数,平均值,协方差)的联合概率的对数似然

第 5 步:重复第 2-4 步,直到对数似然收敛

每个数据点属于某个集群的概率如下所示。在索引的基础上,我们得到了每个数据点属于每个独立集群的概率。矩阵的大小将是按集群数量计算的数据点数。因为它是一个概率矩阵,在索引“i”下的值和为1。

索引i代表每个数据点或向量。 索引 c 代表给定的集群; 如果我们有三个集群 © 将是 1 或 2 或 3。

上面是多变量高斯公式,其中 mu 和 sigma 是需要使用 EM 算法进行估计的参数。

另一个关键概念是我们空间中的每个高斯分布都是无界的并且彼此重叠。 根据数据点的位置,从每个分布中为其分配一个概率。 属于任何集群的每个数据点的概率总和为 1。

最后,由于 EM 算法是一个迭代过程,我们需要衡量每一步的进度以了解何时停止。 为此,我们使用模型的对数似然函数来测量参数何时收敛。

GMM 的实现

本节将分为两节,每节代表 GMM 的一个应用。

使用 GMM 将 S&P500 的回报分为三个状态。 数据来自雅虎财经。

import pandas as pd
import numpy as np
from datetime import datetime , timedelta
import yfinance as yf  #import data via Yahoo
sp_list = ['SPY']today = datetime.today()# dd/mm/YY
#get last business day
offset = max(1, (today.weekday() + 6) % 7 - 3)
timed = timedelta(offset)
today_business = today - timed
print("d1 =", today_business)
today = today_business.strftime("%Y-%m-%d")symbols_list = sp_list
start = '2000-01-01'
end = todayprint('S&P500 Stock download')
r = yf.download(symbols_list, start,end)df_pivot = r
#replace all nan data with zero
treasury_yeild = df_pivot.Close

在这里我需要确定有多少状态最能代表市场环境,我们将假设三种状态——熊市、震荡、牛市。

我将使用 S&P500 的对数回报来拟合 GMM。

一维数据上 GMM 的 Python 实现非常简单。

from scipy.stats import multivariate_normal
from sklearn.mixture import GaussianMixture
#'10YrYeild':treasury_yeild.Close.values
# 0. Create dataset
sp_list = ['SPY']symbols_list = sp_list
start = '2008-01-01'print('S&P500 Stock download')
r = yf.download(symbols_list, start,end)daily_returns = (r.Close.pct_change()) #Daily log returns Close price for each day -  Y observations
daily_returns = daily_returns.iloc[1:]X = daily_returns.valuesGMM = GaussianMixture(n_components=3).fit(X.reshape(-1,1)) # Instantiate and fit the model

使用 sklearn 的高斯混合模型就可以找到我们想得到的状态。

从上面的分析来看,两个状态也可能就可以了

可能出现的一个问题是趋同性。有可能是基于初始条件和EM算法中某个阈值的标准的定义上,也有可能是形成不同的分布。这个还需要进一步的调查。

使用符合 GMM 的宏观经济数据对美国经济进行分类

为了直观演示 GMM,我将使用二维数据(两个变量)。 每个对应的簇都是三个维度的多正态分布。 在这个例子中,第一个维度是通胀值(我们称之为 X),第二个维度是 S&P500 的月回报率(我们称之为 Y),第三个维度是 X&Y 的联合概率。 换句话说,X 和 Y 的某个组合的概率是多少。

from scipy.stats import multivariate_normal
from sklearn.mixture import GaussianMixture
#'10YrYeild':treasury_yeild.Close.values
# 0. Create dataset
gmm_data = pd.DataFrame({'Inflation':inflation.Weight,'Market_return':spy.Close.values})
gmm_data = gmm_data.to_numpy()X = gmm_datax,y = np.meshgrid(np.sort(X[:,0]),np.sort(X[:,1]))
XY = np.array([x.flatten(),y.flatten()]).TGMM = GaussianMixture(n_components=3).fit(X) # Instantiate and fit the model
print('Converged:',GMM.converged_) # Check if the model has converged

该图展示了GMM相对于其他聚类算法的一个主要优点。正态分布可以产生椭圆形状,这个性质来自协方差矩阵。

给定二维数据,GMM 能够产生三种不同的状态。

最后,如果要创建一个有意义的模型,应该考虑更多的变量。 实际上一系列不同的指标构成了美国经济及其表现。我们可以继续并合并任意数量的维度,但是在进入 n 维度之前,了解提供给模型的数据的相关结构很重要。

总结

这是我们如何将 GMM 应用于金融市场和经济的简单介绍。 请记住这只是一个介绍, 引入 GMM 方法是为了提高将股票市场价格数据分类为状态的稳健性,市场条件和经济之间的联系还需要更加深入的研究。

作者:Ethan Johnson-Skinner, MSc

使用高斯混合模型检测不同的股票市场状况相关推荐

  1. 使用高斯混合模型对不同的股票市场状况进行聚类

    来源:DeepHub IMBA 本文约2300字,建议阅读5分钟 本文为你介绍如何将 GMM 应用于金融市场和经济. 介绍 通过过去的十年的发展,普通人越来越容易进入股票市场,每天进出市场的资金量创历 ...

  2. 数字图像处理拓展题目——利用Matlab实现动态目标检测 二帧差法、ViBe法、高斯混合模型法,可应用于学生递东西行为检测

    1.二帧差法实现动态目标检测 先上效果图: 利用GUI界面显示出来效果图为: 实现流程 1.利用matlab中的VideoReader函数读取视频流. 2.帧差法:获得视频帧数,用for循环对图像每相 ...

  3. python 背景建模高斯混合模型

    原文:https://blog.csdn.net/zhangyonggang886/article/details/51638655 BackgroundSubtractorMOG2是以高斯混合模型为 ...

  4. 高斯混合模型GMM的理解

    高斯混合模型(Gaussian Mixture Model,简称GMM)是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型.通俗点 ...

  5. 高斯混合模型(GMM)实现和可视化

    高斯分布公式及图像示例 高斯分布概率密度热力图 高斯混合模型实现代码 高斯混合模型聚簇效果图 参考文献 作者:金良(golden1314521@gmail.com) csdn博客: http://bl ...

  6. 图像处理之高斯混合模型

    图像处理之高斯混合模型    一:概述 高斯混合模型(GMM)在图像分割.对象识别.视频分析等方面均有应用,对于任意给定的数据样本集合,根据其分布概率, 可以计算每个样本数据向量的概率分布,从而根据概 ...

  7. 【Opencv】目标追踪——高斯混合模型分离算法(MOG)

    文章目录 1 环境 2 效果 3 原理 4 代码 1 环境 Python 3.8.8 PyCharm 2021 opencv-python 2 效果 3 原理   视频图像中的目标检测与跟踪,是计算机 ...

  8. K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!

    文章目录 1. 聚类算法都是无监督学习吗? 2. k-means(k均值)算法 2.1 算法过程 2.2 损失函数 2.3 k值的选择 2.4 KNN与K-means区别? 2.5 K-Means优缺 ...

  9. halcon系列(1):高斯混合模型的一套算子

    一.摘要 高斯混合模型,是EM算法之一种:该算法理论部分在另外的文章专门探讨,本篇专门对halcon的高斯分类的算子进行介绍,和基本使用方法.halcon的高斯模型其实很复杂,也很管用.希望多付出一些 ...

最新文章

  1. My first Blog
  2. LeetCode:2. Add Two Numbers
  3. 数字转字符函数_C语言常用的几个工具函数
  4. 湘潭大学计算机学院调剂,湘潭大学2018年硕士研究生调剂信息公告
  5. 编译期间确定类型安全——泛型(Generics)
  6. qt开发环境 - 简易二进制文件打开,串口自发自收
  7. 前端学习(3248):react的生命周期getSnapBeforeUpdate举例
  8. 二. 简单的NSIS安装包
  9. 【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)
  10. Spark报错: Invalid Spark URL: spark://YarnScheduler@stream_test_nb:40659
  11. mysql修改表编码为ytf8_如何修复“TypeError:x和y必须具有相同的数据类型,got”tf.uint8型!= tf.float32型“当我试图以十为单位调整图像大小时...
  12. 双向板受力特点_弹性减震球形钢支座/双向弹簧铰支座特性
  13. [Jscript]Js导出Excel
  14. 【转】android:windowSoftInputMode属性详解
  15. awz3格式转epub格式转mobi格式
  16. intel android 平板,IT百科之英特尔芯平板
  17. 1317: PIPI的生日礼物
  18. UE4面试基础知识(一)
  19. 爱思助手更新后无法连接服务器,《爱思助手》操作失败解决办法(图文)
  20. 爬虫学的好,牢饭吃得好(爬虫实例)

热门文章

  1. 人工智能交互集成在线语音合成能力的Tips
  2. 【css】媒体查询(总结)
  3. 流形学习-Manifold Learning
  4. 小x的奇遇-adventure
  5. 录屏软件有哪些?分享几种简单实用的录屏工具
  6. PAT-1062 Talent and Virtue
  7. Matlab:幂和指数
  8. 【无标题】大数据建模、分析、挖掘技术应用
  9. 6、查询电脑上连接的网络的IP地址
  10. PG 备份策略及 WAL 日志清理策略