Не прошло и полгода, как мы завершаем цикл статей об адаптивном обучении на Stepik! А, нет, прошло… Но я рада наконец представить вашему вниманию заключительную статью о том, зачем вообще нужно адаптивное обучение, как оно реализовано на Stepik и причём тут шахматы. Однажды мы решили рассказать на Хабре, как устроена система адаптивных рекомендаций на Stepik.org. Первые две статьи этого цикла были написаны ещё летом по горячим следам моего бакалаврского диплома на матмехе СПбГУ, первая была в целом про рекомендательные системы в онлайн-образовании, во второй мы немного заглянули под капот и рассказали об архитектуре нашей рекомендательной системы. Третья часть, в которой мы наконец дойдём собственно до адаптивных рекомендаций, писалась плохо, во многом потому, что эта часть платформы меняется очень быстро. Но теперь я готова опубликовать и её. Когда говорят о преимуществах онлайн-обучения, часто в их числе упоминают массовость. Действительно, сложно сравнивать пропускную способность очного курса в университете, пусть даже потокового, и массового онлайн-курса, практически не имеющего ограничений для масштабирования — разница в размере аудитории составит порядки.  Но эта черта является также и недостатком онлайн-образования: в случае занятий в аудитории преподаватель может подстраивать свои лекции под студентов: провести опрос в начале семестра, следить на занятиях, все ли понимают материал, даже общаться с отдельными студентами лично, если они что-то не усвоили или, наоборот, хотят больше углубиться в какие-то темы. Разумеется, в случае массового онлайн-курса ресурсов преподавателя на подобное взаимодействие не хватает, а студенты оказываются в строгих рамках линейно составленного курса без возможности подробнее разобрать сложные задания или пропустить простые. Тем не менее, существуют способы реализовать что-то подобное и в автоматическом (массовом) режиме. Эти способы можно разделить на три основные группы: Адаптивное обучение на Stepik сделано в виде рекомендательной системы, которая советует пользователю, какой урок ему стоит изучить следующим, в зависимости от его предыдущих действий. Пока рекомендации даются в рамках материалов выбранного курса (например, тренажер по Python), но в скором будущем станут доступны также рекомендации в рамках произвольной темы (например, C++ или интегралы). В перспективе любую тему можно будет изучить в адаптивном режиме. Зарегистрированному пользователю для начала обучения в адаптивном режиме достаточно нажать кнопку “Учиться” в адаптивном курсе (она станет доступна после записи на курс). Получив рекомендованный к обучению материал (урок), пользователь может отреагировать на него одним из трех способов:  После получения реакции сведения о знаниях пользователя и о сложности урока обновляются, и пользователь получает новую рекомендацию.  Для адаптивных рекомендаций используется два метода (“хендлера”): на основе сложности и на основе зависимостей между темами (подробнее о хендлерах можно почитать во второй статье цикла). Под капотом рекомендаций на основе сложности лежит две идеи: В результате слияния этих двух идей получаем следующую модель работы системы. Пользователей и уроки мы рассматриваем как “игроков”, реакцию пользователя на рекомендацию урока — как результат “игры”, а предсказываем мы этот результат на основе некоторых параметров учащегося и урока. Основные черты этой модели мы взяли из научной статьи о Maths Garden, сервисе для изучения арифметики для детей. Для рекомендации мы подбираем такой урок, вероятность решить который для пользователя близка к оптимальной.  Помимо сложности уроков мы хотим учитывать также разметку контента темами. Мы используем граф знаний из Wikidata, и даём возможность авторам уроков тегировать их темами двух типов:  Например, в случае, если пользователь пометил урок как слишком сложный, мы можем посоветовать ему изучить темы, которые необходимы для данного урока. Основные метрики для оценки качества адаптивных рекомендаций — это, во-первых, доля решённых уроков от числа рекомендованных (по сути retention), и во-вторых, разница между предсказанным результатом решения и реальным (из модели на основе шахматного рейтинга).  Доля решённых уроков больше говорит о том, насколько полезными и подходящими по сложности пользователи считают рекомендации. Эту метрику мы вычисляем регулярно по итогам последних 7 дней, и она с конца прошлого года выросла с 60 до 80 процентов. Вторая же метрика, ошибка предсказания, скорее характеризует точность внутренней машинерии адаптивной системы. При этом её сложнее интерпретировать, ведь изменяя модели для предсказания реакции пользователя и для оценки фактического поведения пользователей, мы можем получить значительные изменения в этой метрике, которые едва ли будут показывать, лучше стала модель или хуже по сравнению с предыдущей версией. Потому что оцениваем ошибку мы теперь тоже по-другому. Например, если раньше значения predicted_score и real_score лежали в интервале , а в новой версии — в , абсолютные значения ошибки драматично вырастут, но это не будет значить, что нужно срочно откатываться. Разумеется, пример утрированный, но подобные причины изменения ошибки нужно учитывать при анализе метрик. Как я писала, эти две метрики являются основными, но не исчерпывающими. Также мы отслеживаем состояние системы по количеству запросов рекомендаций (порядка нескольких тысяч в неделю), по скользящему среднему ошибки предсказания по нескольким дням (помогает выявить тенденцию к улучшению или ухудшению, сгладив пики), по времени обработки запроса новой рекомендации (ну по этому параметру всегда есть к чему стремиться :) ). Также мы проводим A/B-тестирование для сравнения работы разных моделей. Тогда, помимо вышеперечисленных метрик для ежедневного мониторинга, дашборд может расширяться специфичными метриками для конкретного эксперимента. Тем не менее, решение о том, какую модель оставлять, обычно принимается исходя из основных метрик. В таблице ниже перечислены основные адаптивные курсы на Stepik и немного информации об их использовании. В этой статье я рассказала об общих чертах системы адаптивных рекомендаций на платформе Stepik. За кадром осталось многое: как мы предсказываем результат решения студентом материала, как мы оцениваем реальное поведение, а также каким образом обновляем оценки знаний пользователя и сложности урока. Возможно однажды на Хабрахабре появятся статьи и об этом, но сейчас эти части системы меняются быстрее, чем их можно успеть описать. Тем не менее, надеюсь, вам было интересно читать эту статью. Буду рада ответить на ваши вопросы в комментариях или в личных сообщениях. Data Science