Шаги построения рекомендательной системы в обучении персонала

от автора

Широкое распространение в последние годы получили программы, которые пытаются предсказать, какие объекты будут интересны пользователю, имея определенную информацию о его профиле. До 2006 года такие алгоритмы не пользовались популярностью. Но все изменилось осенью 2006 года, когда компания Netflix предложила разработчикам 1 000 000$ за лучший алгоритм предсказания. Конкурс продлился 3 года.

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

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

Почему?

Рекомендательные системы – это современный пример успешного IT-инструмента для понимания интересов и предпочтений другого человека. В данном случае не важно знакомы вы или нет, работаете в одной компании или находитесь в разных уголках Земли. Любая рекомендательная система учится понимать человека на основании имеющейся о нем исходной информации у машины. Чем больше такой инфо, тем больше шансов, что проект будет интересен и не потеряет интерес своей аудитории.

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

Существует три основных класса рекомендательных систем

1.      Content-based filtering (фильтрация контента).

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

2.      Collaborative filtering (коллаборативная фильтрация).

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

3. Гибридные системы, комбинирующие предыдущие подходы.

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

Почему?

•      Модель работает в режиме офлайн. Система ориентирована на долгосрочный периметр изменений в предпочтениях Users. Как правило, такие изменения имеют под собой более весомые причины, чем сиюминутные предпочтения Users.

•      Отсутствуют оценки учебных курсов. В классическом варианте источником информации об учебном курсе для его включения в периметр рекомендаций служит средняя оценка (для ее формирования каждый сотрудник по окончании обучения выставляет курсу оценку в границах заданной шкалы). Чем выше средняя оценка, тем выше шанс, что курс будет рекомендован. Однако оценки есть не всегда…

•      Достаточное количество features (кроме оценок) для поиска похожих Users.

Критериями поиска похожих Users внутри компании могут выступать:

•      должность / грейд (значение определено диапазоном);

•      вертикаль / направление работы сотрудника;

•      схожесть истории обучения;

•      квалификация (например, Data Analist, Data Engineer, Data Scientist);

•      возраст (вся численность сотрудников разделена на группы с заданным интервалом);

•      стаж (вся численность сотрудников разделена на группы с заданным интервалом).

Количество похожих Users и количество рекомендованных курсов также следует ограничить.

В нашей компании был опыт разработки MVP рекомендательной системы обучающих курсов, для включения в План развития сотрудников. Рекомендации формировались на основы матрицы корреляции Пирсона. Критериями поиска похожих Users выступали:

·         должность (-1, +2);

·         направление работы – поиск был настроен по штатной принадлежности сотрудников к идентичному подразделению в разных филиалах России;

·          схожесть истории обучения – похожими были установлены курсы по идентичности наименования;

·         квалификация – в рамках нашей компании выделены только сотрудники категории Data Scientist;

·         возраст – все сотрудники компании разделены на группы в интервале 5 лет (весь возрастной диапазон находится в промежутке от 20 лет и до 65);

·         стаж — все сотрудники компании разделены на группы в интервале 5 лет.

Количество похожих Users – 3 человека.

Количество рекомендованных курсов – 6 курсов (по 2 от каждого похожего User).

Язык построения алгоритма рекомендательной системы – Python.

На первом этапе код отрабатывает исходные данные (DataSet), например, штатная численность компании в разрезе ФИО, история обучения каждого сотрудника и обязательно информация для отработки критериев поиска похожих Users.

На втором этапе код формирует матрицу корреляции и для каждого User машина подбирает 3 наиболее похожих Users по параметрам из списка выше.

# Проходим по строкам DataSet for row in df:     corrMatr = df.corrwith(df[row])  # Функция корреляции матрицы     corrMatr = pd.DataFrame(corrMatr)     tempMatr = corrMatr  # Временная матрица     tempMatr = tempMatr.drop([row], axis=0)     li = list()     li2 = list()     print(row)     k = 0     while k < 6:         if len(tempMatr) == 0:  # Если количество строк tempMatr равно 0, выходим из цикла while             break         name = tempMatr.idxmax().item()  # Значение по индексу первого появления максимума в строке         dp = df3[df3['Tab'] == name].set_index('Tab')  # Получаем те строки из таблицы Обучение,             # в которых значение столбца Tab равно name         if name not in li2 and ((df[name]['pos'] <= df[row]['pos'] + 2 and df[name]['pos'] >= df[row]['pos'])):             # Если сотрудник еще не рассмотрен и подходит по должности             li2.append(name)             col_dp = dp.columns.tolist()  # Список столбцов рассматриваемого DataFrame             random.shuffle(col_dp)  # Перемешиваем строки             for yy in col_dp:  # Проходим по ним                 if pd.DataFrame(df3[df3['Tab'] == name][yy]).reset_index()[yy][0] == 1 and \                     pd.DataFrame(df3[df3['Tab'] == row][yy]).reset_index()[yy][0] == 0 and \                         yy not in li and yy in df777['Курсы'].tolist():                     # Если курс еще не был включен в список предложенных                     recList.append([row, name, yy,                                     pd.DataFrame(df4[df4['Tab'] == row]['TB']).reset_index()['TB'][0], \                                     pd.DataFrame(df4[df4['Tab'] == name]['TB']).reset_index()['TB'][0], \                                     pd.DataFrame(df4[df4['Tab'] == row]['FIO']).reset_index()['FIO'][0], \                                     pd.DataFrame(df4[df4['Tab'] == name]['FIO']).reset_index()['FIO'][0]])                     k += 1                     li.append(yy)                     # Удаляем рассмотренного сотрудника из tempMatr                     tempMatr = tempMatr.drop([tempMatr.idxmax().item()], axis=0)                     break  # Выходим из цикла for         else:  # Удаляем рассмотренного сотрудника из tempMatr             tempMatr = tempMatr.drop([tempMatr.idxmax().item()], axis=0) # Заполняем результирующий DataFrame и выгружаем его в Excel recomendations = recomendations.append(recList, ignore_index=True) recomendations.to_excel('итог.xlsx')

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

На третьем этапе важно организовать доведение рекомендаций в удобном для сотрудника формате. К возможным и доступным формам корпоративного информирования можно отнести:

·         персональные рекомендации в личном кабинете сотрудника (например, на корпоративном портале или образовательной корпоративной платформе);

·         персональная рассылка писем по корпоративной почте.

Наша команда разработчиков остановились на использовании корпоративной почты.

Данный алгоритм рекомендаций был внедрен в пилотном режиме (на протяжении одного квартала). Созданный MVP достиг поставленного руководством целевого значения конверсии в 25%, что позволяет признать его успешным и готовым к внедрению в пром.

ссылка на оригинал статьи https://habr.com/ru/post/544340/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *