pandas_2样本(资产)最小方差组合

目录

概念与推导

代码


概念与推导

代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df_004 = pd.read_csv('600004.csv',encoding='utf-8')
df_015 = pd.read_csv('600015.csv',encoding='utf-8')
df_004['ret_004'] = df_004['closePrice'].pct_change()
df_015['ret_015'] = df_015['closePrice'].pct_change()
df_004 = df_004.loc[:,['tradeDate','ret_004']]
df_015 = df_015.loc[:,['tradeDate','ret_015']]
two_df = pd.merge(df_004,df_015,on='tradeDate')
two_df['tradeDate'] = pd.to_datetime(two_df['tradeDate'])
two_df.set_index('tradeDate',inplace=True)
two_df.dropna(inplace=True)
two_df.head()

 

def annualize_rets(returns,n_periods):
    '''
    给定一系列的收益率和期数,算出年化收益率
    '''
    # 每一期的平均收益
    r_periodic_mean = ((1+returns).prod())**(1/returns.shape[0])-1
    return (1+r_periodic_mean)**n_periods-1

def annualize_std(returns,n_periods):
    '''
    给定一系列的收益率,算出年化的标准差
    '''
    return returns.std()*np.sqrt(n_periods)

def portfolio_return(weights,returns):
    '''
    计算投资组合收益率,weights和returns需要矩阵形式
    '''
    return weights.T @ returns

def portfolio_vol(weights,covmat):
    '''
    计算投资组合风险(波动率),weights和covmat需要矩阵形式
    covmat代表的是协方差矩阵
    '''
    return np.sqrt(weights.T @ covmat @ weights)

# 计算年化收益率和年化波动率
annual_rets = annualize_rets(two_df,252)
annual_vols = annualize_std(two_df,252)
annual_cov = np.cov(two_df,rowvar=False)*252 # rowvar=False取列

 绘制有效边界,也叫有效前沿曲线。该曲线是不同权重下的收益与风险

# 取20个点,即生成20个权重数组,用以计算20中权重下的收益与风险,20个收益与风险的结果形成20个点,将这20个点连线
n_points = 20
n_weights = [np.array([w,1-w]) for w in np.linspace(0,1,n_points)] # 线性空间中,20个等分的点
n_weights

pret = []
pvol = []
for w in n_weights:
    pret.append(portfolio_return(w,annual_rets))
    pvol.append(portfolio_vol(w,annual_cov))

ef = pd.DataFrame({'R':pret,'Var':pvol})
ax = ef.plot(x='Var',y='R',marker='o',figsize=(8,6))
ax

 

在曲线中找到最小方差组合的点

# 找出最小方差组合
v_a = annual_cov[0,0]
v_b = annual_cov[1,1]
cov_ab = annual_cov[0,1]
# 计算最小方差组合的权重
minw_a = (v_b-cov_ab)/(v_a+v_b-2*cov_ab)
minw_b = 1-minw_a
minw_a,minw_b
# out: (0.5109729204649284, 0.48902707953507163)

min_weights = np.array([minw_a,minw_b])
# 计算最小方差组合的收益与风险
min_ret = portfolio_return(min_weights,annual_rets)
min_vol = portfolio_vol(min_weights,annual_cov)
min_ret,min_vol
# out: (0.006665607147349858, 0.30647044458064293)

# 在曲线中标记出最小方差组合对应的位置
ax = ef.plot(x='Var',y='R',marker='o',figsize=(8,6))
ax.plot(min_vol,min_ret,color='red',marker='*',markersize=20)

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 贝叶斯最小错误率准则分类器是一种基于贝叶斯理论的分类方法,它将样本根据其特征分为多个类别,并且通过计算样本属于每个类别的概率来进行分类。 Python中,我们可以使用一些库和函数来设计贝叶斯最小错误率准则分类器。以下是一个基本的实现示例: 首先,我们需要收集带标签的训练数据集,该数据集包含了不同类别的样本及其对应的特征。接着,我们要对每个类别的特征进行统计分析,例如计算各个特征的均值和方。 然后,在测试阶段,我们需要将待分类的样本特征输入到模型中。对于每个输入样本,我们可以通过计算其在各个类别下的概率来判断其类别。具体而言,我们可以利用贝叶斯公式计算后验概率,并选择具有最大后验概率的类别作为分类结果。此处需要使用到条件概率密度函数。 最后,我们可以评估分类器的性能,通过测试数据集计算分类器的准确率、精确率、召回率等指标,并进行模型的调优。 以上是一个简单的python实现贝叶斯最小错误率准则分类器的示例。需要注意的是,在实际的应用中,我们可能需要考虑一些特殊情况,例如特征数据的预处理、类别不平衡问题、特征选择等。 ### 回答2: 贝叶斯最小错误率准则(Bayes' minimum error rate criterion)是一种用于分类的方法,它基于贝叶斯定理和概率论的基本原理。当应用于分类器设计中,最小错误率准则试图最小化分类错误的概率。 Python可以使用统计学和机器学习库来设计贝叶斯最小错误率准则分类器。下面是一个简单的实现示例: 首先,准备训练数据集和测试数据集。训练数据集包含了已知类别的样本,测试数据集用于评估分类器性能。 接下来,从训练数据集中计算不同类别的先验概率。先验概率是指在没有任何其他信息的情况下,某个样本属于某个类别的概率。 然后,计算条件概率。条件概率是指在给定某个类别的前提下,某个样本属于该类别的概率。可以使用概率密度函数或频率计数等方法计算条件概率。 接着,使用贝叶斯定理计算后验概率。后验概率是指在已知某个样本的情况下,它属于某个类别的概率。根据贝叶斯定理,后验概率可以通过先验概率和条件概率的乘积计算得到。 最后,为了分类一个新的样本,比较新样本属于每个类别的后验概率,并选择具有最高后验概率的类别作为分类结果。 需要注意的是,这只是贝叶斯最小错误率准则分类器的一个简单实现示例。在实际应用中,可能需要进行更复杂的数据处理、特征选择和模型调优等步骤,以提高分类器的准确性。 ### 回答3: 贝叶斯最小错误率准则是基于贝叶斯定理的一种分类算法。Python可以用来设计贝叶斯最小错误率准则分类器。 首先,需要根据给定的数据集计算出每个类别的先验概率。先验概率是指在没有任何其他信息的情况下,某个样本属于某个类别的概率。可以通过计算每个类别的样本数量再除以总样本数量得到。 接着,需要计算每个类别的条件概率。条件概率是指在已知某个特征条件下,某个样本属于某个类别的概率。可以通过计算每个特征在每个类别中的样本数量再除以该类别的样本数量得到。 然后,可以利用贝叶斯定理来计算后验概率。后验概率是指在已知某个样本的特征条件下,该样本属于某个类别的概率。贝叶斯定理可以通过先验概率和条件概率来计算后验概率。 最后,根据后验概率,可以将样本分类到具有最高后验概率的类别中。 Python中可以使用numpy和pandas等库来处理数据和进行计算,使用scikit-learn库来实现贝叶斯最小错误率准则分类器。在scikit-learn库中,可以使用`GaussianNB`类来创建一个基于贝叶斯最小错误率准则的高斯朴素贝叶斯分类器。 使用Python设计贝叶斯最小错误率准则分类器可以简化分类过程,并能够处理大量的数据。通过该分类器,可以根据给定的特征和条件概率,快速准确地分类新的样本,从而实现数据的有效分类和预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值