Задача: Рекомендательная система
Дан файл, который вы можете скачать в форматах XLSX, ODS и CSV. В каждой строке записаны значения prob1, prob2, prob3, prob4, label. Четыре значения prob1 — prob4 — это вероятности, которыми четыре независимых рекомендательных алгоритма оценили, понравится ли пользователю фильм; label — реальное мнение пользователя о фильме (1 — понравился, 0 — не понравился).
Считаем достаточно высокими вероятности \(\ge 0.25\). Обозначим через opt_avg среднее по всем значениям вероятностей, не меньших 0.25. Если таких значений нет, то под opt_avg понимаем обычное среднее четырёх чисел prob1 — prob4.
Пример: Пусть в строке prob1 = 0.10, prob2 = 0.90, prob3 = 0.60, prob4 = 0.30. Тогда три вероятности — prob2, prob3, prob4 — достаточно высокие и
\[ \text{opt\_avg} = \frac{0.90 + 0.60 + 0.30}{3} = 0.6 \]Если opt_avg \(\ge 0.5\), предсказываем pred = 1. Иначе — pred = 0.
В скольких строках pred совпадает с label?
Решение:
Для решения этой задачи нам нужно выполнить следующие шаги для каждой строки данных:
- Прочитать значения prob1, prob2, prob3, prob4 и label.
- Определить, какие из вероятностей prob1-prob4 "достаточно высокие" (то есть \(\ge 0.25\)).
- Вычислить opt_avg:
- Если есть "достаточно высокие" вероятности, то opt_avg — это среднее только по ним.
- Если таких вероятностей нет, то opt_avg — это среднее по всем четырем вероятностям.
- Вычислить предсказанное значение pred:
- Если opt_avg \(\ge 0.5\), то pred = 1.
- Иначе pred = 0.
- Сравнить pred с label. Если они совпадают, увеличить счетчик совпадений.
Поскольку файл с данными не предоставлен напрямую, я не могу выполнить вычисления для всех строк. Однако я могу показать, как это делается для нескольких примеров строк, а затем дать общий подход.
Пример 1 (из условия задачи):
prob1 = 0.10, prob2 = 0.90, prob3 = 0.60, prob4 = 0.30, label = ? (label не указан в примере, но мы его будем использовать для сравнения)
- Достаточно высокие вероятности (\(\ge 0.25\)):
- prob1 = 0.10 (нет)
- prob2 = 0.90 (да)
- prob3 = 0.60 (да)
- prob4 = 0.30 (да)
- Вычисление opt_avg: \[ \text{opt\_avg} = \frac{0.90 + 0.60 + 0.30}{3} = \frac{1.80}{3} = 0.6 \]
- Вычисление pred:
opt_avg = 0.6. Поскольку \(0.6 \ge 0.5\), то pred = 1.
- Сравнение с label:
Если бы label был 1, то pred совпал бы с label. Если бы label был 0, то не совпал бы.
Пример 2 (гипотетический):
prob1 = 0.15, prob2 = 0.20, prob3 = 0.10, prob4 = 0.05, label = 0
- Достаточно высокие вероятности (\(\ge 0.25\)):
- prob1 = 0.15 (нет)
- prob2 = 0.20 (нет)
- prob3 = 0.10 (нет)
- prob4 = 0.05 (нет)
- Вычисление opt_avg:
Среднее по всем четырем числам:
\[ \text{opt\_avg} = \frac{0.15 + 0.20 + 0.10 + 0.05}{4} = \frac{0.50}{4} = 0.125 \] - Вычисление pred:
opt_avg = 0.125. Поскольку \(0.125 < 0.5\), то pred = 0.
- Сравнение с label:
pred = 0, label = 0. Совпадают.
Пример 3 (гипотетический):
prob1 = 0.80, prob2 = 0.70, prob3 = 0.60, prob4 = 0.90, label = 0
- Достаточно высокие вероятности (\(\ge 0.25\)):
- prob1 = 0.80 (да)
- prob2 = 0.70 (да)
- prob3 = 0.60 (да)
- prob4 = 0.90 (да)
- Вычисление opt_avg:
Среднее по всем четырем числам:
\[ \text{opt\_avg} = \frac{0.80 + 0.70 + 0.60 + 0.90}{4} = \frac{3.00}{4} = 0.75 \] - Вычисление pred:
opt_avg = 0.75. Поскольку \(0.75 \ge 0.5\), то pred = 1.
- Сравнение с label:
pred = 1, label = 0. Не совпадают.
Общий подход для школьника:
Чтобы решить эту задачу, нужно открыть предоставленный файл (например, в Excel или LibreOffice Calc, если это XLSX/ODS, или в текстовом редакторе, если это CSV). Затем для каждой строки вручную или с помощью формул в табличном процессоре выполнить описанные выше шаги.
Алгоритм для каждой строки:
- Создать список (или массив) для хранения "достаточно высоких" вероятностей.
- Для каждой из prob1, prob2, prob3, prob4:
- Если значение \(\ge 0.25\), добавить его в список.
- Вычислить opt_avg:
- Если список "достаточно высоких" вероятностей не пуст:
- opt_avg = сумма значений в списке / количество значений в списке.
- Иначе (список пуст):
- opt_avg = (prob1 + prob2 + prob3 + prob4) / 4.
- Если список "достаточно высоких" вероятностей не пуст:
- Вычислить pred:
- Если opt_avg \(\ge 0.5\), то pred = 1.
- Иначе pred = 0.
- Сравнить pred с label. Если pred == label, увеличить счетчик.
После обработки всех строк, значение счетчика будет ответом.
Без доступа к файлу данных, я не могу предоставить числовой ответ. Школьнику необходимо будет выполнить эти действия с файлом.
