混乱中有规律可循吗?让我们试着找出它!以特定样本为例进行机器学习。

 

实际上,我建议从链接 中下载文件。压缩包中有 3 个 csv 文件:

  1. train.csv - 需要训练的样本。
  2. test.csv - 辅助样本,可在训练过程中使用,包括与 train 合并。
  3. exam.csv - 不参与训练的样本。

样本本身包含 5581 列预测因子,目标在 5583 列 "Target_100 "中,5581、5582、5584、5585 列是辅助列,包含以下内容

  1. 5581 列 "时间"--信号日期
  2. 5582"Target_P" - 交易方向 "+1" - 买入 / "-1" - 卖出
  3. 5584"Target_100_Buy"--买入的财务结果
  4. 5585"Target_100_Sell" - 卖出的财务结果。

目标是创建一个能在 exam.csv 样本中 "赚取 "超过 3000 分的模型。

解决方案应不窥视考试,即不使用该样本中的数据。

为了保持兴趣,最好能介绍一下实现这一结果的方法。

样本可以以任何方式进行转换,包括改变目标样本,但应解释转换的性质,使其不是纯粹的考试样本拟合。

 
Aleksey Vyazmikin:

实际上,我建议从链接 中下载文件。档案中有 3 个 csv 文件:

  1. train.csv - 需要训练的样本。
  2. test.csv - 辅助样本,可在训练过程中使用,包括与 train 合并。
  3. exam.csv - 不以任何方式参与训练的样本。

样本本身包含 5581 列预测因子,目标在 5583 列 "Target_100 "中,5581、5582、5584、5585 列是辅助列,包含以下内容

  1. 5581 列 "时间"--信号日期
  2. 5582"Target_P" - 交易方向 "+1" - 买入 / "-1" - 卖出
  3. 5584"Target_100_Buy"--买入的财务结果
  4. 5585"Target_100_Sell" - 卖出的财务结果。

目标是创建一个能在 exam.csv 样本中 "赚取 "超过 3000 分的模型。

解决方案应不窥视考试,即不使用该样本中的数据。

为了保持兴趣,最好能介绍一下实现这一结果的方法。

可以用任何方法对样本进行转换,包括改变目标,但应解释转换的本质,这样就不会纯粹是对考试样本的拟合。

当然
 
spiderman8811 #:
当然有。

你想证明吗?

 

使用 CatBoost 进行开箱即用的训练,并进行以下设置--通过 Seed brute force 得出以下概率分布。

FOR %%a IN (*.) DO (                                                                                                                                                                                                                                                                            
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_8\result_4_%%a       --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 8         --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_16\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 16        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_24\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 24        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_32\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 32        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_40\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 40        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_48\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 48        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_56\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 56        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_64\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 64        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_72\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 72        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_80\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 80        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
)                                                                                                                                                                                                                                                                               

1.火车采样

2.抽样测试

3.考试样本

正如您所看到的,模型倾向于将所有几乎所有的东西都归为零,这样犯错的几率就更小了。

 

最后 4 列

如果是 0 级,显然两种情况下的损失都应该是 0.0007?即两种情况都是-0.0007。或者说,如果买入和卖出的赌注仍然存在,我们是否会在正确的方向上获利?

 
1/-1 的方向选择逻辑不同,也就是说,交易方法不参与方向选择?我们是否只需要学习 0/1 的交易/不交易(当方向被严格选择时)?
 
elibrarius #:

最后 4 列

如果是 0 级,显然两种情况下的损失都应该是 0.0007?即在两种情况下都是-0.0007。或者说,如果买入/卖出的赌注仍然存在,我们是否会在正确的方向上获利?

如果等级为零,就不要进行交易。

我以前使用 3 个目标 - 这就是为什么最后两列的结果是鳍而不是一个,但使用 CatBoost 后,我不得不改用两个目标。

elibrarius#:
1/-1 方向的选择逻辑不同,即 MO 不参与方向选择?你只需学习 0/1 交易/不交易(当方向选择死板时)?

是的,模型只决定是否进入。但是,在本实验框架内,并不禁止学习一个有三个目标的模型,为此只需在考虑进场方向的情况下转换目标即可。

 
Aleksey Vyazmikin #:

如果等级为零,则不输入交易。

以前我使用 3 个目标 - 这就是为什么最后两列有财务结果而不是一列,但使用 CatBoost 后我不得不改用两个目标。

是的,模型只决定是否进入。不过,在本实验框架内,并不禁止使用三个目标值对模型进行教学,为此只需在考虑入场方向的基础上对目标值进行转换即可。

也就是说,如果在 0 级(不进场)时选择了正确的交易方向,是否会获利?
 
Aleksey Vyazmikin #:

如果等级为零,则不输入交易。

以前我使用 3 个目标 - 这就是为什么最后两列有财务结果而不是一列,但使用 CatBoost 后我不得不改用两个目标。

是的,模型只决定是否进入。不过,在本实验框架内,并不禁止使用三个目标值对模型进行教学,为此只需在考虑入场方向的基础上对目标值进行转换即可。

Catbusta 有多个等级,放弃 3 个等级很奇怪

 
elibrarius #:
也就是说,如果在 0 级(不输入)时选择了正确的交易方向,那么是否会有利润?

不会有利润(如果重新估价,在 0 时会有一小部分利润)。

只有将 "1 "分为"-1 "和 "1",才有可能正确重做目标,否则就是另一种策略。

elibrarius#:

Catbusta 有多类,奇怪的是他们放弃了 3 类

有,但 MQL5 中没有集成。

没有将模型卸载到任何语言中。

也许可以添加一个 dll 库,但我自己想不出来。

 
Aleksey Vyazmikin #:

不会有任何利润(如果重新估价,会有一小部分利润为零)。

那么财务结果栏就没有什么意义了。还会出现 0 级预测误差(我们将预测 1,而不是 0)。而误差的代价是未知的。也就是说,平衡线无法建立。尤其是您有 70% 的 0 类错误。也就是说,70% 的错误会带来未知的经济损失。
你可以忘记 3000 点。如果有,那也是不可靠的。

即解决问题没有意义....。