Найти в Дзене
MaDeLa. IT - компания

Как Java-разработчику встроить машинное обучение в микросервис: кейс с полиномиальной регрессией

Всем привет! Меня зовут Роман, я - Java-разработчик, работаю на различных проектах, где часто сталкиваюсь с задачами интеграции аналитических инструментов в backend-приложения заказчиков. Иногда бизнес хочет "умную" аналитику, но без тяжёлых ML-фреймворков. Один из таких инструментов - полиномиальная регрессия. Полиномиальная регрессия представляет из себя один из простых, но при этом мощных инструментов анализа данных, позволяющий находить скрытые зависимости и моделировать нелинейные процессы. В бизнесе она применяется для прогнозирования продаж, оптимизации издержек, анализа спроса и выявления закономерностей, которые невозможно уловить с помощью линейных моделей. В этой статье разберём, как полиномиальная регрессия помогает компаниям принимать более точные решения и повышать эффективность процессов. Начнём с теории. Суть любого из видов регрессии заключается в моделировании зависимости между переменными при помощи уравнения. Помимо полиномиальной существует также и линейная регресс
Оглавление

Всем привет! Меня зовут Роман, я - Java-разработчик, работаю на различных проектах, где часто сталкиваюсь с задачами интеграции аналитических инструментов в backend-приложения заказчиков. Иногда бизнес хочет "умную" аналитику, но без тяжёлых ML-фреймворков. Один из таких инструментов - полиномиальная регрессия.

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

Начнём с теории. Суть любого из видов регрессии заключается в моделировании зависимости между переменными при помощи уравнения. Помимо полиномиальной существует также и линейная регрессия. Данный вид регрессии представляет из себя моделирование зависимости между переменными с помощью линейного уравнения. Пример построения линейной регрессии представлен далее

-2

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

Полиномиальная же регрессия основана на расширении линейной модели путем добавления в неё степенных членов (например, x², x³, ...), что позволяет аппроксимировать данные полиномом более высокой степени. Данный тип регрессии представляет собой более гибкий инструмент, способный моделировать сложные нелинейные отношения между переменными. Подходит в тех случаях, когда данные имеют нелинейный, криволинейный характер, который нельзя описать прямой линией, например, для моделирования экономических трендов или биологических процессов.

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

-3

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

Рассмотрим кейс прогноза спроса и продажи при помощи алгоритма полиномиальной регрессии. Предположим, компания продаёт товары, спрос на которые подвержен ярко выраженным сезонным колебаниям — например, одежда, бытовая техника или туристические услуги. Продажи растут в определённые месяцы года (зимние праздники, летний отпускной сезон), а затем снижаются в межсезонье.

Задача: построить модель, которая позволит прогнозировать будущий спрос с учётом этих нелинейных колебаний, чтобы оптимизировать закупки, складские запасы и рекламные кампании.

Решение с использованием полиномиальной регрессии:

1. Сбор данных. Берутся исторические данные о продажах за несколько лет, включая временные метки (месяцы, недели), дополнительные факторы (скидки, рекламные акции, внешние события).

2. Подготовка признаков. В качестве ключевого фактора берётся время (например, номер недели или месяца). Для учёта сезонных колебаний формируются дополнительные признаки — полиномиальные степени (t², t³ и т. д.), которые позволяют «изгибать» линию тренда под волнообразные колебания.

3. Построение модели. Применяется полиномиальная регрессия, которая строит кривую, наиболее точно повторяющую исторические данные с сезонными пиками и падениями.

4. Анализ результата. Модель выявляет не только общий тренд (например, рост продаж из года в год), но и повторяющиеся циклы (например, всплеск зимой и спад летом).

5. Прогнозирование. На основе полученной кривой компания может заранее рассчитать, когда стоит увеличить запасы на складе, активизировать рекламу или наоборот — снизить закупки, чтобы избежать излишков.

Практический эффект:

●      Снижение издержек за счёт оптимизации логистики и складских запасов.

●      Рост выручки за счёт своевременных маркетинговых кампаний.

●      Более точное понимание сезонных закономерностей спроса.

Теперь рассмотрим пример оптимизация ценообразования с помощью полиномиальной регрессии.

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

Задача: определить такую цену, при которой совокупная прибыль (доход от продаж минус издержки) будет максимальной.

Решение с использованием полиномиальной регрессии:

1. Сбор данных. Фиксируются исторические данные: цена продукта, объём продаж при каждой цене и полученная выручка.

2. Моделирование эластичности спроса. При помощи полиномиальной регрессии строится функция зависимости спроса от цены. Линейная модель здесь не подойдёт, так как спрос обычно меняется «по кривой», а не по прямой.

3. Построение кривой прибыли. Учитывая себестоимость, рассчитывается прибыль при каждой цене. Полиномиальная регрессия помогает выявить форму этой зависимости и определить её максимум.

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

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

Практический эффект:

●      Увеличение прибыли за счёт точной настройки цен.

●      Минимизация рисков недооценки или переоценки продукта.

●      Возможность проводить сценарный анализ (например, «Что будет, если снизить цену на 10%?»).

Полиномиальная регрессия в backend-системах: реализация на Java

В большинстве статей по машинному обучению мы видим реализацию моделей на Python — с использованием Scikit-learn, TensorFlow или PyTorch. Это отличные инструменты, особенно когда речь идёт о сложных задачах, больших объемах данных и необходимости переобучать модели в реальном времени.

Но часто в реальных IT-проектах возникает совсем другой запрос:

“А можно ли встроить простую ML-модель прямо в Java-сервис? Без отдельного Data Science-стека, без Python, без TensorFlow?”

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

Когда такой подход уместен?

Полиномиальная регрессия подходит, если:

●      у вас есть исторические данные, например: спрос по неделям, цены, количество заказов и т.д.;

●      между данными есть нелинейная, но устойчивая зависимость;

●      вы хотите вшить аналитику прямо в backend-сервис (например, API, считающее прогноз на основе заданных параметров);

●      нет смысла городить полноценный ML-стек ради простой задачи.

Но есть и ограничения

Важно понимать: полиномиальная регрессия — не магия и не замена полноценным ML-моделям. У такого подхода есть слабые места:

●      Он плохо работает с большим количеством признаков (факторов) — максимум 1–2 переменные, иначе модель становится шумной.

●      Он не умеет обучаться по ходу работы — модель нужно пересчитывать заново при изменении данных.

●      Он не справляется с резкими “скачками” или аномалиями — кривая слишком сглаживает.

Если вы строите рекомендательную систему, работаете с изображениями, текстами или строите персональные прогнозы под каждого пользователя, тогда надо выбрать другой подход.

Но если задача состоит в прогнозировании спроса на короткий интервал времени на основе имеющейся статистики, то решение можно написать на Java.

Допустим, у нас есть исторические данные по заказам за 10 недель:

-4

Сначала был рост, потом — спад. Такая волнообразная зависимость — классический случай для полиномиальной регрессии. Построим прогноз для 11-й недели.

Шаг 1. Подключаем библиотеку

Apache Commons Math - лёгкая и удобная библиотека, отлично подходит для наших целей.

Добавим зависимость в pom.xml :

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>

Пишем код:

import org.apache.commons.math3.fitting.PolynomialCurveFitter;
import org.apache.commons.math3.fitting.WeightedObservedPoints;
public class ForecastExample {
public static void main(String[] args) {
// Исторические данные: (неделя, количество заказов)
WeightedObservedPoints points = new WeightedObservedPoints();
points.add(1, 120);
points.add(2, 140);
points.add(3, 160);
points.add(4, 180);
points.add(5, 220);
points.add(6, 210);
points.add(7, 200);
points.add(8, 170);
points.add(9, 150);
points.add(10, 130);
// Создаём модель 2-й степени (x²)
PolynomialCurveFitter fitter = PolynomialCurveFitter.create(2);
double[] coefficients = fitter.fit(points.toList());
// Строим прогноз на 11-ю неделю
double week = 11;
double predictedOrders = coefficients[0] + coefficients[1] * week + coefficients[2] * week * week;
System.out.printf("Прогноз количества заказов на 11-ю неделю: %.0f%n", predictedOrders);
}
}

Получаем результат:

Прогноз количества заказов на 11-ю неделю: 84

Программа показывает, что в 11-ю неделю ожидается падение спроса — и это уже повод заранее запустить скидки или снизить закупки. Всё это — без Python, TensorFlow, моделей и обучения: просто данные, немного математики и Java.

Такой подход отлично работает для:

●      Прогноза спроса

●      Планирования запасов

●      Ценообразования

●      Отображения трендов на графиках

Но если вы хотите рекомендовать товары, предсказывать поведение пользователей или находить аномалии — нужно идти дальше: в сторону Python, TensorFlow и большой аналитики.

Полиномиальная регрессия — только один из инструментов, которые мы применяем в MaDeLa. Мы знаем, как адаптировать аналитику под ваш бизнес и встроить её в IT-системы без лишней сложности. Напишите нам — обсудим решение для вашей компании.