Время прочтения: 3 мин.

В этой статье я хочу поделиться опытом применения нейронной сети MLP с использованием python и библиотеки sklearn в задаче прогнозирования спроса на товар по онлайн-объявлению.

Опишу исходный набор данных. Данные включают в себя все атрибуты онлайн-объявления, а именно: регион; город; категорию объявления; заголовок и описание объявления; цену; идентификационный код изображения, связывающий с файлом jpg; и др. Целевой переменной является вероятность продажи товара.

Все текстовые данные необходимо преобразовать в числа, это условие работы большинства алгоритмов машинного обучения.

Категории логично закодировать средней ценой товаров по сегменту. Это можно сделать с помощью функций map() и groupby().

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

Перед использованием нейронных сетей важно нормализовать данные, т.е. привести все атрибуты к единому масштабу. Я использовала два метода: нормализация min-max и нормализация средним отклонением, реализованных в классах sklearn.preprocessing. MinMaxScaler() и sklearn.preprocessing.StandartScaler().

Из изображений в цветовом пространстве HSV я извлекала средние значения по всем каналам.

Переходим к построению нейронной сети. Я использую двухслойную модель sklearn.neural_network.MLPRegressor. Количество нейронов в каждом слое подбирается итеративно, начиная с заведомо меньшей необходимой величины. Для входного и скрытых слоев используются функции активации ReLU(x).

Обучение происходит с помощью двух алгоритмов, которые являются вариациями алгоритма градиентного спуска: стохастический градиентный спуск (SGD) с импульсом Нестерова и алгоритм адаптивной инерции (Adam). 

Таблица ниже содержит результат работы ИНС на тестовой выборке.

Алгоритм обучения Скорость обучения Количество нейронов в первом слое Количество нейронов во втором слое Время обучения, c MSE
Adam 0,001 20 16 72 0,03788
SGD с импульсом Нестерова 0,001 20 18 668 0,03820

Лучший результат показала модель с методом оптимизации Adam, c коэффициентом скорости обучения 0,001 и количеством нейронов на скрытых слоях 20, 16. Время обучения для алгоритма Adam ниже чем для алгоритма SGD с импульсом Нестерова. Этот параметр особенно важен при наборах данных больших размерностей.

В среднем нормализация данных стандартным отклонением показала лучший результат по сравнению с min-max нормализацией.

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