ProfitPilot
Офлайн-агент тарифных кампаний Beeline. Он выбирает сегменты, тарифы и каналы через пилоты и решает задачу оптимизации кампаний под ограничения…
О проекте
Команда: 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.mdProfitPilot — агент тарифных кампаний 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.11 | 86/86 на каждой версии |
| Допустимые планы, mock-seeds 0–99 | 100/100 |
| Положительный чистый результат | 100/100 |
| Медианный net | +4 995 479 у.е. |
| Минимальный net | +2 880 048 у.е. |
Максимальное время Agent.act | 1,104 с |
Повторная генерация submission.csv | Побайтное совпадение |
Объединены стратегия второго проекта команды Temiku и проверки ProfitPilot.
Медиана выросла примерно в 3,25 раза относительно предыдущего transfer
на тех же 100 сценариях; превосходство над исходным Temiku не заявляется.
Это тест синтетического мока, не гарантия прибыли, баллов или победы на других
судейских эффектах. Методика, хеши, сравнение с Temiku и ограничения:
актуальный отчёт.
GitHub Actions отключён: по просьбе команды workflow удалён из репозитория.
Ранее задания не запускались из-за блокировки биллинга владельца аккаунта,
а не из-за ошибки агента. Локальные тесты и проверки run.py сохранены;
удалённый CI теперь не выполняется. Пояснение.
Как принимаются решения
- История очищается от дублей и недопустимых знаменателей. Она даёт слабые предварительные оценки, а не причинные эффекты текущей аудитории.
- Рассматриваются все допустимые тарифы и четыре канала. Крупные сегменты делятся разрешёнными фильтрами, без обращения к скрытым данным.
- Следующие гипотезы и размеры проб выбираются по наблюдениям и приблизительной пользе новой информации с учётом стоимости потраченных контактов.
- Связанные рабочие оценки переносят информацию между похожими гипотезами, сохраняя неопределённость для непроверенных сегментов.
- 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 готовит такое окружение автоматически.
Документация
- Жюри: требования, демонстрация и чек-лист сдачи.
- Актуальные проверки
transfer. - Зависимости, источники и собственный вклад.
- Исследование кейса.
- Архив инструментов исследования — не конкурсный агент.
Исторические отчёты baseline/fixed/adaptive, надёжность, UI и LLM-контракты сохранены для прозрачности; старые числа относятся только к указанным версиям.
Не публикуйте ключи, веса, ZIP, исходные CSV и внутренние файлы среды.
Проверка перед коммитом: python3 scripts/check_publish.py --worktree.
Проект не отправляет решение организаторам автоматически — сдачу выполняет участник.
Авторы коммитов
История коммитов
- 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 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.