AAYMA
RU
Войти

ProfitPilot

Офлайн-агент тарифных кампаний Beeline. Он выбирает сегменты, тарифы и каналы через пилоты и решает задачу оптимизации кампаний под ограничения…

Доведённый продукт
Команда «0 iq enjoyers» 11💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 0 iq enjoyers
Кейс HackAlem.ai: Телеком — Beeline
Стадия: Доведённый продукт

Задача кейса: Агент, который решает, каким абонентам какой тариф предложить (чистый прирост ARPU)

Суть

Офлайн-агент тарифных кампаний Beeline. Он выбирает сегменты, тарифы и каналы через пилоты и решает задачу оптимизации кампаний под ограничения бюджета и контактов. Одной командой собирает валидированный пакет для сдачи.

Как устроено

История переходов очищается и даёт слабые предварительные оценки. Перебираются все допустимые тарифы и четыре канала, крупные сегменты делятся разрешёнными фильтрами. Следующие пилоты выбираются по ожидаемой пользе информации с учётом стоимости контактов, связанные оценки переносят знание между похожими гипотезами. Итоговые кампании (до 10, до 5000 абонентов в каждой) выбирает решатель SciPy/HiGHS, при отказе решателя включается жадный fallback. run.py создаёт venv, запускает тесты и официальный оценщик, генерирует submission.csv и report.html.

Ключевые решения

  • SciPy/HiGHS MILP
  • жадный fallback
  • выбор пилотов по ценности информации
  • перенос оценок между гипотезами
  • risk-weight

Метрики

86/86 unit-тестов; 100/100 допустимых планов на mock-seeds 0–99; медианный net +4 995 479 у.е., минимальный +2 880 048; Agent.act ≤1,104 с

Особенности

Задача формулируется как оптимизация HiGHS под жёсткие лимиты, а не решается эвристикой. Повторная генерация submission.csv совпадает побайтно, есть отдельный валидатор плана. В одну стратегию объединены два подхода команды (Temiku и ProfitPilot) с честной оговоркой, что это результаты на моке.

Стек

Python · SciPy · pytest

Модели

Ollama (опционально, локально)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9a98b7fa-0-iq-enjoyers.

README

README.md

ProfitPilot — агент тарифных кампаний Beeline

Команда 0 iq enjoyers · HackAlem · основная ветка для проверки: main.

Агент выбирает, кому предложить новый тариф и через какой канал, чтобы увеличить выручку, а не просто добиться переходов. Он проверяет гипотезы пилотами и возвращает 1–10 кампаний с учётом бюджета, охвата и неопределённости. По умолчанию работает локально, без LLM и API-ключей. Данные синтетические; официальный пакет организатора не включён в репозиторий.

Для жюри: критерии и объяснение решения · измеренные результаты · происхождение кода.

Быстрый запуск

Нужны Python 3.11 или 3.13 с venv и официальный beeline_case_participants*.zip. Для приватного репозитория нужен доступ команды; ключи в исходники не вставляйте.

git clone https://github.com/BAITC-Hacks/hack-9a98b7fa-0-iq-enjoyers.git
cd hack-9a98b7fa-0-iq-enjoyers
python3 run.py --bundle "/path/to/beeline_case_participants.zip" --runs 10

Замените только путь к ZIP. Если единственный такой архив лежит в Downloads или рядом с проектом, достаточно python3 run.py. Исходники править не нужно.

Команда создаёт .venv-agent, устанавливает зафиксированные зависимости, запускает тесты и официальный оценщик, проверяет результат и собирает:

  • artifacts/ready-*/submit/ — agent.py, submission.csv, requirements.txt, profitpilot_config.json, инструкция и сведения о сторонних компонентах;
  • report.html — локальный отчёт: кампании, ресурсы, пилоты, статус LLM;
  • summary.json, манифесты и журналы — результаты проверок и хеши.

Точные пути выводятся после успешного завершения. CSV создаёт неизменённый официальный make_submission.py; отдельный валидатор пересчитывает аудитории, затраты, ограничения и совпадение CSV с планом.

Без интернета, диагностика и демо

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

python3 run.py --prepare-only
python3 run.py --offline --bundle "/path/to/beeline_case_participants.zip" --runs 10

--offline запрещает установку пакетов, но не создаёт сетевую песочницу ОС. Без --llm-model агент не делает сетевых вызовов. Ключи не передаются оценщику.

python3 run.py --doctor  # диагностика без установки и изменения Git
python3 run.py --demo    # HTML сохранённого примера, без ZIP и пакетов

Демо помечено как сохранённый пример прежнего fixed: это не новый расчёт и не результат настоящей LLM. Для актуального отчёта выполните обычный запуск.

Что проверено

Текущий режим transfer, без LLMРезультат
Unit-тесты на Python 3.11.16 и 3.13.1186/86 на каждой версии
Допустимые планы, mock-seeds 0–99100/100
Положительный чистый результат100/100
Медианный net+4 995 479 у.е.
Минимальный net+2 880 048 у.е.
Максимальное время Agent.act1,104 с
Повторная генерация submission.csvПобайтное совпадение

Объединены стратегия второго проекта команды Temiku и проверки ProfitPilot. Медиана выросла примерно в 3,25 раза относительно предыдущего transfer на тех же 100 сценариях; превосходство над исходным Temiku не заявляется. Это тест синтетического мока, не гарантия прибыли, баллов или победы на других судейских эффектах. Методика, хеши, сравнение с Temiku и ограничения: актуальный отчёт.

GitHub Actions отключён: по просьбе команды workflow удалён из репозитория. Ранее задания не запускались из-за блокировки биллинга владельца аккаунта, а не из-за ошибки агента. Локальные тесты и проверки run.py сохранены; удалённый CI теперь не выполняется. Пояснение.

Как принимаются решения

  1. История очищается от дублей и недопустимых знаменателей. Она даёт слабые предварительные оценки, а не причинные эффекты текущей аудитории.
  2. Рассматриваются все допустимые тарифы и четыре канала. Крупные сегменты делятся разрешёнными фильтрами, без обращения к скрытым данным.
  3. Следующие гипотезы и размеры проб выбираются по наблюдениям и приблизительной пользе новой информации с учётом стоимости потраченных контактов.
  4. Связанные рабочие оценки переносят информацию между похожими гипотезами, сохраняя неопределённость для непроверенных сегментов.
  5. SciPy/HiGHS выбирает отдельные или объединённые кампании: до 10, до 5000 абонентов в каждой, 100 000 бюджета и 15 000 контактов, включая до 20 пилотов. При отказе решателя есть жадная запасная логика.

Сбои пилота не теряют уже списанные ресурсы. Если пригодных пилотов нет или валидный план невозможен, агент сообщает об этом, а не выдаёт ложный успех. Модельные допущения описаны в отчёте; научная новизна не заявляется.

Настройки и необязательная LLM

python3 run.py --offline --mode transfer --risk-weight 1.0 --max-pilots 12
python3 run.py --offline --mode fixed --runs 10

transfer — основной режим; fixed и старый adaptive оставлены для сравнений. Настройки сохраняются в profitpilot_config.json рядом с агентом.

Локальная Ollama может предлагать приоритеты допустимых пилотов. Она не назначает эффект, не исполняет код и не меняет ограничения. При недоступности работает численная запасная логика. Настоящий модельный прогон ещё не проверен. Ollama и веса автоматически не устанавливаются и для сдачи не требуются. Подготовка локальной LLM и ограничения.

Проверка непосредственно в официальном пакете

Для обычной сдачи используйте подготовленный каталог submit/. При прямой проверке поместите его agent.py и profitpilot_config.json в распакованный пакет организатора, установите зависимости из сдаваемого requirements.txt и выполните из каталога пакета:

python local_eval.py
python local_eval.py --runs 10
python make_submission.py

Эти программы принадлежат официальному пакету, а не лежат в корне GitHub. Наш run.py готовит такое окружение автоматически.

Документация

Исторические отчёты baseline/fixed/adaptive, надёжность, UI и LLM-контракты сохранены для прозрачности; старые числа относятся только к указанным версиям.

Не публикуйте ключи, веса, ZIP, исходные CSV и внутренние файлы среды. Проверка перед коммитом: python3 scripts/check_publish.py --worktree. Проект не отправляет решение организаторам автоматически — сдачу выполняет участник.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
7
Авторы
1
Файлы
47
Ветки
2

Авторы коммитов

Enhilla 7

История коммитов

  • 2026-09-23 17:51Integrate team Temiku strategy with validated ProfitPilot safety and packagingEnhilla
  • 2026-09-23 17:32Remove GitHub Actions workflow at team request; retain local validationEnhilla
  • 2026-09-23 17:28Improve adaptive campaign agent and publish judge-friendly documentationEnhilla
  • 2026-09-23 16:20Document successful clean-clone end-to-end verificationEnhilla
  • 2026-09-23 16:20Harden pilot recovery and add one-command validated submission workflowEnhilla
  • 2026-09-23 15:44chore: integrate team repository history and preserve team attributionEnhilla
  • 2026-09-23 15:37feat: add offline Beeline campaign agent with pilot benchmark and provenanceEnhilla
Структура репозитория (47 файлов)
.env.example
.gitignore
JUDGES.md
README.md
THIRD_PARTY.md
agent.py
beeline_research/README_RU.md
beeline_research/audit_participant_bundle.py
beeline_research/competitive_landscape_ru.md
beeline_research/downloads_audit.json
beeline_research/downloads_recheck_2026-09-23.json
beeline_research/downloads_review_ru.md
beeline_research/elicit_prompt_ru.md
beeline_research/model_selection_ru.md
beeline_research/review_with_glm.py
beeline_research/sources.json
demo/example_report.json
docs/CI_BILLING.md
docs/LOCAL_LLM.md
docs/ORGANIZER_CLARIFICATION.md
docs/RESEARCH_TOOLS.md
reports/benchmark.json
reports/benchmark.md
reports/reliability.md
reports/team_strategy_release.md
reports/transfer_release.md
reports/usability_offline_llm.md
requirements-agent.txt
requirements-dev.txt
requirements-research.txt
requirements.txt
research_output/top_10_ideas.json
research_output/top_10_ideas.md
run.py
scripts/check_publish.py
scripts/compare_runs.py
scripts/doctor.py
scripts/render_report.py
scripts/run_case.py
scripts/validate_run.py
telecom_idea_research.py
tests/test_agent.py
tests/test_local_llm.py
tests/test_release_safety.py
tests/test_runner.py
tests/test_temiku_transfer.py
tests/test_transfer.py
Ветки (2)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.