Данные для прогнозирования того, какие сотрудники могут уйти
Нет одинаковых специалистов по данным — часть 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 из серии:
- Представляем наших рок-звезд в науке о данных
- Данные для прогнозирования того, какие сотрудники могут уйти
- Хорошая модель по умолчанию с использованием XGBoost
- Настройка гиперпараметров для гиперточной модели XGBoost
- Бей грязные данные
- Дело о беспорядках большой мощности
- Руководство по работе с отсутствующими данными
- Визуализируйте бизнес-ценность прогностических моделей
- Ни один Data Scientist не похож на другой!
Вы хотите сделать это сами? Пожалуйста, не стесняйтесь загружать блокнот на нашей странице gitlab.