Share |

пятница, 5 июня 2015 г.

Прогнозируем результативность работников (кейс по реальным данным)

Предлагаю порешать еще один кейс. Кейс реальный.
Протестировали действующих работников по тесту с шестью шкалами.

Задачи:


  • На какие шкалы нужно смотреть при отборе кандидатов (если, вообще, стоит смотреть на каие то шкалы)
  • Какие значения этих шкал мы принимаем для отбора.
  • Какова точность отбора при принятых нами параметрах

Решение можно узнать на вебинаре Прогноз эффективности кандидатов на основе тестов 2 июля
Прогнозируем результативность работников (кейс по реальным данным)

Данные кейса


в строках - работники
результативность: 1 - работник результативный, 0 - не очень результативный
Шкалы теста - результаты теста работников
возраст
результативность
Шкала 1
Шкала 2
Шкала 3
Шкала 4
Шкала 5
Шкала 6
1
27
1
20
64
27
15
12
39
2
35
0
11
47
28
12
15
41
3
32
1
30
47
25
19
15
53
4
27
0
6
52
25
12
11
36
5
28
0
28
57
52
9
12
36
6
33
1
38
63
21
20
16
55
7
38
1
6
52
35
15
12
45
8
42
0
0
57
32
13
13
39
9
28
0
26
56
24
14
11
41
10
27
1
34
57
22
13
12
42
11
31
1
32
52
22
17
16
49
13
33
1
6
58
36
9
13
34
14
30
0
5
43
34
14
10
33
16
29
1
-12
44
40
17
15
51
17
30
1
42
60
16
20
15
54
18
27
1
29
48
18
16
15
50
19
30
0
39
61
35
15
11
41
20
30
0
28
65
32
18
14
51
21
27
0
7
47
38
12
11
39
22
30
1
23
43
19
19
18
52
23
34
0
3
54
23
20
16
56
24
31
1
29
59
30
15
13
43
25
34
0
18
58
37
14
12
41
26
33
1
-1
52
42
8
13
34
27
29
1
39
47
23
20
16
55
28
34
0
27
57
37
15
14
46
29
29
0
3
51
29
9
10
35
30
40
0
11
53
46
15
15
44
31
33
0
3
59
43
12
10
37
32
39
1
30
49
26
18
14
51
33
28
0
17
44
36
20
19
59
34
34
0
-28
50
42
17
11
46
35
33
0
22
63
29
12
14
45
36
37
0
3
55
43
15
10
41
37
39
1
6
39
34
13
14
44
38
32
0
-5
44
30
5
8
28
39
32
0
17
44
30
15
15
45
40
29
0
7
59
37
11
14
39
41
39
1
20
52
23
20
14
50
42
28
1
16
51
20
15
14
45
43
32
0
11
60
29
10
7
32
44
28
1
23
38
32
20
18
58
45
39
0
8
38
21
14
16
43
46
28
0
42
55
20
13
14
43
47
28
1
17
51
36
19
13
46
48
37
1
-4
50
31
14
13
41
50
27
1
34
50
23
18
18
55
51
30
0
-6
68
23
19
12
50
52
31
0
-6
57
38
16
15
46
53
34
0
35
52
19
12
11
37
54
33
0
-17
51
39
14
14
47
55
35
0
23
51
26
18
17
55
56
29
1
6
37
36
16
15
46
57
35
0
-11
51
37
13
10
37
58
36
0
38
64
22
20
14
54
59
31
0
20
57
26
13
12
38
61
30
0
2
55
38
13
10
37
62
28
0
-11
55
37
17
10
42
63
33
1
20
58
24
14
11
43
64
29
0
-3
65
34
14
9
42
65
30
0
11
69
25
15
14
46
66
33
1
17
61
31
17
15
49

14 комментариев:

  1. Покрутил цифры на скорую руку:
    1. Смотрим на 1 и 2 шкалы. Причём в случае второй - чем меньше, тем лучше.
    2. Точность модели - 0.21, но судя по значению нормированного R^2 - модель вышла весьма сомнительного качества.

    ОтветитьУдалить
  2. Построил корреляционную матрицу, откинул 4 и 5 шкалы.
    Так - только 2 шкалу принимаем во внимание.
    Coefficients:
    Estimate Std. Error t value Pr(>|t|)
    (Intercept) 0.858014 0.872223 0.984 0.3295
    age -0.003633 0.015609 -0.233 0.8168
    scale1 0.005709 0.004561 1.252 0.2159
    scale2 -0.016083 0.008016 -2.006 0.0497 *
    scale3 -0.007525 0.008969 -0.839 0.4051
    scale6 0.015013 0.009142 1.642 0.1062
    ---
    Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Residual standard error: 0.4554 on 56 degrees of freedom
    Multiple R-squared: 0.2215, Adjusted R-squared: 0.1519
    F-statistic: 3.186 on 5 and 56 DF, p-value: 0.01335

    ОтветитьУдалить
    Ответы
    1. а ты логистическую регрессию делаешь в R?
      построй функцию glm - она почти как lm

      Удалить
    2. Затупил, зависимая то у нас бинарна.
      Ну тогда вот так:
      Call:
      glm(formula = perform ~ scale1 + scale2 + scale3, family = "binomial")

      Deviance Residuals:
      Min 1Q Median 3Q Max
      -1.6299 -0.9317 -0.5306 1.0004 1.8374

      Coefficients:
      Estimate Std. Error z value Pr(>|z|)
      (Intercept) 4.92307 2.50859 1.962 0.0497 *
      scale1 0.03866 0.02357 1.640 0.1010
      scale2 -0.08567 0.04074 -2.103 0.0355 *
      scale3 -0.04555 0.04485 -1.016 0.3098
      ---
      Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

      (Dispersion parameter for binomial family taken to be 1)

      Null deviance: 83.613 on 61 degrees of freedom
      Residual deviance: 71.450 on 58 degrees of freedom
      AIC: 79.45

      Number of Fisher Scoring iterations: 4

      Следовательно, уменьшение на одну единицу проявления по второй шкале, увеличивает логарифм шанса быть эффективным(по сравнению с перспективой таковым не быть) на 0.08567. Ну или после экспонирования 0.9178988
      Как-то так?

      хм...надо букварики по логит регрессии почитать.

      Удалить
    3. почитай
      а про selection model читал букварики?

      у тебя задача: 6 переменных, если их все запихать в уравнение, то получается говно, верно?

      следовательно, нужно выбрать только такие переменные, чтобы все уравнение имело какой то смысл, т.е. переменные должны быть значимы

      Удалить
  3. интересно получается, пришёл к следующему:
    Call:
    glm(formula = perform ~ scale1 + scale2, family = binomial)

    Deviance Residuals:
    Min 1Q Median 3Q Max
    -1.5285 -0.9249 -0.5337 1.0033 1.7712

    Coefficients:
    Estimate Std. Error z value Pr(>|z|)
    (Intercept) 3.59995 2.11867 1.699 0.0893 .
    scale1 0.05165 0.02007 2.574 0.0101 *
    scale2 -0.09043 0.04122 -2.194 0.0283 *
    ---
    Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for binomial family taken to be 1)

    Null deviance: 83.613 on 61 degrees of freedom
    Residual deviance: 72.540 on 59 degrees of freedom
    AIC: 78.54

    Number of Fisher Scoring iterations: 3

    1-pchisq(72.540, 59)
    [1] 0.1107664

    Хотя, если смотреть на перебор моделей и выбирать с самым низким по критерию Акаике(AIC), то это будет не то, что предоставлено выше, а незначимая хрень.
    Придётся ещё почитать букварики по AICам да прочим BICам.

    ОтветитьУдалить
    Ответы
    1. а минимальный AIC при какой модели?

      Удалить
    2. сам себя перемудрил, смотрел на AIC при переборе вариантов с подстановкой синтетических переменных в модель через
      add1 и последующий дисп.анализ.
      логика была такая:
      regtest <- glm ( эффективность ~ сумма всех переменных)
      anova(regtest,test="Chisq")
      add1(regtest, ~.^2,test="Chisq")
      search <- step(regtest, ~.^2)
      search$anova
      но тут, как я понял пошли подогнанные вероятности и меня унесло совсем не туда.
      Потом решил не мудрить, а использовать просто step(regtest, direction = "both")
      Получил AIC 77.39:
      Call:
      glm(formula = perform ~ scale1 + scale2 + scale4, family = binomial)

      Deviance Residuals:
      Min 1Q Median 3Q Max
      -1.7370 -0.8736 -0.5355 0.8950 2.1457

      Coefficients:
      Estimate Std. Error z value Pr(>|z|)
      (Intercept) 0.95502 2.63174 0.363 0.7167
      scale1 0.03949 0.02021 1.954 0.0507 .
      scale2 -0.08437 0.04191 -2.013 0.0441 *
      scale4 0.16723 0.09810 1.705 0.0882 .
      ---
      Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

      (Dispersion parameter for binomial family taken to be 1)

      Null deviance: 83.613 on 61 degrees of freedom
      Residual deviance: 69.386 on 58 degrees of freedom
      AIC: 77.386

      Number of Fisher Scoring iterations: 3

      Удалить
    3. ты логистическую регрессию как изучаешь? по текстам в R? На курсах?

      Удалить
  4. Ответы
    1. круто) сам вышел на step logistic))

      тогда еще не забудь выйти на кросс валидацию - потому что на тест сете могут быть другие результаты получены

      а нас больше интересует Акьюраси или Карра

      Удалить
    2. пакет cvTools ?

      Удалить
    3. да там куча пакетов
      я сейчас на caret перехожу, функция train, когда ты подбираешь показатели уравнения, которые обладают максимальным акьюраси или r^2
      ну и там фишка не столько в лучше акьюраси, сколько в том, чтобы избежатьоверфитинга
      на пальцах сложно объяснить, надо подумать, какой курс лучше

      Удалить