Task Estimator - это CLI-приложение, которое использует алгоритм Random Forest для предсказания времени, которое займет задача, на основе исторических данных.
- Добавление задач с названиями, тегами и реальным затраченным временем
- Просмотр всех ранее добавленных задач
- Обучение модели Random Forest на исторических данных задач
- Оценка времени для новых задач на основе названия и тегов
- Убедитесь, что у вас установлен Go (версии 1.21 или выше)
- Склонируйте репозиторий
- Выполните
go buildдля сборки исполняемого файла
./task-estimator add --title "Добавить аутентификацию через JWT в Go-сервис" --tags backend,Go,auth --actual-hours 3.2./task-estimator list./task-estimator trainПример вывода при обучении модели:
Training model with 9 tasks (7 train, 2 validation)...
MAE on validation: 1.77h
RMSE on validation: 1.88h
Model training completed and saved.
./task-estimator estimate --title "Исправить баг с макетом на мобильных" --tags frontend,CSS,bugПример вывода при оценке задачи:
Training model with 9 tasks (7 train, 2 validation)...
MAE on validation: 0.55h
RMSE on validation: 0.61h
Estimated time: 3.75 hours
- Сбор данных: Задачи сохраняются с названиями, тегами и реальным временем, затраченным на них
- Предварительная обработка: Текстовые названия преобразуются в числовые векторы с использованием bag-of-words, теги преобразуются с использованием one-hot кодирования
- Обучение: Модель Random Forest обучается на исторических данных с автоматическим разделением на обучающую и валидационную выборки (80/20)
- Оценка качества: При обучении вычисляются метрики MAE (Mean Absolute Error - средняя абсолютная ошибка) и RMSE (Root Mean Square Error - корень из среднеквадратичной ошибки) на валидационной выборке
- Предсказание: Новые задачи векторизуются и передаются в модель для предсказания требуемого времени
task-estimator/
├── main.go # Точка входа
├── go.mod
├── go.sum
├── cmd/ # CLI-команды (Cobra)
│ ├── root.go
│ ├── add.go
│ ├── estimate.go
│ └── train.go
├── internal/
│ ├── model/ # Модель Random Forest
│ │ ├── model.go
│ │ └── trainer.go
│ ├── storage/ # Хранилище задач
│ │ └── task_store.go
│ ├── preprocessing/ # Предварительная обработка текста
│ │ └── vectorizer.go
│ └── config/ # Конфигурация
│ └── config.go
├── data/
│ └── tasks.json # Сохраненные задачи
└── model/
└── model.json # Сохраненная модель
- Cobra - фреймворк для CLI
- Реализация Random Forest (собственная реализация с регрессией)
- Полная сериализация структуры DecisionTree
- Обработка NaN значений при сериализации
- Стабильные и детерминированные предсказания
- Разделение данных на обучающую и валидационную выборки (80/20)
- Вычисление MAE (Mean Absolute Error) - средняя абсолютная ошибка
- Вычисление RMSE (Root Mean Square Error) - корень из среднеквадратичной ошибки
- Вывод метрик в консоль при обучении (команды
trainиestimate) - Возможность отслеживания качества модели при каждом обучении
- MAE (Mean Absolute Error): средняя абсолютная ошибка, измеряет среднюю величину ошибок между предсказанными и фактическими значениями
- RMSE (Root Mean Square Error): корень из среднеквадратичной ошибки, измеряет стандартное отклонение ошибок предсказания
- Адаптивная настройка числа деревьев в зависимости от размера датасета
- Адаптивная настройка максимальной глубины деревьев
- Защита от переобучения на малых датасетах
- Корректная проверка качества модели
- Случайная выборка данных перед разделением
- Обработка крайних случаев
Приложение включает в себя комплексные тесты на нескольких уровнях:
- Бизнес-логика: Тесты для TaskStore (операции с хранилищем) и Vectorizer (предварительная обработка текста)
- ML-компонент: Тесты для модели Random Forest (обучение, предсказание, сохранение/загрузка)
- CLI-слой: Интеграционные тесты для всех команд (add, list, train, estimate)
Для запуска всех тестов:
go test ./...Для запуска тестов для конкретного пакета:
go test ./internal/storage
go test ./internal/preprocessing
go test ./internal/model
go test ./cmdДля запуска тестов с подробным выводом:
go test -v ./...internal/storage/task_store_test.go- Модульные тесты для операций с хранилищем задачinternal/preprocessing/vectorizer_test.go- Модульные тесты для предварительной обработки текстаinternal/model/model_test.go- Тесты для модели Random Forestinternal/model/model_extended_test.go- Расширенные тесты для новых функцийcmd/root_test.go- Интеграционные тесты для CLI-командcmd/train_test.go- Тесты для команды train с метриками
- Добавление исторических задач:
./task-estimator add --title "Разработка API для аутентификации пользователей" --tags backend,Go,auth --actual-hours 4.5
./task-estimator add --title "Исправление бага с версткой на мобильных устройствах" --tags frontend,CSS,bug --actual-hours 2.0
./task-estimator add --title "Добавление индексов для оптимизации запросов" --tags database,PostgreSQL,optimization --actual-hours 1.5- Обучение модели с выводом метрик:
./task-estimator train- Оценка новой задачи:
./task-estimator estimate --title "Реализация OAuth2 аутентификации" --tags backend,Go,auth- Форкните репозиторий
- Создайте feature-ветку
- Внесите свои изменения
- Добавьте тесты, если применимо
- Отправьте pull request