交易中的机器学习:理论、模型、实践和算法交易 - 页 261

 
那么预测的结果是什么呢? 敢问。
 
mytarmailS:
那么在预测方面的结果是什么呢?敢问。
如果你问我,我可能无法明确回答,有很多东西被预测,一切都不同。但平均来说,大约有60-65%。
 

这里是为模型训练准备的电子表格。

价格按列转换为德尔塔;删除的列没有变化或有NA。

每一列的每一行都塞进了3个滞后期(当前行减去以前的;以前的减去以前的;以前的减去以前的)。

目标 - 下一行的增加/减少值(下一行减去当前行,四舍五入为+-1,如果没有变化则为0;共3类)。所有目标都有前缀 "target_"

*不得使用其他目标进行预测,否则将是对未来的窥视。所有以 "target_"为前缀的列都不能作为预测器或直觉使用。

附加的文件:
 

问题。

将csv文件按行分成两部分,训练数据和前沿测试的比例为10:1。我为target_SiH7.bid(来自上表)训练了模型,在训练数据上得到了62%的分类精度,在新数据上得到了74%的分类精度。本来很高兴,但仔细检查了一下,原来0班与其他班级相比很不平衡,仅按数额就有60%和74%。也就是说,该模型已经学会了很好地检测0,但它在-1和1类上却陷入了困境。

需要一个不同的分数。对于两个不平衡的班级,这个指标很好--https://en.wikipedia.org/wiki/Cohen's_kappa,但在我们的案例中,有三个不平衡的班级,而不是两个,是否有一个类似于3的Kappa?

 
没有
如果你问我,我可能无法明确回答,有非常多的事情是可以预测的,每件事都是不同的。但平均来说,大约有60-65%。

有趣的是,你能否更详细地描述一下...

只是我现在从事的是完全不同的预测领域,我不能分散,所以不能在这个三月的日期和你一起做实验,但阅读和观察非常有趣,请多写点...

Dr.Trader:

事实证明,0类与其他类相比非常不平衡,仅在数量上就有60%和74%。也就是说,该模型已经学会了很好地检测0,但它已经放弃了-1和1类。

当我为U型车训练我的随机森林时,我遇到了同样的问题,U型车自然比非U型车少得多。我做的树越多,MO在转弯类上的得分越多,而更多地集中在非转弯类上。

caret 中,有几种平衡类的方法,但所有这些方法都是微不足道的--要么将观测值较少的类加倍,使所有类的观测值之和变得相同,要么从观测值较多的类中删除不必要的观测值。

没有一种方法比完全不做平衡更有利可图(但这只是在我的情况下)。

 
mytarmailS:

有趣的是,你能否更详细地描述一下...

我现在只是在一个完全不同的预测领域工作,我不能迷失方向,这就是为什么我不能和你在这个马特上做实验的原因,但阅读和观察非常有趣,请多写点...

我在训练调头时也遇到了同样的问题,调头当然比不调头要少得多。我做的树越多,MO就越多地被U-turn类困住,而更多地集中在非turn类上。

caret 中,有几种平衡类的方法,但所有这些方法都是微不足道的--要么将观测值较少的类加倍,使所有类的观测值之和变得相同,要么从观测值较多的类中删除不必要的观测值。

没有一种方法比完全不做平衡更有利可图(但这只是在我的情况下)。

在caret中,你可以通过一些参数改变训练函数中的健身函数。对于分类,你可以使用精度或卡帕:而对于回归,你可以使用一些自己的两个变体,如r^2和其他东西。我就是在那里学会了卡帕,它帮助我在非常不平衡的类上正确地训练了一个模型,没有任何额外的操作。
 
如果我们讨论的是反转,那么我们应该以一种有意义的方式来平衡类:不是一个酒吧的反转,而是反转前的几个酒吧和反转后的几个酒吧。如果说班级无论如何都是不平衡的,但不是那么致命的,可以通过照顾来平衡。
 
有毒

一切都是可以协商的。我建议做期货,例如SiRIBR 等,一般来说是流动性最好的。我建议信号(-1,0,1)(short,cash,long)作为一个结果,信号比概率毫不含糊,不被MM 作为订单扭曲。后期处理、标志和目标由你决定,或者说是书。

经过一些思考,我得出一个结论,至少应该增加一个玻璃{price:vol,...||...,price:vol },因为它是每秒最后一个,对于每个预测的工具,那么delta是不需要的,bid,ask也是,它是IMHO强制的,如果用每秒的磁带分割量和OM的转移,或多或少的信息,那么对于玻璃一个delta是非常少的,至少需要看到不同的 "板块 "分布,等等,这就足够作为一个开始。添加一个翻滚器,并发布一个训练数据集,几天后,我们就可以玩了。:)

 

最终确定了斯科特的Pi 公制https://en.wikipedia.org/wiki/Scott's_Pi

这是我的估算结果,我在前91%的线条上训练了模型,然后在最后剩下的数据上做了前测(backtest : fronttest = 10:1的比例)。
表中的 "class_0_rate "列--0级与-1和1级的比率,这样我就可以在Excel中筛选出那些该值过高的结果。

最后两列是Scott的Pi指标,用于训练和测试,数值将从-1到1;其中0=结果是随机的,模型是无用的,1=一切正常。负面的结果是不好的,反相关,你可以试着把预测结果倒过来。在交易与预测完全相反的两个类别时,逆向相关有时也能正常工作。但有三个类,就很难找到相反的东西,每个类都有两个相反的值,在这种情况下,负值也是不好的。

我认为我们需要选择在回测和前测中出价(或要价)预测值相似且高的货币,例如xagusd。虽然在0到1的范围内,0.18的分数是很小的。而在真正的交易中,提前一格的预测也是不好的。一般来说,有一个结果,但它不适用 :)

Scott's Pi的R代码

ScottsPi <- function(act, pred){
  if(length(act) != length(pred)){
    stop("different length")
  }
  
  n_observ <- length(act)
  
  all_levels <- unique(c(act,pred))
  n_levels <- length(all_levels)
  
  marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
  colnames(marginal_matrix) <- all_levels
  rownames(marginal_matrix) <- all_levels
  
  for(i in 1:n_levels){
    for(j in 1:n_levels){
      marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
    }
  }
  diagSum <- 0
  for(i in 1:n_levels){
    diagSum <- diagSum + marginal_matrix[i,i]
  }
  diagSum <- diagSum / n_observ
  
  marginalSum <- 0
  for(i in 1:n_levels){
    marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
  }
  p <- marginalSum
  return((diagSum - p)/(1-p))
}
附加的文件:
 
Dr.Trader:

最终确定了斯科特的Pi 公制https://en.wikipedia.org/wiki/Scott's_Pi

这是我的估算结果,我在前91%的线路上训练了模型,然后在最后剩下的数据上做了前测(backtest : fronttest = 10:1的比例)。
表中的 "class_0_rate "列--0级与-1和1级的比率,这样我就可以在Excel中筛选出这个数值过高的结果。

最后两列是Scott的Pi指标,用于训练和测试,数值将从-1到1;其中0=结果是随机的,模型是无用的,1=一切正常。负面的结果是不好的,反相关,你可以试着把预测结果倒过来。在交易与预测完全相反的两个类别时,逆向相关有时也能正常工作。但是有三个班级,就很难找到相反的,每个班级都有两个相反的,在这种情况下,负面的结果也是不好的。

我认为我们需要选择在回测和前测中出价(或要价)预测值相似且高的货币,例如xagusd。虽然在0到1的范围内,0.18的分数是很小的。而在真正的交易中,提前一格的预测也是不好的。一般来说,有一个结果,但它不适用 :)

Scott's Pi的R代码

ScottsPi <- function(act, pred){
  if(length(act) != length(pred)){
    stop("different length")
  }
  
  n_observ <- length(act)
  
  all_levels <- unique(c(act,pred))
  n_levels <- length(all_levels)
  
  marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
  colnames(marginal_matrix) <- all_levels
  rownames(marginal_matrix) <- all_levels
  
  for(i in 1:n_levels){
    for(j in 1:n_levels){
      marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
    }
  }
  diagSum <- 0
  for(i in 1:n_levels){
    diagSum <- diagSum + marginal_matrix[i,i]
  }
  diagSum <- diagSum / n_observ
  
  marginalSum <- 0
  for(i in 1:n_levels){
    marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/2)^2
  }
  p <- marginalSum
  return((diagSum - p)/(1-p))
}
数据非常少,我的朋友挂了一个正常的数据集,但在某个地方迷路了。操盘手博士:数据不多,但在某处丢失了。 如果你不具体说,当然对于提前的tick来说,真的没有用,至少提前一分钟,在pass一分钟是纯MM,两边的限制器,在与价差成比例的距离,这里是 "量子泡沫",没有必要谈方向,因为它比价差小得多。