金融机器学习中的标签与元标签技术详解
概述:金融时间序列标注的核心挑战
在金融机器学习领域,时间序列数据的标注是构建有效预测模型的关键步骤。传统固定时间窗口的标注方法存在明显缺陷,无法反映金融市场的动态波动特性。本文将深入探讨金融机器学习中两种创新标注方法:三重障碍标签法(Triple-Barrier Method)和元标签技术(Meta-Labeling)。
一、传统标注方法的局限性
固定时间窗口标注存在三个主要问题:
- 无法反映实际交易中的止损机制
- 忽略了波动率的时变性
- 容易产生错误标签(误标)
二、三重障碍标签法
2.1 核心原理
三重障碍标签法通过设置三个"障碍"来模拟真实交易环境:
- 上方障碍(止盈线)
- 下方障碍(止损线)
- 时间障碍(最大持仓时间)
2.2 关键技术实现
2.2.1 对称CUSUM过滤器
def getTEvents(gRaw, h):
tEvents, sPos, sNeg = [], 0, 0
diff = np.log(gRaw).diff().dropna()
for i in tqdm(diff.index[1:]):
pos, neg = float(sPos+diff.loc[i]), float(sNeg+diff.loc[i]))
sPos, sNeg = max(0., pos), min(0., neg)
if sNeg<-h:
sNeg=0;tEvents.append(i)
elif sPos>h:
sPos=0;tEvents.append(i)
return pd.DatetimeIndex(tEvents)
2.2.2 日波动率估计
def getDailyVol(close,span0=100):
df0=close.index.searchsorted(close.index-pd.Timedelta(days=1))
df0=df0[df0>0]
df0=(pd.Series(close.index[df0-1],
index=close.index[close.shape[0]-df0.shape[0]:]))
df0=close.loc[df0.index]/close.loc[df0.values].values-1
df0=df0.ewm(span=span0).std().rename('dailyVol')
return df0
2.2.3 三重障碍实现
def applyPtSlOnT1(close,events,ptSl,molecule):
events_=events.loc[molecule]
out=events_[['t1']].copy(deep=True)
if ptSl[0]>0: pt=ptSl[0]*events_['trgt']
else: pt=pd.Series(index=events.index)
if ptSl[1]>0: sl=-ptSl[1]*events_['trgt']
else: sl=pd.Series(index=events.index)
for loc,t1 in events_['t1'].fillna(close.index[-1]).iteritems():
df0=close[loc:t1] # path prices
df0=(df0/close[loc]-1)*events_.at[loc,'side'] # path returns
out.loc[loc,'sl']=df0[df0<sl[loc]].index.min() # earliest stop loss
out.loc[loc,'pt']=df0[df0>pt[loc]].index.min() # earliest profit taking
return out
三、元标签技术
3.1 基本概念
元标签技术是一种两阶段建模方法:
- 主模型:决定交易方向(做多/做空)
- 元模型:决定是否执行交易(过滤低质量信号)
3.2 技术优势
- 提高模型召回率
- 降低过拟合风险
- 改善风险调整后收益
3.3 实现代码
def getBins(events,close):
events_=events.dropna(subset=['t1'])
px=events_.index.union(events_['t1'].values).drop_duplicates()
px=close.reindex(px,method='bfill')
out=pd.DataFrame(index=events_.index)
out['ret']=px.loc[events_['t1'].values].values/px.loc[events_.index]-1
out['bin']=np.sign(out['ret'])
if 'side' in events_:
out['bin']*=events_['side']
return out
四、实际应用案例
4.1 移动平均线交叉策略
- 生成元标签(ptSl = [1,2])
- 使用随机森林构建元模型
- 评估过滤效果
4.2 布林带均值回归策略
- 设置ptSl=[0,2]的元标签
- 使用波动率和序列相关性作为特征
- 比较过滤前后的分类报告
五、最佳实践建议
- 使用CUSUM过滤器识别显著价格变动
- 基于波动率动态调整障碍位置
- 元模型应使用与主模型不同的特征集
- 定期回测验证标签方法有效性
结语
三重障碍标签法和元标签技术为金融机器学习提供了更贴近实际交易的标注框架。这些方法通过模拟真实交易约束,能够生成更可靠的训练标签,最终提升模型在实际市场环境中的表现。实践者应根据具体策略特点调整障碍参数和元模型结构,以获取最佳效果。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考