Сопоставление нового набора данных с заранее определёнными наборами.

Вопрос или проблема

У меня есть наборы данных, описывающие уровни требований, необходимых для определенных задач. Вот табличный пример:
введите описание изображения здесь

Обратите внимание, что значения данных находятся в диапазоне от 0 до 10.

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

  • Анализ –> 8.5
  • Терпение –> 5
  • Понимание –> 7
  • Коммуникация –> 7.5
  • Креативность –> 8

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

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

Вам не нужно машинное обучение для этого.

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

Вектор с наименьшей величиной будет соответствовать наиболее подходящей задаче.

В продолжение моего вопроса и после некоторых исследований я нашел программный подход с использованием Python в этой теме https://stackoverflow.com/questions/32446703/find-closest-vector-from-a-list-of-vectors-python

Он в основном описывает способ использовать библиотеку scipy в Python.
Подход довольно простой: вы вводите набор векторов, создаете KDTree и, наконец, запрашиваете дерево с входным вектором. Но возникает одно неудобство: входной вектор должен быть такой же длины, как и другие векторы, поэтому требуется предварительная обработка.

Используемый код:

>>> from scipy import spatial
>>> A = [[0,1,2,3,4], [4,3,2,1,0], [2,5,3,7,1], [1,0,1,0,1]]
>>> tree = spatial.KDTree(A)
>>> tree.query([0.5,0.5,0.5,0.5,0.5]) (1.1180339887498949, 3)

Учитывая ответ Vincenzo Lavorini, ниже приведен код на Python для нахождения задачи, ближайшей к способностям сотрудника:

import numpy as np

# Пусть tt будет списком задач, а ee - сотрудником:
tt = [[0,1,2,3,4], [4,3,2,1,0], [2,5,3,7,1], [1,0,1,0,1]]
ee = [0.5,0.5,0.5,0.5,0.5]

# Преобразуем в numpy массив:
tt = np.array(tt)
ee = np.array(ee)

# Находим разницу между каждой задачей и сотрудником:
res = tt - ee
print(res)

Результат:

[[-0.5  0.5  1.5  2.5  3.5]
 [ 3.5  2.5  1.5  0.5 -0.5]
 [ 1.5  4.5  2.5  6.5  0.5]
 [ 0.5 -0.5  0.5 -0.5  0.5]]

Находим общие отличия:

res = [np.sum(x) for x in res]
print(res)

Результат:

[7.5, 7.5, 15.5, 0.5]

Находим номер индекса задачи с минимальным общим различием, используя numpy.argmin:

print("Номер задачи, наиболее подходящей для этого сотрудника:", np.argmin(res))

Результат:

Номер задачи, наиболее подходящей для этого сотрудника: 3

Результат совпадает с результатом кода scipy spatial.

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

Ответ или решение

Сопоставление новых данных с предопределенными наборами: Подход и реализация

Введение

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

Определение проблемы

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

  • Анализ: 8.5
  • Терпение: 5
  • Понимание: 7
  • Коммуникация: 7.5
  • Креативность: 8

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

Математическая модель

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

Программная реализация

Для реализации данной концепции можно использовать язык программирования Python и библиотеку NumPy. Пример кода может выглядеть следующим образом:

import numpy as np

# Пример требований к задачам
tasks = np.array([
    [8, 6, 7, 9, 5],
    [5, 7, 6, 8, 2],
    [7, 5, 9, 3, 8],
    [9, 7, 5, 6, 4]
])

# Навыки сотрудника
employee_skills = np.array([8.5, 5, 7, 7.5, 8])

# Разница между требуемыми навыками и навыками сотрудника
difference = tasks - employee_skills

# Вычисляем общую разницу по каждому набору требований
total_difference = np.linalg.norm(difference, axis=1)

# Находим индекс задачи с наименьшей разницей
best_task_index = np.argmin(total_difference)

print(f"Задача с наилучшим соответствием: {best_task_index + 1}, Разница: {total_difference[best_task_index]:.2f}")

Импутация пропущенных данных

В случае отсутствующих данных по определенным навыкам сотрудников можно использовать методы импутации для заполнения пустых значений. Один из популярных способов — это метод множественной импутации через цепочные уравнения (MICE). Такой подход позволит более точно определить навыки сотрудника исходя из имеющейся информации.

Заключение

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

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

Капча загружается...