Сколько ты стоишь? Метод анализа вакансий с HR-агрегаторов

Вводная

Конечно, когда мы решаемся сменить работу, мы исходим из своих личных побуждений и мотиваций; и очевидно, что увеличение своего материального положения — не последняя из причин. Но при ответе себе лично на вопрос «сколько я хочу получать» обычно оперируем своим собственным потреблением. Но случалось ли вам слышать именно на собеседовании такой вопрос: «А почему Вы хотите получать именно столько?» Мне случалось пару раз, и, признаюсь, в те разы терялся что ответить. Некоторые размышления меня натолкнули, что лучший ответ будет: «Столько предлагает рынок».

Как узнать сколько предлагает рынок?

Уточню немного вопрос, который у меня сформировался, будучи нередко соискателем: «А сколько я могу заработать при наличии у меня текущих навыков?» Рассмотрим, на что можно опираться для ответа.

1. Исследование рынка. Но на самом деле по этому пункту больше вопросов возникает, чем ответов. Например:

  • то или иное исследование действительно актуально?

  • какими методиками пользовались?

  • какую выборку брали?

  • а можем ли мы (имеется ввиду соискатель и оппонент — наниматель) ему верить в равной мере?

Хочу привести пример, который попался в первых же результатах поисковика, у GeekBrains, где приоткрыли вуаль над методикой проводящихся расчётов:

Мы решили провести своё субъективное расследование: взяли базу данных трёх ведущих HR-агрегаторов (trud.com, superjob.ru и hh.ru), выудили из неё наши IT-профессии и посмотрели, сколько сейчас этим специалистам готов платить работодатель. Выборкой являлись первые 25 вакансий, снабжённых информацией о зарплате. Учитывался максимально указанный предел.

И в данной статье автор сам признаётся, что исследование «субъективно».

2. Взять реальные заработные платы за период и провести вычисления самостоятельно (хотя бы посчитать среднюю). И тут сразу мы сталкиваемся с юридической составляющей — такая информация в основной массе своей — закрыта. И даже если к ней будет доступ в рамках одной компании, то она не отобразит рынок целиком, а будет являться лишь частным случаем. По моим скромным знаниям информация по з/п в масштабах страны или хотя бы города может накапливаться в налоговой службе и Службе государственной статистики, но, как можно предположить, в налоговую не поступают должностные инструкции. Следовательно сведения по заработной плате там не могут быть достаточно сегментированы по должностям и навыкам.

И, кстати, когда на каком-то ресурсе всплывает упоминание о средней з/п программиста, пишущем на Java, например, то следует череда вопросов:, а откуда сведения;, а это сведения полученные легальным путём (если исходить что цифра действительно верная и подтверждаемая);, а точно взята информация по рынку целиком и не является каким-то частным случаем?

3. Ориентироваться на вакансии HR-агрегаторов. Так как именно работодатель платит за размещение вакансий на этих сайтах, то очевидно, что сам работодатель будет заинтересован поддерживать актуальную информацию. Вакансии сегментированы по навыкам. Вроде всё выглядит отлично, но есть очень неприятный момент. Когда касаемся з/п в вакансии речь, в основном, пойдёт не о конкретной заработанной плате (например, 40 000 руб/мес), а о диапазоне, в рамках которого и работодатель, и соискатель будет договариваться друг с другом (например, от 40 000 руб/мес до 60 000 руб/мес). Т.е. сделаем реверанс упомянутому выше исследованию GeekBrains, и сделаем методику чуть более привлекательнее.

Показатели центра распределения (статистика)

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

«Для определения средних или наиболее типичных значений совокупности используются показатели центра распределения» (Википедия)

Останавливаться на полном раскрытии термина я бы не хотел и сразу оговорюсь, что прям всеобъемлющие определения по этом разделу я давать не буду, т.к. пояснения излишне усложнены и проще объяснить их «на пальцах». Для всех неискушённых — можете почитать в интернете, а в рамках данной статьи я лишь упомяну о 3-х составляющих:

Подчеркну, что существуют показатели, которые официально рассчитываются Службой государственной статистики, например: Средний, медианный и модальный уровень доходов населения (https://www.gks.ru/free_doc/new_site/population/bednost/tabl/tab-bed1–2–6.htm), и, на мой взгляд, за их пределы выходить не имеет смысл.

I. Для общего понимания приведу небольшой пример вычисления средней, медианной и модальной з/п. Есть небольшая фирма с численностью сотрудников 10 человек, з/п указана в таблице:

№ сотрудника

1

2

3

4

5

6

7

8

9

10

з/п тыс.

20

20

20

20

20

20

20

20

20

100

Со средней арифметической з/п всё довольно прозрачно Средняя арифметическая = (9 (кол-во сотрудников) * 20 000 (руб. / мес) + 1×100 000) / (9 + 1) = 28 000 руб. / мес

Медианная з/п

Медиана набора чисел — число, которое находится в середине упорядоченного набора. Разобьём по шагам:

1. У нас уже есть данные по з/п у сотрудников

2. сортируем сотрудников по их з/п в порядке возрастания

№ сотрудника

1

2

3

4

5

6

7

8

9

10

з/п тыс.

20

20

20

20

20

20

20

20

20

100

3. Определяем середину набора. Сотрудников у нас 10, следовательно середина: 5-й, 6-й сотрудник, — если бы было нечётное кол-во сотрудников, тогда значение было бы одно.

4. Определяем какое значение присуще середине набора

№ сотрудника

5

6

з/п тыс.

20

20

5. ответ: медиана = 20 000 руб. / месяц

Модальная з/п

Мода — наиболее часто встречаемое значение в наблюдении.

1. посчитаем сколько раз встречается та или иная з/п в выборке

з/п тыс.

20

100

Кол-во сотрудников

9

1

II. Рассмотрим ещё один случай. Например, у самого «богатого» сотрудника з/п увеличилось до 120 000 руб. / мес.

Средняя арифметическая = (9 (кол-во сотрудников) * 20 000 (руб. / мес) + 1×120 000) / (9 + 1) = 30 000 руб (руб. / мес)

Медиана (не изменилась)

№ сотрудника

5

6

з/п тыс.

20

20

медиана = 20 000 руб. / месяц

Мода (не изменилась)

з/п тыс.

20

120

Кол-во сотрудников

9

1

медиана = 20 000 руб. / месяц

Надеюсь, что приведённый пример показал, как изменение з/п у одного человека сдвигает среднюю з/п, но на модальную и медианную зарплату влияния никакого не оказывает. Собственно из-за этого в исследованиях для повышения репрезентативности желательно рассчитывать несколько показателей. Вдогонку хотелось бы ещё упомянуть пример статьи «Росстат зафиксировал рост средних зарплат»: https://rg.ru/2020/08/20/rosstat-zafiksiroval-rost-srednih-zarplat.html — где оценка касается лишь средней з/п. Когда видите такое, пожалуйста понимайте, что всё не так однозначно. Т.е. если оценивается лишь один показатель выборки, вся картина целиком остаётся скрытой.

III. И последний пример. У 9 сотрудников будет зарплата близкой к 20 000 руб / мес, но будет отличаться друг от друга на несколько рублей

№ сотрудника

1

2

3

4

5

6

7

8

9

10

з/п тыс.

19,992

19,993

19,994

19,995

19,996

19,997

19,998

19,999

20

100

Тут я не беру какой-то нереальный пример, а рассматриваю реальную ситуацию. Если брать среднюю месячную з/п за год, т.е. сколько каждый сотрудник реально заработал за год, делённый на 12 месяцев, то отличия з/п между сотрудниками, занимающими одну и ту же должность будут отличаться буквально на считанные рубли. Просто разные сотрудники могут уйти в отпуск или на больничный в течение года в разные месяцы, а стоимость рабочего дня каждого месяца будет отличаться. Следовательно, описываемый пример — наиболее приближен к реальности.

Средняя арифметическая = 27 996,4 руб. / мес.

Медиана = 19 996,5 руб. / мес.

Мода

И тут есть загвоздка

з/п тыс.

19,992

19,993

19,994

19,995

19,996

19,997

19,998

19,999

20

100

Кол-во сотрудников

1

1

1

1

1

1

1

1

1

1

Получается, что моду посчитать нельзя

Однако, с расчётом моды можно сделать следующий приём. Значения объединяем в группу «от» (не включая) и «до» (включая) с шагом 1 000 руб.

з/п тыс.

От 19 до 20

От 99 до 100

Кол-во сотрудников

9

1

Длину шага можно, в принципе, задавать произвольно, но без ущерба для информативности, т.е. если задать диапазон от 0 до 100 тыс. руб., то все 100% войдут в моду, а это сводит информативность к нулю.

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

Перейдём к вакансиям

Как считать среднее (арифметическое), медиану и моду для конкретных значений, можно считать, что разобрались. Но в вакансиях указываются промежутки «от» и «до».

Почему оценивать в исследованиях максимальный («до»), минимальный («от») предел или даже брать среднее между ними — бесполезная затея сейчас покажу на примерах.

Во-первых, часто отсутствуют сами пределы в вакансиях (или «от» или «до» не указаны). И следовательно, при отсутствии того или иного предела нам придётся или исключить вакансию из исследования, или ввести гигантский ряд допущений, чтобы допустить вакансию в выборку, что потом снизит доверие к финальному вычислению.

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

image-loader.svg

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

И ещё один пример, когда разброс пределов (отличаются в 11.1 раз) и собственно значения могут выглядеть подозрительно

image-loader.svg

И что же делать? Кульминация!

Считать моду (статистическую). Исходя из допущения, что картина заменяет тысячу слов, то предположу, что анимация заменит вторую тысячу.

image-loader.svg

Опишу словами шаги для получения моды по вакансиям:

  1. Делаем запрос на выборку в HR-агрегаторе. На самом деле этот шаг требует особого внимания, т.к. на практике случается очень много нюансов. Вскользь упомяну только очень интересное поведение на hh.ru, когда при запросе «дворник» и поиске внутри описания вакансий, неожиданно в ответе получил вакансии «Разработчика», т.к. в описании вакансии упомянут «cleaner». Т.е. по хорошему такие вакансии нужно исключать, но напомню о свойстве моды — при большой выборке одно значение не сильно влияет на конечный результат.

  2. Собираем вакансии с указанными з/п.

  3. «Нарезаем» равные промежутки. Промежутки должны быть экономически значимыми. Поясню: значение промежутка должно быть достаточно для принятия решения сменить работу на такую же должность. Иными словами: у меня есть работа с текущей з/п и я готов перейти на новое место работы, на такую же должность, если там предлагают на 10 тыс. руб. в месяц больше.

  4. Считаем сколько вакансий вошло в тот или иной промежуток

  5. Промежуток с наибольшим количеством вакансий и будет модой. Конечно, может быть и 2 и более моды, но давайте это оставим за кадром.

А какой практический смысл несёт вычисление модальной з/п в вакансиях?

Исходим из определения моды: «наиболее часто встречаемое значение в наблюдении». В показанном анимационном примере выше мы выделили 4 вакансии, и в диапазоне «от 30 до 40» попали все 4 (100%) вакансии. Следовательно, чтобы иметь больший шанс получить работу по выбранным вакансиям соискателю нужно целиться именно в диапазон «от 30 до 40». И следующий за ним вывод — запрашивать з/п соискателю меньше моды не имеет смысла — там и денег меньше предлагают и шансов меньше найти работу. Сразу оговорюсь, что когда я заявляю «меньше шансов» я имею ввиду вычисляемом шансе. На практике если вы запросите 50 000 рублей для вакансии, на которой стоит отметка «от 100 000 рублей», то вас оторвут с руками. И в принципе такая стратегия имеет шанс на существование, например, когда соискатель хочет полностью сменить род деятельности и закрепиться на новом поприще. Но опять же не лишним будет сориентироваться на моду, чтобы не совсем продешевить.

Пример текущего состояния

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

Запросы будем делать в hh.ru, почему выбор пал именно на него:

  1. Есть API

  2. Основываюсь на личном опыте (субъективно): 2/3 всех найденных новых мест работы я нашёл именно на этом портале

  • Берём вакансии по Москве

  • Берём вакансии с указанной з/п

  • Смотрим вакансии, которые видны не зарегистрированным пользователям

  • Дата запроса: 2021–11–05

  • Ищем по всему описанию вакансии, т.е. в названии, в описании и в названии фирмы

Результат для: «Python»

Всего найденных вакансий с указанной з/п: 1339 шт

Мода: от 250 000 до 260 000 руб./мес. Gross (до вычета НДФЛ)

image-loader.svg

Результат для: «Excel and VBA»

Всего найденных вакансий с указанной з/п: 72 шт

Мода: от 160 000 до 170 000 руб./мес. Gross (до вычета НДФЛ). Комментарий: тут прослеживаются 2-ая и 3-я моды, но оставим без внимания

image-loader.svg

Результат для: «JavaScript»

Всего найденных вакансий с указанной з/п: 1884 шт

Мода: от 220 000 до 230 000 руб./мес. Gross (до вычета НДФЛ)

image-loader.svg

Единичное практическое применение

Сразу извинюсь, что пример субъективный, и распространяться о деталях я не могу. Опишу личную ситуацию, когда при смене руководства, мне добавили новые обязанности. По сути у меня поменялась должность, но з/п не изменилось. Собственно именно это меня привело к текущим размышлениям и попыткам определить реальную з/п, на которую могу рассчитывать. Подогревался этот интерес так же заявлениями руководства, что уже получаемая нами з/п отвечало рынку. Мои же расчёты показали, что, мягко сказать, заявления были ошибочны. К сожалению с тем работодателем пришлось распрощаться и проверить свою теорию на практике. Кратко скажу, что всё прошло удачно, рынок оказался там, где я его искал.

Всем спасибо за внимание. Критику приветствую!

© Habrahabr.ru