Skip to content

Аналитическая мультиагентная система «InsightFinder»

Notifications You must be signed in to change notification settings

annashesta/InsightFinder

Repository files navigation

InsightFinder

logo

Аналитическая мультиагентная система «InsightFinder» — это мультиагентная система автоматического анализа данных (AutoEDA) на базе LangChain, разработанная для выявления ключевых факторов, различающих две группы по бинарной целевой переменной (например, "ушедшие клиенты" vs "лояльные клиенты").

Проект использует набор специализированных аналитических инструментов, управляемых LLM-агентами, для генерации подробного аналитического отчёта без необходимости написания кода пользователем.

🎯 Цель проекта

Разработать прототип мультиагентной системы на Python, которая автоматически проводит исследовательский анализ данных (EDA) для табличного датасета с бинарной целевой переменной и генерирует человекочитаемый аналитический отчёт в формате Markdown (и HTML).

Пример отчета можно посмотреть в report/output (используемая модель: qwen2.5-32b-instruct).

💻 Технологический стек

pandas, numpy, scikit-learn, scipy, matplotlib, seaborn, langchain, openai, gradio, docker

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

insightfinder/
│
├── agents/
│   ├── analyst_agent.py              # Агент, выбирающий необходимые для анализа инструменты
│   ├── executor_agent.py             # Агент, запускающий инструменты
│   ├── summarizer_agent.py           # Агент, генерирующий финальный отчёт
│   └── tools_wrapper.py              # Обёртки для инструментов как LangChain Tools
│
├── core/
│   ├── data_loader.py                # Загрузка и предварительная обработка данных
│   ├── orchestrator.py               # Оркестратор всего процесса анализа
│   ├── utils.py                      # Вспомогательные функции
│   ├── logger.py                     # Настройка логирования
│   └── pipeline.py                   # Запуск оркестратора
│
├── logs/                             # Папка с логами работы приложения
│   ├── orchestrator.log
│   ├── summarizer.log
│   └── ...(другие логи)
│
├── report/
│   ├── output/
│   │   ├── insightfinder_report_YYYYMMDD_HHMMSS.md  # Финальный отчет (пример)
│   │   └── images/                   # Папка для графиков из отчета
│   │       ├── desc_*.png
│   │       ├── corr_*.png
│   │       └── ...(другие изображения)
│   ├── to_html.py                    # Преобразование отчета markdown в HTML
│   └── generate_report.py            # Сохранение отчёта в файл
│
├── tests/
│   ├── test_tools.py                 # Тесты для инструментов
│   ├── test_edge_cases.py            # Тесты на граничные случаи
│   └── ...(другие тесты)
│
├── ui/ 
│   ├── web_app.py                    # Веб интерфейс (резерв, Streamlit)
│   └── gradio_app.py                 # Веб интерфейс (основной, Gradio)
│
├── tools/
│   ├── __init__.py
│   ├── primary_feature_finder.py       # Поиск главного признака (Decision Tree глубины 1)
│   ├── correlation_analysis.py         # Анализ корреляций (Point-Biserial)
│   ├── descriptive_stats_comparator.py # Сравнение описательных статистик между группами
│   ├── categorical_feature_analysis.py # Анализ категориальных признаков (Хи-квадрат)
│   ├── full_model_importance.py        # Важность признаков (Random Forest)
│   ├── distribution_visualizer.py      # Создание графиков распределений (boxplot, hist)
│   ├── outlier_detector.py             # Обнаружение выбросов (IQR, Z-score)
│   ├── interaction_analyzer.py         # Анализ взаимодействий признаков
│   └── insight_driven_visualizer.py    # Создание целенаправленных графиков на основе инсайтов
│
├── tmp/                              # Временные файлы (отчеты, архивы, загрузки)
├── .env                              # Файл с переменными окружения (API ключи)
├── .dockerignore                     # Файл для игнорирования файлов при сборке Docker-образа
├── Dockerfile                        # Файл для сборки Docker-образа
├── docker-compose.yml                # Конфигурация для запуска через Docker Compose
├── .gitignore                        # Файл для игнорирования файлов в Git
├── main.py                           # Точка входа в приложение
├── debug_tools.py                    # Скрипт для отладки инструментов
├── requirements.txt                  # Зависимости проекта
└── README.md                         # Описание проекта

🚀 Быстрый старт (с Docker - рекомендуется)

Docker обеспечивает изолированную, воспроизводимую среду для запуска приложения.

1. 🐳 Сборка Docker-образа

Убедитесь, что Docker установлен и запущен на вашем компьютере.

В корневой директории проекта (insightfinder) выполните:

docker build -t insightfinder .

2. ▶️ Запуск контейнера вручную

Запустите контейнер через терминал, пробросив порт 8502 (порт Gradio по умолчанию) и, опционально, подключив локальные директории для сохранения логов и отчётов командой:

# Запуск с сохранением логов и отчётов на хосте
docker run -p 8502:8502 \
  -v $(pwd)/logs:/app/logs \
  -v $(pwd)/report/output:/app/report/output \
  insightfinder

# На Windows PowerShell для монтирования директорий используйте:
# docker run -p 8502:8502 -v ${PWD}/logs:/app/logs -v ${PWD}/report/output:/app/report/output insightfinder

Примечание: При первом запуске папки logs и report/output будут созданы автоматически. Монтирование позволяет сохранять логи и отчёты на вашем компьютере даже после остановки контейнера.

3. ▶️ Запуск через docker-compose (упрощённый способ)

Альтернативно можно использовать docker-compose. Это удобнее, так как все настройки вынесены в один файл.

Выполните в корневой директории:

docker-compose up --build

Приложение будет доступно по адресу: http://localhost:8502

Чтобы остановить приложение:

docker-compose down

Преимущество: Логи (logs) и отчёты (report/output) автоматически сохраняются на вашем компьютере.

4. 🌐 Доступ к приложению

Откройте браузер и перейдите по адресу: http://localhost:8502


🚀 Быстрый старт (без Docker)

1. 🛠️ Установка зависимостей

Создайте виртуальное окружение и установите зависимости:

python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate
pip install -r requirements.txt

2. 🚀 Запуск

python main.py

Примечание: При локальном запуске директории logs, tmp, report/output/images создаются автоматически. Логи будут записываться в папку logs внутри проекта.


🛠️ Настройка API

Чтобы приложение работало, ему нужен доступ к API вашей LLM. Есть два простых способа это сделать:

Вариант 1: Через UI 🖥️ (рекомендуется)

Просто запустите приложение. В интерфейсе Gradio будут поля для ввода API ключа, URL эндпоинта и названия модели. Приложение использует эти настройки для подключения.

Вариант 2: Вручную 📝 (через .env)

Создайте в корневой директории проекта файл с названием .env и добавьте туда свои переменные:

OPENAI_API_KEY=ваш_api_ключ
OPENAI_BASE_URL=https://openai-hub.neuraldeep.tech # или ваш приватный эндпоинт
OPENAI_MODEL=qwen2.5-32b-instruct

Примечание: Проект использует ChatOpenAI из langchain_openai. Убедитесь, что ваша модель (например, qwen2.5-32b-instruct) доступна по указанному base_url. Если у вас нет доступа к LLM по API, обращайтесь в TG к @Zhdanov_Alexey


🎉 Результат (Использование):

После запуска откроется страница в браузере (http://localhost:8502), где можно:

  1. Настроить API: Ввести API ключ, URL и модель.
  2. Загрузить CSV-файл: Выбрать файл для анализа.
  3. Задать вопрос: Сформулировать вопрос, на который система должна ответить, анализируя данные (например, "Какие факторы влияют на отток клиентов?"). Этот вопрос также используется для автоматического определения целевой переменной.
  4. Запустить анализ: Нажать кнопку "🚀 Запустить анализ".
  5. Просмотреть отчёт: После завершения анализа будет отображен интерактивный HTML-отчёт.
  6. Задать вопрос по отчёту: Ввести уточняющий вопрос по уже сгенерированному отчёту и получить краткий ответ от LLM.
  7. Скачать результаты:
    • Отчёт в формате .md.
    • Отчёт в формате .html.
    • Графики из отчета в архиве .zip.
    • Логи работы приложения в архиве .zip.

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

  1. Интерфейс (ui/gradio_app.py) получает данные от пользователя.
  2. Оркестратор (core/orchestrator.py) запускает процесс анализа.
  3. Аналитик (agents/analyst_agent.py) — LLM, которая решает, какой инструмент запустить следующим.
  4. Исполнитель (agents/executor_agent.py) запускает выбранный инструмент.
  5. Инструменты (tools/) выполняют статистический анализ:
    • PrimaryFeatureFinder: находит главный признак (Decision Tree глубины 1).
    • CorrelationAnalysis: считает корреляции с бинарной целью.
    • DescriptiveStatsComparator: сравнивает статистики между группами.
    • CategoricalFeatureAnalysis: проверяет категориальные признаки на значимость.
    • FullModelImportance: оценивает важность признаков через Random Forest.
    • DistributionVisualizer: создает графики распределений (boxplot, hist).
    • OutlierDetector: ищет выбросы среди фичей.
    • InteractionAnalyzer: анализирует взаимодействия признаков.
    • InsightDrivenVisualizer: создает целенаправленные графики на основе полученных ранее инсайтов.
  6. Сумматор (agents/summarizer_agent.py) собирает все результаты и генерирует финальный отчёт.
  7. Интерфейс отображает отчёт и предоставляет возможность задать вопрос по нему и скачать результаты.

🛠 Требования

  • Python 3.10+
  • Доступ к LLM API (например, OpenAI, или приватный эндпоинт)
  • Библиотеки из requirements.txt

📦 Пример отчёта

Отчёт включает:

  • Анализ ключевых выводов (краткое резюме основных инсайтов)
  • Главный признак и его характеристики
  • Топ корреляций
  • Сравнение статистик между группами
  • Значимые категориальные признаки
  • Важность признаков по модели
  • Анализ распределений и их визуализация
  • Выбросы и аномалии
  • Анализ взаимодействий признаков
  • Инсайт-ориентированные визуализации
  • Заключение и рекомендации

🧪 Тестирование

Запустить тесты:

python -m pytest tests/

📄 Лицензия

MIT

About

Аналитическая мультиагентная система «InsightFinder»

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •