Создаём первую модель машинного обучения: используем Colab, Pandas и Sklearn
Все вокруг обучают машины, пора попробовать и нам.


vlada_maestro / shutterstock
Возьмём данные о предпочтениях туристов, обучим на них популярную модель машинного обучения и сделаем предсказание — в точности как настоящие дата-сайентисты, разрабатывающие рекомендательные системы.
Для этого:
- Сформируем тренировочный датасет в виде датафреймов Pandas (наша статья об этой библиотеке).
- Обучим модель из библиотеки Sklearn на получившемся датасете.
- Напишем код на Python для дальнейших предсказаний (прочитайте статью про Python-минимум для занятий data science).
В исходной таблице собраны данные о тысяче туристов: возраст, доходы, предпочтения. Ключевая колонка называется target — это город, который конкретный турист выбрал в итоге для поездки. Наша модель научится предсказывать именно её значение — уже для новых туристов.

Основная часть таблицы содержит только числа, что удобно для модели. Например, если в колонке city_Екатеринбург стоит единица, а в остальных колонках, названия которых начинаются с city_, — нули, это означает, что этот турист екатеринбуржец.
Скачайте таблицу по этой ссылке на компьютер и загрузите её в свой Google Colab — сервис, позволяющий писать код и работать с данными прямо в браузере, без установки программ на компьютер. Предварительно прочитайте статью о том, как с ним работать.
Читаем данные
Данные нужно прочитать из файла и преобразовать в подходящий для работы формат. Для этого в колабе добавим новую кодовую ячейку с помощью кнопки «+ Код» вверху и напишем в ней:
import pandas as pd
df = pd.read_excel('trips_data_for_ML.xlsx', index_col = 0)
df.head()
В первой строчке мы импортировали популярную библиотеку Pandas, предназначенную для работы с табличными данными. Чтобы каждый раз в коде не писать её полное название, по сложившейся в data science традиции будем использовать для неё короткое имя pd.
Во второй строке мы создали переменную с названием df. Далее, после знака «равно», Pandas, под коротким именем pd, с помощью функции .read_excel () прочитала файл trips_data_for_ML.xlsx, который мы загрузили в наш колаб-ноутбук. Параметр index_col мы приравняли к нулю — это означает, что индексной колонкой (той, где идут номера строк) в нашей новой таблице df мы назначили колонку под номером 0 из прочитанной Excel-таблицы.
Наконец, в третьей строке мы применили к нашей переменной df метод .head ().

Он показывает первые строки свежесозданного датафрейма (по умолчанию 5). Этим удобно пользоваться, если нужно убедиться, что данные прочитались правильно.
Создаём датасет
Теперь датафрейм с нашими данными надо превратить в датасет, на котором модель машинного обучения сможет тренироваться.
Для этого разобьём df на две части, которые обозначим как X и y. Идея в том, чтобы в Х содержались все данные туристов, кроме колонки target, то есть выбранных ими городов, а в y — только колонка target c этими городами.
Это похоже на задачник: в одной, большой части находятся условия задач (данные туристов), а в другой части, поменьше, — правильные ответы (города, которые они выбрали). Модель будет учиться именно по этому «задачнику».
Добавляем ячейку кода и пишем:
X = df.drop('target', axis = 1)
y = df['target']
В первой строчке мы создали переменную X. В неё мы записали часть нашего датафрейма df, из которого специальным методом .drop () удалили колонку 'target'. Параметр axis переводится как «ось», и он равен единице. Это означает, что колонку 'target' мы выкинули по второй, вертикальной, или колоночной оси, то есть целиком.
Во второй строчке мы создали переменную y и записали туда часть переменной df, а конкретно — колонку с названием 'target'.
Теперь наши исходные данные поделены на два датафрейма, готовых для обучения модели.
Создаём модель
Sklearn (или scikit-learn) — пожалуй, самая популярная библиотека для машинного обучения на языке Python и вторая главная библиотека дата-сайентиста после Pandas.
from sklearn.ensemble import RandomForestClassifier
В этой строчке кода из раздела ensemble библиотеки sklearn мы импортировали конструктор моделей-классификаторов типа Random Forest («случайный лес») в наш проект.
model = RandomForestClassifier()
В переменную с названием model мы записали модель типа Random Forest Classifier с параметрами по умолчанию (в скобках пусто). Эта переменная и есть наша модель машинного обучения.
Обучаем модель
model.fit(X, y) # обучаем модель
Да, вот так всё просто — в одну строчку. Мы показываем модели набор данных X, который, как мы уже точно знаем, дал нам столбец значений y. И просто говорим ей что-то вроде: «Если X, то y. Всё понятно?» Если модели «всё понятно», она выдаст в ответ целую пачку своих параметров, в смысле которых мы не будем сегодня разбираться:

Пора приступать к предсказанию.
Турист — это словарь
С точки зрения нашей модели любой турист выглядит примерно так:
example = {'age': [31],
'city_Екатеринбург': [0],
'city_Киев': [0],
'city_Краснодар': [1],
'city_Минск': [0],
'city_Москва': [0],
'city_Новосибирск': [0],
'city_Омск': [0],
'city_Петербург': [0],
'city_Томск': [0],
'city_Хабаровск': [0],
'city_Ярославль': [0],
'family_members': [0],
'salary': [130000],
'transport_preference_Автомобиль': [1],
'transport_preference_Космический корабль': [0],
'transport_preference_Морской транспорт': [0],
'transport_preference_Поезд': [0],
'transport_preference_Самолет': [0],
'vacation_preference_Архитектура': [0],
'vacation_preference_Ночные клубы': [0],
'vacation_preference_Пляжный отдых': [0],
'vacation_preference_Шопинг': [1]}
Переменная example содержит словарь — структуру данных языка Python, состоящую из пар «ключ — значение». Видим, что ключу 'age' в нашем словаре соответствует значение [31], и догадываемся, что здесь имеется в виду возраст: 31 год. И поскольку ключу 'city_Краснодар' соответствует единица, а всем остальным city-ключам нули, то делаем вывод, что наш новый турист — из Краснодара.
Скопируйте код выше в новую ячейку и запустите его. Тем самым вы одновременно и объявите переменную example, и поместите в неё словарь, описывающий нового туриста.
Предсказание
example_df = pd.DataFrame(example)
Эта строка кода преобразует словарь example в pandas-формат DataFrame и помещает его в переменную example_df.
А теперь: барабанная дробь! Делаем предсказание:
model.predict(example_df)
Мы запустили метод .predict () для нашей модели model на основе данных из переменной example_df. Куда же, по мнению модели, поедет 31-летний краснодарец, любитель шопинга и автомобилей? Это узнают только те, кто создал модель вместе с нами!
Меняя возраст, город и другие параметры в значениях словаря example, можно получать прогнозы модели для других туристов. Поместите все три команды в одну ячейку и запускайте её на выполнение каждый раз, когда вы меняете данные и вам нужно очередное предсказание:
example = {'age': [31],
'city_Екатеринбург': [0],
'city_Киев': [0],
'city_Краснодар': [1],
'city_Минск': [0],
'city_Москва': [0],
'city_Новосибирск': [0],
'city_Омск': [0],
'city_Петербург': [0],
'city_Томск': [0],
'city_Хабаровск': [0],
'city_Ярославль': [0],
'family_members': [0],
'salary': [130000],
'transport_preference_Автомобиль': [1],
'transport_preference_Космический корабль': [0],
'transport_preference_Морской транспорт': [0],
'transport_preference_Поезд': [0],
'transport_preference_Самолет': [0],
'vacation_preference_Архитектура': [0],
'vacation_preference_Ночные клубы': [0],
'vacation_preference_Пляжный отдых': [0],
'vacation_preference_Шопинг': [1]}
example_df = pd.DataFrame(example)
model.predict(example_df)
Итог (и полезные ссылки)
Мы сформировали обучающий датасет, разбив на две части датафрейм Pandas, натренировали на нём модель Random Forest из библиотеки Sklearn и даже сделали первое предсказание, написав код словаря на языке Python.
Ссылка на колаб-ноутбук — здесь. Вы можете открыть его и просто запускать код в браузере. А чтобы сохранить себе на Диск, воспользуйтесь опцией «Создать копию» в меню «Файл». Пожалуйста, не забудьте выгрузить в него исходную Excel-таблицу.