Научная статья на тему 'ИСПОЛЬЗОВАНИЕ АЛГОРИТМА XGBOOST ДЛЯ ПРЕДСКАЗАНИЯ ЗАВЕРШЕНИЯ КУРСА ОБУЧАЮЩИМСЯ'

ИСПОЛЬЗОВАНИЕ АЛГОРИТМА XGBOOST ДЛЯ ПРЕДСКАЗАНИЯ ЗАВЕРШЕНИЯ КУРСА ОБУЧАЮЩИМСЯ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
768
77
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
машинное обучение / датасет / очистка данных / XGBoost / дерево решений. / machine learning / dataset / data cleaning / XGBoost / decision tree.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Макаров Д.А.

В настоящее время большой популярностью пользуются различные онлайн-курсы. Однако, распространена ситуация, когда пользователь бросает прохождение курса и не получает сертификат. В данной статье будет использован датасет, основанный на реальных данных одной из платформ онлайн курсов. Будет произведена очистка данных и их визуализация, а также анализ. С использованием библиотеки XGBoost будет произведена попытка создания модели, которая будет предсказывать, завершит ли пользователь более 50% курса или нет.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Макаров Д.А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

USING THE XGBOOST ALGORITHM TO PREDICT THE COURSE COMPLETION OF A STUDENT

Various online courses are very popular nowadays. However, it is common for a user to drop out of a course and not receive a certificate. In this article, a dataset will be used based on real data from one of the platforms of online courses. The data will be cleaned and visualized, as well as analyzed. Using the XGBoost library, an attempt will be made to create a model that will predict whether the user will complete more than 50% of the course or not.

Текст научной работы на тему «ИСПОЛЬЗОВАНИЕ АЛГОРИТМА XGBOOST ДЛЯ ПРЕДСКАЗАНИЯ ЗАВЕРШЕНИЯ КУРСА ОБУЧАЮЩИМСЯ»

Научно-образовательный журнал для студентов и преподавателей «StudNet» №1/2021

ИСПОЛЬЗОВАНИЕ АЛГОРИТМА XGBOOST ДЛЯ ПРЕДСКАЗАНИЯ ЗАВЕРШЕНИЯ КУРСА ОБУЧАЮЩИМСЯ

USING THE XGBOOST ALGORITHM TO PREDICT THE COURSE COMPLETION OF A STUDENT

УДК 004.5

Макаров Д.А., студент, makdenis.1997@gmail.com, Россия, 105005, г. Москва, МГТУ им. Н.Э. Баумана, кафедра «Системы обработки информации и управления»

Makarov D.A., student, makdenis.1997@gmail.com, Russia, 105005, Moscow, MSTU N.E. Bauman, Department of Information Processing and Management Systems

Аннотация

В настоящее время большой популярностью пользуются различные он-лайн-курсы. Однако, распространена ситуация, когда пользователь бросает прохождение курса и не получает сертификат. В данной статье будет использован датасет, основанный на реальных данных одной из платформ онлайн курсов. Будет произведена очистка данных и их визуализация, а также анализ. С использованием библиотеки XGBoost будет произведена попытка создания модели, которая будет предсказывать, завершит ли пользователь более 50% курса или нет.

Summary

Various online courses are very popular nowadays. However, it is common for a user to drop out of a course and not receive a certificate. In this article, a dataset

will be used based on real data from one of the platforms of online courses. The data will be cleaned and visualized, as well as analyzed. Using the XGBoost library, an attempt will be made to create a model that will predict whether the user will complete more than 50% of the course or not.

Ключевые слова: машинное обучение, датасет, очистка данных, XGBoost, дерево решений.

Key words: machine learning, dataset, data cleaning, XGBoost, decision tree.

Исследование датасета

import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns

Импорт данных из csv файла

df_course= pd.read_csv('/Users/denis/Downloads/courses.csv') Просмотр типов данных. Данные представлены типами object, int, float.

df_course.info()

<class 'pandas.core.frame.DataFrame'> Rangelndex: 285 entries, 0 to 204

□ata columns (total 19 coluans):

• Column Hon- •Null Count Dtype

0 Launch Date 205 non-null object

1 Course title 205 non-null object

2 Teachers 205 non-null object

3 Course subject 205 non-null object

4 Participants 205 non-null int64

5 50% course content accessed (audited) 205 non-null int64

6 Certified 205 non-null int64

7 X Audited 205 non-null float64

8 X Certified 205 non-null float64

9 X Certified of > 50% course content accessed 205 non-null float64

10 X Played video 205 non-null float64

11 X Posted in forum 205 non-null flo*t64

12 X Grade higher than 0 205 non-null float64

13 Total course hours 205 non-null float64

14 Median hours for certification 205 non-null float64

15 Median age 205 non-null float64

16 X Male 205 non-null float64

17 X Female 205 non-null float64

IB X Bachelor's degree or higher 205 non-null float64

dtypes: «03164(12), int64(3), object(4) memory usage: 30.6» KB

Рисунок 1. Типы данных

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

pltfigure(figsize=( 15,10))

sns.heatmap(df_course.isnull(),cmap="YlGnBu") [1]

Рисунок 2. Поиск пустых значений

Убедились, что пустых ячеек нет.

Визуализация данных

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

Отобразим категории курсов в виде облака слов.

from wordcloud import WordCloud, STOPWORDS

wordcloud = WordCloud(

stopwords =STOPWORDS, background_color='white', width=1200, height=1000

).generate(" ".join(df_course['Course subject']))

plt.imshow(wordcloud)

plt.axis('off')

plt.show()

Administration

OOP Backend Management

Рисунок 3. Облако слов

Судя по облакам слов, в названии курса чаще всего встречается слово «разработчик», а самой популярной категорией является бэкенд разработка и объектно-ориентированное программирование.

Построим матрицу корреляций между различными признаками.

df_course=df_course.drop(['% Се1й1^7СошБе Ше','% Grade higher than 0'],axis=1) [2]

1^иге= plt.figure(figsize=( 10,10))

sns.heatmap(df_course.corr(), annot=True,cmap=мYlGnBuм)

Рисунок 4. Матрица корреляций

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

Построим диаграммы размаха («ящик с усами») для признаков Course subject, Certified of > 50% course content accessed и Participants, Course subject.

figure= pltfigure(figsize=(20,10))

sns.boxenplot(x='Course subject',y='% Certified of > 50% course content ac-cessed,data=df_course,palette="Blues")

<taesSuDpiot:«libel«'Course subjectylabel»'* Certified erf > Ь9\ course content eccessec

till

Ж0 8к>к ИМ tottfly OnCn Mfttytm 1Ш Шинник— tm ML Ma»«

Cmw iiMurt

Рисунок 5. График "ящик с усами "

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

График типа pairplot показывает отношения между всеми парами переменных.

df_pairplot_cols=df_course[['Course subject','50% course content accessed (au-dited)7% Certified of > 50% course content accessed','% Female','% Male','Median age']] [3]

plt.figure(figsize=(20,20))

sns.pairplot(df_pairplot_cols,hue='Course subject,,palette=,rainbow')

Рисунок 6. Отношение между всеми парами переменных

Построим kdeplot для Median hours for certification и % Certified of > 50% course content accessed.

График оценки плотности ядра (KDE) - это метод визуализации распределения наблюдений в наборе данных, аналогичный гистограмме. KDE представляет данные с помощью непрерывной кривой плотности вероятности в одном или нескольких измерениях.

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

Построим kdeplot для признаков «Median age» и «% Certified of > 50% course content accessed».

x= df_course['Median age']

y= df_course['% Certified of > 50% course content accessed'] cmap = sns.cubehelix_palette(light=1, as_cmap=True) plt.figure(figsize=( 10,10)) sns.kdeplot(x, y, cmap=cmap, shade=True);

явяковяг

Median age

Рисунок 7. ЫврШ По графику видно, что средний возраст составляет около 27 лет.

Подготовка данных для машинного обучения

Произведем удаление ненужных столбцов (Certified','50% course content accessed (audited)','Teachers','Launch Date','% Played video')

df_XGB = df_course.drop(['Certified','50% course content accessed (au-dited)','Teachers','Launch Date','% Played video'],axis=1)

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

CourseSubject = pd.get_dummies(df_XGB['Course subject'],drop_first=True) df_XGB.drop(['Course subject'],axis=1,inplace=True) df_XGB = pd.concat([df_XGB,CourseSubject],axis=1)

Библиотека XGBoost

XGBoost - это оптимизированная распределенная библиотека повышения градиента, разработанная для обеспечения высокой эффективности, гибкости и портативности. Он реализует алгоритмы машинного обучения в рамках платформы Gradient Boosting. XGBoost обеспечивает усиление параллельного дерева (также известное как GBDT, GBM), которое позволяет быстро и точно решить многие проблемы data science. Один и тот же код работает в основной распределенной среде (Hadoop, SGE, MPI) и может решать проблемы, выходящие за рамки множества примеров. [4]

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

предсказания нового дерева к предсказаниям обученного ансамбля мы можем уменьшить среднее отклонение модели, которое является целью оптимизационной задачи. [5]

Разделим данные на обучающую и тестовую выборки.

from sklearn.model_selection import train_test_split x= df_XGB

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

y=df_XGB['% Certified of > 50% course content accessed']

x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.4, ran-

dom_state=109)

import xgboost as xgb

train= xgb.DMatrix(x_train,label=y_train)

test = xgb.DMatrix(x_test, label= y_test)

Список гиперпараметров XGBoost

learning_rate: уменьшение размера шага, используемое для предотвращения переобучения.

max_depth: определяет, насколько глубоко каждое дерево может расти во время любого раунда повышения.

subsample: процент использованных образцов на дерево. Низкое значение может привести к неполному оснащению.

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

n_estimators: количество деревьев.

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

XGBoost также поддерживает параметры регуляризации, чтобы наказывать модели по мере их усложнения и сводить их к простым (экономным) моделям.

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

alpha: L1 регуляризация весов листьев. Большое значение ведет к большей регуляризации.

lambda: L2 регуляризация весов листьев и более плавная, чем регуляризация

L1. [6]

Создадим модель бустинга.

xg_reg = xgb.XGBRegressor(objective -reg:linear', colsample_bytree = 0.5, learn-ing_rate = 0.2, max_depth = 7, alpha = 10, n_estimators = 75)

xg_reg.fit(x_train,y_train) preds = xg_reg.predict(x_test)

Вычислим ошибку прогноза

from sklearn.metrics import mean_squared_error rmse = np.sqrt(mean_squared_error(y_test, preds)) print("RMSE: %f' % (rmse))

RMSE: 6.109611

Ошибка составила 6%.

Визуализация деревьев XGBoost

import matplotlib.pyplot as plt

xgb.plot_tree(xg_reg,num_trees=0) plt.rcParams['figure.figsize'] = [20, 15] plt.show()

Рисунок 8. Деревья ХОЕовяХ

Построим график важности признаков на основе подобранных деревьев.

xgb.plot_importance(xg_reg) plt.rcParams['figure.figsize'] = [15,15] рИ^о^^)

F*MM> imporawm

С ÛÎ > ÏC-Ч ГОПС Cl

■Мя* Nnn h

VrE-M il fcrUT

-

m 3

» m u «

Рисунок 9. График важности признаков

По графику видно, что наибольшей важностью обладает признак «% Certified of > 50% course content accessed»

В данной статье была произведена очистка, визуализация, а также анализ данных от одной из платформ онлайн-курсов. С использованием библиотеки XGBoost была произведена попытка создания модели, которая предсказывает, завершит ли пользователь более 50% курса или нет. Точность прогноза модели составила около 94%.

Список использованных источников

1. Seaborn documentation. Режим доступа: https://seaborn.pydata.org/docs/ Дата обращения: 28.11.2020

2. Pandas documentation Режим доступа: https://pandas.pydata.org/docs/ Дата обращения: 28.11.2020

3. Введение в pandas: анализ данных на Python. Режим доступа: https://khashtamov.com/ru/pandas-introduction/ Дата обращения: 28.11.2020

4. Friedman J. Greedy Function Approximation: A Gradient Boosting Ma-chine. — IMS 1999 Reitz Lecture.

5. Nonita Sharma, XGBoost. The Extreme Gradient Boosting for Mining Ap-pli-cations. - 2018 GRIN Verlag

6. Xgboost documentation. Режим доступа: https://xgboost.readthedocs.io/en/latest/ Дата обращения: 28.11.2020

Literature

1. Seaborn documentation. Access mode: https://seaborn.pydata.org/docs/ Date accessed: 11/28/2020

2. Pandas documentation Access mode: https://pandas.pydata.org/docs/ Date of access: 11/28/2020

3. Introduction to pandas: data analysis in Python. Access mode: https://khashtamov.com/ru/pandas-introduction/ Date of access: 11/28/2020

4. Friedman J. Greedy Function Approximation: A Gradient Boosting Machine. -IMS 1999 Reitz Lecture.

5. Nonita Sharma, XGBoost. The Extreme Gradient Boosting for Mining Ap-pli-cations. - 2018 GRIN Verlag

6. Xgboost documentation. Access mode: https://xgboost.readthedocs.io/en/lat-est/ Date accessed: 28.11.2020

i Надоели баннеры? Вы всегда можете отключить рекламу.