Предобработка табличных данных и разреженная матрица

Любая коллаборативная фильтрация опирается на историю взаимодействий читателей с каталогом. В этой части проекта предстоит собрать матрицу формата «пользователь — книга», где на пересечении строк и столбцов стоят реальные оценки от одного до десяти баллов или от одного до пяти баллов. Главная техническая сложность здесь заключается в сильной разреженности данных, ведь отдельный человек читает за жизнь от силы пару сотен произведений из миллионного каталога.

Для учебного проекта отбери плотное подмножество данных через библиотеку Pandas на Python. Оставь только тех пользователей, которые оценили минимум двадцать книг, и произведения, получившие хотя бы тридцать оценок. Пропуски в таблице заполни нулями, но сохрани разделение между оценкой ноль и фактом отсутствия прочтения. Продемонстрируй в отчёте размерность полученной матрицы до фильтрации и после неё.

Вычисление косинусного сходства между объектами

Ты реализуешь подход Item-Based Collaborative Filtering, где сходство вычисляется между векторами самих произведений, а не между профилями читателей. Вектор книги состоит из оценок, которые ей выставили разные читатели. Чем ближе направление двух таких векторов в n-мерном пространстве оценок, тем выше вероятность, что прочитавшему один роман понравится и второй.

Математической основой служит косинусная мера, то есть скалярное произведение векторов, деленное на произведение их евклидовых длин. Косинусное сходство возвращает число от минус единицы до единицы, либо от нуля до единицы для неотрицательных рейтингов. В тексте работы приведи формулу, распиши её вычисление вручную на маленьком примере из трех пользователей и двух книг, а затем покажи код на NumPy или scikit-learn, обрабатывающий полный массив.

Генерация рекомендаций и проверка на тестовой группе

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

Для финального тестирования сформируй контрольную выборку из пяти человек. Собери от них стартовые оценки для пяти или десяти популярных книг, запусти алгоритм и предложи каждому ознакомиться с выданным списком из трех новых произведений. Зафиксируй процент попадания во вкус в виде таблицы субъективной точности рекомендаций.

Что преподаватель оценивает в проекте по информатике

  • Корректность программного кода, включая чистоту скрипта, обработку исключений и отсутствие ручных циклов там, где применяются векторные операции NumPy.
  • Математическое обоснование выбора метрики сходства и понимание геометрического смысла косинусного расстояния между векторами оценок.
  • Умение очищать массив от аномалий, дубликатов и слишком редких записей перед запуском вычислений.
  • Наглядность визуализации результатов через тепловую карту корреляции книг и сводные графики распределения рейтингов.

Источники данных для обучения алгоритма

Не придумывай оценки вручную для сотен строк, используй открытые академические выборки. Для школьного проекта идеально подходит фрагмент датасета Book-Crossing, содержащий более миллиона оценок для двухсот семидесяти тысяч произведений. Также стабильно работает выборка Goodbooks-10k с платформы Kaggle, где собраны данные по десяти тысячам популярных книг и шести миллионам читательских оценок. Оба набора распространяются в виде CSV-файлов и без проблем читаются стандартным методом read_csv.

Частые вопросы

Чем Item-Based подход удобнее User-Based в рамках школьного проекта?

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

Как решить проблему холодного старта для нового пользователя?

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