Что мы можем узнать из данных опроса Stack Overflow

Сейчас мы в курсе данных, и в последние несколько лет на рынке труда наблюдается постоянный спрос на рабочие места, связанные с данными. Data Scientist, Data Analyst и Data Engineer — три основных направления работы, связанной с данными. Для всех, кто заинтересован в выходе на поле или кто уже находится в поле, будет полезно понять текущую ситуацию на рынке труда данных. Такая информация, как требования к работе, зарплата и удовлетворенность, может дать вам больше информации, когда вы сделаете следующий шаг на пути к работе с данными. В этом посте я использовал определенный набор данных Ежегодный опрос разработчиков Stack Overflow, чтобы изучить некоторые вопросы, которые могут быть интересны. Этот пост будет посвящен анализу данных и моделированию в трех основных частях:

Часть 1. Зарплата

  • Какая роль данных приносит самую высокую зарплату?
  • Заработная плата данных ролей в разных странах;
  • Заработная плата с разным стажем работы;
  • Заработная плата среди разных полов в поле данных;
  • Заработная плата по сравнению с Удовлетворение от работы.

Часть 2. Изменение заданий по работе с данными, сравнение данных за 2020 г. с данными за 2019 г.

  • Изменение номеров данных ролей;
  • изменение заработной платы;
  • Изменение удовлетворенности работой.

Часть 3. Удовлетворенность работой

  • Многоклассовая классификация с использованием XGBoost для прогнозирования удовлетворенности работой;
  • Инсайд от моделирования.

Примечания к данным:

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

Опрос был сосредоточен на вопросах для людей с общим опытом разработки, включая разработку программного обеспечения и анализ данных. Данные опроса 2020 года состоят из 64 461 ответа. Я использовал вопрос «DevType» и предварительно обработал данные, чтобы анализировались только те респонденты, у которых есть роль, связанная с данными. Вопрос из анкеты следующий.

Что из следующего описывает вас? Выберите все подходящие варианты.

[] Академический исследователь
[] Данные или бизнес-аналитик (далее DA)
[] Специалист по данным или специалист по машинному обучению (далее DS)

[] База данных администратор
[] Дизайнер
[] Разработчик, бэкэнд
[] Разработчик, настольные или корпоративные приложения
[] Разработчик, встроенные приложения или устройства
[] Разработчик, интерфейс
[] Разработчик, fullstack
[] Разработчик, разработчик игр или графики, мобильное приложение
[] Разработчик, QA или тестировщик
[] Специалист DevOps
[] Преподаватель< br /> [] Инженер, специалист по данным (с именем DE)
[] Инженер, специалист по надежности объекта Инженер-менеджер
[] Специалист по маркетингу или продажам Менеджер по продукту
[] Научный сотрудник
[] Старший руководитель (CSuite, вице-президент и т. д.) Студент
[] Системный администратор
[] Другое

Обратите внимание, что отвечающая сторона может иметь более одного выбора для DevType и даже выбрать более одной роли данных (например, DA, DS, DE). Я сохраняю только те записи данных, которые связаны с ролью данных, и разделяю их по разным типам ролей данных. Следовательно, два вновь созданных экземпляра могут исходить из одного и того же экземпляра данных, который имеет несколько ролей данных.

Чтобы сделать аналитический результат более последовательным, я также отфильтровал «Статус трудоустройства» и оставил только тех респондентов, которые в настоящее время работают. При такой подготовке данных для нашего анализа ролей данных имеется 11 186 экземпляров. Такая же подготовка данных была применена к данным опроса 2019 г., и было создано 17 370 экземпляров, которые будут использоваться для сравнения с данными 2020 г. в Части 2.

Часть 1: Факты о зарплате

Давайте сначала проверим распределение этих трех заданий с данными. Здесь мы видим, что их количество очень близко, с DA на первом месте, а затем DS, DE (рис. 1а). По средней зарплате (в долларах США) мы видим, что DS и DE практически одинаковы, а DA имеет немного меньшую заработную плату (рис. 1б).

При дальнейшем отображении зарплат по разным странам (топ-9 стран с наибольшим количеством ответов) мы можем увидеть некоторые интересные детали на рис. 2:

  • Работа с данными в Соединенных Штатах приносит больше всего. Средняя заработная плата в Соединенных Штатах значительно выше, чем в других странах, даже в других развитых странах западного мира (например, в Германии, Великобритании, Канаде).
  • DS (и DE) не обязательно является работой с более высоким доходом по сравнению с DA. Действительно, мы видим, что зарплата DA намного выше, чем DS в Канаде и Франции. Это может напомнить вам высказывание: специалист по данным — самая сексуальная профессия 21 века. Это может быть не так сексуально, как вы думали, по крайней мере, исходя из того, что нам говорит зарплата из данных опроса. Однако данные опроса Stack Overflow не обязательно отражают реальное население.

Важным фактором, связанным с заработной платой, является многолетний опыт работы. В данных опроса мы используем «Год профессионального кодирования» в качестве показателя опыта работы и делим респондентов на четыре группы по «Году профессионального кодирования». На рис. 3 от «0–3 лет» до «6–13 лет» мы видим, что заработная плата постепенно и медленно увеличивается, причем в группе «13+ лет» заработная плата имеет существенный прирост.

Еще одним интересным и важным моментом для проверки является гендерное распределение в этой области. Гендерное неравенство в сфере разработчиков давно вызывает озабоченность. Здесь мы видим эту проблему и в поле данных (рис. 4).

Что касается заработной платы, то мы видим, что существенной разницы между мужчиной и женщиной нет (рис. 5а), но заработная плата женщины имеет более широкий диапазон (высокая дисперсия, рис. 5б).

Наконец, давайте посмотрим, как удовлетворенность работой связана с заработной платой. Как и следовало ожидать, удовлетворенность работой не всегда положительно коррелирует с заработной платой, и это также то, что показывают нам данные на рис. 6а. Это также может свидетельствовать о том, что есть группа дата-инженеров, которые очень недовольны своей работой, хотя и получают очень хорошую зарплату (см. высокую зеленую полосу в крайнем правом углу рис. 6b). Конечно, есть много других факторов, которые будут способствовать нашей удовлетворенности работой в реальном мире. А в Части 3 я буду применять моделирование машинного обучения, чтобы прогнозировать удовлетворенность работой и получать больше информации.

Часть 2: Изменение рабочих мест с данными, сравнение данных за 2020 год с данными за 2019 год

В этой части давайте посмотрим на некоторые тенденции в области данных. Поскольку наш анализ основан на данных опроса Stack Overflow, а форма опроса в 2018 году сильно отличалась от 2019 и 2020 годов, мы будем использовать данные только за 2019 и 2020 годы и проведем сравнение. Прежде всего отметим, что общее количество действительных ответов на опросы, отфильтрованных из необработанных данных в 2020 году, составляет 53 159, и 15,69% респондентов имеют работу, связанную с данными. Для сравнения, данные опроса 2019 года содержат 77 420 действительных ответов, и 16,71% респондентов имеют работу, связанную с данными.

Во-первых, данные показывают, что распределение ролей данных мало изменилось среди этих трех ролей (рис. 7). Подсчеты за 2019 год больше, потому что в опросе 2019 года было больше ответов, что не обязательно означает, что количество рабочих мест, связанных с данными, уменьшилось в 2020 году.

Что касается изменения зарплаты, то это, пожалуй, самый удивительный результат, с которым я столкнулся. Мы видим снижение заработной платы на всех трех работах с данными, и общее снижение составляет около 16 000 долларов США (рис. 8).

Чтобы дополнительно проверить это изменение, я построил график только с данными США. Наблюдается аналогичное снижение заработной платы (рис. 9). На этот раз мы видим, что зарплата DS имеет лишь небольшое снижение, в то время как DA и DE имеют более существенное снижение. Будет интересно использовать другие источники данных, чтобы перепроверить, верно ли это снижение для вакансий с данными на рынке труда. И если да, то в чем может быть причина и какие последствия мы можем иметь здесь? В качестве примечания: сначала я подумал, что это снижение зарплаты может быть связано с Covid-19 и, следовательно, со спадом на рынке. Но данные опроса 2020 года были фактически собраны в феврале 2020 года, поэтому пандемия еще не вступила в игру.

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

Насколько вы удовлетворены своей нынешней работой? (Если вы работаете на нескольких работах, отвечайте за ту, на которую вы тратите больше всего времени.)

o Очень недоволен (-2)
o Слегка недоволен (-1)
o Ни доволен, ни недоволен (0)
o Немного доволен (1)
o Очень доволен (2)

Я преобразовал различные степени удовлетворенности в значения в диапазоне от -2 до 2. И средние баллы приведены на рис. 10. Мы можем заметить, что DS имеет самый высокий балл удовлетворенности, за ним следуют DE и DA как в 2019, так и в 2020 году. Более того, удовлетворенность с 2019 по 2020 год снизилась для всех трех рабочих мест, связанных с данными, которые двигались в том же направлении, что и зарплаты.

Часть 3: Прогноз удовлетворенности работой

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

Во избежание несогласованности распределения данных разных лет для моделирования будут использоваться только данные опроса 2020 года. Также обратите внимание, что данные несбалансированы. «Очень доволен» и «Слегка доволен» занял более 60% от общего числа данных, в то время как «Очень неудовлетворен» — менее 10%.

Некоторые важные этапы обработки данных включают: 1) очистку данных; 2) вменение отсутствующих данных; 3) категориальное кодирование данных; 4) выбор функций/инженер. Я пропущу эти технические детали, и вы можете обратиться к записной книжке и коду в репозитории GitHub для получения более подробной информации. Для моделирования я использовал алгоритм XGBoost с подходом oneVsRest для этой проблемы множественной классификации.

3.1. Исследовательский анализ данных (EDA)

Прежде чем представить результаты моделирования, я покажу некоторые EDA как рутину проектов по науке о данных, чтобы дать вам некоторое представление об удовлетворенности работой. Как показано в Части 1, заработная плата и удовлетворенность работой не обязательно коррелируют друг с другом (рис. 6). Как насчет других важных факторов, которые потенциально могут повлиять на удовлетворенность работой?

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

Сверхурочная работа — еще один фактор, который должен иметь отношение к удовлетворенности работой в общем смысле. Однако картина нечеткая, если она и есть (рис. 12). Ведь в группе, которая никогда не переутомляется, класс «Очень доволен» не самый отзывчивый.

Наконец, давайте проверим распределение удовлетворенности работой в разных странах. Стоит отметить одно наблюдение: процент «Очень доволен» относительно низок в развивающихся странах, таких как Индия и Бразилия. Тем не менее, было бы поспешно заключить, что это особое явление в области данных. Вместо этого более низкий процент «Очень доволен» в развивающихся странах может быть общим явлением, независимо от того, в какой области.

3.2. Мультиклассификация с XGBoost

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

  • Для модели существует проблема переобучения, хотя на этапе моделирования было применено несколько методов для борьбы с проблемами переобучения;
  • Модель может правильно предсказывать второстепенные классы на разумном уровне, хотя при прогнозировании экземпляров как «Очень удовлетворены» и «Слегка удовлетворены» совершается много ошибок.
  • Модель путают «Очень доволен» и «Слегка доволен» (рис. 14, справа).

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

3.3. Объяснимость и понимание модели

Чтобы понять модель и получить больше информации, давайте проверим основные функции, рассчитанные в процессе построения дерева (рис. 15).

Использование горячего кодирования создает некоторые неудобства для интерпретации, поскольку исходный признак теперь разбит на несколько бинарных признаков. Две наиболее важные функции относятся к «NEWOnboardGood»: «NEWOnboardGood_1» означает ответ «Да» на вопрос «Как вы считаете, хорошо ли в вашей компании проходит процесс адаптации?», а «NEWOnboardGood_2» означает «Нет». Легко заметить, что хороший процесс адаптации обычно связан с высокой удовлетворенностью работой.

Мы также видим, что «UndergradeMajor» играет важную роль после «NEWOnboardGood». Действительно, то, что модель узнала из данных:

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

Функция «Bash/Shell/PowerShell» интересна, респонденты, которые используют «Bash/Shell/PowerShell» в качестве одного из своих языков программирования, с большей вероятностью будут «Очень довольны», чем те, кто этого не делает. По крайней мере, это то, что модель узнала из данных.

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

Во-первых, мы увидим, что основные функции, заданные значениями SHAP (рис. 17), отличаются от тех, которые рассчитаны на основе прироста информации во время разделения узлов (рис. 16). Подход значений SHAP считается более последовательным для оценки важности признаков (см. документ SHAP для справки). Здесь верхние характеристики — «Зарплата», «NEWOnboardGood_1», «Возраст», «YeasCode», «OrgSize», которые, на мой взгляд, более соответствуют здравому смыслу.

График зависимости SHAP на рис. 18 говорит нам, как зарплата будет способствовать прогнозированию, если экземпляр будет «Очень доволен». Мы видим, что в целом более высокая заработная плата будет способствовать прогнозированию экземпляра с большей вероятностью «Очень доволен», как показывает тенденция к увеличению.

Для размера компании меньший размер имеет тенденцию вносить положительный вклад в прогноз «Очень доволен» (рис. 19).

Вывод

В этом посте мы использовали данные опроса Stack Overflow Survey, чтобы провести предварительный анализ и получить некоторое представление о поле данных.

  1. Мы анализируем распределение заработной платы по разным ролям данных, а также учитываем другие факторы, такие как страны, год опыта, пол.
  2. Мы сравниваем данные опроса 2019 года с данными 2020 года. И довольно удивительно видеть, что зарплаты для рабочих мест, связанных с данными, снизились, а также удовлетворенность работой.
  3. Наконец, мы построили мультиклассификационную модель XGBoost, чтобы прогнозировать удовлетворенность работой и получать некоторое представление об удовлетворенности работой, проверяя важность функции и взаимосвязь зависимости.

Анализ и моделирование в этом посте носят скорее практический характер, и без дальнейших исследований нельзя сделать никаких твердых выводов. Самое главное, сами данные опроса Stack Overflow могут быть предвзятыми и не обязательно отражать реальное население. Надеюсь, вам будет весело читать этот пост. Чтобы увидеть больше технических деталей, пожалуйста, обратитесь к репозиторию GitHub.