Вопрос или проблема
У меня есть большой набор данных о действиях, выполняемых несколькими сотрудниками на фабрике в течение длительного времени – с 01/01/2017 до настоящего времени. Действия, выполняемые различными сотрудниками, фиксируются в каждый момент времени (поскольку они взаимодействуют с программным обеспечением). Я свел их в таблицу, чтобы зафиксировать количество действий, выполняемых каждым оператором за каждый день.
Моя таблица выглядит примерно так:
Дата Имя Действие Кол-воОбработанных Смена Команда
01/10/2017 MMouse Пайка 1000 Смена А Команда А
01/10/2017 MMouse Сварка 3000 Смена А Команда А
01/10/2017 DDuck Пайка 4000 Смена А Команда B
01/10/2017 DDuck Сварка 1000 Смена А Команда B
...
02/11/2017 MMouse Пайка 1100 Смена А Команда А
02/11/2017 MMouse Сварка 2900 Смена А Команда А
02/11/2017 DDuck Пайка 4010 Смена А Команда B
02/11/2017 DDuck Сварка 900 Смена А Команда B
Каждая строка представляет действия, выполняемые каждым оператором каждый день, когда они работали, и количество обработанных единиц во время каждого действия, а также классификатор смены и команды, членом которой был оператор (для простоты предположим, что это не меняется со временем).
Для краткости я опустил значения для Смены B, но по сути члены команды Смены B (обычно) будут работать в другие дни, чем Смена А, но доля выполняемых задач обычно будет похожа на соответствующую Команду в Смене А – Команду А или Команду B.
Проблема, которую я хочу решить: у меня есть дата, действие и количество обработанных единиц – а также различные другие переменные – для другого оператора, “GOofy”. Но я не знаю, в какой смене/команде работает г-н GOofy. Поэтому я использую данные для г-на MMouse и г-на DDuck (разумеется, в реальности для множества людей), чтобы попытаться обучить kNN корректно угадывать паттерн смены и команды для каждого Имени, учитывая поля Дата, Действие и Количество обработки, среди прочих.
Моя идея заключается в следующем:
а) Нет особой ценности в том, чтобы держать Команду и Смену отдельно, поэтому я должен создать объединенный столбец, который соединяет их оба
б) Если я создам отдельные столбцы для “Пайка”, “Сварка” и других действий, у меня будет количество обработанных единиц за каждый день для каждого действия по дате. Учитывая, что вид выполняемого действия (я предполагаю) является сильным предиктором комбинации смены/команды, я тогда смогу обучить распознавать смену/команду на основе как даты этой строки (возможно, преобразованной в числовую дату), так и относительных значений для каждой строки пайки, сварки и т. д.
Проблема в том, что при расширении на тестовый набор это даст мне предикторы только для каждого конкретного дня. Но я подозреваю, что дни работы также являются значимым предиктором, поэтому я хотел бы включить это также. Но я не уверен, как к этому подойти.
Два подхода, которые я могу придумать:
Вариант 1: использовать kNN для генерации оценок для смены/команды для каждой комбинации оператор/день, где переменными x будут дата, количество пайки и количество сварки за день, а затем подсчитать для каждого оператора долю раз “Смена А, Команда А”, “Смена А, Команда B” и т. д. были назначены этому оператору – так что если DDuck назначается “Смена А, Команда А” в 90% дней, это кажется наиболее вероятным, что DDuck действительно “Смена А, Команда А”.
Вариант 2: каким-то образом создать переменную, представляющую все отработанные дни для каждого оператора – хотя я не уверен, как это сделать – и создать набор, содержащий одну строку для каждого оператора.
Является ли какой-либо из этих подходов допустимым? Существует ли широко используемый альтернативный подход для этого?
Обратите внимание, что это не дубликат предыдущих вопросов, связанных с kNN и временными рядами, так как те касались прогнозирования, а я пытаюсь проанализировать ретроспективные данные.
Есть ли у вас больше числовых признаков? KNN работает на основе расстояний (евклидово, L1 и т.д.), что требует числовых данных. Он не принимает категориальные данные. Ваш признак действия не будет работать с KNN, и даже преобразование даты, скажем, в целое число просто создаст временной ряд, который не будет хорошо работать с KNN. Я думаю, вы неправильно подходите к этому. Попробуйте логистическую регрессию. Она примет как категориальные, так и числовые признаки.
Нет особой ценности в том, чтобы держать Команду и Смену отдельно, поэтому я должен создать объединенный столбец, который соединяет их оба.
Я бы построил две отдельные модели для команды и смены. Вы получите более высокую точность, потому что используете данные для прогнозирования меньшего количества классов и позволяете моделям специализироваться на каждой задаче.
В целом, я бы использовал логистическую регрессию, а не KNN. Это более подходящий способ для вашей проблемы. Надеюсь, это поможет.
.
Ответ или решение
Для решения задачи классификации смены и команды для оператора «GOofy» на основе временных рядов ваших данных, вы рассматриваете использование метода k-ближайших соседей (kNN). Однако, возможно, стоит рассмотреть другое решение, учитывая особенности ваших данных.
Преимущества и недостатки k-Nearest Neighbours (kNN):
Преимущества:
- Простота: kNN является довольно простым и интуитивно понятным методом, так как не требует обучения в явном виде.
- Наглядность: Хорошо подходит для данных с явным разделением классов, когда схожие образцы расположены близко друг к другу.
Недостатки:
- Чувствительность к масштабу: Метод kNN работает на расстояниях, таких как евклидово расстояние, что требует значительной обработки данных для масштабирования признаков.
- Проблемы с временными рядами: Временные ряды, особенно их сложные зависимости, могут быть сложно учтены без тщательной обработки данных.
- Категориальные данные: kNN менее эффективен для данных с несколькими категориальными признаками без их предварительной обработки в числовые значения.
Альтернативный подход: Логистическая регрессия
Логистическая регрессия может быть более подходящей для вашей задачи, поскольку она:
- Работает с категориальными признаками: Позволяет обрабатывать как числовые, так и категориальные данные.
- Более стабильна для временных данных: Хотя ни kNN, ни логистическая регрессия не являются методами прогнозирования для временных рядов, логистическая регрессия может лучше справляться с характеристиками временных данных благодаря своей возможности напрямую использовать временную метку как категориальный или порядковый признак.
- Специализация по категориям: Вы можете создать две модели — одну для смены, другую для команды. Это позволит каждой модели сосредоточиться на меньшем числе классов, что увеличит точность предсказаний.
Рекомендации по реализации:
-
Предварительная обработка данных:
- Создайте объединённый столбец для смены и команды, если это необходимо, для упрощения анализа.
- Преобразуйте категориальные признаки (например, имя, вид деятельности) в числовые, например, использованием метода One-Hot Encoding.
-
Модель логистической регрессии:
- Разделите вашу задачу на две: предсказание смены и команды отдельно.
- Используйте логистическую регрессию, чтобы выявить вероятности каждой смены и команды.
-
Оптимизация параметров модели:
- Используйте кросс-валидацию для оценки и улучшения производительности модели, регулируя такие параметры, как порог вероятности.
-
Анализ результатов:
- Проверьте результаты на наборе данных валидации или тестовом наборе, чтобы оценить точность и надёжность вашей модели.
Заключение
Таким образом, хотя метод k-ближайших соседей может показаться простым решением, для задач, связанных с временными рядами и категориальными данными, логистическая регрессия может предложить лучшие результаты и более интуитивно понятный процесс обработки данных. Внимательно обрабатывайте ваши данные и выбирайте методы, которые наилучшим образом соответствуют специфике задачи и типам данных, с которыми вы работаете.