Skip to content

turkprogrammer/task-estimator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Task Estimator

Task Estimator - это CLI-приложение, которое использует алгоритм Random Forest для предсказания времени, которое займет задача, на основе исторических данных.

Возможности

  • Добавление задач с названиями, тегами и реальным затраченным временем
  • Просмотр всех ранее добавленных задач
  • Обучение модели Random Forest на исторических данных задач
  • Оценка времени для новых задач на основе названия и тегов

Установка

  1. Убедитесь, что у вас установлен Go (версии 1.21 или выше)
  2. Склонируйте репозиторий
  3. Выполните 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

Как это работает

  1. Сбор данных: Задачи сохраняются с названиями, тегами и реальным временем, затраченным на них
  2. Предварительная обработка: Текстовые названия преобразуются в числовые векторы с использованием bag-of-words, теги преобразуются с использованием one-hot кодирования
  3. Обучение: Модель Random Forest обучается на исторических данных с автоматическим разделением на обучающую и валидационную выборки (80/20)
  4. Оценка качества: При обучении вычисляются метрики MAE (Mean Absolute Error - средняя абсолютная ошибка) и RMSE (Root Mean Square Error - корень из среднеквадратичной ошибки) на валидационной выборке
  5. Предсказание: Новые задачи векторизуются и передаются в модель для предсказания требуемого времени

Структура проекта

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 Forest
  • internal/model/model_extended_test.go - Расширенные тесты для новых функций
  • cmd/root_test.go - Интеграционные тесты для CLI-команд
  • cmd/train_test.go - Тесты для команды train с метриками

Пример полного цикла работы

  1. Добавление исторических задач:
./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
  1. Обучение модели с выводом метрик:
./task-estimator train
  1. Оценка новой задачи:
./task-estimator estimate --title "Реализация OAuth2 аутентификации" --tags backend,Go,auth

Вклад в проект

  1. Форкните репозиторий
  2. Создайте feature-ветку
  3. Внесите свои изменения
  4. Добавьте тесты, если применимо
  5. Отправьте pull request

About

Task Estimator - это CLI-приложение на Go, которое использует алгоритм Random Forest для оценки времени выполнения задач на основе исторических данных.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages