Немного про то как генерирую данные со студентами и их попытками решения заданий на платформе - для этого используется случайный сэмплинг чтобы распределить задачи по модулям и курсам. Попытки решить задачи генерируются со следующими ограничениями: если есть попытка с номером pandas.DataFrame, в том числе sql-запросы, которые мне нужны - это делается с помощью duckdb. Всё это происходит в файле create_data.py
- Считаем, что мы рассматриваем одну когорту, поэтому количество пользователей небольшое и не содержит тёсок (хочется смотреть на имена студентов, а не на id в дэше)
- Задачи считаются адекватными по сложности - на это ориентировался когда генерировал данные по попыткам решить задачи
- Считаем, что макcимальное количество попыток решить задание равно 10
- Сложность задачи считается как среднее количество попыток, которое требуется чтобы решить эту задачу пользователями; логика: если задачу пытаются решить много раз до того как получится её решить - это сложная задача (альтернативный подход смотреть на процент пользователей решивших задачу с n-той попытки)
- Каждому курсу в каждом модуле приписывается вовлечённость студента (выраженная в процентах и оцениваемая кураторами и ревьюерами), удовлетворённость курсом (выраженная числом от 1 до 10 и оцениваемая самим студентом), генерируются с помощью нормального распределения
- У каждого студента есть прогресс по курсу который имеет прирост (выражен в процентах и вычисляется на основе фидбэков от кураторов и ревьюеров и решённых к данному моменту задач, генерируется нормальным распределением) каждую неделю, в данных изменение прогресса в течение 4 недель
Что можно ещё джобавить в данные:
- Оценки интересности заданий, указанные пользователями на платформе
- [] Может добавить в данные список менторов, ревьюеров и их контакты, а также как часто они взаимодействуют со студентами, их фидбэки по работе студентов