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

  1. Определите проблему
  2. Веб-парсинг
  3. Очистка данных
  4. Исследовательский анализ данных
  5. Построение модели
  6. Оценка результата модели
  7. Заключение

Перед тем, как написать свой пост, я хотел бы поделиться своим репозиторием Github, если вам интересно, вы можете найти коды Jupyter Notebook.

Определите проблему

Каждый проект по науке о данных начинается с проблемы / вопроса. В моем проекте сценарий моей деловой потребности таков:

Прогнозирование рыночной стоимости футболистов и определение переоцененных или недооцененных.

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

Веб-скрапинг

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

В этом проекте я использовал набор данных sofifa. Главная страница sofifa показана ниже;

На главной странице представлены данные о характеристиках игроков, на каждой странице 60 игроков. Итак, мне нужно построить цикл, чтобы получить всех игроков из Sofifa. Я использовал библиотеку BeautifulSoup для очистки данных.

После очистки я проверил количество строк и удалил повторяющиеся строки. Наконец, я отобрал 19316 плееров с веб-страницы Sofifa.

Number of All Rows
30415

Number of Rows Without Duplicated
19316

Очистка данных

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

После получения данных ваш фрейм данных выглядит следующим образом. Это слишком сложно для алгоритмов машинного обучения :)

В своем проекте я применил эти шаги для очистки данных;

  • Разделить столбцы,
  • Удалите ненужные символы (например, \ n)
  • Преобразование столбца высоты в см
  • Перевод столбца веса в кг
  • Преобразование Value, Wage и Release_Clause в десятичные числа. (Включая символы €, M и K)
  • Удаление некоторых строк с пустыми столбцами
  • Преобразование столбца "Международная репутация" (5 ★) в целое число (5)
  • Преобразование всех числовых столбцов в целые числа или числа с плавающей запятой

Наконец, я очистил свои данные и преобразовал фрейм данных, показанный ниже.

Исследовательский анализ данных

Исследовательский анализ данных поможет вам в этом,

  • понимание ваших данных,
  • изучение структуры данных,
  • распознавая взаимосвязь между переменными,

Вкратце, исследовательский анализ данных сообщает нам почти все о данных.

Давайте посмотрим на краткую информацию и графики.

Распределение позиций игроков

Среднее значение каждой позиции

Построение модели

В этом проекте я использовал модель регрессии. Что такое регрессионная модель?

Модели регрессии используются для прогнозирования непрерывного значения. Это один из наиболее распространенных типов алгоритмов машинного обучения. Здесь мы прогнозируем целевую переменную Y (значение) на основе входной переменной X. Между целевой переменной и предиктором должна существовать линейная связь, поэтому она получила название «Линейная регрессия».

В начале модели я разделил свой фрейм данных на Xb, yb для базовой модели. Xb включает все числовые столбцы (59 функций), а yb - мой целевой столбец (значение) и создает модель OLS.

player_modelb = sm.OLS(yb, Xb, data=player_list)

resultsb = player_modelb.fit()

print(resultsb.summary())

Согласно моей базовой модели, значение R-квадрат составляет 0,954. Это очень хорошо, но модель имеет некоторую сложность (количество функций) и есть серьезные проблемы с мультиколлинеарностью (Cond. No. очень высокий).

Оценка результата модели

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

По графику распределения это выглядит как положительный перекос. Поэтому мне нужно рассчитать журнал моего целевого столбца

Второй шаг - сокращение количества функций. Когда нам нужно уменьшить количество функций, нам поможет корреляционная матрица. Давайте найдем сильно коррелированные с целевыми (значениями) столбцы.

Затем я решил использовать эти столбцы для прогнозирования значения;

  • Общий
  • Возраст
  • Int_Reputation
  • Рост
  • Release_Clause
  • Рост
  • Масса

Давайте посмотрим тепловую карту между этими выбранными столбцами и целевым столбцом.

И парный график для всех выбранных столбцов и целевого столбца

Затем я создал модель с выбранными функциями и проверил некоторые параметры. И результаты регрессии OLS выглядят великолепно. Поскольку имеется меньше функции (6) и она помогает нам четко объяснить нашу модель, наше значение R-квадрата высокое (0,941), а мультиколлинеарность отсутствует из-за низкого значения Cond.No (117).

Теперь мне нужно разделить свои данные на набор для обучения, тестирования и проверки. И снова запустите модель и, наконец, сравните результаты Риджа, Лассо и Полиномиальной регрессии.

У нас лучший результат на уровне 2 полиномиальной регрессии, а второй - линейной регрессии. Теперь я проведу перекрестную проверку. Результат лассо-регрессии говорит нам, что это была проблема переобучения, а гребневая регрессия похожа на линейную регрессию.

Заключение

Мы можем сравнить фактические значения с прогнозируемым значением.

Если мы преобразуем эти логарифмические значения в обратные, мы сможем сравнить реальные значения (миллион евро)

В линейных моделях мы должны контролировать 5 предположений.

Допущение 1: Регрессия линейна по параметрам и правильно задана.

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

Допущение 2: невязки должны нормально распределяться с нулевым средним.

Допущение 3: ошибочные термины должны иметь постоянную дисперсию.

Предположение 4: ошибки в наблюдениях не коррелируют. Мы можем проверить корреляцию между наблюдениями.

Предположение 5: ни одна независимая переменная не является идеальной линейной функцией любой другой независимой переменной (нет идеальной мультиколлинеарности).

Когда вы проверяете результат регрессии OLS, Cond.No не сообщает нам, есть ли сильная мультиколлинеарность или нет.

Наконец, давайте выясним, какие игроки больше всего ценятся, а какие меньше всего.

Самая большая отрицательная разница составляет 8,48 миллиона евро для Серхио Рамоса. Фактическая рыночная стоимость Серхио Рамоса составляет 32,5 миллиона евро, а прогнозируемая модель - 39,98 миллиона евро.

Наибольшая положительная разница составляет 39,04 миллиона евро для М. Икарди. Фактическая рыночная стоимость Икарди составляет 53 миллиона евро, но прогнозируемая по модели стоимость составляет 13,96 миллиона евро.

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

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