Данные для прогнозирования того, какие сотрудники могут уйти

Нет одинаковых специалистов по данным — часть 2

Эта статья является частью нашей серии статей о том, как разные специалисты по обработке и анализу данных по-разному строят схожие модели. Нет одинаковых людей, и, следовательно, нет одинаковых специалистов по данным. И обстоятельства, при которых необходимо решать проблемы с данными, постоянно меняются. По этим причинам для выполнения поставленной задачи могут и будут использоваться различные подходы. В нашей серии мы рассмотрим четыре различных подхода наших специалистов по данным — Meta Oric, Aki Razzi, Andy Stand и Eqaan Librium. Перед ними ставится задача построить модель, позволяющую прогнозировать, будут ли сотрудники компании — STARDATAPEPS — искать новую работу или нет. Судя по их различным профилям, обсуждаемым в первом блоге, вы уже можете себе представить, что их подходы будут совершенно разными.

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

Но прежде чем мы начнем это путешествие, давайте быстро посмотрим, какая информация у нас есть на самом деле для этого квеста. Исходные данные доступны здесь (https://www.kaggle.com/arashnic/hr-analytics-job-change-of-data-scientists). В этом блокноте мы загрузим его прямо с kaggle, чтобы вы могли воспроизвести все, что мы делаем, в следующих блогах. Кроме того, мы сделаем некоторую подготовку к этим данным.

Загрузка данных напрямую из Kaggle

Чтобы получить набор данных от kaggle, вам нужно ваше имя пользователя kaggle и токен API. Они включены в файл kaggle.json, который вы можете скачать со страницы своей учетной записи kaggle. Подробнее см. https://www.kaggle.com/docs/api.

!pip install -q kaggle

Замените [YOUR_PERSONAL_KAGGLE_USER_NAME] и [YOUR_PERSONAL_KAGGLE_KEY] в ячейке ниже своими учетными данными и запустите это, чтобы загрузить данные непосредственно из Kaggle. Конечно, также можно загрузить файлы напрямую с веб-сайта Kaggle.

%sh
export KAGGLE_USERNAME=[YOUR_PERSONAL_KAGGLE_USER_NAME]
export KAGGLE_KEY=[YOUR_PERSONAL_KAGGLE_KEY]
kaggle datasets download arashnic/hr-analytics-job-change-of-data-scientists

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

# import required modules
import zipfile
import pandas as pd
 
# open zipped dataset
with zipfile.ZipFile('/databricks/driver/hr-analytics-job-change-of-data-scientists.zip') as z:
  # open the csv file in the dataset
  with z.open("aug_train.csv") as f:
    # read the dataset
    df = pd.read_csv(f)
    
    # display dataset
    print(df.columns)
    print(df.head())

Подготовка данных

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

цель

Столбец target показывает, готов ли специалист по работе с данными сменить работу. Это также то, что будут предсказывать наши герои. Давайте сделаем это целым числом, прежде чем мы продолжим.

#Convert target to integer:
df['target'] = df['target'].astype('int32')

город

К сожалению, названия городов не включены в этот набор данных. Чтобы иметь возможность интерпретировать результаты модели, мы добавили название города. Нам не удалось найти источник, в котором указаны названия городов США по их Индексу развития городов. Поэтому мы ранжировали города по индексу развития городов в данных и сопоставили данные с набором данных индекса инноваций, предоставленным StatsAmerica, который ранжирует мегаполисы по индексу инноваций — в чем-то похожая метрика. Маловероятно, что мы сопоставим точное название города с кодом города в данных. Тем не менее, в наших примерах мы предпочитаем настоящее имя идентификатору города, который невозможно интерпретировать.

# create dataframe with cities and a rank based on the city development index
cities = df.groupby('city')['city_development_index'].mean().reset_index()
cities['rank'] = cities['city_development_index'].rank(ascending=False,method='first').astype(int)
cities.head()

Затем мы загружаем данные города statsamerica.org. Мы используем xlrd==1.2.0, чтобы иметь возможность загружать данные xlsx в кадр данных pandas.

!pip install xlrd==1.2.0
# download innovation index values of metropolitan areas and prepare for matching to cities
citydata = pd.read_excel('http://www.statsamerica.org/ii2/docs/downloads/Metros.xlsx', sheet_name='Data')
citydata = citydata[citydata.code_description=='Headline Index'][['description','index value']].rename(columns={'description':'city name'})
citydata['rank'] = citydata['index value'].rank(ascending=False,method='first').astype(int)
citydata = citydata[['rank','city name']]
citydata.head()

Затем мы добавляем названия городов на основе рейтинга городов, как в наших данных, так и в данных statsamerica.org.

# create dataframe with city id and city name matched on index ranks and add city name to our data
city_name = cities.join(citydata.set_index('rank'), on='rank')[['city','city name']]
df = df.join(city_name.set_index('city'), on='city')
df[['city','city name','city_development_index']].head()

индикатор для relevent_experience

Данные также содержат текстовую функцию, указывающую, есть ли у сотрудника соответствующий опыт работы. Давайте сразу превратим это в фиктивное (индикаторное) поле:

df['relevent_experience'].value_counts()
# Has relevent experience 13792 
# No relevent experience 5366 
# Name: relevent_experience, dtype: int64
#Convert relevent_experience to a dummy:
df['ind_relevent_experience'] = 0
df.loc[df['relevent_experience'] == 'Has relevent experience', 'ind_relevent_experience'] = 1
df.drop(columns=['relevent_experience'], inplace = True)
df['ind_relevent_experience'] = df['ind_relevent_experience'].astype('int32')

опыт_номер

Еще одна особенность касается стажа работы. Эта функция теперь является текстовой со значениями «‹1» и «›20». Чтобы иметь возможность использовать его как числовой признак, мы создаем новый признак, заменяя «>20» на 22 и «‹1» на 0.

#Creating a numeric version of experience:
df['experience_num'] = df.experience
# replacing special chars(like >,+) with numbers
df.experience_num.replace('>20','22',inplace=True) 
df.experience_num.replace('<1','0',inplace=True)
df['experience_num'] = df['experience_num'].astype('float32')

Проверьте наши данные и сохраните

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

df.head()

df.shape
Out[18]: (19158, 16)

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

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

output = df.to_csv('df_prepared.csv')

Для вашего удобства мы также загрузили эти данные в наше хранилище BLOB-объектов Azure, чтобы вы могли сразу же загрузить эти подготовленные данные в наши более поздние блоги. Вы загрузите подготовленные данные следующим образом:

df_prep = pd.read_csv('https://bhciaaablob.blob.core.windows.net/featurenegineeringfiles/df_prepared.csv')
df_prep.head()

Теперь, когда мы познакомили вас с нашей командой по науке о данных и с данными, начнем моделирование!

Эта статья является частью нашей серии статей Ни один специалист по данным не похож на другого. Полную серию написали Аня Тонне, Юрриан Нагелькерке, Карин Груйс-Водде и Том Бланке. Серия также доступна на theanalyticslab.nl.

Обзор всех статей на Medium из серии:

  1. Представляем наших рок-звезд в науке о данных
  2. Данные для прогнозирования того, какие сотрудники могут уйти
  3. Хорошая модель по умолчанию с использованием XGBoost
  4. Настройка гиперпараметров для гиперточной модели XGBoost
  5. Бей грязные данные
  6. Дело о беспорядках большой мощности
  7. Руководство по работе с отсутствующими данными
  8. Визуализируйте бизнес-ценность прогностических моделей
  9. Ни один Data Scientist не похож на другой!

Вы хотите сделать это сами? Пожалуйста, не стесняйтесь загружать блокнот на нашей странице gitlab.