Самый дорогой набор — это тот, кто заменит того, кто мог бы остаться».

К концу июля Google запустила бета-версию BigQuery ML, инструмента для быстрого прототипирования, позволяющего обычным пользователям создавать простые прогностические модели. Конечно, эти инструменты не могут заменить работу специалистов по данным и инженеров по обработке данных, но могут дать хорошие перспективы прогнозной работы моделей машинного обучения.

Я буду использовать набор данных Kaggle с данными об обороте кадров. Подробнее об этом можно узнать по этой ссылке.

В DataLab я закодировал столбец отдела и заменил значениями столбец категории зарплаты. Переименуйте столбец «left» в «left_company». Разделите набор данных в обучении и оценке на 0,2 и загрузите в BigQuery в таблицы hr.train и hr.eval. Дополнительно создайте таблицу hr.newdata с теми же столбцами (кроме left_company) и заполните ее примерными данными.

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

Создадим модель в BigQuery:

Создать модель

CREATE OR REPLACE MODEL
 `hr.hrmodel`
OPTIONS
 ( model_type=’logistic_reg’,
 ls_init_learn_rate=.15,
 l1_reg=1
 ) AS
SELECT satisfaction_level,last_evaluation,number_project,average_montly_hours,time_spend_company, Work_accident ,
 promotion_last_5years ,salary ,IT ,RandD, accounting, hr, management, marketing, product_mng ,sales, support, technical ,left_company as label from `hr.train`

Просто так! Модель создана! Посмотрим, насколько это хорошо…

Оценить модель

SELECT
 *
FROM
 ML.EVALUATE(MODEL `hr.hrmodel`,
 (
 SELECT
 satisfaction_level,last_evaluation,number_project,average_montly_hours,time_spend_company, Work_accident ,
 promotion_last_5years ,salary ,IT ,RandD, accounting, hr, management, marketing, product_mng ,sales, support, technical, left_company as label
 FROM
 `hr.eval`))

Результаты (JSON):

[
 {“precision”: “0.6129032258064516”,
 “recall”: “0.3611111111111111”,
 “accuracy”: “0.8023333333333333”,
 “f1_score”: “0.45446182152713893”,
 “log_loss”: “0.41870728020560205”,
 “roc_auc”: “0.826071”}
]

Наша модель имеет точность 0,61, другими словами, когда она предсказывает увольнение сотрудника, она верна в 61% случаев,

В нашей модели показатель отзыва равен 0,36 — другими словами, она правильно определяет 36% всех уволенных сотрудников.

Точность составляет 0,80, или 80% (80 правильных прогнозов из 100 примеров).

Неплохо для прототипа!

Давайте прогнозировать с новыми данными. Мы хотим знать, захотят ли эти 5 сотрудников покинуть компанию (напоминаем: фактические данные находятся в таблице hr.newdata).

Прогноз

SELECT
 *
FROM
 ML.PREDICT(MODEL `hr.hrmodel`,
 (
 SELECT satisfaction_level,last_evaluation,number_project,average_montly_hours,time_spend_company, Work_accident , promotion_last_5years , salary ,IT ,RandD, accounting, hr, management, marketing, product_mng ,sales, support, technical from `hr.newdata` ))

Результаты:

[
 {
 “predicted_label”: “0.0”,
 “predicted_label_probs”: [
 {“label”: “1.0”, “prob”: “0.46347582846928875”},
 {“label”: “0.0”,“prob”: “0.5365241715307112”}
 ],
 “satisfaction_level”: “0.3”,
 “last_evaluation”: “0.37”,
 “number_project”: “6.0”,
 “average_montly_hours”: “278.0”,
 “time_spend_company”: “3.0”,
 “Work_accident”: “0.0”,
 “promotion_last_5years”: “0.0”,
 “salary”: “0.0”,
 “IT”: “0.0”,“RandD”: “0.0”,“accounting”: “0.0”,“hr”: “0.0”,
 “management”: “0.0”,“marketing”: “0.0”,“product_mng”: “0.0”,
 “sales”: “0.0”,“support”: “0.0”,“technical”: “1.0”},
 {
 “predicted_label”: “0.0”,
 “predicted_label_probs”: [
 {“label”: “1.0”,“prob”: “0.3115995785368684”},
 {“label”: “0.0”,“prob”: “0.6884004214631316”}
 ],
 “satisfaction_level”: “0.57”, 
“last_evaluation”: “0.37”, 
“number_project”: “3.0”, 
“average_montly_hours”: “108.0”, 
“time_spend_company”: “4.0”, 
“Work_accident”: “0.0”, 
“promotion_last_5years”: “0.0”, 
“salary”: “0.0”, 
“IT”: “0.0”, “RandD”: “0.0”, “accounting”: “0.0”, “hr”: “0.0”, “management”: “0.0”, “marketing”: “0.0”, “product_mng”: “0.0”, “sales”: “0.0”, “support”: “0.0”, “technical”: “1.0”
 },
 {
 “predicted_label”: “0.0”,
 “predicted_label_probs”: [
 {“label”: “1.0”,“prob”: “0.01926735861107739”},
 {“label”: “0.0”,“prob”: “0.9807326413889226”}
 ],
 “satisfaction_level”: “0.83”,
 “last_evaluation”: “0.37”,
 “number_project”: “5.0”,
 “average_montly_hours”: “101.0”,
 “time_spend_company”: “4.0”,
 “Work_accident”: “1.0”,
 “promotion_last_5years”: “0.0”,
 “salary”: “0.0”,
 “IT”: “0.0”,“RandD”: “0.0”,“accounting”: “0.0”,“hr”: “0.0”,
 “management”: “0.0”,“marketing”: “0.0”,“product_mng”: “0.0”,
 “sales”: “0.0”,“support”: “1.0”,“technical”: “0.0”
 },
 {
 “predicted_label”: “1.0”,
 “predicted_label_probs”: [
 {“label”: “1.0”,“prob”: “0.6705310013604241”},
 {“label”: “0.0”,“prob”: “0.3294689986395759”}
 ],
 “satisfaction_level”: “0.23”, 
“last_evaluation”: “0.37”,  
“number_project”: “3.0”, 
“average_montly_hours”: “247.0”, 
“time_spend_company”: “4.0”, 
“Work_accident”: “0.0”, 
“promotion_last_5years”: “0.0”, 
“salary”: “0.5”, 
“IT”: “0.0”, “RandD”: “0.0”, “accounting”: “0.0”, “hr”: “1.0”, 
“management”: “0.0”, “marketing”: “0.0”, “product_mng”: “0.0”, “sales”: “0.0”, “support”: “0.0”, “technical”: “0.0”},
 {
 “predicted_label”: “0.0”,
 “predicted_label_probs”: [
 {“label”: “1.0”,“prob”: “0.3064941522240386”},
 {“label”: “0.0”,“prob”: “0.6935058477759615”}
 ],
 “satisfaction_level”: “0.42”, 
“last_evaluation”: “0.37”, 
“number_project”: “2.0”, 
“average_montly_hours”: “284.0”, 
“time_spend_company”: “3.0”, 
“Work_accident”: “0.0”, 
“promotion_last_5years”: “0.0”, 
“salary”: “1.0”, 
“IT”: “0.0”, “RandD”: “0.0”, “accounting”: “0.0”, “hr”: “0.0”, 
“management”: “0.0”, “marketing”: “0.0”, “product_mng”: “0.0”, “sales”: “0.0”, “support”: “0.0”, “technical”: “1.0”}
]

Из этих 5 сотрудников у нас есть только один, который, по прогнозам, покинет компанию:

{
 “predicted_label”: “1.0”,
 “predicted_label_probs”: [
 {“label”: “1.0”,“prob”: “0.6705310013604241”},
 {“label”: “0.0”,“prob”: “0.3294689986395759”}
 ],
 “satisfaction_level”: “0.23”, 
“last_evaluation”: “0.37”,  
“number_project”: “3.0”, 
“average_montly_hours”: “247.0”, 
“time_spend_company”: “4.0”, 
“Work_accident”: “0.0”, 
“promotion_last_5years”: “0.0”, 
“salary”: “0.5”, 
“IT”: “0.0”, “RandD”: “0.0”, “accounting”: “0.0”, “hr”: “1.0”, 
“management”: “0.0”, “marketing”: “0.0”, “product_mng”: “0.0”, “sales”: “0.0”, “support”: “0.0”, “technical”: “0.0”},

Модель предсказала, что он может покинуть компанию с вероятностью 0,67. Ну, как я и начал эту статью: «Самый дорогой набор — это тот, кто заменит того, кто мог бы остаться». Теперь, когда у компании есть больше этой информации, она должна принять или нет соответствующее решение.

Конечно, этот пример просто демонстрирует мощь моделей прогнозирующего машинного обучения. С помощью этой базовой модели мы могли бы реинжиниринговать входные данные многими сложными способами, настраивать модель и получать еще большую точность и достоверность модели.

С помощью этого мощного инструмента от Google мы можем на лету создавать несколько прототипов, которые могут дать хорошее представление о том, чего ожидать от имеющихся у нас данных.

Мигель Сильва Брито — исследователь в области инженерии знаний, специалист по данным и сертифицированный инженер данных GCP, главный технический директор компании Cromo.