Привет, Хабр! Я уверен, что среди нас есть много студентов и, наверное, все из них признают, что на своём студенческом пути встречали такие науки, о гранит которых можно сломать зубы. Вот поэтому хочу вам рассказать о том, как хобби — наука о данных, помогло мне сдать один из самых сложных предметов в семестре на пятёрку. Если вам интересно — прошу под кат.
Предыстория
Учусь я на кафедре Вычислительной техники ИТМО. В середине прошлого семестра, во время подготовки к 100500-й лабораторной, ко мне в голову пришла мысль применить своё хобби — науку о данных, чтобы как-то облегчить себе задачу. Уже через две минуты я загрузил ipython notebook и погрузился в процесс…
В итоге я сделал определённые выводы о распределении сложностей лабораторных и о корреляциях их тематик. Эти выводы показались мне весьма интересными и правдоподобными, и я попытался применить полученную информацию на практике. По итогам семестра я получил пятерку и благополучно оставил исследование в глубинах гитхаба. Но буквально пару дней назад мне удалось поделиться идеей и выводами этого мини-исследования с людьми, не относящимися напрямую к кафедре и предмету, о котором делаются выводы. И я услышал много положительных отзывов. Поэтому и решил рассказать об этом не очень большом, зато очень прикладном, исследовании на Хабре.
Где взять данные?
Начал я, как и полагается, с поиска данных, которые могут дать нам возможность сделать ценные выводы. В университете система электронного оценивания закрыта, и посмотреть оценки ни чьи, кроме своих нельзя. Устраивать опросы мне не хотелось, потому что это заняло бы много времени и сил, в общем не целесообразно. К счастью, многие преподаватели ведут открытый журнал в гугл доках. Они-то нам и помогут. Я нашёл журнал по интересующему нас предмету одного из прошлых курсов, распарсил его и получил небольшой датасет, в котором было порядка 100 оценок. На тот момент я готовился к сдаче 4-й лабораторной, которой предшествовали 3 первые лабы и одно ДЗ. Итого в датасете для каждого обьекта имелось 6 оценок:
- 1-4 лабораторные (5-бальная шкала)
- 1 ДЗ (5-бальная шкала)
- Итоговая семестровая оценка (100-бальная шкала)
Визуализация и анализ данных
Получив нужные данные, я сразу начал их визуализировать. Сначала давайте посмотрим на зависимости всех оценок друг от друга.
Из внедиагональных элементов выделить что-то особо полезное/интересное у меня не получилось. В то же время на диагонали, где отображены распределения соответствующих оценок, можно увидеть, как люди зачастую сдают эту работу. Сразу, например, видим, что 1-ю почему-то большинство людей сдают на 4. Возможно, преподаватели ещё не успели понять уровень большинства студентов, поэтому проявляют «осторожную» тактику. В последующих же лабораторных такое не проявляется.
К тому же тут мы можем судить о сложности работ. Например, мне сразу бросился в глаза факт, что 2-я лаба — единственная из всех, у которой мода оценки равна 5. Из этого можно судить, что эта лабораторная должна получиться наиболее лёгкой.
Также я отметил, что средняя итоговая оценка (нижняя строчка) явно гораздо левее оценки в 74 балла (у нас в университете <=74 это тройка). Но ведь по оценкам лабораторных большинство людей шло на 4, а значит что стоит бояться экзамена.
Таким образом по этому plot'у люди могут решить две интересные задачи:
- Проранжировать лабораторные по сложности
- Понять на какую оценку стоит ориентироваться
Идём дальше. Следующий график, как мне показалось, дал ещё более интересную информацию.
Это отображение матрицы корреляций между каждой парой оценок, а значит и между тематикой соответствующих работ.
Наибольший интерес для нас представляет последняя строка/столбец. Возьмём, например, строку. Она показывает насколько сильно коррелирует оценка за соответствующую лабораторную с итоговой семестровой оценкой. И тут можно видеть, что оценка за вторую лабораторную почти никак не влияет на итоговую. Значит ли это, что на экзамене/тестах эта тема попадается крайне редко? ДА!
В это же время 1 лаба и дз играют немного более важную роль, а значит с этой темой неплохо было бы разобраться. Ну а квадратики, отвечающие за 3-ю и 4-ю лабораторные и вовсе говорят, что в эту тему стоит вникнуть как можно лучше, чтобы получить достойную оценку.
То есть с помощью обычного heatmap'a мы, почти что смогли вскрыть экзаменационные билеты, ещё задолго до экзамена!
Таким образом с помощью этого графика мы можем решить одну из самых сложных задач студента: «какой билет перечитать 10 раз, а какой 100».
Более того, это не ограничивается лишь экзаменом. По этому графику видно, что при подготовке к сдаче домашнего задания, важнее разобраться с материалами 1-й и 2-й лабораторных, ну а 3-ей можно уделить чуть меньше внимания.
И самое интересное, что если начать вдумываться в тематику всех лабораторных, то все выводы становятся весьма объяснимыми и лишь отчасти неожиданными.
Построение предсказательной модели
Разумеется я не могу обойти стороной машинное обучение. Я пытался строить очень много моделей и в итоге наименьшую абсолютную погрешность дал sklearn'овский случайный лес +-0.2
Но мне хотелось расшарить эту модель среди заинтересованных ребят, поэтому я обучил обычную линейную регрессию, достал из неё веса и опубликовал их. Таким образом, чтобы любой человек, путём простых арифметических операций смог предсказать свою оценку за 4-ю лабораторную (MAE алгоритма составила 0.3).
Но на самом деле главную ценность этого мини-исследования несёт в себе предыдущий раздел и сделанные в нём выводы.
Выводы
Вот и всё исследование. Как видим, собрав даже не очень большую выборку, можно сделать реально полезные выводы, которые могут вам помочь. И, главная мысль, которую я хотел показать этим — это то, что анализ данных представляет из себя очень полезную штуку, даже на уровне «домохозяйских» вопросов.
Надеюсь статья была интересна, спасибо!
Комментарии (17)
Zenitchik
10.02.2017 11:13+4Как-то слабо. Логика в поиске корреляций между оценками за разные работы — понятна. Однако, не изложен принцип оптимизации, которым нужно руководствоваться, чтобы получить хорошую итоговую оценку. Я, конечно, могу догадаться, но, мне кажется, это должно быть частью темы статьи.
yurij_volkov
10.02.2017 14:20Да, идеи оптимизации я старался выделить, но видимо сделал это не очень хорошо.
Две основные идеи оптимизации:
1. Проранжировав работы по степени сложности, мы можем верно расставить приоритеты
2. Зная корреляции между работами, мы можем выделить наиболее сильно коррелирующие, и повторить материалы этих лаб при подготовке к исследуемойZenitchik
10.02.2017 15:26Я правильно понял, что новая лаба даётся «врасплох» и заранее материалы по ней получить невозможно?
Oxoron
10.02.2017 11:18+4В первый раз вижу студента, настолько серьезно подошедшего к разделу «цели и задачи курса». Респект.
Zinkalla
10.02.2017 14:25+3Я вот немного не понял, как прогнозирование среднестатистической оценки может помочь среднестатистическому студенту? Как был отделен субъективный подход преподавателя к постановке оценок?
yurij_volkov
10.02.2017 14:36Ответ на 1-й вопрос: тут я нашёл две причины:
1. Человеку свойственно сравнивать себя с другими, а благодаря средней оценке, можно сравнить свои представления о собственном уровне с реальным положением дел.
2. Это является способом оценить предмет на «сложность» относительно другого. Ведь если по одному предмету 80% народу получает 5, а по-другому эти же 80% получают 4, то резонно предположить, что второй предмет сложнее. А это даёт основания для расстановки приоритетов.
2-й вопрос: Никак, это излишняя сложность и она не требовалась. К тому же «субъективные» — это трудно формализуемое понятие, возможно вы сможете конкретизировать?Labunsky
10.02.2017 14:58+1Ведь если по одному предмету 80% народу получает 5, а по-другому эти же 80% получают 4, то резонно предположить, что второй предмет сложнее.
Это, конечно, логично, но ведь для такого анализа компьютер даже включать не надоyurij_volkov
10.02.2017 15:06-1Получить распределение величины без компьютера? Да, можно это сделать на листике
Labunsky
10.02.2017 15:36+1Да и листочка не надо. Все выводы из статьи обычно легко делаются с помощью пары вопросов старшему курсу
yurij_volkov
10.02.2017 15:08-1Стоп, извиняюсь, я перечитал изначальный вопрос. «Прогнозирование среднестатистической величины». Разумеется в этом нет смысла, но я этого и не делаю. Я прогнозирую оценку конкретного студента, основываясь на его предыдущих оценках
J_K
11.02.2017 04:26+1помогло мне сдать один из самых сложных предметов в семестре на пятёрку
О каком предмете идет речь? По моему опыту, самый сложный предмет там — это философия, и я не знаю, можно ли его сдать с помощью анализа данных...
ivanicki-i
11.02.2017 12:08А как вы получили абсолютную погрешность?
Делили студентов (aka объекты) на две выборки — тестовую и обучающую? использовали кросс-валидацию?
Пробовали ли вы строить решающее дерево? кажется, что для этой задачи оно будет очень показательным + его просто визуализировать)yurij_volkov
11.02.2017 12:12Погрешность считал на кросс-валидации. При такой маленькой выборке, hold-out метод ненадёжен.
Дерево не визуализировал, хотя согласен, оно может оказаться весьма интересным, обязательно построю, спасибо.
3aicheg
Я думал, вы расскажете, как правильно шпоры писать…
charypopper
Шпоры нужно писать, чтобы было кратко и понятно, и можно было сформулировать ответ из выдержки. А пользоваться шпорами — плохо и недопустимо для человека, который не обмануть себя.