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

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

Широкое распространение в последние годы получили программы, которые пытаются предсказать, какие объекты будут интересны пользователю, имея определенную информацию о его профиле. До 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/


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

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

Выгрузка пользователей из 1C ЗУП в Битрикс24 или правдивая история о том как настроить интеграцию 1С-Битрикс24 с ЗУП без 1С-ника В жизни так бывает, причём бывает чаще чем хотелось б...
В обзоре представлены направления научно-исследовательских и опытно-конструкторских работ, которые активно проводятся в настоящее время во многих странах с целью поиска т...
Приветствую вас, глубокоуважаемые! «Если в ответ на запрос свой-чужой ответить неправильно, второй запрос придет уже на 533-ей частоте» (С) «Все это идет как-то мимо вас. Или сквозь вас. А по м...
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
Всем привет! Меня зовут Сергей Костанбаев, на Бирже я занимаюсь разработкой ядра торговой системы. Когда в голливудских фильмах показывают Нью-Йоркскую фондовую биржу, это всегда выглядит ...