Время прочтения: 2 мин.
Мы постоянно сталкиваемся с тем что строим планы как правильно и быстро выстроить нашу работу таким образом, чтобы она затрачивала меньше ресурсов времени и сил.
Для бизнеса важны сроки выполнения тех или иных задач для принятия каких-либо решений, возьмем для примера сроки выполнения технических заявок. Зная точное время выполнения технических заявок, бизнес может на этапе внедрения процесса принять экономические и стратегически эффективные решения.
Для решения задачи предсказания сроков выполнения технических заявок оптимальным методом является машинное обучение. За основу возьмем исторические данные — архив периодом 2 года. Первый этап – выгрузка данных из БД. Далее необходимо произвести подготовку данных. Наш dataset содержит более 40 фич (Пример dataset размещен по ссылке на GitHub). Фичи необходимо перевести в числовые признаки, способов решения данной задачи множество, мы же пошли простым путём, так как фич, которые содержат текстовое-справочное представления данных немного, создали словари со справочной информацией и присвоили ключам (текстовым представлениям) числовое значение.
Для более явного проявления зависимости начала выполнения и всех остальных фич с датой закрытия заявки были созданы новые фичи на основе даты предполагаемого закрытия и на основе даты открытия заявки.
sd_open_year_v # год
sd_open_month_v # месяц
sd_open_day_v # день
sd_open_qwart_v # квартал
sd_open_qwart_in_month_v # месяц в квартале
sd_open_weekday_v # неделя
sd_open_time_in_day_v # время открытия в сутках
good_day_after_v # рабочих дней после текущей даты
good_day_before_v # рабочих дней до текущей даты
mmmsc = sm_table['open_v'].agg(['min', 'max', 'mean', 'median', 'std', 'count']).add_prefix('open_')
mmmsc_name = ['min_v', 'max_v', 'mean_v', 'median_v', 'std_v', 'count_v']
for x in range(len(mmmsc)):sm_table['open_'+mmmsc_name[x]]=round(mmmsc[x],5)
Используем библиотеку XGBoost — одну из самых популярных и эффективных реализаций алгоритма градиентного бустинга на деревьях. Для обучения возьмем библиотеку xgboost – модель XGBRegressor, но предварительно нормализовав данные и делим на обучающую и тестовую выборки.
scale = MinMaxScaler()
train_t = scale.fit_transform(train)
test_t = scale.fit_transform(test)
model = XGBRegressor()
mname = model.__str__().split('(')[0]
model.fit(train_t,label_train.to_numpy())
Итоговый результат показал достаточно реалистичный прогноз – 93 % точности. На данный момент рассматриваем возможность обогащения dataset данными из других источников.