
Самый дорогой набор — это тот, кто заменит того, кто мог бы остаться».
К концу июля 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.