Турникеты
Проект выполнен в рамках участия в осенних треках Open Data Science, прошедших в сентябре-ноябре 2023 г.
Официальные сайты треков:
-
Pandas, Numpy, Random, Matplotlib, Seaborn, Datetime, Sklearn, Imblearn, CatBoost
-
Feature Engineering, Polynomial Features, SelektKBest, GridSearchCV, RandomizedSearchCV, Pipeline, OneVsRestClassifier, Confusion Matrix
Цель: на основе накопленных данных идентифицировать посетителя в зависимости от характерного времени его прохода на территорию организации, исключив вероятность передачи пропуска одним сотрудником другому. Таким образом необходимо исключить ситуации, когда один сотрудник прикладывает пропуск за другого, который даже не появляется в организации, но по цифровому следу присуствует на ее территории.
Для достижения цели выполнены следующие задачи:
-
проведен исследовательский анализ данных, выявлены характерные особенности, удалены выбросы и дубликаты;
-
с помощью Feature Engineering на основе признака 'ts' с информацией о дате и времени пересечения турникета сгенерировано 80 новых обучающих признаков. После проверки на мультиколлинеарность удалены 3 признака;
-
обучены модели LogisticRegression и CatBoost. Лучший результат получен на модели CatBoost, обученной с гиперпараметром loss_function = 'MultiClassOneVsAll'.
В техзадании на выполнение проекта оговорено ограничение: машинное обучение должно быть выполнено отдельно для:
-
линейной (логистической) регрессии
-
модели, основанной на решающем дереве
Решаемая в рамках проекта задача является задачей мультиклассификации.
(1) На основе признака ‘ts’, имеющего тип ‘datetime64’, с помощью Feature Engineering создано 80 признаков для обучения машинных моделей. Проведен анализ признаков на мультиколлинеарность, в результате которого удалено 3 признака.
(2) Модель LogisticRegression обучена с помощью Pipleline и без Pipeline c multi_class = ‘multinomial’ и ‘ovr’. Модели, обученные без Pipeline с multi_class = ‘multinomial’ и ‘ovr’ показали более высокий результат в сравнении с моделью, обученной с помощью Pipeline. Результат обучения указанных двух моделей оказался примерно одинаков.
(3) В качестве модели, основанной на решающих деревьях, была выбрана модель CatBoost, обученная с помощью Pipeline. Лучший результат показал запуск с loss_function = 'MultiClassOneVsAll', который был отправлен как итоговое решение.