量化交易 实战第十课 多因子合成

量化交易 实战第十课 多因子合成

概述

在多因子中, 我们希望通过多个因子的叠加来提高模型整体对于未来收益率的预测能力. 我们会把相关性高 (低) 的一些因子合成成一个因子.

在这里插入图片描述

PCA 方法

PAC (Principal Component Analysis) 是一种数学降维方法. 通过利用正交变换把一系列可能线性的变量转换为一组不相关的新变量.

PCA 的用法:

from sklearn.decomposition import PCA

sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

n_components:

  • 意义: PCA 算法中所要保留的主成分个数 n
  • 类型: int 或者 string. 缺失时默认为 None, 所有成分被保留
  • 赋值为 int, 比如n_components=1, 将把原始数据降到一个维度
  • 赋值为 string, 比如n_compents="mle", 将自动选取特征个数 n, 使得满足所需求的方差百分比

代码实现

在这里插入图片描述

分析

在之前的文章中我们发现资产回报率和资本回报率这两个因子相关性较高, 所以我们将这两个因子进行合成.

  1. 获取因子数据
  2. 应用 PCA 进行合成

代码

# 因子合成
# 分析的区间2020-01-01到2021-01-01
import numpy as np
import pandas as pd
import datetime
from alphalens import performance
from alphalens import plotting
from alphalens import tears
from alphalens import utils
from sklearn.decomposition import PCA

factor_1 = "return_on_asset_net_profit"
factor_2 = "return_on_invested_capital"

# ----------------1. 获取因子数据----------------


# 获取这一年的交易日期
date_data = get_trading_dates(start_date="2020-01-01", end_date="2021-01-01")

# 定义df数据集
all_data = pd.DataFrame()

for date in date_data:
    # 获取当天因子数据
    q = query(
        fundamentals.financial_indicator.return_on_asset_net_profit,
        fundamentals.financial_indicator.return_on_invested_capital
    )
    
    # 获取截面数据
    fund = get_fundamentals(q, entry_date=date).iloc[:, 0, :]
    
    # 创建日期列
    fund["date"] = date
    
    # 拼接
    all_data = pd.concat([all_data, fund])
    
# ----------------2. 合成因子---------------

# 填充缺失值
all_data[factor_1] = all_data[factor_1].fillna(all_data[factor_1].mean())
all_data[factor_2] = all_data[factor_2].fillna(all_data[factor_2].mean())

# 实例化
pca = PCA(n_components=1)
compound_factor = pca.fit_transform(all_data[[factor_1, factor_2]])

print(compound_factor)

效果

在这里插入图片描述

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值