Построение ИНС с использованием Keras и Tensorflow

Проходя курс по глубокому обучению на Udemy, я решил применить свои знания и попытаться предсказать, совершит ли посетитель покупку (принесет доход) или нет. Набор данных был взят из Репозитория машинного обучения UCI. Вы можете найти полный код в репо ниже:



Импортировать библиотеки

Первый шаг - импортировать необходимые библиотеки. Помимо обычных библиотек по науке о данных, включая numpy, pandas и matplotlib, я импортирую библиотеку машинного обучения sklearn и библиотеку глубокого обучения keras. Я буду использовать keras для разработки моей искусственной нейронной сети с tensorflow в качестве бэкэнда.

Импортировать набор данных

Я импортирую набор данных и получу общий обзор данных. 1 908 посетителей принесли прибыль, а 10 422 посетителя - нет.

Есть 18 столбцов, 17 функций и 1 целевая переменная (доход). Отсутствуют пропущенные значения. Я тоже запустил dataset.describe(). mean каждого столбца сильно отличался друг от друга, поэтому масштабирование должно помочь с этим.

Учитывая, что Revenue в качестве целевого столбца, я разделю набор данных на тестовый и обучающий. Я разделил набор данных на 80% данных обучения и 20% данных тестирования.

Анализ и визуализация данных

Целевой столбец

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

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

Корреляционная матрица

Я создал матрицу корреляции, а затем раскрасил ее в зависимости от уровня корреляции.

Похоже, что PageValues наиболее линейно коррелирует с нашим целевым значением. Кроме того, такие функции, как OperatingSystems, Region и TrafficType, имеют корреляцию меньше 0.02 или больше -0.02, поэтому я опущу эти столбцы.

Связь между Administrative и Administrative_Duration, Informational и Informational_Duration, и ProductRelated и ProductRelated_Duration, похоже, имеют очень высокую корреляцию, как это видно на корреляционной матрице. Это ожидается, поскольку на продолжительность просмотра определенного типа страницы наверняка повлияет количество посещенных страниц этого типа. Таким образом, мы можем удалить количество посещенных страниц каждого типа.

Инженерия данных

Удалить столбцы

Теперь я удалю все ненужные столбцы, включая Administrative, Informational, ProductRelated, OperatingSystems, Region и TrafficType.

Кодирование категориальных столбцов

Я закодирую категориальные столбцы с помощью LabelEncoder. Я буду использовать OneHotEncoder, чтобы закодировать классы столбцов, а затем добавить их в набор данных.

Масштабирование данных

Затем я масштабирую данные так, чтобы среднее значение каждого столбца было около 0.

Генерация модели

Я буду использовать Keras с Tensorflow в качестве бэкэнда для создания искусственной нейронной сети. Есть 32 входных узла, за которыми следуют 4 скрытых слоя и 1 выходной слой. Архитектура модели была разработана для повышения точности набора для проверки, а также предотвращения переобучения на наборе поездов.

Я разработал последовательную модель для ИНС. Слои являются либо плотным, либо выпадающим слоем. Каждый плотный слой представляет количество нейтронов как units, функцию активации как relu, а первый слой также включает input_dim входов. Активация для выходного слоя - sigmoid. Отсев обеспечивает отсутствие переобучения обучающих данных.

Обучение и оценка модели

Я обучил модель в общей сложности 50 эпох с 90% обучением и 10% валидационным разделением. Я достиг точности обучения 90,44% и точности проверки 89,06%.

Наконец, прогноз делается на основе тестовых данных. Затем я использовал прогноз и фактические значения, чтобы создать матрицу путаницы и вычислить точность теста 88,77%.

Анализ результатов

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

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

Спасибо за прочтение. Делитесь своими мыслями, идеями и предложениями. Вы также можете связаться со мной в LinkedIn. Вам также может понравиться следующее: