Каждый раз, когда я устраивался на работу, мне неизбежно задавали неудобный вопрос о зарплате. «На какую зарплату вы рассчитываете?» — спрашивают они. И я не собираюсь лгать. Несколько лет назад я не был уверен, что ответить. Однако теперь ответ прост. Это ваша рыночная стоимость!

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

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

Какое отношение все это имеет к машинному обучению? Ну, мы можем получить эту оценку нашей рыночной стоимости, просто наблюдая за данными. И это то, что я сделал! Я взял тысячи текущих списков и обучил модель прогнозировать справедливую зарплату для входного резюме. Итак, как я это сделал?

Сбор данных

Находясь в Новой Зеландии, я собирал данные с сайта с лучшими вакансиями в Новой Зеландии, seek.co.nz. На момент написания статьи в Новой Зеландии было более 34 500 объявлений!

Я смог собрать образец релевантных мне списков вместе с их диапазоном заработной платы.

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

Я решил сузить выборку до вакансий, которые могут иметь категорию, имеющую отношение ко мне (например, я знаю, что у меня нет навыков торговли, к сожалению!). У меня осталась выборка из примерно 4000 списков вакансий.

Разработка функций

Как только я получил данные, большая часть работы была сделана. Теперь нужно было найти закономерности в данных. Теоретически должны быть предикторы, которые могут объяснить предложение зарплаты. Например, если для работы требуется 10 лет опыта, само собой разумеется, что она предлагает более высокую заработную плату, чем работа, для которой требуется всего 1 год.

Таким образом, требуемый многолетний опыт или стаж должны быть предикторами. К сожалению, нет поля для «требуемых лет опыта»; поэтому мне нужно было бы как-то определить это только из текста в названии должности или описании.

Старшинство

Эта переменная была для меня спорной, потому что я обнаружил, что вы можете описать трудовой стаж с точки зрения диапазона заработной платы. Если диапазон заработной платы составляет от 150 000 до 200 000 долларов США, то, скорее всего, это должность, например, руководящего уровня. Проблема с использованием этого подхода заключается в том, что он в основном использует ответы для создания предиктора. Теперь я решил разрешить это «кодирование» информации о диапазоне зарплаты в категориальную метку «стаж работы», потому что модель будет принимать данные от пользователя об их стаже для прогнозирования рыночной стоимости. Я должен быть в состоянии сказать, являюсь ли я младшим, средним или старшим, что будет отражено в прогнозе.

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

Категории работы

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

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

Требования к работе и желаемые навыки

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

«Большой опыт работы с Azure Databricks, R и Python. Подтвержденный опыт написания алгоритмов».

Я получаю следующее: [‘опыт работы с Azure Databricks’, ‘R и Python’, ‘написание алгоритмов’].

Сделайте это по всему списку вакансий, и вы сократите слова до самых важных фрагментов информации.

Требования/навыки

С этими описаниями навыков я мог создать «встраивание текста описания работы», используя предварительно обученную языковую модель. Затем я мог преобразовать текст в машиночитаемые векторы.

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

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

Выбор функций

Когда у меня были все функции, которые, по моему мнению, были бы релевантными, мне нужно было отсеять нерелевантные и оставить лучшие предикторы. Для этого я использовал красивый инструмент под названием Featurewiz. Эта библиотека автоматизирует конвейер выбора функций, во-первых, объединяя высококоррелированные функции и выбирая ту, которая обладает наибольшей объяснительной силой. Затем он рекурсивно подгоняет модель XGBoost, чтобы найти наиболее важные функции.

Подгонка модели

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

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

Со всеми включенными функциями модель работала относительно хорошо. Прогнозы вне выборки обычно находились в пределах +-$10 000 000 от фактической средней зарплаты (то есть в пределах среднего предложения около $20 000). Я построил окончательную модель, предсказанную по сравнению с фактическими тестовыми данными, ниже:

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

Настройка гиперпараметров

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

Поэтому я разделил данные на обучающую, проверочную и тестовую выборки. А потом использовал классную библиотеку под названием Оптуна, которая представляет собой движок оптимизации. Я использовал его для автоматического поиска оптимального набора параметров, который позволил бы максимизировать производительность модели на проверочной выборке.

После завершения моя модель была готова делать некоторые прогнозы!

Тестирование

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

Интересно, что есть некоторые скачки зарплаты около 65 тысяч долларов, 100 тысяч долларов, 130 тысяч долларов, 160 тысяч долларов и 210 тысяч долларов +. Я утверждаю, что работодатели тяготеют к круглым числам и конкурируют в этих ценовых категориях.

Предсказание

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

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

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

Заключение

Сегодня я показал еще одно практическое применение машинного обучения — оценку собственной рыночной стоимости. Это отличная отправная точка для первоначальных переговоров о зарплате или переговоров о ее повышении.

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

В Queenstown Resort College (QRC) мы запускаем нашу новую микросертификационную программу по машинному обучению в прекрасной Новой Зеландии. Присоединяйтесь к нам и приобретайте навыки, необходимые для следующих шагов в карьере!

Узнайте больше о наших микро-учетных данных по основам машинного обучения здесь.