AAYMA
RU
Войти

Beeline Tariff Marketing Campaign Agent

Агент планирует кампании смены тарифа для 23 441 синтетического абонента: запускает пилоты, учитывает их результаты и выбирает до 10 кампаний…

Рабочий MVP
Команда «SapaTech» 16💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: SapaTech
Кейс HackAlem.ai: Телеком — Beeline
Стадия: Рабочий MVP

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

Суть

Агент планирует кампании смены тарифа для 23 441 синтетического абонента: запускает пилоты, учитывает их результаты и выбирает до 10 кампаний (сегмент, тариф, канал) при ограничениях бюджета и охвата; результат пишется в submission.csv.

Как устроено

Агент реализует официальный интерфейс Agent.act(env), читает профили абонентов, справочник тарифов и историю переходов change_tariff.csv. Модуль strategy/ строит кандидатов по текущему тарифу и ARPU-сегменту, уточняет исторические оценки результатами до 20 пилотов (сначала дешёвые push-пилоты, затем повторные проверки перспективных кандидатов) и собирает портфель кампаний под лимиты: 15 000 контактов, бюджет 100 000, до 5 000 абонентов на кампанию. Отдельный набор evals/ проверяет сырой ответ, соблюдение лимитов, влияние обратной связи от пилотов и воспроизводимость.

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

  • отбор портфеля кампаний под ограничения бюджета и контактов
  • оценки по истории переходов тарифов
  • обновление оценок по результатам пилотов
  • проверка устойчивости на множестве seed
  • изолированное сравнение версий агента

Метрики

seed 42: net +253 392, 7 кампаний + 20 пилотов, 11 558 контактов, бюджет 99 998/100 000; 100 seed: средний net +629 492 против +286 701 у прежней версии, убыточных прогонов 5 против 27; 10 прогонов: медиана +622 922

Особенности

Строгая экспериментальная дисциплина: версии стратегии сравниваются на одних и тех же 100 seed в изолированных процессах, а в README честно сказано, что на демо-seed результат новой версии ниже. Работа команды разбита на задачи через папку coordination/ (задачи T-xx, инбоксы, промпты для AI-агентов, квитанции о передаче) — хороший пример организованной AI-assisted разработки.

Стек

Python · pandas · NumPy · unittest


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

README

README.md

Beeline Tariff Marketing Campaign Agent

SapaTech · HackAlem AI 2026 · трек 04 «Телекоммуникации»

Агент планирует кампании смены тарифа для 23 441 синтетического абонента: изучает профиль и историю переходов, проводит пилоты, учитывает их результаты и выбирает до 10 кампаний. Цель — максимизировать прирост ARPU за вычетом стоимости контактов, соблюдая ограничения бюджета и охвата.

Основной пользователь — маркетинговый аналитик, планирующий кампании на следующий месяц. На входе — аудитория и история смены тарифов; на выходе — план с целевыми сегментами, тарифами и каналами коммуникации в submission.csv.

Решение запускается в терминале и реализует официальный интерфейс Agent.act(env) -> list[dict]. Используется локальная статистическая стратегия; ключи API, внешние модели, GPU и веб-сервер не требуются.

Технологии и данные

  • Python 3.11+ — агент, управление пилотами и проверки.
  • pandas 3.0.1 — чтение CSV и обработка профилей и истории переходов.
  • NumPy 2.3.5 — численные расчёты оценок и портфеля кампаний.
  • unittest из стандартной библиотеки — автоматические тесты.

Версии сторонних библиотек зафиксированы в requirements.txt. Официальная среда предоставляет профиль из customer_profile.csv, тарифы из data/dict_tariff.csv и параметры каналов. Агент отдельно читает data/change_tariff.csv для исторических оценок. Все эти данные поставляются организаторами в ZIP кейса; внешние источники данных и API не используются.

Что нужно для запуска

  • Git и доступ к этому репозиторию.
  • Python 3.11 или новее с поддержкой venv и pip; проверен Python 3.13.7 на macOS.
  • Интернет для клонирования и установки зависимостей. После установки агент работает локально.
  • Официальный beeline_case_participants.zip от организаторов. В нём находятся данные, среда, evaluator и генератор CSV. Эти файлы не хранятся в Git. Судьям нужен исходный пакет кейса Beeline; если его нет, запросите его у организаторов.

Клонируйте полный репозиторий, включая папку strategy/. Файлы strategy/__init__.py и strategy/core.py нужны для запуска командной стратегии; evals/ и scripts/ — для описанных ниже проверок и установки материалов. Передачи одного agent.py недостаточно для воспроизведения нашего результата: при отсутствии strategy/ он использует резервный шаблон организаторов, который генерирует другой CSV.

Используйте новый клон: команда make_submission.py заново создаст в нём submission.csv. Установщик перенесёт из ZIP только 13 необходимых файлов без изменения их содержимого. В командах ниже замените путь к архиву на свой; кавычки позволяют использовать путь с пробелами. Запускайте команды по порядку из корня клона и переходите к следующей только после успешного завершения предыдущей.

Официальный интерфейс проверки

По ТЗ проверка выполняется через python local_eval.py, а CSV создаётся через python make_submission.py. Оба скрипта из пакета организаторов импортируют Agent из agent.py и вызывают Agent().act(env) с подготовленной средой. Этот интерфейс используется и для работы агента со скрытой средой судейства. Самостоятельный запуск python agent.py в текущей версии не проводит оценку: используйте последовательность ниже. После установки Agent.act(env) работает без интернета и не устанавливает зависимости.

Запуск на macOS / Linux

Убедитесь, что python3 --version показывает Python 3.11+. Если установлено несколько версий, используйте подходящую команду, например python3.13, вместо python3 при создании окружения. Активация venv не нужна.

git clone https://github.com/BAITC-Hacks/hack-6e2e5c8b-sapatech.git beeline_check
cd beeline_check
git switch main
python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python scripts/prepare_case.py '/absolute/path/to/beeline_case_participants.zip'
.venv/bin/python -m unittest scripts.test_agent strategy.tests.test_core strategy.tests.test_robustness evals.test_contract_checks evals.test_compare_isolated -v
.venv/bin/python local_eval.py
.venv/bin/python evals/check_agent.py --agent agent.py --package .
.venv/bin/python evals/check_agent.py --agent agent.py --package . --feedback-check
.venv/bin/python make_submission.py
git diff --exit-code --ignore-space-at-eol -- submission.csv

Запуск на Windows / PowerShell

Убедитесь, что py -3 --version показывает Python 3.11+. Команды используют Python Launcher (py); если его нет, используйте python вместо py -3, предварительно проверив версию. Активация venv и изменение ExecutionPolicy не нужны.

git clone https://github.com/BAITC-Hacks/hack-6e2e5c8b-sapatech.git beeline_check
cd beeline_check
git switch main
py -3 --version
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe scripts/prepare_case.py 'C:\path\to\beeline_case_participants.zip'
.\.venv\Scripts\python.exe -m unittest scripts.test_agent strategy.tests.test_core strategy.tests.test_robustness evals.test_contract_checks evals.test_compare_isolated -v
.\.venv\Scripts\python.exe local_eval.py
.\.venv\Scripts\python.exe evals/check_agent.py --agent agent.py --package .
.\.venv\Scripts\python.exe evals/check_agent.py --agent agent.py --package . --feedback-check
.\.venv\Scripts\python.exe make_submission.py
git diff --exit-code --ignore-space-at-eol -- submission.csv

Полный чистый запуск подтверждён на macOS. Для Linux и Windows приведены соответствующие команды; в последней независимой проверке эти ОС не запускались.

Как понять, что проверка прошла

ШагОжидаемый результат
Установка ZIPInstalled 13 unchanged files
Unit-тестыRan 54 tests, затем OK
local_eval.pyСтатус: PASS, чистый результат около +253 392 на seed 42
check_agent.py"errors": [], 7 финальных кампаний и 20 пилотов
--feedback-check"feedback_changes_campaigns": true; errors пуст в обоих сценариях
make_submission.pysubmission.csv с 7 строками кампаний и заголовком
Последний git diffНет вывода и код завершения 0: CSV совпал с версией в Git с учётом различий LF/CRLF

На seed 42 суммарно используются 11 558 контактов и 99 998 из 100 000 единиц бюджета. Выполнение Agent.act в проверке на macOS заняло около 2 секунд. Строка evaluator «Кампаний: 27» включает 20 пилотов и 7 финальных кампаний. Предупреждения о cap 5 000, частичном охвате и повторных контактах допустимы; проверка исходного ответа через check_agent.py должна завершиться без ошибок.

Проверка на нескольких сценариях

После установки выполните:

.venv/bin/python local_eval.py --runs 10

В PowerShell используйте .\.venv\Scripts\python.exe local_eval.py --runs 10. В независимой проверке все 10 прогонов завершились: 9 прибыльных, 1 убыточный; медиана +622 922, минимум −70 362, максимум +1 349 809.

Текущая версия включает стратегию T-10. На одинаковых проверочных seed 100–199 она сравнивалась с предыдущей версией в отдельных процессах и каталогах:

Показатель, 100 прогоновПредыдущая версияТекущая T-10
Средний net+286 700.61+629 492.15
Убыточных прогонов275
Худший net−742 519.79−389 787.24

Независимое повторение на macOS подтвердило все 200 результатов, отсутствие ошибок исходного ответа, нарушений лимитов и перехода на резервный шаблон. T-10 лучше в 76 из 100 пар. На демонстрационном seed 42 результат снизился с +327 917.04 до +253 391.73; улучшение на каждом запуске не гарантируется. Подробности и воспроизводимые данные: отчёт T-10 и результаты по seed. Старые отчёты T-04/T-05 и аудиты в docs/planning/ относятся к прежней стратегии.

Данные синтетические и не описывают реальных клиентов или показатели Beeline. Mock-среда проверяет механику, но её эффекты отличаются от скрытого судейства: эти числа не предсказывают итоговый балл и не гарантируют прибыль.

Как работает решение

  1. agent.py читает публичные данные и историю, управляет пилотами, временем и ресурсами, проверяет формат финального ответа.
  2. strategy/ строит кандидатов по текущему тарифу и ARPU-сегменту, уточняет исторические оценки по результатам пилотов и выбирает портфель кампаний. После восьми пилотов приоритет получают повторные проверки перспективных кандидатов. Наблюдения объединяются по каналу; повторные push-пилоты снижают шум измерений, сохраняя неопределённость переноса на платные каналы.
  3. evals/ проверяет исходный ответ до исправлений официального evaluator, соблюдение лимитов, влияние обратной связи и воспроизводимость.
  4. Официальный make_submission.py запускает агента на seed 42 и создаёт CSV.

Ограничения: 1–10 финальных кампаний, до 5 000 абонентов на кампанию, 15 000 контактов и 100 000 бюджета вместе с пилотами; до 20 пилотов с запросом 10–200 абонентов. Каналы: push, sms, digital_ads, call. Один абонент даёт только лучший эффект, но повторные контакты расходуют ресурсы.

История переходов не доказывает причинный эффект кампании. Перенос оценок бесплатных push-пилотов на платные каналы — приближение без прямой проверки пилотами на этих каналах. Подробнее: описание стратегии и разбор рисков.

Если запуск не удался

Сообщение / ситуацияЧто проверить
Repository not found при клонированииДоступ вашей учётной записи GitHub к командному репозиторию
Ошибка установки numpy/pandasВерсию Python (3.11+), наличие pip и доступ к PyPI; используйте зафиксированный requirements.txt
Не найден local_eval.py, mock_environment или CSVУспешно ли выполнен scripts/prepare_case.py; текущий каталог должен быть корнем клона
FileNotFoundError при установке ZIPЗаменён ли пример пути на существующий архив
KeyError при установке ZIPИспользуется ли исходный ZIP кейса: установщик ожидает официальную структуру файлов
Refusing to overwrite different fileИспользуйте новый клон: установщик сохраняет уже существующие отличающиеся файлы
Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
63
Авторы
4
Файлы
84
Ветки
10

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

Нурсултан Нурмухамет 32Erlan Mereev 15Bauyrzhan Myrzagaliyev 12Bauyrzhan Myrzagaliyev 4

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

  • 2026-09-23 17:41docs(delivery): synchronize judge instructions with robust strategy [T-10]Bauyrzhan Myrzagaliyev
  • 2026-09-23 17:39feat(integration): adopt verified robust strategy [T-10]Bauyrzhan Myrzagaliyev
  • 2026-09-23 17:31docs(strategy): record canonical source hash for delivery [T-10]Нурсултан Нурмухамет
  • 2026-09-23 17:30docs(security): record dependency license and runtime audit [T-11]Нурсултан Нурмухамет
  • 2026-09-23 17:29feat(strategy): improve pilot confirmation and channel uncertainty [T-10]Нурсултан Нурмухамет
  • 2026-09-23 17:29test(evals): compare strategy revisions in isolated processes [T-10]Нурсултан Нурмухамет
  • 2026-09-23 17:19docs(readme): document runtime contract and required modules [T-09]Bauyrzhan Myrzagaliyev
  • 2026-09-23 16:47docs(readme): clarify judge setup and verification [T-09]Bauyrzhan Myrzagaliyev
Все коммиты (63)
  • 2026-09-23 16:22docs(evaluation): align demo with verified baseline [T-09]Erlan Mereev
  • 2026-09-23 16:21docs(evaluation): verify baseline setup and update README [T-09]Erlan Mereev
  • 2026-09-23 16:17docs(evaluation): acknowledge ER-002 round [T-09]Erlan Mereev
  • 2026-09-23 16:05docs(delivery): preserve baseline package and rehearse demo [T-08]Нурсултан Нурмухамет
  • 2026-09-23 16:00docs(coordination): start bounded delivery round before 17:00 [T-08]Нурсултан Нурмухамет
  • 2026-09-23 15:52docs(planning): publish audit and next-round role plans [T-07]Bauyrzhan Myrzagaliyev
  • 2026-09-23 15:22docs(coordination): record final stop confirmations [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:21docs(review): confirm T-06 scheduler deletion [T-06]Bauyrzhan Myrzagaliyev
  • 2026-09-23 15:19docs(review): record T-06 stop pending scheduler deletion [T-06]Bauyrzhan Myrzagaliyev
  • 2026-09-23 15:19docs(strategy): record T-04 stop state [T-04]Bauyrzhan Myrzagaliyev
  • 2026-09-23 15:18docs(evaluation): record Erlan stop and scheduler deletion [T-05]Erlan Mereev
  • 2026-09-23 15:16feat(delivery): finalize artifact and request team stop [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:12docs(integration): preserve public channel-risk evidence [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:11docs(coordination): accept exact dependency setup review [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:10docs(strategy): analyze seed 21 channel risk [T-04]Bauyrzhan Myrzagaliyev
  • 2026-09-23 15:08docs(review): verify exact Beeline install [T-06]Bauyrzhan Myrzagaliyev
  • 2026-09-23 15:05docs(coordination): confirm replacement scheduler and runbook acceptance [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:03docs(integration): merge verified Windows runbook [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:02docs(coordination): assign bounded risk and setup reviews [T-03]Нурсултан Нурмухамет
  • 2026-09-23 15:00docs(evaluation): document verified Windows run [T-05]Erlan Mereev
  • 2026-09-23 14:56docs(coordination): verify transfer and accept team reports [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:52chore(integration): merge verified short-pilot checks [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:51docs(review): publish independent Agent.act audit [T-06]Bauyrzhan Myrzagaliyev
  • 2026-09-23 14:50docs(coordination): accept core audit and record scheduler blocker [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:49docs(integration): accept repeated-contact audit [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:49docs(evaluation): hand off ER-001 revision 2 [T-05]Erlan Mereev
  • 2026-09-23 14:47fix(evaluation): distinguish pilot requests and actual reach [T-05]Erlan Mereev
  • 2026-09-23 14:46docs(strategy): audit marginal value of repeated contacts [T-04]Bauyrzhan Myrzagaliyev
  • 2026-09-23 14:44docs(coordination): acknowledge Erlan scheduled task claim [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:42docs(coordination): accept recheck and resolve CSV hash difference [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:42docs(evaluation): claim ER-001 verification [T-05]Erlan Mereev
  • 2026-09-23 14:42docs(integration): accept Erlan history-fix recheck [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:36feat(coordination): add scheduled task inboxes and stop protocol [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:31test(evaluation): recheck integrated agent after history fix [T-05]Erlan Mereev
  • 2026-09-23 14:29docs(integration): preserve strategy robustness evidence [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:25fix(integration): accept official caps and verified team metrics [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:23docs(strategy): record robustness comparison [T-04]Bauyrzhan Myrzagaliyev
  • 2026-09-23 14:23docs(evaluation): record integrated ten-seed results [T-05]Erlan Mereev
  • 2026-09-23 14:23fix(evaluation): classify official campaign caps correctly [T-05]Erlan Mereev
  • 2026-09-23 14:22docs(integration): include Erlan five-minute demo [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:20fix(agent): load history from the official package directory [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:17test(integration): add raw audit and isolated CSV verification [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:16docs(evaluation): prepare five-minute Beeline demo [T-05]Erlan Mereev
  • 2026-09-23 14:15test(evaluation): audit raw output across seeds [T-05]Erlan Mereev
  • 2026-09-23 14:12docs(evaluation): record template baseline and verification commands [T-05]Erlan Mereev
  • 2026-09-23 14:11feat(integration): connect Bauyrzhan strategy core [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:11test(integration): include Erlan contract checks [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:09feat(strategy): implement pilot-aware campaign core [T-04]Bauyrzhan Myrzagaliyev
  • 2026-09-23 14:08feat(agent): guard public pilot orchestration and fallback [T-03]Нурсултан Нурмухамет
  • 2026-09-23 14:07test(evaluation): verify raw campaigns and pilot feedback [T-05]Erlan Mereev
  • 2026-09-23 14:03chore(setup): measure official Beeline baseline locally [T-03]Нурсултан Нурмухамет
  • 2026-09-23 13:56docs(coordination): complete named team plan and prompts [T-02]Нурсултан Нурмухамет
  • 2026-09-23 13:52docs(coordination): hand off strategy core to Bauyrzhan [T-02]Нурсултан Нурмухамет
  • 2026-09-23 13:41docs(coordination): record T-01 handoff [T-01]Bauyrzhan Myrzagaliyev
  • 2026-09-23 13:40docs(hackathon): select Beeline telecom case [T-01]Bauyrzhan Myrzagaliyev
Структура репозитория (84 файлов)
.env.example
.gitignore
AGENTS.md
HACKATHON.md
PLAN.md
README.md
agent.py
controller/README.md
coordination/CONTROL.md
coordination/MAILBOX.md
coordination/README.md
coordination/RECEIPTS.md
coordination/decisions.md
coordination/inbox/BAUYRZHAN_CORE.md
coordination/inbox/BAUYRZHAN_REVIEW.md
coordination/inbox/ERLAN.md
coordination/people/BAUYRZHAN.md
coordination/people/ERLAN.md
coordination/people/NURSULTAN.md
coordination/prompts/BAUYRZHAN_CORE.md
coordination/prompts/BAUYRZHAN_REVIEW.md
coordination/prompts/ERLAN.md
coordination/tasks/T-01.md
coordination/tasks/T-02.md
coordination/tasks/T-03.md
coordination/tasks/T-04.md
coordination/tasks/T-05.md
coordination/tasks/T-06.md
coordination/tasks/T-07.md
coordination/tasks/T-09.md
coordination/tasks/T-10.md
coordination/tasks/T-11.md
coordination/tasks/TEMPLATE.md
demo_data/README.md
deploy/README.md
docs/contracts.md
docs/evaluation/ER-001-r1.md
docs/evaluation/ER-001-r2.md
docs/evaluation/ER-001-r3.md
docs/evaluation/ER-002-r1.md
docs/evaluation/T-11-security-license.md
docs/evaluation/baseline.md
docs/evaluation/demo.md
docs/evaluation/integrated-f95a8e3.md
docs/evaluation/recheck-9f782f1.md
docs/planning/next_round_2026_09_23/README.md
docs/planning/next_round_2026_09_23/bauyrzhan_plan_ru.md
docs/planning/next_round_2026_09_23/erlan_plan_ru.md
docs/planning/next_round_2026_09_23/evidence/baseline_100.json
docs/planning/next_round_2026_09_23/evidence/candidate_100.json
docs/planning/next_round_2026_09_23/evidence/feedback_summary.json
docs/planning/next_round_2026_09_23/evidence/multi_seed_summary.json
docs/planning/next_round_2026_09_23/evidence/official_seed42.log
docs/planning/next_round_2026_09_23/evidence/resilience_checks.json
docs/planning/next_round_2026_09_23/evidence/submission_check.json
docs/planning/next_round_2026_09_23/evidence/unit_tests.log
docs/planning/next_round_2026_09_23/nursultan_plan_ru.md
docs/planning/next_round_2026_09_23/project_actual_audit_2026_09_23_ru.md
evals/README.md
evals/check_agent.py
evals/check_submission.py
evals/compare_agents.py
evals/compare_isolated.py
evals/contract_checks.py
evals/public_stub.py
evals/test_compare_isolated.py
evals/test_contract_checks.py
executor/README.md
jobs/.gitkeep
requirements.txt
scripts/prepare_case.py
scripts/test_agent.py
strategy/README.md
strategy/__init__.py
strategy/core.py
strategy/reports/B1-001-r1.md
strategy/reports/B1-002-r1.md
strategy/reports/T-10-evidence.json
strategy/reports/T-10-robustness.md
strategy/tests/official_smoke.py
strategy/tests/test_core.py
strategy/tests/test_robustness.py
submission.csv
web/README.md
Ветки (10)

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

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

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