Анализ Вакансий С Использованием Кластеризации

В статье представлен метод анализа вакансий по поисковому запросу «Python» с использованием модели кластеризации Gaussian Mixture Model (GMM).

Для каждого выделенного кластера будут указаны наиболее востребованные навыки и диапазон заработной платы.

Почему было проведено это исследование? Я хотел знать:

  • В каких областях применения используется Python?
  • Какие знания потребуются: базы данных, библиотеки, фреймворки
  • Насколько востребованы специалисты в каждой области?
  • Какие зарплаты предлагаются?


Анализ вакансий с использованием кластеризации



Загрузка данных

Вакансии скачаны с сайта hh.ru , используя API: dev.hh.ru .

По запросу был скачан "Питон" 1994 вакансий (Московская область), которые были разделены на обучающую и тестовую выборки, пропорционально 80% И 20% .

Размер тренировочного набора - 1595 , размер теста - 399 .

Набор тестов будет использоваться только в разделах «Высшие/антитоповые навыки» и «Классификация должностей».



Знаки

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

н-грамм слова:

  • 2-граммы на кириллице и латинице
  • 1 грамм на латыни
В ИТ-вакансиях ключевые навыки и технологии обычно пишутся на английском языке, поэтому во вторую группу вошли слова только на латинице.

После отбора n-грамм первая группа содержала 81 2-грамм, а вторая 98 1-грамм:

н н-грамм Масса Вакансии
1 2 на питоне 8 258
2 2 CI компакт-диск 8 230
3 2 понимание принципов 8 221
4 2 знание sql 8 178
5 2 развитие и 9 174
.

.

.

.

.

82 1 sql 5 490
83 1 Linux 6 462
84 1 PostgreSQL 5 362
85 1 докер 7 358
86 1 Джава 9 297
.

.

.

.

.

Было решено разделить вакансии на кластеры по следующим критериям в порядке приоритетности:
Приоритет Критерий Масса
1 Область (прикладное направление), должность, опыт n-граммы: «машинное обучение», «администрирование Linux», «отличные знания» 7-9
2 Инструменты, технологии, программное обеспечение.

n-граммы: «sql», «ОС Linux», «pytest»

4-6
3 Другие навыки n-граммы: «техническое образование», «английский язык», «интересные задачи» 1-3
Определение того, к какой группе критериев относится н-грамма, а какой масса присвоение произошло на интуитивном уровне.

Позвольте мне привести вам пару примеров:

  1. На первый взгляд «Докера» можно отнести ко второй группе критериев с весом от 4 до 6. Но упоминание «Докера» в вакансии, скорее всего, указывает на то, что вакансия будет на должность «DevOps-инженер».

    » Поэтому «Докер» попал в первую группу и получил вес 7.

  2. «Java» также попадает в первую группу, потому что в большинстве рассматриваемых вакансий с наличием слова «Java» Java-разработчика ищут с оговоркой «знание Python будет дополнительным преимуществом».

    Также есть вакансии с поиском «оркестр одного человека».

    И первая, и вторая вакансии меня не интересуют, поэтому я хочу отделить их от остальных вакансий, соответственно наибольший вес я присваиваю «Яве» 9.

Чем больше вес n-граммы, тем сильнее будут сгруппированы вакансии по этому признаку.



Конверсия данных

Для расчетов каждая вакансия преобразовывалась в вектор размерностью 179 (количество выбранных признаков) целых чисел от 0 до 9, где 0 означает, что i-й n-грамм отсутствует в вакансии, а числа от 1 до 9. означают наличие i-го n -грамм и его вес.

Далее в тексте под точка Под вакансией понимается вакансия, представленная таким вектором.

Пример: Допустим, список n-грамм содержит всего три значения:
н н-грамм Масса Вакансии
1 2 на питоне 8 258
2 2 понимание принципов 8 221
3 1 sql 5 490
Тогда на вакансию с текстом.

Требования:

  • Опыт разработки на Python от 3 лет.
  • Хорошее знание sql
вектор равен [8, 0, 5].



Метрики

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

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

Для этого я использовал алгоритм т-СН? преобразовать все векторы в двумерное пространство.

Суть метода заключается в уменьшении размерности данных при максимальном сохранении пропорций расстояний между точками множества.

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

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

Пружины действуют в обе стороны, т.е.

сопротивляются как расстоянию, так и приближению шариков друг к другу.

Система находится в устойчивом состоянии, шары неподвижны.

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

Далее берем две большие тарелки и сжимаем шарики в тонкий пласт, не препятствуя перемещению шариков в плоскости между двумя пластинами.

Силы пружин начинают действовать, шарики движутся и в конце концов останавливаются, когда силы всех пружин уравновесятся.

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

То же самое и с удаленными шариками – они будут удалены друг от друга.

С помощью пружин и пластин мы преобразовали трехмерное пространство в двухмерное, сохранив в той или иной форме расстояния между точками! Я использовал алгоритм t-SNE только для визуализации набора точек.

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

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

Анализ вакансий с использованием кластеризации

На рисунке видно, что большая часть точек сосредоточена в центре, а по бокам имеются небольшие ответвления.

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

Я выбрал в качестве меры Расстояние Жаккара , принимая во внимание веса в n-граммах.

Мера Жаккара проста для понимания и хорошо подходит для решения поставленной задачи.

Пример : Задание 1 содержит n-граммы: «python», «sql», «docker».

Задача 2 содержит n-граммы: «python», «sql», «php».

Вес: «на питоне» — 8 «sql» - 5 «докер» — 7 «ФП» — 9 Пересечение многих (n-грамм встречается на 1-й и 2-й вакансиях) : "в питоне", "sql" = 8 + 5 = 13 Союз наборов (все n-граммы из 1-й и 2-й вакансий) : «python», «sql», «docker», «php» = 8 + 5 + 7 + 9 = 29 Расстояние =1 – (Пересечение множеств/Объединение множеств) = 1 – (13/29) = 0,55

Рассчитывалась матрица расстояний между всеми парами точек; размер матрицы составил 1595 х 1595. Всего 1 271 215 расстояний между уникальными парами.

Среднее расстояние оказалось 0,96, между 619 659 расстояние равно 1 (т.е.

сходства нет вообще).

На следующей диаграмме показано, что в целом эти профессии мало похожи:

Анализ вакансий с использованием кластеризации

Используя метрику Жаккара, наше пространство теперь выглядит так:

Анализ вакансий с использованием кластеризации

Появились четыре отдельные области плотности и два небольших скопления с низкой плотностью.

По крайней мере, это то, что видят мои глаза!

Кластеризация

Модель, выбранная в качестве алгоритма кластеризации Модель гауссовой смеси (GMM) .

Алгоритм получает входные данные в виде векторов, а параметр n_comComponents — это количество кластеров, на которые необходимо разбить набор.

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

Я использовал готовую реализацию GMM из библиотеки scikit-learn: sklearn.mixture.GaussianMixture .

Замечу, что GMM не использует метрику, а делит данные только по набору признаков и их весам.

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

Многие алгоритмы кластеризации используют расстояние между точками.

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

В предыдущем разделе на глазок было определено, что кластеров, скорее всего, будет шесть.

Вот как выглядят результаты кластеризации при n_comComponents = 6:

Анализ вакансий с использованием кластеризации



Анализ вакансий с использованием кластеризации

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

Для каждого кластера в скобках указана его компактность.

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

При анализе кластеров результат также не обрадовал.

Чтобы найти оптимальное количество кластеров n_comComponents, мы используем критерии AIC и BIC вы можете прочитать о Здесь .

Расчет этих критериев встроен в метод sklearn.mixture.GaussianMixture .

Вот как выглядит график критериев:

Анализ вакансий с использованием кластеризации

При n_comComponents = 12 критерий BIC имеет наименьшее (лучшее) значение, критерий AIC также имеет значение, близкое к минимальному (минимум при n_comComponents = 23).

Разобьем вакансии на 12 кластеров:

Анализ вакансий с использованием кластеризации



Анализ вакансий с использованием кластеризации

Кластеры теперь имеют более компактную форму как визуально, так и численно.

В ходе ручного анализа вакансии были разделены на характерные для понимания человека группы.

На рисунке показаны названия кластеров.

Кластеры под номерами 11 и 4 обозначены как :

  1. В кластере 11 все функции имеют примерно одинаковый общий вес.

  2. Кластер 4 был идентифицирован на основе Java. Тем не менее, вакансий на должность Java Developer в кластере немного; знание Java часто требуется как «дополнительный плюс».



Кластеры

После удаления двух неинформативных кластеров под номерами 11 и 4 у нас осталось 10 кластеров:

Анализ вакансий с использованием кластеризации

Для каждого кластера есть таблица знаков и 2-грамм, которые чаще всего встречаются в вакансиях в кластере.

Обозначения: С — доля вакансий, в которых встречается данная функция, умноженная на вес функции.

% — процент вакансий, в которых встречается знак/2-грамм Типичная вакансия кластера — вакансия с наименьшим средним расстоянием до других точек кластера

Аналитик данных

Количество вакансий: 299 Типичная вакансия: 35805914
Знак с весом С Знак % 2 грамма %
1 превосходить 3.13 sql 64.55 знание sql 18.39
2 р 2.59 превосходить 34.78 в разработке 14.05
3 sql 2.44 р 28.76 питон р 14.05
4 знание sql 1.47 би 19.40 с большим 13.38
5 анализ данных 1.17 картина 15.38 развитие и 13.38
6 картина 1.08 Google 14.38 анализ данных 13.04
7 с большим 1.07 ВБА 13.04 знание питона 12.71
8 развитие и 1.07 наука 9.70 аналитический склад 11.71
9 ВБА 1.04 dwh 6.35 опыт разработки 11.71
10 знание питона 1.02 оракул 6.35 базы данных 11.37


Разработчик С++

Количество вакансий: 139 Типичная вакансия: 39955360
Знак с весом С Знак % 2 грамма %
1 С++ 9.00 С++ 100.00 опыт разработки 44.60
2 Джава 3.30 Linux 44.60 с С++ 27.34
3 Linux 2.55 Джава 36.69 С++ питон 17.99
4 С# 1.88 sql 23.02 на С++ 16.55
5 идти 1.75 С# 20.86 события в области 15.83
6 события в области 1.27 идти 19.42 структуры данных 15.11
7 хорошее знание 1.15 Юникс 12.23 опыт написания 14.39
8 структуры данных 1.06 тензорный поток 11.51 программирование в 13.67
9 тензорный поток 1.04 бить 10.07 в разработке 13.67
10 опыт программирования 0.98 PostgreSQL 9.35 языки программирования 12.95


Linux/DevOps-инженер

Количество вакансий: 126 Типичная вакансия: 39533926
Знак с весом С Знак % 2 грамма %
1 анзибль 5.33 Linux 84.92 CI компакт-диск 58.73
2 докер 4.78 анзибль 76.19 опыт администрирования 42.06
3 бить 4.78 докер 74.60 Баш питон 33.33
4 CI компакт-диск 4.70 бить 68.25 TCP IP 39.37
5 Linux 4.43 Прометей 58.73 опыт настройки 28.57
6 Прометей 4.11 Заббикс 54.76 мониторинг и 26.98
7 nginx 3.67 nginx 52.38 Прометей графана 23.81
8 опыт администрирования 3.37 графана 52.38 системы мониторинга 22.22
9 Заббикс 3.29 PostgreSQL 51.59 с докером 16.67
10 лось 3.22 Кубернетес 51.59 управление конфигурацией 16.67


Python-разработчик

Количество вакансий: 104 Типичная вакансия: 39705484
Знак с весом С Знак % 2 грамма %
1 на питоне 6.00 докер 65.38 на питоне 75.00
2 Джанго 5.62 Джанго 62.50 события в области 51.92
3 колба 4.59 PostgreSQL 58.65 опыт разработки 43.27
4 докер 4.24 колба 50.96 колба Джанго 24.04
5 события в области 4.15 Redis 38.46 отдых API 23.08
6 PostgreSQL 2.93 Linux 35.58 питон из 21.15
7 айоhttp 1.99 кроликMQ 33.65 базы данных 18.27
8 Redis 1.92 sql 30.77 опыт написания 18.27
9 Linux 1.73 монгодб 25.00 с докером 17.31
10 кроликMQ 1.68 айоhttp 22.12 с PostgreSQL 16.35


Специалист по данным

Количество вакансий: 98 Типичная вакансия: 38071218
Знак с весом С Знак % 2 грамма %
1 панды 7.35 панды 81.63 машинное обучение 63.27
2 бестолковый 6.04 бестолковый 75.51 панды 43.88
3 машинное обучение 5.69 sql 62.24 анализ данных 29.59
4 Питорч 3.77 Питорч 41.84 специалист по данным 26.53
5 мл 3.49 мл 38.78 знание питона 25.51
6 тензорный поток 3.31 тензорный поток 36.73 тупой, скучный 24.49
7 анализ данных 2.66 искра 32.65 панды питона 23.47
8 scikilearn 2.57 scikilearn 28.57 на питоне 21.43
9 специалист по данным 2.39 докер 27.55 математическая статистика 20.41
10 искра 2.29 хадуп 27.55 машинные алгоритмы 20.41


Фронтенд-разработчик

Количество вакансий: 97 Типичная вакансия: 39681044
Знак с весом С Знак % 2 грамма %
1 javascript 9.00 javascript 100 HTML CSS 27.84
2 Джанго 2.60 HTML 42.27 опыт разработки 25.77
3 реагировать 2.32 PostgreSQL 38.14 в разработке 17.53
4 nodejs 2.13 докер 37.11 знание яваскрипта 15.46
5 внешний интерфейс 2.13 CSS 37.11 и поддержка 15.46
6 докер 2.09 Linux 32.99 питон и 14.43
7 PostgreSQL 1.91 sql 31.96 CSS JavaScript 13.40
8 Linux 1.79 Джанго 28.87 базы данных 12.37
9 HTML CSS 1.67 реагировать 25.77 на питоне 12.37
10 php 1.58 nodejs 23.71 дизайн и 11.34


Бэкэнд-разработчик

Количество вакансий: 93 Типичная вакансия: 40226808
Знак с весом С Знак % 2 грамма %
1 Джанго 5.90 Джанго 65.59 питон Джанго 26.88
2 js 4.74 js 52.69 опыт разработки 25.81
3 реагировать 2.52 PostgreSQL 40.86 знание питона 20.43
4 докер 2.26 докер 35.48 в разработке 18.28
5 PostgreSQL 2.04 реагировать 27.96 CI компакт-диск 17.20
6 понимание принципов 1.89 Linux 27.96 уверенные знания 16.13
7 знание питона 1.63 серверная часть 22.58 отдых API 15.05
8 серверная часть 1.58 Redis 22.58 HTML CSS 13.98
9 CI компакт-диск 1.38 sql 20.43 способность понимать 10.75
10 внешний интерфейс 1.35 MySQL 19.35 в чужом 10.75


DevOps-инженер

Количество вакансий: 78 Типичная вакансия: 39634258
Знак с весом С Знак % 2 грамма %
1 девопс 8.54 девопс 94.87 CI компакт-диск 51.28
2 анзибль 5.38 анзибль 76.92 Баш питон 30.77
3 бить 4.76 Linux 74.36 опыт администрирования 24.36
4 Дженкинс 4.49 бить 67.95 и поддержка 23.08
5 CI компакт-диск 4.10 Дженкинс 64.10 Докер Кубернетес 20.51
6 Linux 3.54 докер 50.00 развитие и 17.95
7 докер 2.60 Кубернетес 41.03 опыт написания 17.95
8 Джава 2.08 sql 29.49 и настройка 17.95
9 опыт администрирования 1.95 оракул 25.64 развитие и 16.67
10 и поддержка 1.85 открытая смена 24.36 написание сценариев 14.10


Инженер данных

Количество вакансий: 77 Типичная вакансия: 40008757
Знак с весом С Знак % 2 грамма %
1 искра 6.00 хадуп 89.61 обработка данных 38.96
2 хадуп 5.38 искра 85.71 большие данные 37.66
3 Джава 4.68 sql 68.83 опыт разработки 23.38
4 улей 4.27 улей 61.04 знание sql 22.08
5 скала 3.64 Джава 51.95 развитие и 19.48
6 большие данные 3.39 скала 51.95 хадоп искра 19.48
7 этл 3.36 этл 48.05 Java Скала 19.48
8 sql 2.79 расход воздуха 44.16 Качество данных 18.18
9 обработка данных 2.73 Кафка 42.86 и обработка 18.18
10 Кафка 2.57 оракул 35.06 хадуп улей 18.18


Инженер QA

Количество вакансий: 56 Типичная вакансия: 39630489
Знак с весом С Знак % 2 грамма %
1 автоматизация тестирования 5.46 sql 46.43 автоматизация тестирования 60.71
2 опыт тестирования 4.29 ка 42.86 опыт тестирования 53.57
3 ка 3.86 Linux 35.71 на питоне 41.07
4 на питоне 3.29 селен 32.14 опыт автоматизации 35.71
5 разработка
Теги: #python #Исследования и прогнозы в ИТ #вакансии #кластеризация
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.