Как я написал сервис для анализа конкурсных списков вузов и моделирования зачисления по приоритетам

от автора

Каждое лето сотни тысяч абитуриентов пытаются понять одну простую вещь:

Поступлю я или нет?

Казалось бы, все данные открыты. Вузы публикуют конкурсные списки, количество мест известно, правила приёма описаны на сайтах.

Но на практике ответить на этот вопрос гораздо сложнее, чем кажется.

Достаточно открыть любой конкурсный список и посмотреть своё место. Допустим, вы находитесь на 85 месте при 50 бюджетных местах.

Проходите?

Неизвестно.

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

В результате человек с 85 места вполне может оказаться зачисленным, а человек с 40 места — нет.

Именно из этой проблемы вырос проект AbitList.

Сайт: https://abitlist.ru


Почему конкурсные списки стали сложнее

После возвращения системы приоритетов задача оценки шансов на поступление стала заметно сложнее.

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

Например:

  1. Программная инженерия

  2. Информатика и вычислительная техника

  3. Прикладная математика

Если абитуриент проходит на первое направление, остальные варианты автоматически перестают участвовать в распределении.

Если не проходит — система пытается зачислить его по следующему приоритету.

В результате судьба одного человека начинает влиять на десятки других людей в разных конкурсах.

Посмотреть на один список уже недостаточно.

Нужно учитывать сразу всю систему целиком.


Как появилась идея проекта

Несколько лет назад я заинтересовался вопросом:

Можно ли по открытым конкурсным спискам восстановить реальную конкурсную ситуацию?

Тогда появился первый алгоритм расчёта поступления по приоритетам.

Со временем стало понятно, что большинству абитуриентов не хватает не самих списков, а инструментов для их анализа.

Большинство сайтов показывают таблицу с баллами и местами.

Но они не отвечают на главный вопрос:

Что произойдёт дальше?

Так постепенно и появился AbitList — сервис анализа конкурсных списков и моделирования зачисления.


Что показывает сайт

Главная идея проекта заключается в том, чтобы показывать не только текущее положение абитуриента, но и прогнозировать его конкурсную ситуацию.

Для каждого направления отображаются:

  • место в конкурсе;

  • баллы;

  • наличие согласия;

  • статус в вузе;

  • количество мест;

  • положение по текущим приоритетам;

  • расчётное положение после подачи согласия.

Но самое интересное начинается дальше.


Почему важно видеть согласие в другом вузе

В конкурсных списках отображается не только наличие согласия, но и информация о том, где оно подано.

Если рядом с абитуриентом отображается:

Согласие в другом вузе

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

Да, в любой момент он может изменить своё решение.

Но статистически такой человек гораздо чаще поступает именно туда, куда уже подал согласие.

Поэтому эта информация позволяет лучше понимать реальную конкуренцию.

Например, если перед вами находятся 20 человек, но у 15 из них согласие уже лежит в других вузах, ваша ситуация выглядит намного лучше, чем кажется по обычному списку.


Колонка «При подаче согласия»

На мой взгляд, это самая полезная часть сервиса.

Она отвечает на вопрос:

Что произойдёт, если этот абитуриент прямо сейчас подаст согласие на это направление?

Для каждого человека рассчитывается:

  • место, которое он займёт после подачи согласия;

  • проходит ли он по баллам;

  • окажется ли он в числе зачисляемых;

  • будет ли зачислен по текущему приоритету.

Причём это работает не только для вашей анкеты.

Можно открыть любого абитуриента в списке и посмотреть его конкурсную ситуацию.

Это позволяет гораздо лучше понимать динамику конкурса.


Страница абитуриента

Для каждого абитуриента формируется отдельная страница.

На ней можно увидеть:

  • все вузы, в которые поданы документы;

  • все направления подготовки;

  • текущие места;

  • приоритеты;

  • наличие согласия;

  • прохождение по каждому направлению;

  • прогноз при подаче согласия.

Фактически получается полная карта поступления конкретного человека.

Особенно интересно наблюдать за тем, как один сильный абитуриент влияет сразу на несколько конкурсных списков.


Почему это сложно считать

На первый взгляд задача выглядит простой.

Можно предположить:

  1. Отсортировали людей по баллам.

  2. Взяли первые N человек.

  3. Получили результат.

Но система приоритетов ломает такой подход.

Рассмотрим пример.

Есть два направления:

  • Программная инженерия

  • Информатика и вычислительная техника

И один сильный абитуриент.

Он проходит на оба направления.

Но указывает:

  1. Программная инженерия

  2. Информатика и вычислительная техника

Тогда он занимает место только на первом направлении.

На втором его место освобождается.

Это место может занять другой человек.

Который, в свою очередь, освободит место где-то ещё.

Получается цепочка взаимосвязанных изменений.

Поэтому ситуацию нельзя посчитать за один проход.


Алгоритм расчёта

На вход алгоритм получает список заявлений.

Для каждого заявления известны:

  • идентификатор абитуриента;

  • конкурс;

  • количество мест;

  • приоритет;

  • баллы;

  • дополнительные критерии ранжирования.

Далее выполняется серия итераций.

На каждой итерации для каждого абитуриента определяется наиболее высокий приоритет, на который он проходит.

Если человек проходит на приоритет №1, все остальные его заявления временно исключаются из распределения.

После этого пересчитываются остальные конкурсы.

Процесс повторяется до достижения устойчивого состояния.

На практике обычно требуется от 6 до 10 проходов по данным.

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


Откуда берутся данные

Все данные используются исключительно из открытых источников.

Основной источник — официальные сайты вузов.

На первый взгляд кажется, что это простая задача.

На практике каждый вуз публикует информацию по-своему.

Можно встретить:

  • HTML-таблицы;

  • Excel-файлы;

  • JSON API;

  • собственные информационные системы;

  • нестандартные форматы выгрузки.

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


Какие вузы доступны сейчас

На данный момент в системе доступны данные следующих вузов:

  • НГТУ им. Р. Е. Алексеева

  • ННГАСУ

  • ННГУ им. Лобачевского

  • НИУ ВШЭ (Москва)

  • НИУ ВШЭ (Санкт-Петербург)

  • НИУ ВШЭ (Пермь)

  • НИУ ВШЭ (Нижний Новгород)

  • МГУ им. М. В. Ломоносова

  • РТУ МИРЭА (Москва)

  • РТУ МИРЭА (Фрязино)

  • РТУ МИРЭА (Ставрополь)

  • СПбПУ

Список вузов будет постепенно расширяться.


Технологии проекта

Проект состоит из нескольких частей.

Backend

C# / .NET

Используется для:

  • загрузки данных;

  • обработки конкурсных списков;

  • расчёта конкурсной ситуации;

  • публикации итоговой базы.

API

PHP

Используется как слой доступа к данным для клиентских приложений.

Frontend

Flutter

Flutter был выбран благодаря возможности использовать единую кодовую базу и высокой скорости разработки интерфейсов.


Что дальше

Проект активно развивается.

Сейчас главная задача — улучшение качества данных, расширение базы вузов и развитие аналитических возможностей.

Основная идея остаётся неизменной:

не просто показывать место абитуриента в таблице, а помогать понять его реальную конкурсную ситуацию.

Потому что главный вопрос любого поступающего всегда один и тот же:

Что произойдёт, если я подам согласие прямо сейчас?


Ссылки

🌐 Сайт: https://abitlist.ru

📢 Telegram-канал проекта: https://t.me/abitlistru

💬 Чат проекта: https://t.me/abitlistru_chat

📱 Также приглашаю в мой Telegram-канал о Flutter-разработке:

https://t.me/flutterpulse

Там я пишу о Flutter, Dart, архитектуре приложений и разработке собственных проектов.

ссылка на оригинал статьи https://habr.com/ru/articles/1055754/