Еще про оценку предикторов

8 марта 2019, 17:10
elibrarius
0
70

Пробую оценить важность предикторов для обученного леса, удаляя 1 из них и обучая лес снова. После чего из ошибки полного леса вычитаю ошибку леса c удаленным  предиктором. Если ошибка уменьшилась, значит предиктор шумовой и его надо удалять, если увеличилась - то он полезный и его надо оставить.

Ниже отсортированная распечатка дельт ошибок. Сверху самые плохие предикторы.

Важность предикторов по методу удаления по 1, на шаге 1
, feature, absolute value
0) 50 4.652962025945621e-07
1) 49 4.625633267543864e-07
2) 28 4.62346466072379e-07
3) 26 4.561097574437249e-07
4) 56 4.290904568761408e-07
5) 17 3.718417050471517e-07
6) 1 3.406001202530229e-07
7) 68 3.391763117747935e-07
8) 60 3.267629555121462e-07
9) 73 3.127550056422809e-07
10) 15 3.105364432751468e-07
11) 9 2.882082095646649e-07
12) 74 2.662183997309005e-07
13) 30 2.640958417977045e-07
14) 64 2.495458330717717e-07
15) 42 2.450867822321587e-07
16) 24 2.409745154980929e-07
17) 31 2.33804097322319e-07
18) 83 2.290499968715596e-07
19) 14 2.283223534620443e-07
20) 23 1.978006338615237e-07
21) 45 1.890878968074381e-07
22) 7 1.876852985079362e-07
23) 54 1.738843336336831e-07
24) 3 1.692699924577906e-07
25) 70 1.641203648472375e-07
26) 39 1.589707592578974e-07
27) 18 1.557063588228934e-07
28) 57 1.482740464865984e-07
29) 44 1.445728023092319e-07
30) 32 1.354609285057663e-07
31) 55 1.313533791325451e-07
32) 8 1.102501847592428e-07
33) 33 1.019463806705701e-07
34) 52 1.013735889220046e-07
35) 71 9.015081027591216e-08
36) 36 8.97917988184842e-08
37) 66 8.259335675172808e-08
38) 22 6.419976404481286e-08
39) 29 5.361694623833269e-08
40) 69 3.380767900118501e-08
41) 62 2.832831353807674e-08
42) 81 2.797340285695028e-08
43) 80 1.937435202200073e-08
44) 65 1.866994309889178e-08
45) 75 9.401630393941949e-10
46) 53 -8.074622524797503e-09
все что ниже со знаком минус т.е. их удаление ухудшает модель.

Удалил предктор № 50 и смотрим снова важность
0) 50 10010
1) 67 2.291752848559975e-07
2) 22 1.174587536975053e-07
3) 55 9.10110013905229e-08
4) 39 5.687147780552073e-08
5) 51 -7.727556419228745e-09
ниже все со знаком - т.е. их удаление ухудшает модель. Значением 1000.0  маркируется удаленный предиктор.

Удалил 50,67
0) 67 1000.0
1) 50 1000.0
2) 47 1.604866721443568e-08
3) 62 -8.922828259497693e-09

Удалил 50,67,47
0) 47 1000.0
1) 50 1000.0
2) 67 1000.0
3) 74 2.412196609104309e-08
4) 49 -2.99540471512373e-08

Удалил 50,67,47,74
0) 50 1000.0 100.0
1) 47 1000.0 100.0
2) 67 1000.0 100.0
3) 74 1000.0 100.0
4) 70 -2.968512465607164e-09

Удаление 70 или любого другого приводит к ухудшению модели.
Продолжая процесс получается 2-3 предиктора ухудшающих, а потом когда модель снова становится плохой находится улучшающий ее предиктор. И дальше таким же образом 2-3 ухудшающих, 1 улучшающий. Иногда через несколько таких циклов модель становится немного лучше чем получена на шаге 4.

Аналогичный эксперимент по добавлению по 1.
Результат тоже аналогичный, находится 5-6 предикторов улучшающих модель, а потом так же 2-3 ухудшают и 1 улучшает. Т.е. при добавлении по 1 скрипт находит модель с 5-6 предикторами, которая лучше всех, но при проверке вручную десятков моделей находились те которые намного лучше этой с 5-6 предикторами. Т.е. автоматическая  функция отбора слишком примитивная (просто по ошибке) и как автоматизировать процесс (до уровня оценки человеком - ошибка, кол-во сделок, просадки) непонятно.


Поделитесь с друзьями: