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

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

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

Настройка среды

В этом проекте мы будем использовать Jupyter Lab. Если он у вас не установлен, откройте командную строку и введите следующую команду:

pip install jupyter-lab

Убедитесь, что в вашем Python есть такие библиотеки, как seaborn, scikit-learn и pandas. Если он у вас не установлен, выполните следующую команду в командной строке:

pip install seaborn, scikit-learn, pandas

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

Здесь моя папка reglin находится в папке D:\Projects. Затем мы войдем в эту папку с помощью командной строки. Сначала мы перейдем к диску D с помощью команды D::

Затем перейдите в папку Projects\reglin с cd Projects\reglin:

Затем мы можем запустить лабораторный сервер jupyter с помощью следующей команды:

jupyter-lab

Если сервер работает успешно, в браузере появится страница Jupyter Lab, как показано ниже:

Теперь мы можем создать новый файл ipynb, щелкнув Notebook в Launcher:

Переименуйте файл ipynb в reglin.ipynb. Это необязательно, вы можете дать ему любое имя:

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

О, да. Вы можете чувствовать боль, когда готовите все. Потому что слишком много нужно установить. Без проблем. Вы можете использовать Google Colab. Это веселее и дает то, что нам нужно для этого проекта.

Подготовка набора данных

Вы можете скачать набор данных по адресу https://www.kaggle.com/datasets/ashydv/advertising-dataset. На этой странице прокрутите вниз, пока не найдете что-то вроде этого:

Вы можете скачать его, нажав на значок загрузки:

После этого загрузите файл Advertising.csv в jupyter путем перетаскивания:

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

Простая линейная регрессия

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

import pandas as pd 
import seaborn as sns 
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LinearRegression

Давайте загрузим набор данных с помощью метода read_csv, чтобы открыть файл advertising.csv из папки наборы данных и отобразить пять первых записей с помощью метода head. :

df = pd.read_csv("datasets/advertising.csv")
df.head()

Выход:

Вы можете увидеть этот вывод. Столбец Продажи — это зависимая переменная (обозначается как y), которую мы будем использовать при создании модели. Конечно, зависимая переменная отделена от переменной функции (обозначается как x).

Далее давайте проверим, есть ли нулевое значение:

df.isna().sum()

Выход:

TV           0
Radio        0
Newspaper    0
Sales        0
dtype: int64

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

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

sns.heatmap(df.corr(), square=True)

Выход:

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

Здесь телевидение имеет положительную корреляцию с продажами. Итак, мы возьмем ТВ в качестве функции (X) и Продажи в качестве предиктора (y) для модели регрессии, которую мы собираемся создать. Мы будем использовать метод lmplot Сиборна, чтобы увидеть корреляцию между телевидением и продажами:

sns.lmplot(x='TV', y='Sales', data=df)

Выход:

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

X = df[['TV']]
y = df.Sales

Создание и обучение моделей

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

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=10
)

X — независимая переменная, а Y — целевая переменная (результат). В train_test_split test_size указывает размер набора данных для тестирования. Значение 0,3 означает, что данные разделены на 70% для обучения и 30% для тестирования. random_state для рандомизации обучающих и тестовых данных.

Функция train_test_split() возвращает четыре значения в массиве X для обучения и тестирования и y для обучения и тестирования.

Далее мы обучим модель линейной регрессии, используя LinearRegression() из библиотеки sklearn с набором обучающих данных:

model = LinearRegression()
model.fit(X_train, y_train)

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

Прогноз

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

print(model.coef_)
print(model.intercept_)

Выход:

[0.05338906]
7.150594888804455

Из этих двух значений мы можем рассчитать линейную регрессию по следующей формуле:

Из этой формулы m — это коэффициент, а b — это отрезок. Мы можем применить эту формулу для ручного расчета.

Например, вы хотите предсказать, сколько продаж (y) вы получите, если ваш бюджет на телевизионную рекламу составит 40 долларов (x)? Вот решение:

Мы также можем получить результаты прогнозирования из модели, используя метод predict следующим образом:

model.predict([[40]])

Результат тот же (если округлить до двух знаков после запятой):

array([9.28615737])

Затем мы можем использовать метод прогнозирования для прогнозирования нескольких данных X одним и тем же методом:

y_pred = model.predict(X_test)

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

act_predict= pd.DataFrame({
    'Actual': y_test.values.flatten(), 
    'Predict': y_pred.flatten()
})

act_predict.head(5)

Выход:

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

act_predict.sample(10).plot(kind='bar')

Метод выборки используется для случайного получения данных из фрейма данных. Здесь случайная выборка, которую мы даем, равна 10. Это означает, что мы берем 10 строк данных случайным образом.

Затем появится гистограмма, которая дает представление о разнице между фактическими и прогнозируемыми данными, как показано ниже:

Оценка модели

Введите и запустите следующий код, чтобы определить точность модели, которую мы создали с помощью R2 Score с параметрами X_test и y_test:

model.score(X_test, y_test)

Выход:

0.8288743166580128

Значение, которое мы получаем, может быть разным, не всегда точно таким, как этот результат (0,8288743166580128). И, конечно же, мы получаем очень хорошие оценки. Если оценка 1, это означает, что сделанная нами модель очень совершенна. Если значение равно 0, наша модель очень плохая. В заключение, оценка, близкая к 1, означает, что производительность обученной модели улучшается.

Множественная линейная регрессия

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

Таким образом, мы можем применить множество функций (X), чтобы получить прогноз (выход Y). Множественную линейную регрессию можно назвать расширением простой линейной регрессии. В некоторых случаях, с которыми я сталкивался, применение нескольких функций (которые, конечно, имеют корреляцию с Y) может повысить точность модели при прогнозировании результатов.

Чтобы создать множественную линейную регрессию, мы можем немного изменить код в ipynb. Найдите следующий блок кода:

X = df[['TV']]
y = df.Sales

Изменить на:

X = df[['TV', 'Radio', 'Newspaper']]
y = df.Sales

Затем перезапустите блок:

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size= 0.3, random_state = 10)

Затем переобучите, выполнив блок:

model = LinearRegression()
model.fit(X_train, y_train)

Наконец, запустите код блока, чтобы получить оценку:

model.score(X_test, y_test)

Оценки, которые мы получаем из множественной линейной регрессии:

0.9032402609859365

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

Сохранение и загрузка файлов модели

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

Чтобы сохранить модель, мы можем использовать пакет pickle, который уже доступен в Python. Например, здесь мы сохраним созданную нами модель множественной линейной регрессии в файле с именем linear_ads.sav (мы можем сохранить ее в папке моделей):

import pickle

filename = 'model/linear_ads.sav'
pickle.dump(model, open(filename, 'wb'))

В этом примере мы используем расширение файла .sav. Расширение sav на самом деле является расширением файла для SPSS. Мы можем заменить его с расширением или без него. Если сохранение файла прошло успешно, мы увидим его в папке модели, как показано ниже:

Если мы хотим загрузить модель, это также легко. Давайте создадим новый файл ipynb с именем LinearTester.ipynb в корневой папке нашего проекта:

Откройте только что созданный файл. Затем введите следующий код, чтобы загрузить сохраненный файл модели:

import pickle

model = pickle.load(open("model/linear_ads.sav", 'rb'))

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

iklan_tv = 40 # juta
iklan_radio = 23 # juta
iklan_koran = 3 # juta

prediksi_penjualan = model.predict([[
    iklan_tv, iklan_radio, iklan_koran]])

print(prediksi_penjualan)

Выход:

[9.48236314]

Когда мы загружаем модель из файла, нам больше не нужно импортировать библиотеку scikit-learn. Это очень полезно, если другие люди хотят использовать созданную нами модель без установки пакета scikit-learn.