Благодаря искусственному интеллекту в ближайшие 30 лет специалисты по пиару и рекламе приобретут невиданные суперсилы, включая способность предсказывать будущее. Venture Beat опросил PR-агентов и распространителей маркетинговых инструментов о том, какова роль машинного обучения в их профессии. Опубликуем выжимку из статьи чтобы вы понимали реалии сегодняшнего дня.
«Машинное обучение уже помогает маркетологам эффективнее использовать данные о клиентах и дополняет то, что у них было всегда: интуицию и опыт», — Джефф Хардисон, вице-президент Lytics, платформы для сбора данных о клиентах.
«Наши данные на 80% — 90% точны в прогнозировании того, что случится в ближайшие 30 дней. За три дня мы можем предсказать, какой будет динамика развития через 30 дней», — говорит Саиф Аджани, глава Keyhole, аналитической компании, использующей средства машинного обучения Google Tensor Flow.
«Машинное обучение отлично работает с большими наборами данных и помогает нам решать проблемы вроде классификации. Оно также помогает нам идентифицировать общие элементы контента, который становится популярным… В целом, мы видим преимущества машинного обучения в обработке больших данных в области перевода, распознавания изображений и защиты от спама», — Стив Райсон, директор BuzzSumo, инструмента, позволяющего пользователю оценить популярность контента.
Впечатлило после прочитанного? Лично нас вдохновило!
И так вернемся к нашему проекту интернет -магазина, где мы подготавливаем данные для их анализа.
Содержание страницы
Проект интернет-магазина. Подготовка данных
И так продолжим наш проект интернет-магазина, а точнее, рассмотрим процесс обработки данных.
Я уже загрузил библиотеки Numpy и Pandas.
import numpy as np
import pandas as pd
Для загрузки данных используем функцию pd.read_csv, файл ecommerce_data.csv.
df = pd.read_csv(‘ecommerce_data.csv’)
Если вы хотите увидеть, что в файле, используйте команду
df.head()
Она показывает первые пять строк файла.
Итак, выйдем из оболочки и начнём работу с файлом процесса. Если вы не хотите писать код, а сразу его просмотреть, зайдите на github, соответствующий файл называется process.py. Прежде всего загрузим библиотеки Numpy и Pandas.
import numpy as np
import pandas as pd
Далее мы напишем функцию get_data. Она, во-первых, считывает данные из файла, как мы это сделали чуть ранее, а во-вторых, преобразует их в матрицы Numpy, поскольку так легче работать.
def get_data():
df = pd.read_csv(‘ecommerce_data.csv’)
data = df.as_matrix()
Далее нам необходимо разделить наши x и y. Y – это последний столбец, поэтому x у нас будет всеми остальными столбцами, за исключением последнего.
X = data[:, :-1]
Y = data[:, -1]
Далее, как мы говорили, необходимо нормализовать данные. Для х1 это значение х1 минус среднее значение и поделённое на среднее отклонение. То же самое и для х2.
X[:,1] = (X[:,1] – X[:,1].mean()) / X[:,1].std()
X[:,2] = (X[:,2] – X[:,2].mean()) / X[:,2].std()
Перейдём теперь к работе над столбцом категорий, которым является время суток. Для этого возьмём форму оригинального х и на его основе создадим новый Х2 размерности Nx(D+3), поскольку у нас четыре категории.
N, D = X.shape
X2 = np.zeros((N, D+3))
X2[:,0:(D-1)] = X[:,0:(D-1)]
Теперь напишем код для прямого кодирования для остальных столбцов. Сначала сделаем это простым способом. Для каждого наблюдения считываем значение времени суток, которое, как вы помните, принимает значение 0, 1, 2 и 3, и записываем это значение в Х2.
для n в xrange(N):
t = int(X[n,D-1])
X2[n,t+D-1] = 1
Есть и другой способ. Мы можем создать новую матрицу размерности Nx4 для четырёх столбцов, а затем проиндексировать её напрямую.
Z = np.zeros((N, 4))
Z[np.arange(N), X[:,D-1].astype(np.int32)] = 1
В таком случае нужно будет дописать ещё одну строку
X2[:,-4:] = Z
assert(np.abs(X2[:,-4:] – Z).sum() < 10e-10)
И конец функции.
return X2, Y
Для наших занятий по логистической регрессии нам нужны только двоичные данные, а не полный их набор, поэтому напишем функцию get_binary_data, которая будет вызывать функцию get_data, а затем фильтровать её результат, отбирая только классы 0 и 1.
def get_binary_data():
X, Y = get_data()
X2 = X[Y <= 1]
Y2 = Y[Y <= 1]
return X2, Y2
Это всё.
Проект интернет-магазина. Создание прогнозов
Итак, прежде всего надо загрузить наши данные. Запустим уже написанную нами функцию и присвоим значения для наших x и y.
import numpy as np
from process import get_binary_data
X, Y = get_binary_data()
После этого мы можем установить размерность и весовые коэффициенты для нашей модели, причём член смещения поставим равным нулю.
D = X.shape[1]
W = np.random.randn(D)
b = 0
Нам понадобится написать ещё несколько функций. Прежде всего это функция для вычисления сигмоиды, а также функция forward, возвращающая значение сигмоиды для выражения WX + b.
def sigmoid(a):
return 1 / (1 + np.exp(-a))
def forward(X, W, b):
return sigmoid(X.dot(W) + b)
Далее создадим две переменные P_Y_given_X и predictions.
P_Y_given_X = forward(X, W, b)
predictions = np.round(P_Y_given_X)
И ещё одна функция classification_rate, в качестве аргумента принимающая целевые показатели и прогнозы, и возвращающая количество правильных ответов по отношению к их общему количеству.
def classification_rate(Y, P):
return np.mean(Y == P)
И, наконец, распечатаем результат.
print ‘’Score:’’, classification_rate(Y, predictions)
Запустим программу. Как можно видеть, установив случайные весовые коэффициенты, мы получили не очень хороший результат – около 32% точности.
Далее мы рассмотрим, как установить весовые коэффициенты, чтобы получался более точный результат.