Матрица взаимодействий и предобработка данных
Всю работу выстраивают вокруг матрицы взаимодействий пользователей и фильмов, где строки соответствуют зрителям, столбцы — кинокартинам, а на пересечениях стоят выставленные баллы. В реальных условиях такая таблица оказывается экстремально разреженной, ведь даже активный зритель успевает оценить лишь малую долю каталога. В классическом наборе MovieLens 100K доля заполненных ячеек составляет примерно 6,3%. Работать с такой структурой стандартными массивами неэффективно, поэтому код переводят на разреженные форматы вроде CSR-матриц из библиотеки SciPy.
Перед расчётом мер близости оценки обязательно центрируют. У каждого человека собственный уровень критичности, из-за чего строгие пользователи ставят отличным картинам четвёрки, а снисходительные раздают максимальный балл посредственным релизам. Для выравнивания шкал из каждого существующего рейтинга вычитают среднюю оценку соответствующего пользователя. Пропущенные значения оставляют пустыми, сохраняя нулевой остаток после центрирования.
Вычисление косинусного сходства
Для расчёта близости векторов используют формулу косинуса угла между ними в многомерном пространстве. Значение косинуса находится в интервале от минус единицы до единицы, где единица отражает полное совпадение зрительских вкусов. При этом нужно сразу определиться с архитектурной схемой фильтрации.
- Пользовательский подход (User-based) ищет похожих людей для текущего зрителя, вычисляя косинус между строками матрицы по фильмам, оценённым обоими участниками.
- Предметный подход (Item-based) определяет схожесть самих произведений, рассчитывая косинус между столбцами матрицы по оценкам пользователей, посмотревших обе ленты.
- Фильтрация соседей задаёт порог отсечения по минимальному количеству общих оценок, чтобы исключить случайное стопроцентное сходство по двум совпавшим фильмам.
Прогнозирование оценок и метрики ошибки
Рейтинг неизвестного фильма для зрителя вычисляют через взвешенную сумму оценок $k$ ближайших соседей. Весами в формуле выступают рассчитанные ранее коэффициенты косинусной близости. Оптимальное число соседей $k$ обычно подбирают экспериментально в диапазоне от 10 до 40. Слишком малое окно даёт неустойчивый шум, а чрезмерно широкое захватывает нерелевантные объекты и размывает персонализацию.
Качество прогноза оценивают на тестовой выборке с помощью метрик RMSE (корень из среднеквадратичной ошибки) и MAE (средняя абсолютная ошибка). Итоговые показатели обязательно сравнивают с тривиальным бейзлайном. Если сложная модель на основе косинусной меры ошибается сильнее, чем простое усреднение оценок фильма по всей платформе, архитектура содержит ошибку или переобучена.
Что проверяет преподаватель
Преподаватель в курсовой по информатике оценивает чистоту математического аппарата и техническую реализацию алгоритма. Проект не должен сводиться к вызову одной готовой функции из библиотеки Surprise. Важно показать собственную реализацию логики фильтрации на чистом Python с применением NumPy.
В коде комиссия ищет векторные операции вместо медленных вложенных циклов, а в пояснительной записке проверяет корректность валидации. Ошибки в делении на тестовую и обучающую выборки сразу снижают оценку за теоретическую часть.
Источники и выбор набора данных
Для курсовой работы идеально подходит публичный датасет MovieLens, созданный исследовательской лабораторией GroupLens при Миннесотском университете. Для базовых экспериментов берут версию MovieLens 100K, включающую 100 000 оценок от 943 пользователей для 1682 кинокартин. Этот объём моментально помещается в оперативную память и позволяет быстро отлаживать код на обычном ноутбуке без долгих расчётов.
Если требуется проверить устойчивость системы на более тяжёлых данных, используют MovieLens 1M. Теоретическую базу берут из фундаментальных статей по коллаборативной фильтрации и академических публикаций в электронных библиотеках IEEE Xplore, ACM Digital Library или eLibrary.
Частые вопросы
Что выбрать для курсовой: user-based или item-based подход?
В кинокаталогах лучше работает item-based подход. Количество пользователей обычно растёт быстрее числа фильмов, а связи между фильмами остаются устойчивыми во времени. Вычислять матрицу сходства картин вычислительно выгоднее, чем постоянно пересчитывать связи между тысячами меняющихся зрителей.
Как разделить данные на train и test без утечки данных?
Разбивать матрицу взаимодействий нужно случайным образом по оценкам или по временной метке timestamp, выделяя 20% записей под тест. Центрирование и расчёт сходства выполняют строго на обучающей части. Если вычислить средний рейтинг пользователя по всей базе до разбиения, алгоритм заглянет в тестовые данные и занизит итоговую ошибку RMSE.
Как решать проблему холодного старта в такой работе?
Для нового пользователя или фильма, у которых нет истории взаимодействий, коллаборативная фильтрация бессильна. В рамках курсовой достаточно описать это фундаментальное ограничение метода и настроить резервный алгоритм выдачи, рекомендующий новичкам глобально популярные картины с наивысшим средним баллом.