Применение модели многоклассовой классификации для прогнозирования итоговых оценок GCSE по математике в средней школе Великобритании.

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

В британской средней школе, где я работаю учителем математики, мы правильно прогнозируем около 50–60% итоговых оценок GCSE для учеников по всем предметам. Другими словами, если я выберу прогноз учителя, т.е. Билли прогнозируется 6-й класс по музыке, обычно я могу сказать с максимальной 60-процентной уверенностью, что прогноз будет верным в день результатов.

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

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

Какие данные у нас есть для решения этой проблемы?

Как у школы, у нас есть множество данных об учениках: пол, адрес, классная группа, баллы за поведение, успеваемость, письменные отзывы учителей, стандартизированные баллы по английскому языку и математике с конца ключевого этапа 2 (окончание начальной школы) и т.д. Такие организации, как FFT (в Великобритании) предлагают услуги, которые пытаются использовать хотя бы часть этих данных для прогнозирования результатов GCSE, но с переменным успехом. (Использование БПФ для установки целей GCSE для учеников кажется слишком разным: один ученик имеет цель 8, а другой цель 6 без какой-либо ясной причины. Все, что заставило меня задуматься, это зачем вообще устанавливать целевые оценки?).

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

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

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

Определите задачу и то, как будет выглядеть успех

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

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

Данные

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

Мы всегда тщательно тестировали всех учеников — и около 5 лет назад мы перешли на новую схему с шестью тестами в 7, 8 и 9 классах; четыре теста в 10 классе; пробный экзамен в конце 10-го класса; и два пробных экзамена в 11 классе.

Однако вы заметите, что некоторые данные взяты из старой схемы оценки и имеют другие названия и частоту.

Кроме того, некоторые результаты тестов отсутствуют из-за перерывов в обучении во время пандемии. Целые годовые группы в 2020 и 2021 годах вообще не должны были сдавать выпускные экзамены, поэтому данные их оценок нельзя использовать для обучения модели.

Наконец, с учетом этого последнего пункта, записей не так много — всего 226.

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

Подготовка данных, EDA, проектирование признаков

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

Во-вторых, существуют различные возможные способы работы с отсутствующими значениями (в данном случае с отсутствующими результатами теста), и я не уверен, какой из них лучше. Я создам два кадра данных, один с пропущенными отсутствующими оценками (df1), другой с отсутствующими оценками, которым будет присвоено медианное значение для этого теста (df2).

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

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

Импорт данных

Во-первых, основные импортные товары:

Как выглядят данные в формате CSV?

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

Давайте импортируем его и исследуем с помощью Pandas.

Форма фрейма данных?

226 строк, 51 столбец (идентификатор, 49 возможных функций и 1 целевой столбец).

Посмотрим еще раз на табличные данные:

Мы можем видеть среднее значение за каждый год и фиктивное среднее значение в виде доли от 1.

Кроме того, если мы прокрутим:

Здесь мы можем увидеть окончательную оценку. В Великобритании после реформ 2015 года это либо «U» для неклассифицированного (здесь: 0), либо оценка 1–9, где 9 является наивысшим.

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

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

Заменить отсутствующие значения

Учащиеся могут пропустить контрольные по разным причинам. Мы попробуем 1) заменить их медианой:

И 2) удаление этих строк:

Ни один из методов не идеален, однако сокращение почти на 100 строк из-за отсутствия значений для df2 весьма существенно. Нам нужно будет увидеть, как это повлияет на точность прогнозов модели.

Наконец, давайте создадим список df1 и df2, готовых попробовать оба с каждой моделью:

Моделирование

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

Меня вдохновил шаблон this от Джейсона Браунли из Machine Learning Mastery. (Потрясающий веб-сайт на каждом уровне — спасибо, Джейсон!)

Во-первых, как мы будем судить, успешна модель или нет?

Как измерить точность прогнозов

В статье Bex T на Medium здесь представлен фантастический обзор метрик, которые можно применить к такого рода задачам мультиклассовой классификации.

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

Перекрестная проверка будет здесь важна из-за небольшого размера выборки. С 226 записями разделение 80–20 обучающих тестов даст только 45 результатов теста; 144 записи обеспечат только 29. Потенциально это настолько мало, что будет высокая изменчивость из-за случайности нашей модели машинного обучения. Дима Шульга прекрасно объясняет это здесь. Перекрестная проверка позволяет нам получить больше метрик и сделать более точные выводы. Конечно, нам придется посмотреть, будут ли они достаточно хороши, чтобы их можно было применить к будущим данным.

Создайте функцию, которая возвращает dict моделей классификации с общими гиперпараметрами.

Создайте функцию для обобщения процесса прогнозирования и расчета точности для каждой модели.

Выборочная проверка моделей классификации

И выведите 10 лучших по порядку.

Результаты:

Есть небольшое количество моделей с точностью более 60%, что является многообещающим.

Посмотрите на лучшую модель, используя матрицу путаницы и отчет о путанице

Совместная лучшая модель — это Классификатор повышения градиента со 100 оценщиками, с данными в df1 (где отсутствующие значения были заменены средними значениями).

Давайте изучим его предсказания.

И матрица путаницы в виде тепловой карты с использованием Seaborn:

Хотя центральный стержень (сверху слева и снизу справа) правильных прогнозов сплошной, все еще есть ряд прогнозов, которые находятся по обе стороны от линии и, следовательно, неверны.

Краткое содержание

При 65% модель классификатора Gradient Boosting Classifier демонстрирует многообещающую степень точности по сравнению с нашим минимальным требованием в 60%. Однако этот результат недостаточно выше порога успеха, чтобы быть уверенным в универсальности модели в будущем.

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

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

Теперь нам нужно посмотреть, может ли настройка гиперпараметров повысить точность модели выше 60%, чтобы сделать ее жизнеспособной альтернативой прогнозам учителей.

Выборочная проверка гиперпараметров: будет ли улучшение модели стоить нашего времени?

Мы не пытаемся сделать это исчерпывающе: вместо этого наша цель — посмотреть, будет ли это стоить нашего времени. Можем ли мы улучшить на 65%? Выборочная проверка с использованием случайного поиска часто используемых гиперпараметров должна в некоторой степени улучшить точность базовой модели или, по крайней мере, не ухудшить ее, и помочь нам решить, стоит ли продолжать работу.

Мохтади Бен Фрадж предоставляет подробный обзор шагов по настройке гиперпараметров модели Gradient Boosting.

Начните с сетки общих значений для всех гиперпараметров:

Затем используйте RandomizedSearchCV, чтобы просмотреть случайное подмножество возможных комбинаций и найти наилучшее совпадение:

Оценка и будущие эксперименты

Этот результат говорит о том, что мы достигли конца пути (на данный момент).

Мы обнаружили, что можем достичь 65% точности с помощью ванильного классификатора повышения градиента, что на 5% выше наших критериев успеха.

Однако настройка гиперпараметров дала наилучший результат всего в 61%, когда мы ожидаем увеличения показателя!

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

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

Не без дополнительных данных.

Учителя побеждают (пока).

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