НТО Джуниор
December 12

Разбор Финала НТО Junior: Технологии и Искусственный интеллект

О сложностях и успехах в цифрах

В финале участие приняли 171 команда! Мы подготовили аналитику, чтобы выяснить сложность задач и направлений: какие навыки Джуниоры освоили на все 100%, а какие нужно прокачать.

Зеленый показывает количество команд, которые успешно решили задачу

Серый, которые не отправили (не приступили к решению)

Красный - решение оказалось неверным

Процент решаемости показывает долю команд с верными решениями задач ко всем (кто решение отправлял).

Цвет столбцов соответствует рекомендуемым ролям в команде:

Лучшие решения команды показали в задачах:

  • теории вероятности,
  • теории графов,
  • назначения метрик качества модели, в особенности f1-меры.

Самыми сложными задачами оказались:

  • на форматирование данных (json-структуры) через Python-код,
  • проекты-Scratch,
  • расчет метрики IoU.

Задача  №2. Виртуальный помощник

Модель работает с погрешностью. Она распознает положительные отзывы с вероятностью 0.85 , а также ошибочно классифицирует нейтральные как положительные с вероятностью 0.1 и отрицательные как положительные с вероятностью 0.05. Известно, что положительные отзывы составляют 70% от всех поступающих отзывов, нейтральные – 20%, а отрицательные – 10%.

Решение

Вероятность распознавания положительного отзыва как положительного:
P(P∣P)=0.85

Вероятность распознавания нейтрального отзыва как положительного:
P(P∣N)=0.1

Вероятность распознавания отрицательного отзыва как положительного:
P(P∣B)=0.05

  • Доли отзывов:
    P(P)=0.7 (положительные)
    P(N)=0.2  (нейтральные)
    P(B)=0.1 (отрицательные)

Формула полной вероятности:

Подставим значения из условия в формулу:

Вычисления:

  1. 0.85⋅0.7=0.595
  2. 0.1⋅0.2=0.02
  3. 0.05⋅0.1=0.005

Теперь подставляем полученные значения:

P(положительный)=0.595+0.02+0.005=0.602

Вероятность того, что очередной отзыв будет распознан как положительный, составляет 0.602 или 60,2%.

Задача  №3. Сортировка мест в системе «Автопилот»

  1. Создать проект распознавания текста
  2. Создать метки классов и загрузить данные с экземплярами из txt файлов

3. Обучить модель

4. Протестировать

Пример ответа для входных данных:

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

business 95

Задача  №4. Геокодирование системы «Автопилот»

Cоставьте запрос для получения координат мест и их категорий, используя спецификацию API (https://yupest2.pythonanywhere.com/api/v2024). Откройте полученную ссылку в браузере и скопируйте содержимое формата JSON. Запишите его в переменную data.
Напишите программу, которая по категории мест (category) выводит список координат в формате:
lon,lat
100,500
200,300

Решение

  1. Составить запрос для получения координат мест: https://yupest2.pythonanywhere.com/api/celestial/get_locations/
  2. Перейти по этой ссылке, скопировать содержимое и записать его в переменную (data).
  3. Получить список локаций.
  4. Создать структуру словаря для записи координат мест по категориям.
  5. Осуществить запись координат в виде отформатированной строки (как в формате csv) с заголовками «lon,lat», где каждая строка записывается с новой.
  6. Осуществить вывод данных для вводимой категории (в любом регистре)

Задача  №5. Умный гид в системе «Автопилот»

Подробнее о задаче на классификацию категорий было в разборе задач отборочного этапа: https://teletype.in/@yupest/CfiDhy5tuK5#NkND

Пример входных данных:

{'lon': 850, 'lat': 1000}

Обучим модель «Распознавание числа» на тренировочных данных.

Протестируем результат.

Ответ для примера:

business 48

Задача  №6. Расчет кратчайшего маршрута

Формула для расчета евклидова расстояния между двумя точками x_1​, y_1​ и x_2​, y_2​ в двумерном пространстве выглядит так:

Где:

  • d — евклидово расстояние,
  • x_1​, y_1​ и x_2​, y_2​ — координаты двух точек.
Нужно узнать для какая точка ближайшая к целевой и ее путь

Решение

  1. Получить координаты точки (по id) из входных данных (a_lon, a_lat).
  2. Задать изначально большое значение min_distance.
  3. Обход локаций в цикле:
    1. Получение координат каждой точки.
    2. Расчет евклидового расстояния точки из входных данных с каждой из цикла.
    3. Проверка расстояния на минимальность, исключая 0 (ту же самую точку).
    4. Получение идентификатора точки с минимальной дистанцией.

Ссылка на проект Scratch с решением: https://disk.yandex.ru/d/sRMhbFgW0NlwlA

Аналогичное решение на Python. Данные переменной data скопированы из функции API о получении локаций: https://yupest2.pythonanywhere.com/api/celestial/get_locations/

Задача  №7.  Транспортная сеть с прогнозированием времени поездки

Матрица входных данных в задаче задается генеративно. Решение приводится для одного из вариантов генерации с целью объяснения подхода к получению верного ответа.

Этап 0. Для удобства граф, соответствующий матрице,  можем нарисовать.

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

Этап 1. Определяем начальные условия

Мы начинаем в пункте A и хотим добраться до пункта D. Для этого нужно проверить все возможные пути и найти самый короткий.

  1. Из A в D напрямую — невозможно.
  2. Из A в B — 10 минут.
  3. Из A в C — 15 минут.
  4. Из A в E — 30 минут.

Этап 2. Проверка путей через другие пункты

  1. Через пункт B:
    • Из A в B — 10 минут.
    • Из B в D — 25 минут.
    • Общая сумма: 10+25=35 минут.
  2. Через пункт C:
    • Из A в C — 15 минут.
    • Из C в D — невозможно (∞).
  3. Через пункт EEE:
    • Из A в E — 30 минут.
    • Из E в D — 15 минут.
    • Общая сумма: 30+15=45 минут.

Этап 3. Вывод

  • Через B: A→B→D время: 35 минут.
  • Через E: A→E→D, время: 45 минут.

Таким образом, наибыстрейшим путем передвижения из точки A в точку D для нашего концепт-кара будет маршрут: A→B→D, время передвижения  по которому составит 35 минут.

Рекомендуем тренажер: https://clck.ru/36d34k

Задача  №8. Детекция дорожных знаков: создания классификатора

  1. Обучите вашу модель на данных (по ссылке №1 или по ссылке №2) с параметрами по умолчанию. После обучения в самом правом окне, в правом верхнем углу нажмите кнопку “Экспорт модели”, после чего нажмите кнопку “Загрузить мою модель” (она будет расположена там же, где на картинке Обновить облачную модель). Скопируйте ссылку, под надписью “Ссылка общего доступа”.

2. Зайдите на Machine learning for kids в раздел Pretrained (Предобученный). В самом конце вы найдете карточку TensorFlow, в которой будет кнопка “open a TensorFlow model”, нажмите её.

3. Вставьте в верхнее поле публичную ссылку на модель Teachable Machine, которую вы скопировали ранее. Далее у вас откроется Scratch-проект с вашей моделью.

4. Загрузите шаблон сцены.

5. Добавьте блок распознавания "recognise (data) (label)" костюма "costume image", чтобы полученная метка добавлялась к списку predictions и запустите сцену при помощи зелёного флажка справа сверху.

6. Экспортируйте список predictions из 100 записей на сцене в текстовый файл. Для этого кликните на полученном списке правой кнопкой мыши (ПКМ) и нажмите экспорт.

Ссылка на проект с решением (с обученной моделью), можно загружать через обычный Scratch.

Задача  №9. Оценка классификации. Расчёт f1-меры

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

Подробнее о ней рассказано на каждом этапе нашей сферы на платформе: https://orbita.education/ru/events/379/5797

Решение проще всего осуществить программно с помощью Python-кода или на Scratch.

Решение

  1. Создать счетчик для обхода в цикле значений из data и predictions
  2. По условию, соответствующим матрицы ошибок рассчитать значения TP, FP, TN, FN.
  3. По формуле вычислить recall и precision.

    Precision = TP / (TP + FP) и показывает долю объектов, названных нашей моделью положительными и при этом действительно являющимися положительными.

    Recall = TP / (TP + FN) и показывает нам какую долю объектов положительного класса из всех объектов положительного класса нашел алгоритм.
  4. По формуле вычислить F1-меру.
Расчет recall и precision был разобран в отборочных попытках. В финале оставалось только вычислить F1-меру.

Ссылка на проект Scratch с решением: https://disk.yandex.ru/d/nn-ixk41C3hnNg

Программный способ решения:

Задача  №10. Детекция дорожных знаков: сегментация

  1. В каждом спрайте (сегменте изображения) считываем часть картинки с помощью backdrop image.
  2. Проверяем сегмент на наличие знака.
  3. Если знак обнаружен, подсвечиваем сегмент (рамку) с помощью костюма thin-border.
Решение
Спрайты

Проект-Scratch с решением: https://disk.yandex.ru/d/88pXI5nr5G1P-Q

Задача  №11. Оценка качества  детекции

IoU

Bounding box — это прямоугольник, который обводит объект на картинке. Например, если на картинке есть кошка, bounding box — это прямоугольник, который обводит эту кошку.

Как рассчитывается IoU?

  • Пересечение (Intersection) - это область, где предсказанный прямоугольник и правильный прямоугольник перекрываются (Area of Overlap).
  • Объединение (Union) - это общая область, которую покрывают оба прямоугольника (Area of Union).

Формула: IoU=Intersection/Union

Рассмотрим частные случаи пересечений правильного и предсказанного областей прямоугольников:

Чтобы узнать площадь пересечения прямоугольников, нужно перемножить его стороны по формуле площади прямоугольника:

Intersection=a⋅b

Рассмотрим частный случай, чтобы получить стороны a и b:

Зная координаты точек "верхнего правого" угла и "нижнего левого" (отмечены фиолетовыми точками), можем рассчитать стороны a и b.

Для получения общей площади Union нужно сложить площади настоящего прямоугольника и предсказанного и отнять площадь пересечения:

Union=data+predictions−Intersection

На вход подаются координаты области data и predictions (соответственно - 8 списков). В списках каждая строка рассматривает некоторый случай.

Решение

Программное решение:

Также эту задачу можно решить с помощью Табличных вычислений, например в Excel (_i - обозначает номер):

Задача  №12. Назначение метрик для оценки качества моделей машинного обучения

Accuracy

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

Precision

Доля объектов, которые классифицировались положительным и при этом действительно являются положительными.

Recall

Доля найденных положительных классов, по-русски её называют «Полнота».

F1-мера

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

IoU

Метрика используемая для понимания качества детекции, в её названии скрыта её суть.