Время прочтения: 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 данными из других источников.