Проект машинного обучения от А до Я!

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

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

Код: Скачать с Github Нажмите здесь

Набор данных: загружен с Kaggle. "Кликните сюда"

[Вопрос/постановка проблемы] В этом проекте мы ориентируемся на мнения сотрудников о компаниях, в которых они работали или продолжают работать; выяснить, как различаются мнения, когда сотрудники работают в компании и когда они покидают компанию. Кроме того, эти мнения можно использовать для классификации статуса занятости сотрудников, например, нынешний сотрудник (метка-0) или бывший сотрудник (метка-1). Я использовал алгоритмы машинного обучения, чтобы выяснить, являются ли сотрудники бывшими или нынешними сотрудниками компании, в зависимости от отзывов, которые они дали. Пожалуйста, проверьте код, чтобы следовать дальше.

Название проекта. Статус сотрудника (бывший или действующий) классификация на основе отзывов сотрудников о компании

Проект разделен на 4 основные части:

  • Предварительная обработка данных и исследовательский анализ
  • Эксперимент 1: Прогнозное моделирование только с числовыми данными
  • Эксперимент 2: Прогнозное моделирование только с текстовыми данными
  • Эксперимент 3. Прогнозное моделирование с числовыми и текстовыми данными

Этот проект разработан с нуля, уделяя особое внимание каждому этапу проекта машинного обучения. Он состоит из следующих шагов:

А. Предварительная обработка данных

  • Дисбаланс классов
  • Разделение функций
  • Очистка данных
  • Обработка пропущенных значений
  • Разработка функций
  • Предварительная обработка текста с помощью NLP
  • Преобразование категорийных признаков в числовые
  • Стандартизация данных

Б. Обучение и выбор модели с использованием перекрестной проверки в K-кратном размере

  • K-кратная перекрестная проверка
  • Разделение между поездами и тестами
  • Выбор модели

Используемые модели — фиктивный классификатор (базовая линия); Логистическая регрессия; Классификатор линейных опорных векторов (SVC); Классификатор дерева решений; K-классификатор соседей; Полиномиальный наивный байесовский метод;

Ансамбль/мета-моделирование — ADABoost, классификатор пакетов, классификатор случайного леса, классификатор голосования

С. Оценка модели – точность, точность, полнота, показатель F1, AUC

Д. Статистическое тестирование — парный t-критерий

Е. Тонкая настройка модели для повышения производительности

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

Взгляните на данные:

А. Предварительная обработка данных

Набор данных содержит более 67 тысяч отзывов сотрудников Google, Amazon, Facebook, Apple и Microsoft, взятых из Glassdoor. Исходный набор данных содержит 17 функций, которые содержат как числовые (рейтинги), так и текстовые данные (комментарии обратной связи).

  • Дисбаланс классов.Дисбаланс классов — очень распространенная проблема при решении проблемы классификации в машинном обучении. Поскольку мы рассматриваем «job_status» в качестве нашей целевой метки для классификации, нам необходимо рассмотреть, равномерно ли распределены все классы «job_status» в наборе данных. Наш набор данных имеет 2 категории «job_status», а именно «current_employee» и «exer_employee», и мы обнаружили, что «current_employee» имеет значительно большее количество экземпляров (~ 42 тыс.), чем «бывший_сотрудник» (~ 24 тыс.). Разница между количеством экземпляров для двух меток классов превышала 15 000, и это может привести к необъективной модели. Конечно, есть много решений этой проблемы, но для нашего набора данных недостаточное количество выборок будет работать нормально. Мы случайным образом выбрали 20 000 экземпляров из обоих классов и создали сбалансированный набор данных.

  • Разделение функций. Наш набор данных уникален, поскольку содержит три категории типов данных — числовые, категориальные и текстовые данные. Я выбрал этот набор данных, потому что он сложен для предварительной обработки, но в то же время дает больше опыта с точки зрения предварительной обработки данных и построения различных моделей. Кроме того, существует множество алгоритмов машинного обучения, которые хорошо работают с числовыми данными, в то время как есть другие алгоритмы машинного обучения, которые лучше работают с текстовыми данными. Таким образом, тип алгоритмов, которые мы выбираем, зависит от характера данных. Разнообразие в контексте нашего набора данных делает целесообразным разделение текстовых и числовых данных и проведение с ними различных экспериментов. На этом этапе данные были разделены по вертикали на текстовые и числовые данные для дальнейшего изучения, обработки и прогнозного моделирования.
  • Предварительная обработка текста — мы можем извлечь из текста ключевые характеристики, такие как количество слов, средняя длина слова, частота слов, TF-IDF и т. д., путем исследования данных. Пожалуйста, следуйте приведенным ниже статьям, чтобы узнать о предварительной обработке текстовых данных и извлечении функций, а также об интуиции, стоящей за извлечением этих функций.




Текстовые и числовые данные предварительно обрабатываются отдельно. В следующих разделах выполняется предварительная обработка числовых данных.

Предварительная обработка числовых и категориальных данных —

  • Вменение отсутствующих значений и преобразование функций — в числовые данные. В нашем наборе данных есть рейтинги, такие как рейтинги баланса между работой и личной жизнью, культура, рейтинги ценностей и т. д., данные нынешними или бывшими сотрудниками разных компаний. Мы обнаружили, что в этих рейтингах отсутствуют значения. Отсутствующие значения следует обрабатывать осторожно, и метод обработки варьируется от данных к данным с учетом контекста. Поскольку эти рейтинги были порядковыми по своей природе, мы заменяем пропущенные значения числовым значением «2,5» (средний рейтинг). Причина, по которой мы выбрали «2,5», заключается в том, что он не слишком высок и не слишком низок и, следовательно, не окажет существенного влияния на наши модели, и мы потенциально можем избежать систематических ошибок.
  • Мы также обнаружили, что наш набор данных содержит категориальные данные, и мы хотим преобразовать их в числовые данные. Например, «компания» имеет 6 различных категорий, поэтому мы можем использовать фиктивное кодирование, которое сопоставляет сотрудников с их соответствующими компаниями. Как это работает, значение «1» будет установлено, если сотрудник работает или работал в этой конкретной компании, а остальные будут установлены на «0». На рис. 4 показан фрагмент нашего фиктивного метода кодирования. Для других категориальных характеристик, таких как «местоположение» и «должность», мы можем заменить категориальные данные их соответствующим частотным распределением, которое представляет собой числовые данные. Формула, используемая для распределения частот:

Распределение частоты для признака A = сумма (∀x в A)/сумма (все различные значения в признаке A)

Извлечение функций — числовые данные.Некоторые функции в нашем наборе данных содержат значения, которые можно разделить и сформировать новые собственные функции. Одной из таких функций является «Дата», где мы разделили ее значения и сформировали 3 новые функции, а именно «Почтовый месяц», «Почтовый год» и «Почтовый день». Другим таким столбцом является «Название должности», которое имеет формат — «Текущий/бывший сотрудник» — «Название должности». Два примера: Текущий сотрудник — инженер-программист и Текущий сотрудник — менеджер. Поэтому мы разделили статус работы «Текущий/бывший сотрудник» и название должности на два столбца: job_status и назначение.

Преобразование целевой переменной —job_status — это цель, которая преобразуется из категориальных в числовые значения путем присвоения значений 0 и 1. Мы обнаружили, что использование job_status в качестве цели label будет наиболее подходящим по отношению к имеющемуся у нас набору данных. Текущий сотрудник = 0, бывший сотрудник = 1

Стандартизация данных.Поскольку наше входное пространство имеет диапазон значений от 0 до 3000 (полезный подсчет), мы решили применить стандартизацию данных, в результате чего данные будут находиться в диапазоне от 0 до 1. В противном случае переменные могут не вносить одинаковый вклад в модель, и могут преобладать более высокие значения. Это можно легко сделать с помощью функции Scikit-learn MinMaxScaler.

Б. Обучение и выбор модели с использованием перекрестной проверки в K-кратном размере

Пожалуйста, обратитесь к приведенному ниже сообщению для упрощенного разделения поезд-теста, проверки k-cross, точности, точности, отзыва и F1-Score!



В этом проекте мы использовали 10-перекрестную проверку. Набор данных был разделен на 10 наборов; модели обучались 10 итераций; в каждой итерации использовалось 9 наборов (90% данных) для обучения и 1 набор (10%) для тестирования. Модели, используемые для проверки k-cross:

Фиктивный классификатор (базовая линия); Логистическая регрессия; Классификатор линейных опорных векторов (SVC); Классификатор дерева решений; K-классификатор соседей; Полиномиальный наивный байесовский метод;

Ансамбль/мета-моделирование — ADABoost, классификатор пакетов, классификатор случайного леса, классификатор голосования

Эксперимент 1.Прогнозное моделирование для числовых данных.Для построения нашей модели мы внедрили шесть моделей, т. е. линейный классификатор, модель на основе дерева, модель на основе расстояния и модель на основе правил. , Вероятностная модель и Ансамбли. Набор числовых данных имеет 18 функций, которые стали нашими входными данными для моделей, а «job_status» — в качестве целевой метки. В разделе ниже представлено краткое описание каждой модели и ее производительности на числовых данных.

Кросс-проверка числовых данных. На приведенном ниже рисунке показана точность различных моделей машинного обучения, протестированных на наших числовых данных. Как мы видим здесь, классификатор дерева решений показал лучшие результаты с точностью 73,7% при 10-кратной перекрестной проверке, в то время как фиктивный классификатор показал худшие результаты с точностью всего 49,7%, что очень похоже на случайное угадывание. Исходя из этого, мы решили применить сборку в нашем классификаторе дерева решений, который, как мы надеемся, даст лучшую производительность по показателю точности.

Ансамбль. Ансамбли используются для повышения производительности различных моделей, уменьшения склонности к переоснащению, а также для увеличения разнообразия стилей обучения. Мы использовали 10 деревьев решений для случайного леса, а для бэггинга — 20 деревьев решений. Для повышения AdaBoost использовал 10 деревьев решений. На рисунке ниже показана точность использованных нами ансамблевых методов. Три ансамблевые модели не имели существенной разницы в своих показателях точности в диапазоне от 73% до 75%.

Теперь, чтобы проверить точность, отзыв, оценку f1 и поддержку, набор данных был разделен на 2 части: 80% в качестве обучающего набора и 20% в качестве тестового набора.

Также использовался пользовательский классификатор голосования, который по сути представляет собой мета-мета-модель, состоящую из AdaBoost, классификатора Bagging и Random Forest. Голосование было установлено «жестким», чтобы голосование проводилось по меткам, а не по вероятностям. Классификатор был применен к набору данных (8/10 частей обучения и 2/10 частей тестирования) и была измерена точность. На рисунке ниже показана точность с оценкой f1, поддержкой, точностью и отзывом пользовательского классификатора голосования.

Из всех четырех ансамблевых моделей и метки класса «current_employee» у AdaBoost самый высокий показатель точности, т. е. 0,74, у Random Forest самый высокий отзыв, т. е. 0,77, в то время как у Random Forest и пользовательского классификатора голосования самый высокий показатель f1, т. е. 0,75. Для метки класса «бывший_сотрудник» Random forest имеет наивысшую оценку точности, т. е. 0,76, AdaBoost с наивысшей полнотой, т. е. 0,73, и пользовательский классификатор голосования с наивысшей оценкой f1, т. е. 0,74, а остальные — 0,73. Что касается общей точности, классификатор голосования показал лучшие результаты с точностью 74%.

AUC (площадь под кривой) для ансамблей. Наконец, для числовых данных мы рассчитали AUC, и здесь мы видим, что пользовательский классификатор имеет самое высокое значение AUC со значением 0,74146 . Судя по визуальным наблюдениям, все они работают почти одинаково, но пользовательский классификатор голосования здесь победитель, а Random Forest — на втором месте!

Эксперимент 2: Прогнозное моделирование для текстовых данных.Последними функциями, выбранными после обработки текста, были рассчитанный TF-IDF для обратной связи, средняя длина слова и количество слов обратной связи, которые стал входным пространством с «job_status» в качестве целевой метки. Для выбранных функций мы запустили наши четыре модели: логистическую регрессию и линейный SVC (классификатор опорных векторов), полиномиальный наивный байесовский классификатор и классификатор случайного леса с 5-кратной перекрестной проверкой. На рисунке ниже показана средняя точность четырех моделей. Судя по результатам, логистическая регрессия работала лучше, чем другие модели. Однако с текстовыми функциями нам не удалось добиться значительной точности!

Эксперимент 3: Прогнозное моделирование на комбинированных данных и выбранных моделях. Для прогнозного моделирования на комбинированном наборе данных — числовые + текстовые функции, мы выбрали все функции для числового набора данных и три функции для набора текстовых данных, а именно «feedback_word_count», «avg_word_length» и «sentiment_score». В целом, окончательное входное пространство содержало 22 объекта с 40 000 экземпляров без дисбаланса классов. Целевая метка осталась прежней с функцией «job_status» для классификации.

Функция «оценка настроений» была изменена в диапазоне от 0 до 1, поскольку она содержит отрицательные значения, а мультиномиальный наивный байесовский метод не может работать с отрицательными значениями. Опять же, ко всем моделям была применена 10-кратная перекрестная проверка с отслеживанием показателя точности. Мы обнаружили, что классификатор дерева решений работает лучше, чем другие модели.

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

AUC (площадь под кривой) для ансамблевых моделей. Мы рассчитали AUC, и здесь мы видим, что случайный лес имеет самый высокий AUC со значением 0,7399 для нашего набора данных.

F. Статистическое тестирование

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

С уровнем значимости α = 0,05; все найденные нами значения p были меньше 0,05, поэтому мы отвергаем нулевую гипотезу. Это означает, что существует значительная разница между результатами алгоритма. Поэтому мы выбираем Random Forest в качестве окончательной модели для будущих прогнозов.

G. ПОСЛЕДСТВИЯ И БУДУЩАЯ РАБОТА

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

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

Ваше здоровье! Пишите комментарии, если нужно больше разъяснений по какой-либо части :)