Project ML Course: Итоговый проект по курсу "Анализ Данных и Машинное Обучение" от Университета Иннополис.
Этот проект — часть курса по машинному обучению и глубокому обучению. Основная цель проекта — разработать систему, которая принимает решения пользователя по нескольким задачам и предлагает рекомендации по курсам для улучшения знаний.
Проект включает:
- Генерацию синтетических данных для обучения модели машинного обучения.
- Обучение и выбор лучших моделей ML с использованием различных алгоритмов.
- Использование Большой Языковой Модели gpt-4o от OpenAI для проверки решений пользователя с нахождением ошибок по определённым параметрам у пользователя.
- Организация цепочки работы из Большоай Языковой Модели для проверки решений и формированием данных для модели ML, которая на основе ошибок предлагает курсы для улучшения знаний.
- Веб-приложение для интерактивного взаимодействия с пользователем, реализованное на Streamlit.
project_ml_course/ │ ├── backend/ │ └── main.py # Веб-приложение на Streamlit │ ├── llm_model/ │ ├── llm_constants.py # Константы для генеративной модели ИИ │ ├── llm_model_main.py # Пайплайн работы с GPT-4o │ └── .env # Персональные API-ключи от Microsoft Azure │ ├── ml_model/ │ ├── ml_main.ipynb # Обучение ML-моделей и сохранение лучшей │ ├── ml_model_constants.py # Константы для работы с ML-моделями │ ├── ml_test.py # Класс для работы с сохранённой лучшей ML-моделью │ ├── best_model.pkl # Сохранённая лучшая ML-модель │ └── scaler.pkl # Масштабирование данных │ ├── synthetic_dataset_generation/ │ ├── generator.py # Генерация синтетических данных │ ├── dataset_constants.py # Константы для генерации датасета │ └── synthetic_users_data.csv # Сгенерированный датасет │ ├── .gitignore # Исключения для Git ├── requirements.txt # Зависимости проекта └── README.md # Описание проекта
- Python
- Numpy
- Pandas
- Matplotlib
- Microsoft Azure API
- Streamlit
- Sklearn
- Openai
- asyncio
- Python 3.10+
-
Клонируйте репозиторий:
git clone https://github.com/ArthurBabkin/project_ml_course.git cd project_ml_course
-
Создайте виртуальное окружение и активируйте его:
python3 -m venv .venv source .venv/bin/activate # Linux/Mac .venv\Scripts\activate # Windows
-
Установите зависимости:
pip install -r requirements.txt
-
Перейдите в директорию backend:
cd backend
-
Запустите приложение:
streamlit run main.py
-
Откройте ссылку, указанную в терминале (например,
http://localhost:8501).
- Заполните решения на различные математические номера и нажмите на кнопку "Отослать решения"
ML_Course.mp4
-
Используются правила и случайные вероятностни для создания синтетического набора данных, имитирующего реальные данные пользователей.
-
Ошибки пользователей распределяются по четырём категориям:
- Алгебра: ошибки в решении алгебраических задач.
- Тригонометрия/геометрия: ошибки, связанные с тригонометрическими функциями или геометрическими вычислениями.
- Работа с условиями задач: невнимательность или некорректное понимание условий задачи.
- Работа с формулами: ошибки в использовании математических формул.
-
Данные используются для обучения моделей машинного обучения.
-
Реализация:
- Файл: synthetic_dataset_generation/generator.py.
- Сохранение набора данных в формате CSV (
synthetic_users_data.csv), который затем используется для обучения моделей. - Первоначально была использована генераций 10000 примеров. И в данном датасете мы можем заметить дисбаланс классов ведь итоговое распределение выглядело так:
- Поэтому после при обработке и подгатовке данных к обучению было решено использовать undersampling для нормализации количества экземпляров каждого класса, поэтому после undersampling'а распредление стало выглядеть так:
-
Обучение моделей для предсказания курсов, которые помогут пользователям улучшить знания в слабых областях.
-
Обучались следующие модели ML:
- RandomForestClassifier
- GradientBoostingClassifier
- LogisticRegression
- KNeighborsClassifier
-
Обработка дисбаланса классов (undersampling).
-
Автоматический выбор лучшей модели на основе точности accuracy и сохранение её для использования последующего.
-
Характеристики для моделей:
- Общее количество задач.
- Количество правильных решений.
- Количество ошибок по алгебре.
- Количество ошибок по геометрии/тригонометрии.
- Количество ошибок по пониманию условий задач.
- Количество ошибок в использовании математических формул.
-
Реализация:
- Файл: 'ml_model/ml_test.py' для использования готовой лучшей модели.
- Файл: 'ml_model/ml_main.ipynb' для обучения нескольких моделей Ml и сохранения лучшей модели (по итогу оказалась GradientBoosting).
- Лучшие параметры для RandomForest: {'estimator__max_depth': 20, 'estimator__min_samples_split': 2, 'estimator__n_estimators': 150}. Точность для RandomForest: 0.63.
- Лучшие параметры для GradientBoosting: {'estimator__learning_rate': 0.2, 'estimator__max_depth': 7, 'estimator__n_estimators': 100}. Точность для GradientBoosting: 0.65.
- Лучшие параметры для LogisticRegression: {'estimator__C': 10, 'estimator__penalty': 'l2', 'estimator__solver': 'lbfgs'}. Точность для LogisticRegression: 0.56.
- Лучшие параметры для KNeighbors: {'estimator__metric': 'euclidean', 'estimator__n_neighbors': 7, 'estimator__weights': 'distance'}. Точность для KNeighbors: 0.60.
- Лучшие модели и данные:
- Лучшая модель сохраняется в best_model.pkl.
- Стандартизатор данных (
StandardScaler) сохраняется в scaler.pkl.
-
Интеграция с GPT-4o для проверки пользовательских решений математических примеров.
-
LLM классифицирует ошибки пользователя по четырём категориям.
-
Few-shot prompting и продвинутые промпты используется для повышения точности анализа и классификации ошибок и формирования ответов модели в определённом формате.
-
Результат анализа передаётся в модель машинного обучения для выдачи рекомендаций.
-
Реализация:
- Файл: llm_model/llm_model_main.py с реализацией работы с итоговой моделью с промптами и few-shot промптингом.
- Файл: llm_model/llm_constants.py с загатоволенным промптом для проверки решений и few-shot примерами.
- Используется Microsoft Azure API ключ, хранящийся в .env файле, для доступа к модели GPT-4o.
-
Приложение предоставляет пользователю условия задач, поля для ввода решений.
-
Основные возможности:
- Пользователь видит задачи и вводит решения.
- Решения проверяются через LLM и для каждого номера показывается в каких моментах были совершены ошибки.
- Рекомендации по курсам генерируются на основе слабых мест и ошибок используя ML модель.
-
Реализовано на Streamlit для интерактивности и простоты использования.
-
Реализация:
- Файл: backend/main.py
- Пользователь взаимодействует с системой через интуитивно понятный интерфейс.
- Подключены функции, позволяющие анализировать ответы в реальном времени.
[total_questions, total_correct_solutions, number_algebra_mistakes, number_trigonometry_mistakes, number_reading_mistakes, number_working_with_formulas_mistakes] [30, 20, 3, 2, 3, 2]
Рекомендованные курсы: Курс по алгебре, Курс по тригонометрии
-
Интеграция новых задач:
- Добавление задач из математике или вообще из других областей знаний (например, физика или химия).
-
Улучшение ML-моделей:
- Использование нейросетевых моделей вместо классических ML.
-
Увелечение количества не целевых признаков в модели:
- Например добавить "среднее время потраченное на решение задач".
-
Собрать настоящие датасеты, а не герерировать синтетику.
- Имя: Артур Бабкин
- GitHub: ArthurBabkin