Кейс 1. Оценка стоимости квартиры по параметрам
Этот кейс – классика, но не учебная абстракция. В таком виде он реально используется во внутренних сервисах агентств недвижимости, банков и девелоперов. Его просто объяснить бизнесу, он интуитивно понятен и при этом отлично показывает, как работает линейная модель на практике.
Мы попробуем решить задачу двумя способами: сначала"чистым" PHP, чтобы было видно всю математику, а затем с помощью готовой библиотеки.
Суть кейса
Есть квартира, описанная набором числовых параметров. По этим параметрам нужно оценить её стоимость.
Мы используем следующие признаки (можно и больше, но для этого примера ограничимся только нижеуказанными):
площадь квартиры в квадратных метрах
этаж
расстояние до центра города в километрах
возраст дома в годах
Цель – предсказать цену квартиры в рублях.
С точки зрения машинного обучения это обычная задача регрессии: по вектору признаков нужно предсказать одно числовое значение.
Почему это хороший кейс
Во-первых, его легко обсуждать с бизнесом. Любой человек интуитивно понимает, что цена квартиры растёт с увеличением площади и падает с удалением от центра.
Во-вторых, линейность здесь часто оказывается достаточным приближением. Да, реальный рынок сложнее, но для первичной оценки или внутренней аналитики линейная модель работает удивительно хорошо.
В-третьих, этот кейс позволяет интерпретировать веса модели. Например:
"+$1000 за каждый дополнительный квадратный метр" или "−$500 за каждый километр от центра". Для бизнеса это огромный плюс по сравнению с "чёрным ящиком".
Формализация задачи
Каждая квартира описывается вектором признаков:
Где:
– площадь
– этаж
– расстояние до центра
– возраст дома
Модель линейной регрессии имеет вид:
Здесь – предсказанная цена квартиры.
Реализация на чистом PHP
Начнём с варианта без библиотек. Это полезно не для продакшена, а для понимания.
Мы будем использовать градиентный спуск, матрицу признаков размером и вектор весов длины 4. Bias добавим как дополнительный признак со значением 1.
Подготовка данных
Теперь каждый объект – это вектор из пяти элементов, где последний отвечает за bias.
Вспомогательные функции
Эта функция вычисляет скалярное произведение двух векторов. Функция перемножает соответствующие элементы массивов $a и $b и возвращает сумму этих произведений.
Предполагается, что: массивы имеют одинаковую длину, элементы массивов являются числами и индексы в массивах совпадают.
Обучение модели
Обучение линейной модели методом градиентного спуска. Используется функция потерь MSE (Mean Squared Error). На каждой эпохе вычисляются градиенты по всем весам и веса обновляются в направлении уменьшения ошибки.
Этот код буквально реализует формулы градиентного спуска. Здесь нет оптимизаций, масштабирования признаков или трюков для ускорения – и это осознанно.
Предсказание цены
Плюсы и минусы подхода
Плюс в том, что у нас полный контроль и прозрачность. Видно, как считаются градиенты, как обновляются веса и как формируется предсказание.
Минусы тоже очевидны. Нет масштабирования признаков (признаки имеют разные порядки величин, из-за чего градиентный спуск обучается медленно, нестабильно или вообще не сходится). На больших датасетах такой код будет работать медленно. Поддержка и развитие такого решения в продакшене – отдельная задача.
Реализация с библиотекой RubixML
Теперь реализуем тот же подход, но в формате, характерном для реальных production-проектов. Воспользуемся линейной регрессией с L2-регуляризацией (Ridge Regression). В этом случае библиотека самостоятельно решает задачу оптимизации и аналитически вычисляет веса модели.
Интерпретация весов
Самое ценное в линейной модели – интерпретируемость. Если посмотреть на полученные коэффициенты, можно относительно легко понять, как каждый из них влияет на конечную цену. Именно за это линейные модели любят аналитики и бизнес, даже в эпоху нейросетей.
Выводы по кейсу
Этот кейс показывает, что машинное обучение – это не обязательно сложные модели и GPU. Часто достаточно простой линейной регрессии, чтобы получить полезный, объяснимый и применимый результат.
Важно понимать ограничения модели, но не менее важно уметь быстро и точно решить задачу, которая действительно возникает в бизнесе. Линейная регрессия в таких задачах остаётся одним из самых сильных инструментов – именно благодаря своей простоте и прозрачности.
В следующих кейсах мы будем постепенно усложнять модели, сохраняя эту практическую направленность.
Last updated