Кто больше зарабатывает: специалист с формальным образованием или с опытом?

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

К старту флагманского курса по Data Science делимся небольшим исследованием о зарплате на основе данных опроса Stack Overflow, а также очень кратко знакомим читателей с библиотекой построения байесовских моделей Bambi. За подробностями приглашаем под кат.


Зачем?

Как разработчик или дата-сайентист вы можете задаться вопросом:

  • Будете ли вы зарабатывать больше с ростом опыта? Если да, то на сколько?

  • Есть ли другие факторы: учёная степень, должность и размер компании? Влияют ли они на зарплаты?

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

Данные

Используем опрос 2018 года на Stack Overflow. Загрузим данные в текущий каталог и выполним код:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv("survey_results_public.csv")

Выберем не студентов, а разработчиков из США, которые заняты полностью:

sample = df.query(
    "Country == 'United States' & Employment == 'Employed full-time' & Student == 'No'"
)

Уберём зарплаты, превышающие $300,000:

normal_salary = sample[sample["ConvertedSalary"] < 300_000].copy()

И получим диапазон зарплат:

# Group by salary range
bins = [0, 25_000, 50_000, 75_000, 100_000, 125_000, 150_000, 300_000]

normal_salary["Salary Range"] = pd.cut(
    normal_salary.dropna(subset=["ConvertedSalary"])["ConvertedSalary"], bins=bins
)

salary_groupby = normal_salary.groupby("Salary Range").agg({"Respondent": "count"})

# Create a bar plot
salary_groupby.plot(kind="bar")
plt.show()

Похоже, большинство разработчиков зарабатывают от $75 000 до 100 000 в год. Для зарплаты разработчиков в США звучит правдоподобно.

Зарплата и опыт

Покажем влияние опыта на зарплату при помощи ящика с усами:

normal_salary.YearsCoding.head(10)

Преобразуем строки YearsCoding в pandas.Interval:

def str_to_interval(text: str):
    if isinstance(text, str):
        years = text.split()[0].split("-")
        if len(years) == 2:
            return pd.Interval(int(years[0]), int(years[1]))
        else:
            return pd.Interval(int(years[0]), float("inf"))

    return text

# Convert string to pandas.Interval    
normal_salary.YearsCoding = normal_salary.YearsCoding.apply(str_to_interval)

# Sort by years
years_sorted = normal_salary.dropna(
    subset=["ConvertedSalary", "YearsCoding"]
).sort_values(by="YearsCoding")

И визуализируем данные:

sns.boxplot(data=years_sorted, x="YearsCoding", y="ConvertedSalary")
plt.show()

Отлично, кажется, что средняя зарплата увеличивается с ростом опыта.

Обратите внимание, что данные выше — это только выборка. Как проверить, что в средней зарплате разработчиков с опытом от 3 до 5 лет и разработчиков с опытом до двух лет или 6–8 лет и до 2 лет есть выраженная разница? Сделать это можно при помощи байесовского t-теста с независимыми выборками.

Байесовский t-тест при помощи Bambi

Что такое Bambi?

Bambi — это высокоуровневый интерфейс построения байесовских моделей на Python. Он написан поверх Pymc3. Иными словами, Bambi похож на Pymc3, но использовать его намного проще:

pip install bambi

Байесовский t-тест по годам стажа

Начнём со сравнения средней зарплаты разработчиков с опытом до 2 лет от 3 до 5 лет.

# Filter
sample1 = years_sorted[
    (years_sorted.YearsCoding == pd.Interval(0, 2))
    | (years_sorted.YearsCoding == pd.Interval(3, 5))
]

# visualize
sns.boxplot(data=sample1, x="YearsCoding", y="ConvertedSalary")
plt.show()

Обозначим средние зарплаты:

Таким образом, мы можем написать:

Из уравнения выше видно, что если нет разницы в средних зарплатах между двумя группами, то

Источник: https://habr.com/ru/company/skillfactory/blog/645519/


Интересные статьи

Интересные статьи

Карантинные ограничения продолжают сниматься, и компании готовятся к отмене удаленной работы. Однако сотрудники не торопятся возвращаться. Читать далее ...
Хочу поделиться опытом автоматизации экспорта заказов из Aliexpress в несколько CRM. Приведенные примеры написаны на PHP, но библиотеки для работы с Aliexpress есть и для...
На Хабре мы обсуждаем сетевую инфраструктуру США, особенности европейских интернет-провайдеров и даже следим за развитием линий связи в Индии. Правительство последней, ка...
Прошло полгода с выпуска пробной статьи про создание MMORPG в телеграме. Изменился мир, изменились и планы по игре.Почему больше не в TelegramПосле выпуска первой статьи,...
Швейцария стабильно входит в топы всех рейтингов стран по уровню жизни. К примеру, здесь она расположилась на 7 месте, а рейтинг Numbeo ставит ее на вторую позицию. При этом в стране...