Итак, чем более сложным является взаимодействие студента с задачей и чем больше элементов этого взаимодействия (потенциально) оказывают эффект на его результаты, тем больше становится метрик. А чем больше метрик, тем больше требуется внимания и усилий, чтобы их проанализировать, интерпретировать и принять соответствующие решения. И даже если эти метрики имеют единую шкалу (в нашем случае от 0 до 1) с понятной интерпретацией, это довольно громоздко в использовании: глаза разбегаются от количества точек фокусировки. В своей практике я часто встречал запрос от продактов, методистов и других коллег о разработке одной метрики. А в силу того, что я использую подход, центрированный на пользователе, а не на метрике (какой бы классной она ни была), я разработал такую единую метрику – метрику посильности. Это название отлично описывает ее суть: ведь в одном числе заключены и трудность, и индекс попытки, и нагрузка помогающими механиками. Мы также можем включить другие компоненты, отражающие реальный учебный опыт студента. Познакомимся с этой метрикой.
На базовом уровне метрика посильности рассчитывается для каждой задачи. В упрощенном варианте расчета (я специально разработал этот вариант, чтобы как можно большее число EdTech могли ею воспользоваться, тогда как в Яндекс Практикуме применяется более сложное и ресурсоемкое решение) этой метрики мы должны отобрать супербаллы всех студентов по этой задаче и вычислить по ним среднее значение.
В вычислительном коде этот расчет реализуется так:
Все просто, не правда ли? В этом коде мы сначала собираем корзинки с супербаллами для каждого задания group_by(task_id), а потом считаем средний супербалл в каждой корзинке cf_i = round(mean(scoreij), 2). Этот код надо применить к данным (df), содержащим значения супербаллов, которые мы рассчитали в предыдущей главе. Другими словами, этот код последовательно продолжает код предыдущей главы. В результате получим таблицу cf_i, состоящую из двух столбцов: первый – с идентификатором задания, а второй – с его посильностью (cf_i, где cf – content feasibility (то есть посильность) и уже знакомый нам индекс i, которым в психометрике принято обозначать задания). Под посильностью понимаются все те компоненты, которые мы включили в подсчет супербалла: и количество попыток, и использование подсказок и различных помогающих механик. Посильность может принимать значения от 0 до 1, где 0 означает, что задача совсем непосильна для студентов (ни один из них с ней не справился). А 1 указывает, что задача максимально посильная, так как все студенты с ней справились с первой попытки и без помогающих механик. Теперь познакомимся с результирующей таблицей (первые шесть строк которой вы можете получить с помощью команды head(as.data.frame(cf_i)), скрин. 5).
Скриншот 5
Здесь важно поговорить о референсных значениях. Они устанавливались эмпирически, а их «работоспособность» (валидность) проверялась в ходе исследований, о которых пойдет речь далее. Из практики, основанной на десятках тысяч расчетов, мы установили следующие границы посильности заданий (табл. 14).
Таблица 14. Границы посильности заданий
Таким образом, задание из пятой строки является фрустрирующим; из четвертой – субоптимальным; задания из первой и третьей строк оптимальные; задание из второй строки находится на границе оптимальных и скучных, а из шестой – скучное.
Мини-практикум. Каковы значения посильности заданий
252cef276a2cdc2d,2d4ae0e86fc03f28,3a1a62d0c3ecdb85,4712ae386cd95a94и к каким категориям мы можем эти задания отнести?
Правильный ответ: 0,12 (фрустрирующая), 0,61 (субоптимальная), 0,79 (оптимальная), 0,99 (скучная)[33].
Насколько мы можем этим значениям доверять? Другими словами, не тычем ли пальцем в небо, опираясь на метрику и интерпретируя ее результаты? Не является ли полученное значение случайным и ничего общего с реальностью не имеющим?
Для ответа на этот вопрос необходимо рассчитать стандартную ошибку. Для задач стандартная ошибка определяется на основании отклонений (разностей) супербаллов студентов от значения посильности и объема накопленных по этой задаче данных. И в коде реализуется так:
В итоге получаем таблицу, где каждому заданию соответствует стандартная ошибка для посильности этого задания (скрин. 6).
Скриншот 6
В качестве ориентира можем считать посильность заданий валидной, если ее стандартная ошибка меньше 0,05–0,075. Превышающие значения могут свидетельствовать о том, что для этого задания пока не набрана достаточная выборка супербаллов, поэтому оценка посильности имеет большую ошибку. Но если выборка составляет 50 супербаллов и более, а ошибка все еще высокая, это может говорить о том, что задание в целом некачественное, что приводит к высокой волатильности супербаллов по этому заданию, и поэтому стандартная ошибка высока. Объем выборки (50) представлен исходя из нашего опыта, но можно вывести такую рекомендацию: если по другим заданиям этого урока или темы со сравнимой выборкой уже получены достаточно низкие значения стандартной ошибки, а по конкретному заданию все еще нет, то высока вероятность того, что причина именно в задании.
Так мы можем сделать вывод, что для второго задания к интерпретациям полученного значения посильности приступать пока рано, так как стандартная ошибка (все еще) высока и составляет 0,10 при пороговой в 0,075 и ниже.
Мини-практикум. Какому показателю посильности для заданий из предыдущего мини-практикума (
252cef276a2cdc2d,2d4ae0e86fc03f28,3a1a62d0c3ecdb85,4712ae386cd95a94) нам пока рано доверять?
Правильный ответ: показателю посильности задания
2d4ae0e86fc03f28, так как ошибка составляет 0,1, что выше порогового значения[34].
Вы помните, что в разработке я всегда ориентируюсь на пользователя, а не на метрику? Мои коллеги пожаловались, что для заключения по заданию им необходимо посмотреть на два значения: посильности и стандартной ошибки, сравнить каждое из них с соответствующими им референсными значениями, затем скомбинировать полученные интерпретации в одну и только тогда принять решение. Подумав, как им помочь, я предложил объединить расчет обеих метрик и включить в код маркировку референсных категорий, вот так:
В результате получаем вот такую удобную таблицу (скрин. 7), где все собрано. Мы видим и числовые значения посильности и стандартной ошибки, и их интерпретации (в предпоследнем и последнем столбцах). Так, согласитесь, мы быстро и легко сориентируемся, к каким категориям посильности относятся задания и можем ли мы доверять этим категориям применительно к каждому заданию. Удобно?
Скриншот 7
Мини-практикум. Выведите значения посильности, ошибки и их интерпретации для заданий из предыдущих двух практикумов (
252cef276a2cdc2d,2d4ae0e86fc03f28,3a1a62d0c3ecdb85,4712ae386cd95a94). Порадуйтесь тому, как стало удобно, когда все показатели и интерпретации собраны в одном месте.
Правильный ответ: Да, стало удобнее![35]
Важная особенность посильности заключается в том, что метрика может быть рассчитана для любого уровня в иерархии учебного контента. Например, если задачи вложены в уроки, а уроки вложены в темы, помимо посильности задач можно определить посильность и уроков, и тем. Принцип подсчета заключается в том, что мы отбираем все супербаллы, полученные студентами внутри этого урока или темы, и затем считаем среднее этих супербаллов. Код, интегрирующий расчет посильности, стандартной ошибки и референсных категорий для соответствующих расчетов по урокам, будет таким:
А для тем – таким:
Как я уже упоминал, интерпретация посильности едина для любого уровня контента. Это, пожалуй, ключевая сила данной метрики.
Мини-практикум. Какова посильность уроков
17df10e8и214517e8и тем19faa39cи3cd2fcfb? Можем ли мы доверять этим показателям?
Правильный ответ: 0,18 (фрустрирующий урок), 0,72 (оптимальный урок), 0,69 (субоптимальная тема), 0,90 (скучная тема). Можем доверять, так как значения ошибки не превышают пороговые[36].
Важно отметить, что посильность можно считать и для других агрегирующих переменных (необязательно для иерархических вложенностей типа структуры курса). Например, в нашем датасете есть переменная task_type, которая показывает тип задания – квиз, тренажер или код-сниппет – с помощью вот такого кода:
Мы увидим, что в целом квизы и задачи в тренажере находятся в оптимальной категории посильности, тогда как сниппеты, скорее, скучные (скрин. 8).
Скриншот 8
Кроме того, можно скомбинировать группирующие категории и посмотреть, как различаются типы заданий в разных курсах. Для этого строку в приведенном коде необходимо заменить с group_by(task_type) на group_by(task_type, course_id). В результате получим такое распределение оценок (скрин. 9):
Скриншот 9
Очевидно, что квизы использовались в трех курсах, тренажер – в двух, а код-сниппеты – в одном. Так мы можем оценить посильность этих инструментов в пределах одного курса и в разных курсах.
Таким образом, код для вычисления посильности работает как конструктор: мы можем сконструировать аналитическое решение (почти) для любой комбинации описывающих переменных.
Здесь я хотел бы пояснить, почему использую слово «супер» в названии посильности «суперметрика». Я вдохновился определением «супераппа» (или суперприложения) – такого мобильного приложения, в котором собран и магазин, и такси, и банк, и многое другое, что очень удобно для пользователя. Метрика посильности также включает в себя все логируемые взаимодействия студента с заданием (это и доля верности, и номер попытки, и использование подсказки); она применима ко всем уровням контента для задач, уроков, тем; наконец, она работает как конструктор: мы можем, например, посмотреть посильность заданий конкретного типа в интересующей нас теме. И главное, мы имеем одну шкалу метрики (от 0 до 1 включительно) с единой интерпретацией, включающей четыре категории. Это очень удобно для пользователей – и это супер, не так ли?
Как использовать метрику посильности? Основной сценарий касается ее применения для улучшения контента. Когда я только пришел в Практикум, улучшение контента опиралось на фидбэк от студентов. Команда контента регулярно получала обратную связь и улучшала то, на что указывали. В целом это оправданная стратегия. Обратная связь со студентами – ценный источник информации. При этом стратегия имеет ряд недостатков.
Во-первых, далеко не все студенты предоставляют обратную связь, даже если сталкиваются с серьезной проблемой в контенте. Во-вторых, они часто приводят довольно общие аргументы – например, «мне было сложно», – на основе которых трудно локализовать проблему (что конкретно и в каком месте вызвало эти сложности). В-третьих, потребуется много времени, чтобы собрать достаточное количество данных, указывающее на необходимость конкретного улучшения (а за это время элемент контента доставит студентам еще много неудобств). При этом, если править все при первом упоминании в обратной связи, не хватит никаких ресурсов (да это и совершенно не нужно).
С метрикой посильности указанные проблемы смягчаются. У нас есть данные от каждого студента, взаимодействующего с каждым элементом контента. Мы имеем максимально возможную локализацию проблемы до конкретного задания. Наконец, получаем и обрабатываем данные в режиме реального времени, соответственно, можем оперативно планировать и производить улучшения.
Метрика посильности становится ценным помощником при планировании работы команды улучшений. Например, можно отбирать то, что следует улучшить, исходя из любого удобного горизонта планирования – от «на день вперед» до «на квартал/год вперед». Кроме того, метрика помогает отслеживать эффективность произведенных улучшений, так как мы всегда имеем возможность подсчитать посильность до и после интервенций или улучшений и сравнить результаты. Другими словами, эта метрика стала ценным инструментом для методистов и продактов.
Метрика используется в разных режимах. Первый – каскадный режим. Мы двигаемся вглубь от самой крупной иерархической единицы контента к самой минимальной. Например, если профессия состоит из курсов, курсы из тем, темы из уроков, а уроки из заданий, мы начинаем с общего взгляда на профессию. Посильность профессии – одно число, взглянув на которое и воспользовавшись референсным значением, можно сказать, какая она, эта профессия – frustrating, suboptimal, optimal или boring? Чаще всего (в 2/3 случаев из моей практики) мы получаем значение в интервале suboptimal, подсказывающее, что балансировка контента профессии по посильности все еще требуется.
Далее следует рассмотреть посильности курсов внутри этой профессии. На что важно обратить внимание? Первое – оценить посильность каждого курса по отдельности. Второе – убедиться, что нет резких скачков (преимущественно вниз) посильности от курса к курсу. Оба действия помогут локализовать возможные проблемы с посильностью на уровне курсов. Говоря о приоритетах, первым делом нужно браться за курсы, резко выбивающиеся из среднего уровня посильности. Затем сфокусироваться на общем выведении посильности всех курсов до оптимального уровня. Но как это сделать?
Стоит последовательно спускаться на уровень тем и уровень уроков, следуя той же логике. Так мы более четко локализуем проблему. Выделив самые проблемные уроки, следует проанализировать минимальные единицы контента – задачи, намечая план улучшения каждой, которая выбивается из оптимальной категории.
При этом важно помнить, что метрика посильности является именно помощником, а не руководителем условного методиста. Она подсказывает и высвечивает, но не декларирует наличие проблемы. Я всегда рекомендую сравнивать полученное в метрике с тем, что планировалось сделать. Например, если вы при проектировании предполагали задачку «со звездочкой» (повышенной трудности) и на данных получили задачу с невысокой посильностью (субоптимальной категории или даже фрустрирующей), возможно, не нужно вносить изменения. Или если вы планировали простенькую задачку на разгрузку и в результате получили задачу, с которой с первой попытки справляется 100 % студентов, – возможно, вам следует порадоваться, что реальное совпало с планируемым. Но, конечно, чаще всего реальное и желаемое не совпадают, и метрика посильности отлично высвечивает эти моменты.
Каскадный подход требует больших усилий для осмысления. Он является основой для системной работы по улучшению контента. Но есть и альтернатива – это точечный поиск проблем в контенте (при необходимости – дальнейшее движение снизу вверх по иерархии). При этом подходе мы начинаем с уровня задач и последовательно улучшаем каждую. Моя практика показывает, что такой подход более уместен для небольших образовательных продуктов и продуктов с минимальной иерархией контента. Кроме того, когда мы только начинаем проект, например с помощью бета-когорты, именно точечный подход принесет больше пользы: правим в режиме онлайн то, что требует улучшений.
Кроме того, в работе с посильностью могут помочь и детализированные метрики, например нагрузка подсказками. Так, если мы видим, что в каких-то задачах или уроках ни один студент не дает правильного ответа без подсказки, это явный сигнал, что подсказку нужно внести в основную часть контента и дополнительно проработать его аспекты по содержанию, связанные с этой подсказкой. Другими словами, если ни один из учащихся не осваивает прыжок в высоту без шеста, возможно, в этом упражнении следует включить шест в основной, а не в опциональный инвентарь.