.

Сделать репост в соц сети!

Показаны сообщения с ярлыком анализ дожития. Показать все сообщения
Показаны сообщения с ярлыком анализ дожития. Показать все сообщения

вторник, 9 февраля 2021 г.

Диагностика корпоративной культуры

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

Суть его в том, что разные волны поколений имеют разный срок жизни (см. диаграмму ниже). 




Волна – это сотрудники, которые пришли в компанию в определенные годы. Условно говоря, первая волна – те, кто пришел в компанию в 2005-2010, в третья волна – 2015-2020. Границы определяет заказчик. 

Так вот. 

  1. Первая волна сотрудников имеет самую низкую текучесть (или самый большой средний срок жизни) в компании. Условно ‘бессмертные’
  2. Далее вторая волна – те, что живут меньше, чем из первой волны. 
  3. И третья волна – “простые смертные” – простите, если кому-то покажется циничным.

Диаграмма ниже показывает как раз три такие волны: 

  1. первая волна – практически не уходят из компании на горизонте 15 лет 
  2. вторая волна срок жизни – 9 лет
  3. третья волна – 5 лет средний срок жизни. 

Это данные реальной компании (не скажу название, отрасль и т.п., но скажу, что встречаю такое уже далеко не первый раз – и практически во всех случаях три волны, а ширина волны чаще всего – 5 лет). 

Интересно было бы услышать ваши интерпретации.

На диаграмме по оси X – стаж сотрудников, по оси Y – вероятность дожития. Видеоинструкция к диаграмме – Диагностика корпоративной культуры волны поколений сотрудников


Если вы не сталкивались ранее с анализом дожития применительно к текучести персонала, рекомендую начать с моего вебинара Новый взгляд на текучесть персонала



– здесь я подробно объясняю методологические принципы использования дожития. А если хотите сами освоить расчет среднего срока жизни, то 

  1. Расчет среднего срока жизни в Excel - этот курс, как заметили, в Excel – помимо расчета среднего срока жизни я даю лог-ранк тест для оценки значимости различий факторов – так что “попроще” этот курс язык не поворачивается назвать. 
  2. Анализ дожития / Survival analysis (в HR). Он-лайн курс – этот для тех, кто работает в R


воскресенье, 15 ноября 2020 г.

Анализ дожития / Survival analysis (в HR). Он-лайн курс

Представляю свой он-лайн курс Анализ дожития / Survival analysis. 

Анализ дожития / Survival analysis (в HR). Он-лайн курс

Если верить Wiki, Анализ дожития или выживаемости (англ. survival analysis) — класс статистических моделей, позволяющих оценить вероятность наступления события. Анализ дожития пошел из медицины, но наш курс построен на кейсах в HR. Анализ дожития в HR может применяться в задачах

  • Текучесть персонала - расчет среднего срока жизни сотрудника (медианы дожития), выявление факторов текучести персонала, построение моделей (и отдельно рекомендую посмотреть запись открытого вебинара Новый взгляд на текучесть персонала);
  • Карьерные треки - как быстро созревают сотрудники до карьерного перемещения, факторы карьерного роста
  • Скорость закрытия вакансий и т.д...

Не в HR дожитие применяется в сферах

  • В производстве – выход из строя деталей, оборудования
  • В продажах – удержание клиентов 
  • Скорость продаж квартир / не только квартир  
  • Возврат кредитов
  • Медицина
Видеоанонс курса


Требования к подписчикам курса

  1. Владение R / Rstudio (см. Он-лайн курс "Введение в R для HR") 
  2. Знание матстатистике на уровне понимания и умения строить линейную / логистическую регрессию

Содержание 

Всего в курсе 9 видеолекций общей продолжительностью 3 часа (176 минут), 4 скрипта с кодом, 4 файла в формате csv с данными. 
  1. Почему Анализ Дожития / Выживаемости? Формат данных
  2. Функции риска и дожития
  3. Процедура Каплан-Майер (код в R)
  4. Лог-ранк тест (код в R)
  5. Регрессия пропорциональных рисков Кокса (код в R) 
  6. Сравнение Лог-ранк, регрессии Кокса, параметрических моделей
  7. Параметрические модели дожития (Accelerated failure time models) (код в R) 
  8. Что не вошло в курс, куда двигаться дальше
  9. Аппендикс. Дашборд скорость закрытия вакансий в PowerBI (код в R)

Стоимость курса

Для физлиц - 5 800 рублей основная цена
1 000 рублей, если вы закончили Он-лайн курс "Введение в R для HR"
для юрлиц обсуждается индивидуально (зависит от числа обучающихся и т.п.)


понедельник, 18 ноября 2019 г.

Расчет среднего срока жизни сотрудника как услуга

ПРИГЛАШАЮ ОТСЛЕЖИВАТЬ НАС В ТЕЛЕГРАМ

Вы уже наверняка сталкивались с таким показатель, как средний срок сотрудника в компании.
Вот, например, интересная статья Full List of Most and Least Loyal Employees - данные по почти 500 американским компаниям, где средний срок жизни колеблется от 20 лет в Кодаке до 1,1 года в Google.
Казалось бы, считать его просто: из даты увольнения вычесть дату приема, так мы получим стаж, а из него уже можно взять среднее, медиану и так далее....
Но так мы можем сделать только с уволенными сотрудниками, у кого есть дата увольнения. Что делать с работающими? Есть решение: поставить сегодняшнюю дату или дату выгрузки отчета. И из даты выгрузки отчета вычесть дату приема. Ок. Хорошо, если средние / медианы этих двух выборок схожи, а если они различны? Какой показатель более корректный?
Все эти проблемы решает анализ дожития, который я представляю в услуге Расчет среднего срока жизни сотрудника. Для расчета среднего срока жизни сотрудника в компании потребуется всего три колонки в excel:

  1. Дата приема
  2. Дата увольнения (если сотрудника работает, поле пустое)
  3. Кто инициатор увольнения (сотрудник, компания или объективная причина) - это нужно для того, чтобы вычленять волюнтарную / добровольную текучесть 

Услуга из себя будет представлять цифры среднего срока жизни сотрудника в компании - 50 % вероятность дожития или, что тоже самое, 50 % риск ухода из компании. И вот такую (такие картинки)
Также сообщаю, что вы получите методологию расчета среднего срока жизни сотрудника и, по вашему желанию, код расчета среднего срока жизни сотрудника в компании, и сможете считать средний срок жизни сотрудника в компании как в целом по компании, так и в разрезе регионов, уровней позиции, функционала и т.п.. Возможно визуализация на дашбордах PowerBI.
Пишите edvb@yandex.ru (или воспользуйтесь формой подачи заявки ниже)

Или тоже самое, но если на картинке выше показана вероятность дожития (нисходящая линия), то на картинке ниже линия восходящая - риск ухода из компании/




Пояснения к картинкам рекомендую послушать на видео



Стоимость - 200 рублей.
Передача кода расчета среднего срока жизни в R - 4 000 рублей
Также смотрите Мини-он-лайн курс Текучесть персонала по-новому: расчет среднего срока жизни в Excel

ПРИГЛАШАЮ ОТСЛЕЖИВАТЬ НАС В ТЕЛЕГРАМ

вторник, 30 октября 2018 г.

Что курение сделало для HR-аналитики






Перевод статьи What smoking did for people analytics в рамках нашего проекта переводы статей по hr-аналитике на английском. Обратите внимание на ресурс - towardsdatascience - очень качественные материалы по машинному обучению. Но требуют знаний.
Перевод сделала Мария Герасимова (по ссылке - профиль автора в Линкедине. По традиции приглашаю френдиться!). И это первый перевод Марии в нашем блоге!
Итак,

Что курение сделало для HR-аналитики

Любой, кто, как и я, является фанатом сериала Безумцы (прим переводчика : wiki), вспомнит что значимая сюжетная линия и исторический контекст этого замечательного драматического сериала вращается вокруг курения. В 1960-х медицинский истеблишмент США переходил к мнению, что курение - это привычка, ведущая к раку, хотя признать это им было весьма сложно, потому что почти все они сами курили.
Сегодня значительно меньше людей курят постоянно или эпизодически. Мы, конечно, еще не полностью решили вопрос, но за 50 лет изменения существенны. Впрочем, 50 лет - это долгий период, и естественно задаться вопросом, почему для изменения требуется так много времени.
Один очевидный ответ - курение ужасно быстро вызывает привыкание. И менять привычки, вызванные зависимостями, сложнее всего. Другая же причина в том, что требуется много времени, чтобы собрать доказательства, что курение коррелирует с негативными последствиями для выживания, и еще больше времени, чтобы показать, что курение приводит к раку.
Те из нас, кто работает с HR-аналитикой, тем не менее, могут кое-что получить из исследований курения и его последствий для здоровья. Именно эти исследования привели к тому, что на передний план вышли методы эпидемиологической аналитики, что сегодня для нас невероятно ценно в изучении людей и организаций. В период с 1960-х до 1980-х, когда медицинский истеблишмент ввязался в затянувшуюся борьбу с табачными гигантами, анализ выживаемости появился, чтобы нанести решающий удар.

Анализ выживаемости (анализ дожития)

Выживание (дожитие) самый важный результат в медицине, поэтому не удивительно, что был основан раздел статистики, сфокусировавшийся на лучшем понимании драйверов выживания. Однако, до середины ХХ века многие исследования выживаемости были сфокусированы на острых заболеваниях - бактериальных или вирусных инфекциях, которые могли убить одних за несколько дней или недель, при этом другие показывали быстрое восстановление после болезни или оставались невредимыми. Смертоносная "Испанка", которая в 1918-1920 гг. убила от 50 до 100 миллионов человек по всему миру, стала существенным фактором для ранних эпидемиологических исследований.
К 1950-м на сцене появились антибиотики и острые заболевания внезапно стали гораздо менее опасны. Внимание переключилось на другой тип эпидемий. Одна из которых широко распространилась, но не была острой. Болезнь убивала некоторых, но не затрагивала других, поражала на разных стадиях жизни и могла длиться от многих лет до нескольких десятилетий. Рак стал новым вызовом для эпидемиологов в изучении выживаемости. Долгосрочное наблюдение (прим переводчика: лонгитюдное исследование) за выживаемостью стало необходимым.
Таким образом, истеблишмент в медицинских исследованиях начал готовиться вести учет людей десятилетиями, а не просто днями и месяцами. И не только тех, кто был болен. Здоровых тоже стало необходимо отслеживать, чтобы получить понимание, какие факторы в образе жизни привели к большинству случаев угрожающих жизни заболеваний, таких как рак. Это стало предвестником прорыва в методах, системах и процессах, результатом которого стали некоторые огромные долгосрочные исследования, которые сегодня публикуются в СМИ.
Но также это привело к новым подходам в анализе и представлении выживаемости - всему, что чрезвычайно полезно сегодня в изучении людей в более широком смысле.

Что курение сделало для HR-аналитики

Кривые дожития и отношение рисков

Представьте, что у вас есть гипотеза о том, что определенный элемент в опыте индивида в группе или организации является индикатором вероятности продолжения им членства в этой группе или организации с течением времени. Например, вы можете предположить, что люди, которые работают в определенном департаменте получают такой позитивный опыт, что они формируют долгосрочную связь с компанией. Или наоборот, опыт настолько плохой, что люди опять начинают смотреть на рынок труда.
Гипотетический опыт может быть рассмотрен как "фактор образа жизни" и вы могли бы анализировать вероятность увольнения со временем так же, как вы бы анализировали дожитие при изучении таких болезней как рак. Один из возможных способов - взять начальную точку во временнЫх замерах групп людей, учесть получали ли они интересующий опыт, и затем фиксировать их в течение следующих месяцев или лет, чтобы понять есть ли причинная взаимосвязь между этим опытом и текучестью.
Кривые дожития Каплана-Мейера весьма интуитивный способ представления этого в графическом виде. Возвращаясь к примеру с курением, график выше показывает кривые дожития для курящих и некурящих в отдельном медицинском исследовании. Ось Х показывает месяцы после определенной стартовой точки измерений, в которой участники были классифицированы по их статусу курения, ось Y показывает долю участников, которые все еще были живы в каждый момент времени. Обратите внимание, что начальная точка не должна быть одинаковой для всех участников. При условии, что нет смещения, свойственного разнице во времени, участники могут присоединятся к исследованию в любое время t и кривая отслеживает их до t + 120.
Похожая полезная процедура, особенно для обобщенных выводов на высшем уровне, - отношение рисков (прим переводчика: wiki), которое подсчитывает среднюю вероятность дожития для конкретной группы в определенный период времени как долю от базовой популяции. Например, вы можете рассчитать вероятность дожития женщин в течение 2-х лет в сравнении со всем населением. Или на рабочем месте вы можете рассчитать вероятность увольнения высоко результативных сотрудников в сравнении c общей массой сотрудников. Точный расчет отношения рисков наделяет вас способностью делать валидные заключения по типу "высоко результативные сотрудники на 20% более вероятно покинут нас в течение двух лет".
Что курение сделало для HR-аналитики

Применение в HR-аналитике

Я полагаю, что многие из вас увидели здесь параллели, но вот еще несколько вариантов для применения анализа выживаемости в контексте человеческого капитала:
  • Валидация опросов. Анализ выживаемости может быть использован, чтобы показать, что результаты опроса должны восприниматься серьезно. Например, если люди, давшие не-нейтральные оценки по конкретным вопросам, могут быть определены как имеющие большую или меньшую вероятность увольнения, то это может помочь менеджменту собраться и обратить внимание на результаты опроса в будущем.
  • Предиктивная аналитика. Анализ выживаемости может установить валидность конкретных измерений в предсказании увольнений или других интересующих результатов, которые могут использоваться как сами по себе, так и как валидная составляющая в более широкой предиктивной модели. Например, исследование в Стэнфорде, используя упомянутую выше (перевернутую) кривую дожития, показало, что язык в электронной переписке был валидным индикатором соответствия сотрудника культуре организации. В МсKinsey мы использовали кривые дожития, чтобы показать, что в любой заданный момент времени, количество значимых связей, которые кто-либо имеет в организации, может быть предиктором вероятности его удержания.
  • Продвижение культурного многообразия или разнообразного опыта. Анализ выживаемости применим не только к текучести, но также может быть применен к любым интересующим результатам. Например, если вы хотите проиллюстрировать возрастающую склонность организации использовать определенные "типы" личностей для определенных задач или типов работы, кривые Каплана-Мейера или отношение рисков могут быть отличным способом, чтобы сделать это и определить, выдерживает ли гипотеза об этом эффекте статистическую проверку.
Анализ выживаемости - это очень мощный инструмент в изучении связанных с персоналом результатов, и часто тот, где необходимые данные довольно простые (часто не более чем результаты опросов или записи об участии, и некоторые отправные точки). Все больше организаций должно использовать анализ дожития, если они хотят быть честны с самими собой на счёт того, что реально является драйвером результатов, связанных с персоналом.

Об авторе: Изначально я был просто математиком, потом я стал психометристом и исследователем данных (Data Scientist). Я увлечен применением строгости всех этих дисциплин к сложным вопросам о людях. Еще я прогер-гик и большой фанат японских RPG (пп: вид компьютерных игр, см. wiki). Вы можете найти меня в LinkedIn или в Twitter.



__________________________________________________________

На этом все, читайте нас в фейсбуке, телеграмме и вконтакте





воскресенье, 3 декабря 2017 г.

Анализ дожития специалистов по продаже недвижимости


Анализ дожития специалистов по продаже недвижимости
(домашнее задание после семинара «HR-аналитика в R»)


Этот пост, возможно, несет не самую большую ценность с точки зрения результата.  Скорее,  мне хотелось бы замотивировать ту часть HR-сообщества, которая считает, что R это что-то, с помощью чего запускают ракеты в космос и им никогда этого не осилить (ну, и выполнить домашнее задание, конечно). По той же причине я сознательно не буду детально приводить код. Опытные им владеют и без меня,  остальным отдельные его части мало помогут: вам придется или начать изучать R и написать его самим…или съездить на семинар.  Я хочу показать логику работы и тот результат, который может получить даже такой махровый гуманитарий как я.

Анализ дожития (survival analysis) с помощью регрессии Кокса, на мой взгляд, является одним из наиболее понятных инструментов, рассматриваемых на семинаре. Кроме того, данные для этого исследования наверняка найдутся в любой компании.  Он позволяет выявить, какие факторы влияют на текучесть персонала в компании и спланировать шаги по её снижению.

Мне интересно было попробовать этот инструмент на реальных данных. Например, понять, что способствует удержанию сотрудников, принадлежащих к такой неоднозначной профессии, как специалист по продаже недвижимости.

Итак, на входе у меня были:
1.    Информация о специалистах по недвижимости одной крупной риэлторской компании за 2016-2017 год : 552 сотрудника, даты их приема и увольнения (для тех, кто уже покинул компанию),  пол, информация о наличии автомобиля.
2.    Готовый скрипт по анализу дожития, полученный на семинаре, который требовалось только адаптировать под мои данные.

Шаг 1. Готовим данные

Для работы с регрессией Кокса необходимо иметь точную цифру стажа работы сотрудника в компании в месяцах. R позволяет несколькими строчками кода добавить в наш набор данных новую переменную «Стаж», вычтя из даты увольнения дату приема сотрудника.  Для  еще работающих сотрудников  за дату увольнения мы принимаем дату выгрузки данных.

Кроме того, необходимо ввести новую переменную (например, назовем её «Увольнение»), показывающую, состоялось ли увольнение (в строчке напротив фамилии будет стоять «1»), или сотрудник еще работает (соответственно, «0»). R также позволяет нам сделать это одной строчкой кода.

Шаг 2.  А как вообще дела с текучестью?

Первым делом интересно узнать, а как в принципе обстоят дела с закрепляемостью (давайте ставить цели позитивно) специалистов по недвижимости в компании.

Регрессия Кокса и её визуализация в R позволяет нам построить вот такую шикарную картинку:

По оси X  - стаж работы сотрудника в месяцах.
По оси Y  - вероятность  сотрудника проработать (‘дожить’) до этого стажа.

Мы видим, что вероятность  доработать до одного года в компании составляет примерно 40%. Другими словами, из 100 принятых сотрудников 60 покинет компанию раньше этого срока.  

Средняя продолжительность работы специалиста (смотрим по вероятности  дожития 0,5) – примерно полгода. Пунктиром выделены границы ошибки, то есть, точнее будет сказать, что средняя продолжительность работы составляет примерно от 5 до 7,5 месяцев.

Для любителей точных цифр в R можно вывести вот такую статистику:


Выводы практически аналогичны графику: средняя продолжительность жизни специалиста – 5,94 месяца, точнее – от 5,1 до 7,7.

Это не удивительная картина, так как на специалиста по недвижимости не учат в вузах, и значительная часть сотрудников приходят "попробовать" профессию. Наша задача определить, у кого же дольше получится в ней задержаться.

Шаг 3. Анализируем конкретные факторы

Гипотеза первая. Я предположила, что дольше в компании задерживаются представители определенного пола. Не буду, уточнять, какого, но мы то, дамы, понимаем…

С помощью регрессии Кокса и последующей визуализации результатов получаем вот такую картинку:

Видим, что женщины в среднем «живут» в компании семь месяцев, мужчины – чуть больше пяти). Вроде бы «ура!» и девочки пьют шампанское, но давайте признаемся - графики находятся подозрительно близко.

Кроме красивых картинок, регрессия Кокса в R показывает нам, а действительно ли тот или иной фактор оказывает влияние на скорость увольнения.


В данном конкретном случае мы видим, что,  увы, сам по себе пол на дожитие не влияет (p > 0,05).

Ищем дальше.

Гипотеза вторая.  Вполне ожидаемо предположить, что без машины специалисту по работе с недвижимостью будет сложно, в независимости от пола. Но дамам, я уверена, сложнее в модной обуви на каблуках перемещаться от объекта к объекту.  Давайте посмотрим, как влияет на закрепляемость наличие или отсутствие автомобиля у специалистов обоих полов.

Получаем, что при таком раскладе значимы оба фактора: как пол, так и наличие авто (p < 0.05 у обоих факторов):


И, визуализировав полученный результат, видим:



…что женщины с машиной вырываются вперед и их средний срок работы  (напоминаю, смотрим по вероятности 0,5) составляет уже аж 8 месяцев (что на  треть выше среднего срока по компании , не говоря уже о мужчине без машины).

Но и тут я не стала бы открывать шампанское, празднуя торжество феминизма.

R также рассчитывает нам метрику качества нашей модели (Concordance), показывающую, а действительно ли нам хватит этих факторов, чтобы однозначно управлять текучестью.

В нашем случае мы получили вот такую характеристику качества модели:

Чуть выше 0.5 – это слабая модель. 
Нужно искать другие факторы, которые также влияют на показатель текучести.

Выводы, которые можно сделать уже сейчас:
- Вводить в качестве обязательного требования к специалистам по продаже недвижимости принадлежность к определенному полу и обязательное наличие авто  нерационально (и незаконно!)
- При прочих равных условиях при выборе из двух кандидатов можно учитывать наличие автомобиля. Про пол мы не будем во избежание обвинений в сексизме.

Бутылку шампанского я прячу до следующего поста в блоге. Сейчас мне хочется посмотреть, влияют ли на закрепляемость специалистов процессы, происходящие в  самой компании (адаптация, обучение, менеджемент). Но об этом - в следующем посте.

суббота, 26 августа 2017 г.

Как использовать анализ дожития для прогноза текучести персонала от Pasha Roberts

Хочу познакомить с важным материалом и крайне интересным hr-аналитиком.
Pasha Roberts был уже представлен в моем блоге, см. Кейс по оценке эффективности подбора и адаптации персонала или тоже самое, но в режиме видеолекции на английском Video: Data Science for Workforce Optimization: Reducing Employee Attrition.
Но поскольку память человеческая недолговечна, представляю еще раз: Pasha Roberts был спецом по электронному обучению, переквалифицировался в hr-аналитики, сейчас делает потрясающие предиктивные модели, при этом делится знаниями.
Я у него многому научился, даю очень схожие вещи, см. Прогноз индивидуального дожития и тюнинг параметров регрессии Кокса в пакете mlr, даю это на своем семинаре по R Семинар-практикум "HR-Аналитика в R", но поскольку нет пророка в своем отечестве, западного гуру вы будете слушать с бОльшим интересом.
Обратите внимание на слайд № 22 "Don't use logistic methods to predict attrition". Это к вопросу о том, какие модели должны быть в прогнозе текучести. На Конференция по hr-аналитике журнала Штат 05.07.2017 было два кейса, которые вполне можно отнести к машинному обучению и которые были про одно и тоже - прогноз текучести персонала. И логика кейсов на 100 % совпадала: разница была только в том, что в первом кейсе (компания КПМГ) считали вероятность того, что сотрудник отработает меньше / больше одного года в компании, а во втором кейсе от Делойт считали вероятность, что сотрудник отработает меньше / больше двух лет. И алгоритм в кейсах был стандартный - xgboost.
А Pasha Roberts пишет о том, что задачи классификации в принципе не стоит использовать в прогнозе текучести персонала. И я с ним согласен.
Безусловно, не стоит доверять вот просто так на словах, считайте свои цифры сами. В любом случае рекомендую ознакомиться с презентацией - она включает в себя куски кода, методологию анализа, представление результатов.
Поскольку славное российское государство лишило нас возможности работы на Линкедин (а slideshare - ресурс Линкедин), то у многих из вас презентация не откроется у меня в блоге, по этой причине даю прямую ссылку на презентацию How to use Survival Analytics to predict employee turnover - попробуйте скачать ее.

Понравился пост? 

 и Вы захотите выразить мне благодарность, просто покликайте на директ рекламу ниже на странице - у вас это отнимет несколько секунд, а мне принесет немного денег.
На этом все, читайте нас в фейсбуке

среда, 23 августа 2017 г.

Прогноз индивидуального дожития и тюнинг параметров регрессии Кокса в пакете mlr



Одна из проблем в анализе дожития заключалась в том, что не было четких алгоритмов тюнинга параметров модели. В разных пакетах типа CoxBoost есть варианты кросс валидации, определения числа итераций и т.п.. Но grid_search не было ни в одном из пакетов.
Теперь такая возможность существует в пакете mlr. Это пакет фреймворк типа caret, который является оберткой для алгоритмов машинного обучения. 
Я покажу, как тренируются параметры регресии Кокса в этом пакете. Регрессия Кокса важная HR в процессах управления текучестью персонала, карьерного роста, других процессах, где мы управляем ростом. 
В конкретном примере я опускаю некоторые детали тип препроцессинга и т.п., что сосредоточиться исключительно на тюнинге параметров и прогнозе кривой дожития.
А вы не забывайте кликать на дирет рекламу в качестве благодарности. Также добавлю, что это один из сюжетов Семинар-практикум "HR-Аналитика в R", Москва,16-17 ноября 2017 - я вас там буду этому учить. 

Датасет

Я не стал возиться со сложными датасетами, взял данные, предоставленные мне Максимом Андреенок. Данные включают в себя:
  1. стаж работы в компании, 
  2. событие - уволился на момент анализа или нет, 
  3. наличие наставника, 
  4. пол работник,
  5. пол руководителя.
Всего 427 строк данных. 

Код

поехали.Загружаем пакеты.
library(mlr)
library(survival)
library(pec)
Пропущу загрузку данных, сразу разбиваю на трейн и тест сет.

train = sample(nrow(data), 0.7 * nrow(data))
test = setdiff(seq_len(nrow(data)), train)
train.task = makeSurvTask(data = data[train, ], target = c("stag", "event"))
train.task
test.task = makeSurvTask(data = data[test, ], target = c("stag", "event"))
test.task
Задаем учителя

lrn = makeLearner("surv.coxph", id = "cph")
Перед тюнингом параметров давайте посмотрим, какие параметры вообще можно тренировать в регрессии Кокса.

getParamSet("surv.coxph")
                Type len      Def              Constr Req Tunable Trafo
ties        discrete   -    efron efron,breslow,exact   -    TRUE     -
singular.ok  logical   -     TRUE                   -   -    TRUE     -
eps          numeric   -    1e-09            0 to Inf   -    TRUE     -
toler.chol   numeric   - 1.82e-12            0 to Inf   -    TRUE     -
iter.max     integer   -       20            1 to Inf   -    TRUE     -
toler.inf    numeric   - 1.35e-06            0 to Inf   -    TRUE     -
outer.max    integer   -       10            1 to Inf   -    TRUE     -
model        logical   -    FALSE                   -   -   FALSE     -
x            logical   -    FALSE                   -   -   FALSE     -
y            logical   -     TRUE                   -   -   FALSE     -
Надеюсь, читатели сами разберутся, какие параметры будут тренировать они. Я беру вот такие параметры

surv_param = makeParamSet(
  makeDiscreteParam("ties",  values = c('efron','breslow','exact')),
  makeIntegerParam("iter.max", lower = 1, upper = 150),
  makeIntegerParam("outer.max", lower = 1, upper = 50)
)
rancontrol = makeTuneControlRandom(maxit = 10L)
set_cv = makeResampleDesc("RepCV", folds = 5L, reps = 5L)
Сразу туда же кросс валидацию на пяти фолдах. И самое любимое

surv_tune = tuneParams(learner = lrn, resampling = set_cv, task = train.task, 
                        par.set = surv_param, control = rancontrol)
Не указываю меру качества модели, по умолчанию cindex - конкорданс.
$ties
[1] "breslow"

$iter.max
[1] 139

$outer.max
[1] 15
Заметьте, по дефолту в регрессии Кокса стоит метод efron, а машинка нам показывает, что breslow получшее будет.
surv_tune$y
cindex.test.mean 
        0.752014 
0.752014 - это про наше качество модели. Рекомендую Вам отдельно прочитать, что обозначает параметр C-index, скажу только, что он аналогичен площади под кривой и находится в пределах от 0, 5 (совсем плохо) и 1 (нереально хорошо). В нашем случае даже 0, 75 кажется нереально хорошо, потому что всего три переменные. Делаем модель
surv.tree = setHyperPars(lrn, par.vals = surv_tune$x)
surva = mlr::train(surv.tree, test.task)
getLearnerModel(surva)
model = predict(surva, test.task)
model
И смотрим, что нам говорят тестовые данные

rcorr.cens(-model$data$response, 
           Surv(data[test, ]$stag, data[test, ]$event))["C Index"]
 C Index 
0.6898021 
Можно еще такой метод проверки сделать - на пакете risksetROC и тестовых данных
w.ROC = risksetROC(Stime = data[test, ]$stag,  
                   status = data[test, ]$event, 
                   marker = model$data$response, 
                   predict.time = median(data[test, ]$stag), 
                   method = "Cox", 
                   main = paste("OOB Survival ROC Curve at t=", 
                                median(model$data$truth.time)), 
                   lwd = 3, 
                   col = "red" )

w.ROC$AUC
[1] 0.6648762
Хуже, но тоже неплохо. w.ROC вам нарисует диаграмму под кривой, я не буду ее сюда помещать.

Согласитесь, неплохо для тестовых данных - 0, 69. А почему не 0, 75, как на трейне?

getLearnerModel(surva)
Call:
survival::coxph(formula = f, data = data, ties = "breslow", iter.max = 139L, 
    outer.max = 15L)

             coef exp(coef) se(coef)     z      p
X         0.00234   1.00235  0.00133  1.76 0.0778
coach    -0.95264   0.38572  0.33482 -2.85 0.0044
matchж.м -0.42199   0.65574  0.77277 -0.55 0.5850
matchм.ж -0.03979   0.96099  0.40376 -0.10 0.9215
matchм.м  0.33148   1.39303  0.41926  0.79 0.4292
А потому что у нас значим только один фактор - наличие наставника, остальные факторы - шум. Надо их отбросить, чтобы получить нормальную модель.
И у нас осталась, еще одна задача - самая главная наша задача - прогноз индивидуального риска или дожития. Иначе на практике наши упражнения будут теорией. И вот тут фишка заключается в том, что пакет mlr на сегодня не дает возможности предсказывать индивидуальные риски и дожития (информация в github авторов пакета). На этот счет есть разные подходы, но все они за пределами mlr. Вот как например дают прогноз через пакет pec
# train.coxph:
mod = coxph(Surv(time, status) ~ ., data = data[train, ])

# predict.coxph:
probs = predictSurvProb(mod, newdata = data[test, ], times = data[test, "time"])
timepoints = seq(0, max(data$time), length.out = 100L)
probs = predictSurvProb(mod, newdata = data[test, ], times = timepoints)

pec(probs, Surv(time, status) ~ 1, data = data[test,], exact = F,
    exactness = 99L, maxtime = max(timepoints))
probs
     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]       [,9]      [,10]
3      1 0.9989732 0.9979358 0.9979358 0.9968463 0.9968463 0.9956966 0.9933632 0.98563169 0.98563169
9      1 0.9989948 0.9979792 0.9979792 0.9969126 0.9969126 0.9957871 0.9935025 0.98593217 0.98593217

Я даю в обобщенном виде, понятно, что в mod вы должны включать полученные параметры (покажу ниже), timepoints я выбрал произвольно, вам рекомендую выбирать по количеству единиц измерения вашего времени. В нашем случае это месяцы, их и можно выбрать.
Я же делаю так

w = coxph(Surv(stag, event) ~ . , data = data[train, ], ties=c("breslow"), iter.max = 139, outer.max = 15)
Я подставляю полученные параметры в регрессию Кокса (ну как будто мы убрали не значимые параметры и заново натренировали).
И тут есть одна важная тонкость: в этой модели w, коэффициенты другие, чем в тренированной.
w$coefficients
          X       coach    matchж.м    matchм.ж    matchм.м 
 0.00382257 -1.74394635  0.58288003 -0.31481756  0.04525168 

Наличие наставника в этой модели идет с коэффициентом -1, 7439, а в той, что тренировали - -0.95264. Не очень приятная разница. Думаю, согласитесь, что второй коэффициент, прошедший сетку и кросс валидацию, является более точным, поэтому нам нужно использовать его, вместо -1, 7439. Мы это исправляем так
w$coefficients[2] = -0.95264
Проверяем
X       coach    matchж.м    matchм.ж    matchм.м 
 0.00382257 -0.95264000  0.58288003 -0.31481756  0.04525168 

Все зашибись. Далее из тест сета я выбираю произвольно троих чуваков и смотрю, как они будут себя вести

newdude = data[test, ][c(4,5,12), ]
e = survfit(w, newdata=newdude)
quantile(e)
Прогноз индивидуального дожития и тюнинг параметров регрессии Кокса в пакете mlr

По оси X у нас стаж работы в компании, по оси Y - вероятность дожития. Обратите внимание особо, что крайне нижнее значение по оси Y равно 0, 4. И совершенно очевидно, что у Петрова наставника не было (ну или в нашем случае мы прогнозируем, что будет с Петровым, если ему не назначить наставника), а у Иванова с Сидоровым они есть. Но даже для Петрова медиана дожития, или если пользоваться HR термином - средний срок жизни в компании - в районе пяти лет. Ну что поделать, такие суровые белорусские реалии.
Это все, что я хотел показать. Понятно, что владея этим инструментом, вы сможете строить более продвинутые модели. 

Понравился пост? 

и Вы захотите выразить мне благодарность, просто покликайте на директ рекламу ниже на странице - у вас это отнимет несколько секунд, а мне принесет немного денег.
На этом все, читайте нас в фейсбуке 

среда, 12 июля 2017 г.

Анализ дожития: как предсказывать увольнения сотрудников и что на это влияет



Данная статья подготовлена для учебных целей. Любые совпадения с реальными бизнесами или компаниями являются случайными.

Рекомендую курсы


Задача
Наша задача состоит в следующем. Проанализировать данные по уволенным сотрудникам и выявить факторы, которые влияют на уход. А также визуализировать полученный результат и сделать выводы.

О подходе
Мы будем использовать такой инструмент, как анализ дожития или анализ выживаемости (survival analysis).

Анализ выживаемости – это в широком смысле построение статистических моделей, в которых эффект y (отклик) является функцией независимых переменных (х; t), где х – это уровень воздействия и/или факторы, которые влияют на время «жизни» изучаемых объектов t.

А если говорить более конкретно о методе, то это мы будем использовать регрессию Кокса.

Данный метод позволяет ответить на вопрос: с какой вероятностью и как долго сотрудник проработает до наступления определенного события (например, увольнение или назначение). А также найти драйверы, которые увеличивают или уменьшают время до наступления определенного события.

Для тех, кто дочитает всю статью до конца, будет несколько инсайтов от меня относительно данного инструмента.

Данные
Мы будем анализировать данные компании об увольнениях и назначениях сотрудников за последние несколько лет. Загрузить датасет в R, а также посмотреть его содержание, можно так:

q1 <- read.table("staff.csv", header = TRUE, sep = ";", na.strings = c("",NA), stringsAsFactors=FALSE)
str(q1)
head(q1)


Мы видим, что у нас есть 303 наблюдения. Также мы видим формат данных всех наших переменных.

В датасете у нас есть следующие данные:
  • Номер – порядковый номер наблюдения
  • Пол – пол сотрудника
  • Учился – бинарная переменная, которая говорит нам о том, проходил ли какое-либо обучение сотрудник компании (1), или нет (0)
  • Дата приема, Дата увольнения и Дата назначения

Подготовка данных
Для проведения анализа дожития по нашим увольнениям, первое, что нам нужно сделать, так это добавить новую переменную event, которая будет отвечать на вопрос: наступило ли событие (т.е. увольнение или нет).
event = 1 – сотрудник уволился,
event = 0 – сотрудник не уволился.

Давайте это и сделаем.

q1$event = 1
q1$event[is.na(q1$Дата.увольнения)] = 0

Чтобы посмотреть результат работы предыдущих строк кода, давайте посмотрим на таблицу:


table(q1$event)

Данная таблица показывает, сколько у нас сотрудников уволились (т.е. событие наступило = 49), и сколько сотрудников продолжают работать (т.е. событие не наступило = 254).

Теперь нам нужно посчитать время в месяцах, которое прошло от момента приема и до момента увольнения. Т.е. нам нужно взять и от даты увольнения отнять дату приема. А в тех случаях, где событие не наступило, т.е. нет даты увольнения, мы подставим дату формирования этого набора данных.

После всех этих операций, давайте посмотрим, что у нас получилось. Для этого достаточно вызвать функцию summary для переменной stag.

В переменной stag у нас получилось кол-во месяцев работы в компании начиная с даты приема и заканчивая датой увольнения или датой формирования датасета.

Мы можем видеть, что у нас нет никаких отрицательных значений и нет никаких тысяч и милионнов месяцев. Это говорит о том, что у нас не было ошибок в датах и мы все сделали верно.

Мы завершили подготовку наших данных для анализа дожития.

А именно, у нас есть переменные:
stag – это количество месяцев до наступления события,
event – событие наступило или нет (1 – наступило, 0 – нет).

Анализ дожития
Для своего анализа мы будем использовать регрессионную модель – это модель пропорциональных рисков Кокса (Cox proportional hazards model). Построить такую модель в R можно одно строчкой кода:

Первая строка кода строит саму модель регрессии Кокса. Вторая – выводит результат на экран. Здесь важно отметить, что в данной модели у нас еще нет никакого фактора, который мы бы изучали. Запись «~1» в формуле означает, что мы строим модель без факторов. Такая модель позволит посмотреть на общую картину увольнений по компании.

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

library(survminer)
ggsurvplot(survfit(w1), palette = "#2E9FDF",ggtheme = theme_minimal(),
           title = "График дожития (анализ увольнений)",
           xlab = "Кол-во месяцев до увольнения")

Что нам показывает данный график?

По оси Y у нас вероятность дожития (т.е. наступления события, которое мы изучаем).

По оси X у нас стаж в месяцах наших сотрудников.

Толстая синяя линия показывает средний срок «жизни» в компании. А закрашенная голубая область 95%-ый доверительный интервал.

Трактуется данная кривая следующим образом. Вероятность, что сотрудник проработает в компании 60 месяцев (5 лет) – смотрим на ось Х, составляет чуть больше 0,5 – смотрим на ось Y.

Если мы хотим получить точное значение среднего срока «жизни» в компании, тогда следует выполнить команду:

quantile(survfit(w1))

Средний срок «жизни» в компании равняется почти 65 месяцев (выделено красной пунктирной линией в полученной таблице).

Анализ факторов
Мы уже посмотрели общую картину в компании по увольнениям. Теперь давайте посмотрим, как обучение влияет и влияет ли на текучесть персонала.
Для этого у нас в датасете есть переменная «Учился».

Это бинарная переменная: 1 – если сотрудник проходил какие-либо программы обучения в компании и 0 – если сотрудник не проходил никакого обучения.

Давайте посмотрим на распределение данной переменной.

Теперь давайте построим модель Кокса и выведем результат:

w1 = coxph(Surv(stag, event) ~ as.factor(Учился) , data = q1)
summary(w1)

Из этого итога мы можем увидеть, что наш фактор «Учился» оказался значимым (р=0.00351) – выделено красной пунктирной линией.

А знак минус («−») возле коэффициента нашего фактора (выделено зеленой пунктирной линией) говорит о том, что наличие данного фактора (т.е. когда сотрудник проходил программы обучения) снижает риск увольнения.

Другими словами, обучение сотрудников связано с текучестью персонала.

Давайте визуализируем полученный результат. Это можно сделать при помощи следующего кода.

e = survfit(w1, newdata=data.frame(Учился = c(1, 0)))
ggsurvplot(e, legend.labs=c("Учился","Не учился"),
           ggtheme = theme_bw(), palette = c("#E7B800", "#2E9FDF"),
           title = "График дожития (анализ увольнений)",
           xlab = "Кол-во месяцев до увольнения")

Данный график нам еще раз показывает, что те сотрудники, которые обучаются в компании, работают дольше – желтая верхняя линия. Например, вероятность, что сотрудник, который обучался, проработает 48 месяцев (4 года) составляет почти 80%. А сотрудник, который не обучался, проработает 4 года с вероятностью чуть ниже 50%.

Или можем по-другому посмотреть на этот график. Например, сотрудник, который не учился, проработает в компании с вероятностью 60% чуть больше 3-х лет. А сотрудник, который проходил обучение с вероятностью 60% проработает уже почти 5-ть лет.

А теперь давайте посмотрим на фактор пола.


Как видно из итога, фактор пола получился незначимым для увольнений (р=0,179).

Давайте визуализируем полученный результат:


Мы видим, что наши две линии (Ж и М) находятся довольно близко друг к другу и их рисунок практически идентичный.

А теперь давайте посмотрим на два фактора вместе. Для этого в нашу формулу добавим и фактор Пола, и фактор Обучения в компании (Учился).

Первое, мы видим что теперь оба фактора оказались значимыми (р=0,001 и р=0,0395).

Второе, если человек учился, то это понижает риск увольнения. Об этом говорит знак минус возле коэффициента фактора Учился. И наоборот, отсутствие знака минус возле коэффициента фактора Пол (м) говорит о том, что, будучи мужчиной, риск увольнения сотрудника в данной компании увеличивается.

Давайте добавим все четыре возможных комбинации наших факторов и изобразим результаты на графике.

У нас могу быть следующие комбинации:
·        Ж, проходила обучение
·        М, проходил обучение
·        Ж, не проходила обучение
·        М, не проходил обучение

e <- survfit(w1, newdata=data.frame(Пол = c("ж", "м", "ж", "м"), Учился = c(1, 1,0,0)))
ggsurvplot(e, conf.int = F, legend.labs=c("Ж - Обучалась", "М - Обучался","Ж - Не обучалась ", "М - Не обучался"),
           break.x.by= 12, break.y.by= 0.2,xlim= c(0,108),
           ggtheme = theme_bw(),
           title = "График дожития (анализ увольнений)",
           xlab = "Кол-во месяцев до увольнения")

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

Для продвинутых
В процессе работы с моделью рисков Кокса наткнулся на еще один аналогичный метод. Он называется Модели ускоренного времени AFT (Accelerated failure-time models).

Метод АFT является альтернативой модели Кокса. Модели AFT разработаны, исходя из некоторого предположения о теоретическом распределении времени жизни. Данное предположение заключается в том, что изменение объясняющих переменных сопряжено с изменением масштаба времени наблюдаемого состояния объекта: т.е. ускорением или замедлением наступления момента изучаемого события.

В R параметрические AFT-модели могут быть построены очень легко при помощи функции survreg(). Давайте мы построим несколько аналогичных моделей с изучением наших двух факторов (Пол и Учился) с использованием различных видов распределений: exponential, weibull, lognormal, logistic и gaussian. А затем сравним все эти модели с нашей моделью Кокса и выберем лучшую.
Все это можно сделать при помощи следующего кода:

В результате мы получим следующую таблицу:

В этой таблице мы видим рассчитанные по каждой модели логарифм правдоподобия и AIC-критерий. Наилучшей модели будет соответствовать максимальная оценка правдоподобия или минимальный AIC-критерий.

Модель Кокса имеет самый минимальный AIC-критерий из всех шести протестированных моделей.

Выводы
Анализ выживаемости или анализ дожития (survival analysis) очень интересный и полезный инструмент. Данный метод позволяет выявлять факторы, которые влияют на текучесть сотрудников компании.

Построить модель регрессии Кокса и потом ее понятно визуализировать крайне просто в R. И что немаловажно, такие расчеты и такие итоги вашего исследования внутри компании очень легко объяснить бизнесу и «продать» их внутри.

И еще обещанные вначале статьи мои инсайты.
Работая с данным инструментом (survival analysis) я понял, что:
  1. Начать его применять может практически любая компания и любой HR уже завтра из-за его простоты и понятности. Что необходимо, так это немного усидчивости и данные по вашим сотрудникам.
  2. Данный инструмент позволит ВАМ уже СЕГОДНЯ найти те факторы, которые влияют на текучесть ВАШИХ сотрудников в ВАШЕЙ компании. Т.е. не читать исследования каких-то других специалистов из каких-то других компаний и потом примерять их выводы к вашей компании и к вашим сотрудникам. А найти именно ВАШИ драйверы, которые влияют именно на ВАШУ текучесть.


Р.S.: Ну и еще один вывод по итогам данного исследования – обучайте ваших сотрудников и тогда они проработают у вас дольше! J

Р.S.1.: Делаю для себя задел на будущее для следующей статьи. Провести анализ дожития, например, назначений. Т.е. будем искать факторы, которые драйвят наши назначения.

Используемые источники при подготовке статьи: В.К. Шитиков «Экотоксикология и статистическое моделирование эффекта с использованием R».