추천 시스템을 시작하기 전에¶

학습 목표¶

  • 사용자 기반 협업 필터링에 대해 실습을 통해 알아봅니다.
    • 사용자-사용자 간의 유사도를 측정합니다.
  • 아이템 기반 협업 필터링에 대해 실습을 통해 알아봅니다.
  • 모델 기반 협업 필터링을 실습을 통해 알아봅니다.

목차

01 사용자 기반 협업 필터링
02 아이템 기반 협업 필터링
03 모델 기반 협업 필터링

01 사용자 기반 협업 필터링

목차로 이동하기

          피자 치킨 김밥 탕수육 
고객1     좋다 좋다  X   좋다
고객2     X    X    좋다  X
고객3     좋다 좋다  X    ?

과제 : 고객3에 새로운 음식을 추천해야 함.¶

In [1]:
import numpy as np

user1 = np.array([2,2,1,2])
user2 = np.array([1,1,2,1])
user3 = np.array([2,2,1,0])

rMatrix = np.vstack( (user1, user2, user3))
print(rMatrix.shape)
rMatrix
(3, 4)
Out[1]:
array([[2, 2, 1, 2],
       [1, 1, 2, 1],
       [2, 2, 1, 0]])

각각의 고객간의 코사인 유사도 구하기¶

In [6]:
import numpy as np

def cos_similarity(v1, v2):
    dot_product = np.dot(v1, v2)
    l2_norm = (np.sqrt(sum(np.square(v1))) * np.sqrt(sum(np.square(v2))))
    similarity = dot_product / l2_norm     
    
    return similarity
In [7]:
# 고객1과 고객2의 코사인 유사도
cos_similarity(user1, user2)
Out[7]:
0.8386278693775346
In [8]:
# 고객2과 고객3의 코사인 유사도
cos_similarity(user2, user3)
Out[8]:
0.7559289460184544

사이킷 런의 cosine_similarity함수를 이용한 코사인 유사도¶

  • 코사인 유사도는 두 벡터간의 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미.
  • 코사인 유사도는 -1 ~ 1이하의 값이다.
In [9]:
from sklearn.metrics.pairwise import cosine_similarity

cosineSim = cosine_similarity(rMatrix)
print(cosineSim.shape)
cosineSim
(3, 3)
Out[9]:
array([[1.        , 0.83862787, 0.83205029],
       [0.83862787, 1.        , 0.75592895],
       [0.83205029, 0.75592895, 1.        ]])
u1 u1  | u1 u2 | u1 u3
u2 u1  | u2 u2 | u2 u3
u3 u1  | u3 u2 | u3 u3

02 아이템 기반 협업 필터링

목차로 이동하기

아이템 기반 협업 필터링의 경우¶

          user1    user2    user3
피자      좋다.    x        좋다.   
치킨      좋다.    x        좋다.
김밥      x        좋다.    x 
탕수육    좋다.    x        ?
In [10]:
rMatrix_t = np.transpose(rMatrix)
print(rMatrix_t.shape)
rMatrix_t
(4, 3)
Out[10]:
array([[2, 1, 2],
       [2, 1, 2],
       [1, 2, 1],
       [2, 1, 0]])

코사인 유사도 구하기¶

In [12]:
cosineSim_t = cosine_similarity(rMatrix_t)
cosineSim_t
Out[12]:
array([[1.        , 1.        , 0.81649658, 0.74535599],
       [1.        , 1.        , 0.81649658, 0.74535599],
       [0.81649658, 0.81649658, 1.        , 0.73029674],
       [0.74535599, 0.74535599, 0.73029674, 1.        ]])
피자와 피자  | 피자와 치킨 | 피자와 김밥 | 피자와 탕수육
치킨과 피자  | 치킨과 치킨 | 치킨과 김밥 | 치킨과 탕수육
김밥과 피자  | 김밥과 치킨 | 김밥과 김밥 | 김밥과 탕수육
탕수육과 피자 | 탕수육과 치킨  | 탕수육과 김밥 | 탕수육과 탕수육
  • 탕수육과 피자(or 치킨)은 비슷한 선호도(0.7453559)를 갖는다.
          피자 치킨 김밥 탕수육 
고객1     좋다 좋다  X   좋다
고객2     X    X    좋다  X
고객3     좋다 좋다  X    ?

03 모델 기반 협업 필터링

목차로 이동하기

협업 필터리의 두가지 접근 방법¶

  • 메모리 기반 접근 방식

    • 사용자 기반 협업 필터링, 아이템 기반 협업 필터링
  • 모델 기반 협업 필터링

    • 잠재 요인(Latent Factor) 방식
    • 머신러닝 분류/회귀 및 딥러닝을 사용한 접근

Surprise 라이브러리 소개 및 설치¶

  • 추천 알고리즘을 간편한 API로 제공하는 Surprise 라이브러리.
  • Python에 기반하며 Scikit-learn API와 비슷한 형태로 제공하며, 추천 시스템의 구현을 돕는 편리한 라이브러리.

관리자 권한으로 실행

pip install scikit-surprise
설치시 VS C++ 설치 없음으로 에러 발생시, 아래 명령으로 설치 가능.
conda install -c conda-forge scikit-surprise

데이터 가져오기¶

In [17]:
from surprise import Dataset
import pandas as pd
In [18]:
#data = Dataset.load_builtin('ml-100k')

SVD 행렬 분해 기법을 이용하여 추천 예측¶

행렬 분해의 이해¶

SVD¶

  • 행렬분해의 대표적 기법
  • 다차원 매트릭스를 저차원 매트릭스로 분해하는 방법
  • SVD(Singular Value Decompositiion)
  • 다른 행렬 분해로는 NMF(Non-Negative Matrix Factorization)등이 있음.
  • 사용자와 아이템 평점 매트릭스 속에 숨어 있는 잠재 요인을 추출해 예측할 수 있도록 하는 기법.
  • 차원 감소 기법
    • PCA, LDA, SVD, NMF 방식등이 있다.

데이터¶

  • 개발과 교육을 위한 추천 데이터 셋
  • URL : https://grouplens.org/datasets/movielens/
    • ml-lastest-small.zip(1MB)
In [22]:
from surprise import SVD
from surprise import Dataset
from surprise import accuracy
from surprise.model_selection import train_test_split
In [23]:
df = pd.read_csv('../data/grouplens/ml_small/ratings.csv')
df
Out[23]:
userId movieId rating timestamp
0 1 1 4.0 964982703
1 1 3 4.0 964981247
2 1 6 4.0 964982224
3 1 47 5.0 964983815
4 1 50 5.0 964982931
... ... ... ... ...
100831 610 166534 4.0 1493848402
100832 610 168248 5.0 1493850091
100833 610 168250 5.0 1494273047
100834 610 168252 5.0 1493846352
100835 610 170875 3.0 1493846415

100836 rows × 4 columns

In [25]:
df.to_csv("../data/grouplens/ml_small/ratings_noh.csv", 
          index=False, header=False) # 헤더 삭제
print(df.shape)
df
(100836, 4)
Out[25]:
userId movieId rating timestamp
0 1 1 4.0 964982703
1 1 3 4.0 964981247
2 1 6 4.0 964982224
3 1 47 5.0 964983815
4 1 50 5.0 964982931
... ... ... ... ...
100831 610 166534 4.0 1493848402
100832 610 168248 5.0 1493850091
100833 610 168250 5.0 1494273047
100834 610 168252 5.0 1493846352
100835 610 170875 3.0 1493846415

100836 rows × 4 columns

Reader¶

  • 이 함수를 사용하여 csv파일의 포맷 지정이 가능.
  • rating_scale를 이용하여 평점데이터의 최소 평점과 최대 평점의 범위 지정 가능
In [26]:
from surprise import Reader

reader =  Reader(line_format='user item rating timestamp', sep=',', rating_scale=(0.5, 5))
data = Dataset.load_from_file('../data/grouplens/ml_small/ratings_noh.csv', reader=reader)
In [27]:
train, test = train_test_split(data, test_size=.25, random_state=0)

print(type(train), type(test))
<class 'surprise.trainset.Trainset'> <class 'list'>

모델 설정 및 학습¶

  • 잠재요인 기반 추천 알고리즘 활용(SVD)
In [28]:
train
Out[28]:
<surprise.trainset.Trainset at 0x2e68c523490>
In [30]:
# user_id, movie_id, rating_score
test
Out[30]:
[('63', '2000', 3.0),
 ('31', '788', 2.0),
 ('159', '6373', 4.0),
 ('105', '81564', 3.0),
 ('394', '480', 3.0),
 ('181', '587', 5.0),
 ('224', '3072', 5.0),
 ('328', '1391', 4.5),
 ('50', '104283', 3.5),
 ('125', '176371', 3.5),
 ('372', '709', 2.0),
 ('448', '2951', 5.0),
 ('438', '6617', 4.5),
 ('169', '3', 5.0),
 ('111', '96432', 3.5),
 ('328', '34', 5.0),
 ('117', '595', 4.0),
 ('260', '7022', 4.0),
 ('521', '32', 3.0),
 ('42', '4482', 5.0),
 ('545', '1367', 3.5),
 ('232', '43904', 2.0),
 ('179', '648', 3.0),
 ('387', '8972', 3.5),
 ('288', '2372', 1.0),
 ('604', '62', 4.0),
 ('160', '1748', 5.0),
 ('482', '1961', 3.0),
 ('82', '4386', 2.5),
 ('102', '349', 4.0),
 ('568', '3363', 4.0),
 ('48', '2571', 5.0),
 ('36', '2269', 3.0),
 ('298', '3254', 2.5),
 ('111', '1485', 3.5),
 ('524', '23', 2.0),
 ('249', '53519', 4.0),
 ('352', '99007', 4.0),
 ('182', '1480', 4.0),
 ('380', '147382', 4.0),
 ('103', '122882', 4.0),
 ('288', '3034', 3.0),
 ('483', '94777', 3.0),
 ('249', '98961', 4.0),
 ('457', '3593', 1.0),
 ('28', '6974', 3.0),
 ('304', '2858', 2.0),
 ('414', '2469', 3.0),
 ('309', '1201', 4.5),
 ('288', '1952', 4.0),
 ('563', '5943', 3.5),
 ('28', '1275', 2.0),
 ('410', '2352', 3.0),
 ('384', '60', 4.0),
 ('41', '61132', 3.0),
 ('387', '3408', 3.0),
 ('177', '6952', 3.5),
 ('610', '160836', 3.0),
 ('68', '89774', 3.0),
 ('6', '191', 2.0),
 ('606', '5956', 4.0),
 ('140', '1721', 4.0),
 ('414', '340', 3.0),
 ('448', '1387', 4.0),
 ('586', '786', 4.0),
 ('500', '2916', 3.0),
 ('222', '431', 3.5),
 ('603', '2967', 4.0),
 ('434', '5349', 3.5),
 ('414', '31101', 4.0),
 ('509', '1127', 3.5),
 ('477', '5265', 3.0),
 ('433', '5299', 5.0),
 ('132', '7371', 3.0),
 ('603', '851', 4.0),
 ('471', '8360', 2.0),
 ('364', '858', 5.0),
 ('462', '104339', 4.5),
 ('89', '184791', 4.0),
 ('560', '115149', 4.0),
 ('84', '916', 3.0),
 ('357', '8011', 4.0),
 ('352', '3863', 4.0),
 ('280', '4973', 4.0),
 ('93', '1499', 4.0),
 ('449', '4011', 4.0),
 ('498', '339', 5.0),
 ('561', '63082', 4.0),
 ('156', '1089', 4.0),
 ('319', '69844', 4.5),
 ('306', '53322', 3.0),
 ('448', '3617', 4.0),
 ('328', '84944', 1.5),
 ('125', '83349', 3.0),
 ('104', '6377', 4.0),
 ('201', '2145', 4.0),
 ('464', '318', 5.0),
 ('599', '4728', 2.0),
 ('488', '4178', 3.0),
 ('469', '296', 5.0),
 ('226', '7153', 4.5),
 ('599', '86880', 2.5),
 ('376', '1610', 4.0),
 ('474', '1282', 3.0),
 ('258', '122904', 5.0),
 ('125', '1732', 4.5),
 ('240', '344', 5.0),
 ('165', '5464', 3.0),
 ('603', '1130', 2.0),
 ('181', '339', 4.0),
 ('178', '1270', 4.5),
 ('140', '3257', 3.0),
 ('387', '7008', 3.5),
 ('600', '104', 3.0),
 ('378', '97304', 3.5),
 ('544', '650', 5.0),
 ('597', '1186', 5.0),
 ('200', '165', 4.0),
 ('474', '58', 3.5),
 ('380', '2713', 3.0),
 ('187', '1339', 3.5),
 ('387', '3071', 2.5),
 ('302', '736', 3.0),
 ('14', '282', 5.0),
 ('274', '2793', 3.0),
 ('567', '110102', 3.5),
 ('305', '48780', 3.0),
 ('477', '8376', 4.5),
 ('411', '590', 5.0),
 ('517', '7669', 0.5),
 ('486', '316', 3.0),
 ('414', '61406', 4.0),
 ('600', '2010', 4.0),
 ('62', '5903', 4.5),
 ('346', '1572', 2.5),
 ('600', '1327', 2.0),
 ('105', '2495', 5.0),
 ('446', '160', 3.0),
 ('334', '4306', 4.5),
 ('313', '1240', 5.0),
 ('292', '2000', 4.5),
 ('603', '617', 2.0),
 ('167', '35836', 1.5),
 ('219', '59315', 5.0),
 ('325', '2596', 4.0),
 ('20', '3972', 3.0),
 ('222', '81932', 4.5),
 ('555', '2539', 4.0),
 ('131', '2871', 4.0),
 ('352', '76175', 2.0),
 ('45', '2687', 4.0),
 ('484', '4639', 2.5),
 ('211', '1136', 4.0),
 ('140', '7143', 3.5),
 ('606', '5618', 4.5),
 ('253', '6773', 4.5),
 ('309', '1682', 4.0),
 ('448', '2533', 2.0),
 ('600', '3438', 4.0),
 ('474', '8796', 2.5),
 ('365', '83134', 1.5),
 ('322', '46578', 4.5),
 ('19', '837', 4.0),
 ('398', '32', 5.0),
 ('300', '4973', 4.0),
 ('129', '5618', 4.5),
 ('336', '296', 5.0),
 ('525', '72998', 3.0),
 ('380', '4366', 5.0),
 ('339', '48385', 4.5),
 ('352', '56171', 2.5),
 ('356', '223', 3.5),
 ('21', '79134', 2.0),
 ('534', '7373', 4.5),
 ('352', '4014', 4.5),
 ('68', '56941', 2.0),
 ('177', '2694', 2.5),
 ('305', '61350', 3.0),
 ('448', '98160', 1.5),
 ('38', '317', 3.0),
 ('414', '6620', 4.5),
 ('298', '68073', 0.5),
 ('253', '965', 3.5),
 ('489', '3081', 3.0),
 ('514', '1617', 4.0),
 ('548', '356', 5.0),
 ('314', '349', 3.0),
 ('313', '3386', 3.0),
 ('226', '432', 3.0),
 ('318', '64167', 3.5),
 ('371', '3809', 4.0),
 ('448', '3397', 4.0),
 ('307', '2081', 3.0),
 ('298', '4247', 3.0),
 ('314', '1042', 3.0),
 ('610', '56145', 4.5),
 ('382', '4701', 3.5),
 ('438', '852', 3.5),
 ('182', '1449', 4.0),
 ('445', '4896', 3.0),
 ('223', '6365', 3.0),
 ('596', '90746', 3.5),
 ('377', '1274', 5.0),
 ('211', '70286', 2.5),
 ('305', '648', 4.0),
 ('103', '2054', 3.5),
 ('438', '2321', 3.5),
 ('608', '6888', 1.5),
 ('200', '1029', 3.5),
 ('346', '3083', 4.5),
 ('474', '919', 4.5),
 ('391', '2396', 4.0),
 ('540', '145', 3.5),
 ('101', '2683', 3.0),
 ('303', '3175', 4.0),
 ('527', '1259', 4.0),
 ('351', '344', 3.5),
 ('94', '292', 3.0),
 ('514', '185473', 3.0),
 ('500', '597', 1.0),
 ('603', '2813', 1.0),
 ('17', '77455', 3.5),
 ('6', '848', 4.0),
 ('82', '2001', 4.5),
 ('314', '314', 4.0),
 ('603', '1596', 4.0),
 ('414', '7151', 4.0),
 ('573', '76251', 4.5),
 ('42', '4359', 4.0),
 ('367', '3591', 4.0),
 ('217', '1812', 4.0),
 ('8', '21', 4.0),
 ('318', '1361', 4.0),
 ('313', '3751', 2.0),
 ('226', '473', 3.5),
 ('233', '2329', 4.0),
 ('166', '349', 3.5),
 ('15', '6377', 3.0),
 ('316', '48', 1.5),
 ('307', '52375', 3.5),
 ('195', '4452', 4.0),
 ('368', '3811', 3.0),
 ('249', '185435', 3.0),
 ('480', '5810', 2.5),
 ('294', '3552', 5.0),
 ('199', '6016', 4.0),
 ('599', '6867', 3.0),
 ('564', '111617', 4.0),
 ('357', '26471', 5.0),
 ('462', '87232', 3.0),
 ('185', '5377', 3.0),
 ('13', '3513', 3.0),
 ('66', '1517', 4.0),
 ('249', '162606', 3.5),
 ('91', '1197', 5.0),
 ('111', '39715', 0.5),
 ('479', '4621', 3.0),
 ('351', '5989', 4.0),
 ('577', '494', 3.0),
 ('330', '235', 1.5),
 ('460', '48516', 4.0),
 ('68', '4246', 4.0),
 ('274', '54736', 4.0),
 ('139', '5816', 3.0),
 ('294', '3263', 1.0),
 ('243', '10', 5.0),
 ('432', '51662', 4.0),
 ('286', '455', 4.0),
 ('327', '3481', 5.0),
 ('504', '6932', 4.5),
 ('474', '6545', 4.5),
 ('425', '1387', 3.0),
 ('288', '3253', 3.0),
 ('562', '1500', 4.0),
 ('414', '457', 5.0),
 ('122', '2160', 5.0),
 ('203', '3101', 3.0),
 ('119', '84392', 4.0),
 ('28', '1459', 2.5),
 ('52', '119145', 4.0),
 ('351', '1717', 2.0),
 ('414', '5971', 5.0),
 ('68', '55765', 3.5),
 ('517', '167746', 1.0),
 ('551', '3948', 3.0),
 ('525', '1073', 3.5),
 ('135', '2804', 5.0),
 ('330', '25', 4.5),
 ('534', '134775', 2.0),
 ('283', '1580', 4.0),
 ('298', '52281', 2.0),
 ('263', '5952', 4.0),
 ('608', '5449', 3.0),
 ('414', '3844', 2.0),
 ('52', '110501', 5.0),
 ('448', '5025', 2.0),
 ('590', '2410', 3.0),
 ('117', '500', 4.0),
 ('68', '920', 5.0),
 ('597', '288', 3.0),
 ('380', '32031', 3.0),
 ('136', '163', 1.0),
 ('393', '4226', 5.0),
 ('332', '2396', 4.0),
 ('419', '1876', 4.0),
 ('51', '849', 4.5),
 ('339', '107406', 2.5),
 ('318', '114678', 4.0),
 ('599', '38886', 2.5),
 ('610', '4262', 4.5),
 ('19', '1127', 3.0),
 ('68', '2174', 2.5),
 ('606', '51086', 2.5),
 ('571', '3024', 1.0),
 ('433', '74458', 3.0),
 ('374', '595', 3.0),
 ('82', '592', 3.5),
 ('362', '81417', 3.0),
 ('183', '3726', 3.0),
 ('307', '70', 3.5),
 ('107', '160', 4.0),
 ('298', '8917', 2.0),
 ('82', '6566', 1.5),
 ('111', '162602', 4.5),
 ('21', '149380', 1.5),
 ('504', '4993', 4.0),
 ('213', '58103', 3.5),
 ('205', '71462', 5.0),
 ('590', '1124', 3.5),
 ('226', '3751', 3.0),
 ('599', '1244', 4.0),
 ('605', '587', 3.0),
 ('593', '6776', 4.0),
 ('6', '257', 5.0),
 ('489', '2762', 3.0),
 ('606', '7265', 3.5),
 ('28', '43928', 3.0),
 ('603', '390', 5.0),
 ('474', '2019', 4.0),
 ('599', '68945', 4.5),
 ('554', '2657', 2.0),
 ('216', '3993', 1.0),
 ('524', '445', 3.0),
 ('331', '5418', 4.0),
 ('318', '4754', 3.5),
 ('599', '1212', 3.0),
 ('19', '3400', 3.0),
 ('608', '4816', 3.0),
 ('279', '2791', 3.5),
 ('474', '903', 4.5),
 ('610', '1923', 5.0),
 ('69', '4876', 3.0),
 ('111', '94478', 4.0),
 ('47', '5991', 2.0),
 ('64', '1387', 5.0),
 ('84', '802', 4.0),
 ('448', '157122', 3.0),
 ('305', '6874', 5.0),
 ('448', '4638', 4.0),
 ('292', '1544', 4.0),
 ('448', '85399', 1.0),
 ('95', '260', 5.0),
 ('325', '532', 3.0),
 ('599', '2002', 2.0),
 ('6', '151', 4.0),
 ('58', '551', 5.0),
 ('384', '4396', 1.0),
 ('191', '94', 4.0),
 ('19', '2371', 4.0),
 ('169', '7143', 4.5),
 ('298', '3018', 3.5),
 ('599', '93510', 2.5),
 ('274', '8984', 2.0),
 ('119', '296', 4.0),
 ('582', '40815', 4.5),
 ('554', '3037', 5.0),
 ('20', '5481', 1.0),
 ('62', '89745', 4.0),
 ('196', '62', 4.5),
 ('249', '44195', 4.0),
 ('405', '33004', 3.5),
 ('561', '32587', 3.0),
 ('401', '5952', 3.0),
 ('298', '60756', 3.0),
 ('288', '3959', 3.0),
 ('605', '8368', 4.0),
 ('445', '74458', 4.5),
 ('550', '1', 4.0),
 ('475', '111759', 4.0),
 ('540', '2628', 4.5),
 ('59', '1299', 5.0),
 ('91', '6707', 3.5),
 ('186', '4310', 3.0),
 ('224', '3948', 5.0),
 ('84', '1387', 4.0),
 ('156', '2997', 5.0),
 ('182', '104', 3.0),
 ('555', '3707', 3.0),
 ('368', '780', 2.0),
 ('165', '1127', 4.0),
 ('171', '1276', 5.0),
 ('489', '4014', 3.5),
 ('509', '27731', 3.5),
 ('410', '1079', 4.0),
 ('380', '6541', 4.0),
 ('288', '1064', 2.0),
 ('160', '1589', 3.0),
 ('141', '3753', 3.0),
 ('177', '8808', 3.5),
 ('119', '114662', 5.0),
 ('462', '171763', 4.5),
 ('215', '1206', 4.0),
 ('489', '51540', 4.0),
 ('317', '296', 5.0),
 ('534', '107406', 3.5),
 ('328', '2080', 3.5),
 ('365', '216', 3.5),
 ('220', '8644', 4.0),
 ('510', '420', 0.5),
 ('440', '6774', 3.5),
 ('357', '2657', 3.0),
 ('599', '5508', 3.0),
 ('414', '346', 3.0),
 ('211', '91500', 4.0),
 ('84', '1305', 3.0),
 ('42', '507', 4.0),
 ('552', '2968', 4.0),
 ('282', '3578', 4.0),
 ('561', '3499', 3.0),
 ('68', '56336', 2.0),
 ('580', '2012', 3.0),
 ('573', '51255', 4.5),
 ('382', '2720', 1.0),
 ('431', '163', 3.0),
 ('608', '2827', 2.0),
 ('89', '5299', 2.0),
 ('211', '4262', 4.5),
 ('226', '1911', 2.5),
 ('330', '3949', 4.5),
 ('599', '3981', 1.5),
 ('89', '74946', 3.0),
 ('187', '2076', 5.0),
 ('198', '1732', 3.0),
 ('288', '1307', 4.5),
 ('525', '5283', 3.0),
 ('18', '5816', 3.5),
 ('140', '2819', 3.0),
 ('448', '778', 4.0),
 ('414', '6552', 3.5),
 ('21', '116823', 3.5),
 ('610', '71535', 3.5),
 ('599', '3016', 2.0),
 ('474', '3859', 4.0),
 ('217', '1686', 3.0),
 ('122', '714', 5.0),
 ('599', '548', 1.5),
 ('268', '2890', 4.0),
 ('256', '6550', 3.0),
 ('298', '103539', 2.5),
 ('251', '593', 5.0),
 ('187', '2700', 4.5),
 ('28', '3429', 3.5),
 ('298', '86377', 4.0),
 ('337', '778', 4.0),
 ('84', '1268', 3.0),
 ('45', '3270', 1.0),
 ('483', '1199', 5.0),
 ('200', '3489', 3.0),
 ('438', '7375', 3.0),
 ('211', '1556', 2.0),
 ('425', '1653', 4.0),
 ('252', '81847', 4.0),
 ('292', '60074', 3.5),
 ('599', '44241', 2.0),
 ('68', '8807', 4.0),
 ('365', '5349', 3.0),
 ('200', '40815', 4.0),
 ('507', '165', 3.0),
 ('386', '292', 1.0),
 ('495', '3081', 2.0),
 ('298', '6754', 2.5),
 ('409', '2581', 2.0),
 ('305', '53322', 3.0),
 ('178', '2571', 4.5),
 ('380', '42009', 2.0),
 ('483', '109846', 3.5),
 ('387', '1104', 4.0),
 ('280', '3210', 4.0),
 ('475', '41566', 5.0),
 ('474', '4427', 3.5),
 ('66', '29', 4.5),
 ('350', '748', 4.0),
 ('560', '1210', 4.0),
 ('202', '1385', 3.0),
 ('20', '4783', 3.5),
 ('21', '48', 3.0),
 ('318', '61236', 2.5),
 ('590', '1304', 4.5),
 ('306', '135436', 3.5),
 ('332', '2997', 3.5),
 ('125', '158238', 4.0),
 ('39', '1994', 4.0),
 ('260', '5673', 3.0),
 ('24', '7143', 4.0),
 ('305', '4223', 5.0),
 ('448', '149590', 2.5),
 ('380', '6157', 3.0),
 ('245', '2289', 3.0),
 ('305', '75813', 3.5),
 ('297', '494', 2.0),
 ('493', '2924', 4.0),
 ('98', '7153', 1.5),
 ('509', '6266', 2.0),
 ('600', '899', 4.5),
 ('28', '5445', 3.5),
 ('68', '370', 1.5),
 ('489', '6287', 2.5),
 ('230', '4370', 4.0),
 ('387', '2136', 2.5),
 ('415', '971', 4.5),
 ('31', '1', 5.0),
 ('552', '1438', 3.0),
 ('177', '6333', 3.5),
 ('448', '7007', 3.5),
 ('564', '46970', 4.5),
 ('220', '4219', 3.0),
 ('7', '592', 3.0),
 ('109', '440', 3.0),
 ('466', '47099', 5.0),
 ('240', '161', 4.0),
 ('357', '1593', 4.0),
 ('414', '380', 4.0),
 ('5', '21', 4.0),
 ('514', '185033', 2.0),
 ('610', '5049', 4.5),
 ('567', '103042', 2.0),
 ('151', '141', 3.0),
 ('235', '25', 5.0),
 ('438', '30822', 3.0),
 ('253', '5791', 4.0),
 ('42', '223', 5.0),
 ('415', '4369', 3.0),
 ('599', '1468', 1.0),
 ('96', '3033', 1.0),
 ('334', '4027', 4.0),
 ('464', '16', 4.5),
 ('292', '63082', 4.0),
 ('199', '5450', 2.0),
 ('220', '61160', 3.0),
 ('317', '2028', 5.0),
 ('599', '4593', 2.0),
 ('391', '1249', 5.0),
 ('500', '449', 1.0),
 ('560', '4979', 4.0),
 ('380', '587', 3.0),
 ('477', '51255', 4.5),
 ('167', '1198', 4.0),
 ('201', '994', 4.0),
 ('316', '2723', 3.0),
 ('462', '9018', 4.0),
 ('216', '905', 4.0),
 ('434', '10', 3.5),
 ('597', '2523', 3.0),
 ('160', '2021', 1.0),
 ('361', '3948', 3.5),
 ('597', '3060', 4.0),
 ('490', '55261', 2.5),
 ('589', '350', 3.0),
 ('522', '2542', 4.5),
 ('418', '3147', 4.5),
 ('395', '368', 4.0),
 ('348', '1196', 5.0),
 ('122', '48516', 5.0),
 ('470', '648', 3.0),
 ('462', '2336', 1.5),
 ('376', '4226', 5.0),
 ('380', '65514', 5.0),
 ('577', '3109', 4.0),
 ('368', '2409', 3.0),
 ('365', '52973', 3.5),
 ('141', '2478', 3.5),
 ('489', '58162', 2.5),
 ('134', '595', 5.0),
 ('603', '3098', 2.0),
 ('5', '590', 5.0),
 ('222', '5523', 2.5),
 ('599', '122922', 2.5),
 ('389', '653', 4.0),
 ('222', '2396', 3.0),
 ('33', '1653', 5.0),
 ('599', '94478', 2.0),
 ('396', '1092', 1.5),
 ('73', '95510', 4.0),
 ('139', '7317', 2.0),
 ('249', '1320', 3.0),
 ('580', '51662', 5.0),
 ('140', '3107', 3.0),
 ('135', '2407', 3.0),
 ('249', '110730', 3.0),
 ('290', '800', 5.0),
 ('155', '2384', 2.0),
 ('51', '1093', 5.0),
 ('506', '7444', 3.0),
 ('105', '102407', 4.5),
 ('480', '3671', 0.5),
 ('240', '160', 4.0),
 ('169', '5218', 4.0),
 ('275', '2937', 5.0),
 ('453', '2572', 5.0),
 ('15', '60069', 3.5),
 ('479', '5135', 5.0),
 ('474', '3210', 2.0),
 ('73', '4226', 4.0),
 ('387', '5291', 3.5),
 ('448', '4681', 4.0),
 ('332', '5903', 3.5),
 ('111', '4255', 2.0),
 ('14', '47', 5.0),
 ('593', '110', 3.0),
 ('288', '2077', 3.5),
 ('356', '1206', 4.0),
 ('91', '92', 2.0),
 ('599', '95449', 2.0),
 ('474', '7285', 4.0),
 ('111', '4896', 4.0),
 ('103', '1258', 4.0),
 ('141', '1527', 3.5),
 ('304', '13', 4.0),
 ('170', '350', 3.0),
 ('448', '93982', 2.0),
 ('561', '3527', 5.0),
 ('448', '84772', 3.0),
 ('474', '3230', 3.5),
 ('249', '2232', 4.0),
 ('249', '51662', 5.0),
 ('18', '51662', 3.5),
 ('480', '2081', 3.0),
 ('304', '349', 4.0),
 ('122', '134130', 4.0),
 ('111', '46948', 0.5),
 ('105', '9010', 4.5),
 ('21', '72641', 3.0),
 ('84', '1291', 3.0),
 ('143', '2706', 4.5),
 ('525', '6503', 3.5),
 ('57', '224', 4.0),
 ('274', '4214', 3.5),
 ('288', '1961', 3.0),
 ('368', '315', 2.0),
 ('599', '1947', 3.0),
 ('90', '1041', 5.0),
 ('425', '8360', 4.0),
 ('256', '64969', 4.5),
 ('68', '8528', 4.0),
 ('80', '53000', 4.0),
 ('424', '293', 4.0),
 ('222', '41285', 3.5),
 ('415', '2686', 3.5),
 ('590', '2947', 4.5),
 ('448', '7245', 1.0),
 ('387', '1617', 4.5),
 ('226', '3098', 4.0),
 ('226', '51255', 4.5),
 ('45', '2541', 4.0),
 ('414', '34332', 3.0),
 ('462', '592', 3.0),
 ('603', '1809', 5.0),
 ('108', '5450', 5.0),
 ('590', '2422', 2.0),
 ('471', '60069', 4.5),
 ('448', '130083', 2.0),
 ('275', '4214', 3.0),
 ('425', '1589', 3.5),
 ('118', '1196', 4.0),
 ('414', '4516', 2.0),
 ('399', '3578', 5.0),
 ('590', '1320', 2.0),
 ('441', '1036', 4.0),
 ('475', '34150', 4.0),
 ('411', '515', 2.0),
 ('105', '143511', 5.0),
 ('50', '92427', 1.0),
 ('560', '8368', 3.0),
 ('561', '146656', 3.5),
 ('222', '88405', 2.5),
 ('608', '2474', 4.5),
 ('448', '82527', 4.0),
 ('288', '1909', 3.5),
 ('580', '37733', 4.0),
 ('19', '933', 4.0),
 ('381', '4571', 3.5),
 ('177', '3798', 3.5),
 ('57', '69', 4.0),
 ('11', '511', 4.0),
 ('586', '122920', 5.0),
 ('141', '34162', 3.5),
 ('217', '2088', 3.0),
 ('160', '1059', 5.0),
 ('296', '110', 5.0),
 ('274', '4728', 3.0),
 ('150', '786', 3.0),
 ('68', '6942', 4.5),
 ('414', '48', 3.0),
 ('330', '58559', 5.0),
 ('561', '8665', 4.0),
 ('448', '3390', 2.0),
 ('387', '7099', 5.0),
 ('325', '4714', 2.0),
 ('554', '1210', 5.0),
 ('572', '1252', 5.0),
 ('199', '51255', 4.0),
 ('381', '2701', 2.0),
 ('448', '1073', 4.0),
 ('593', '2959', 4.0),
 ('222', '95307', 2.0),
 ('517', '3549', 3.0),
 ('117', '616', 4.0),
 ('380', '128968', 3.0),
 ('414', '30707', 4.5),
 ('480', '8361', 2.5),
 ('50', '38038', 3.0),
 ('233', '54286', 3.0),
 ('177', '103141', 5.0),
 ('321', '339', 3.0),
 ('368', '3764', 2.0),
 ('318', '5618', 4.5),
 ('219', '39183', 2.5),
 ('563', '82152', 3.5),
 ('116', '1029', 3.0),
 ('44', '6', 3.0),
 ('462', '3424', 4.0),
 ('45', '1610', 4.0),
 ('1', '1408', 3.0),
 ('599', '2301', 3.0),
 ('237', '43936', 3.0),
 ('410', '2176', 5.0),
 ('352', '82202', 3.0),
 ('476', '412', 3.0),
 ('608', '2174', 3.0),
 ('535', '2583', 3.0),
 ('432', '47', 4.0),
 ('509', '118997', 2.5),
 ('356', '34164', 3.5),
 ('405', '8254', 4.0),
 ('232', '3483', 3.0),
 ('75', '36519', 4.0),
 ('425', '1907', 3.0),
 ('274', '5944', 1.0),
 ('105', '163072', 5.0),
 ('328', '2000', 1.5),
 ('312', '1573', 3.0),
 ('305', '7438', 5.0),
 ('591', '3510', 3.0),
 ('599', '72479', 3.5),
 ('448', '6893', 4.5),
 ('599', '136562', 3.5),
 ('225', '380', 3.0),
 ('52', '122900', 5.0),
 ('42', '4322', 4.0),
 ('113', '943', 5.0),
 ('606', '7037', 4.5),
 ('606', '2432', 3.5),
 ('104', '7034', 5.0),
 ('144', '4027', 3.5),
 ('572', '1682', 3.0),
 ('318', '76093', 4.0),
 ('414', '2500', 3.0),
 ('306', '166534', 4.0),
 ('249', '164179', 5.0),
 ('4', '4246', 4.0),
 ('483', '2291', 4.0),
 ('266', '733', 5.0),
 ('514', '44', 2.5),
 ('580', '1544', 3.0),
 ('18', '80489', 4.0),
 ('140', '2618', 3.5),
 ('489', '79299', 3.0),
 ('448', '118985', 3.5),
 ('600', '2424', 1.0),
 ('469', '1831', 2.0),
 ('474', '5863', 1.0),
 ('143', '103335', 4.0),
 ('590', '594', 5.0),
 ('577', '1263', 4.0),
 ('232', '51540', 4.0),
 ('589', '300', 3.0),
 ('438', '4308', 4.5),
 ('380', '67923', 3.0),
 ('337', '737', 5.0),
 ('300', '318', 4.0),
 ('387', '1377', 2.0),
 ('45', '2716', 4.0),
 ('506', '109487', 5.0),
 ('603', '3374', 4.0),
 ('485', '457', 4.0),
 ('247', '48394', 4.0),
 ('323', '1385', 2.5),
 ('610', '95558', 3.5),
 ('600', '208', 2.0),
 ('601', '109487', 5.0),
 ('362', '8961', 4.0),
 ('318', '79702', 4.0),
 ('346', '3362', 4.5),
 ('453', '4027', 5.0),
 ('460', '48780', 4.5),
 ('290', '3476', 3.0),
 ('50', '858', 4.0),
 ('322', '2353', 4.0),
 ('307', '44840', 2.0),
 ('314', '520', 3.0),
 ('391', '1291', 4.0),
 ('339', '2160', 5.0),
 ('125', '32460', 4.0),
 ('234', '2373', 4.0),
 ('232', '49278', 3.5),
 ('483', '317', 4.5),
 ('305', '592', 2.5),
 ('199', '37741', 3.5),
 ('303', '1246', 2.0),
 ('437', '50', 4.0),
 ('418', '5445', 2.0),
 ('560', '2712', 3.5),
 ('503', '1214', 2.5),
 ('307', '1', 4.0),
 ('68', '66198', 3.0),
 ('610', '148626', 4.0),
 ('80', '8957', 4.5),
 ('91', '3840', 4.0),
 ('356', '40955', 4.0),
 ('474', '28', 4.5),
 ('274', '765', 3.0),
 ('488', '3671', 4.0),
 ('599', '6711', 5.0),
 ('474', '7151', 3.0),
 ('543', '99114', 4.0),
 ('387', '1088', 1.5),
 ('385', '45', 3.0),
 ('73', '53125', 4.5),
 ('292', '33677', 3.5),
 ('555', '414', 3.0),
 ('186', '3516', 4.0),
 ('38', '648', 4.0),
 ('475', '2006', 4.5),
 ('243', '376', 3.0),
 ('232', '783', 2.0),
 ('161', '7247', 5.0),
 ('603', '4743', 3.0),
 ('10', '54286', 3.5),
 ('246', '50', 4.5),
 ('600', '2059', 3.0),
 ('193', '593', 3.5),
 ('315', '1201', 3.0),
 ('448', '432', 3.0),
 ('226', '3668', 3.5),
 ('41', '112183', 3.0),
 ('448', '91653', 4.0),
 ('562', '2133', 4.5),
 ('288', '205', 3.5),
 ('610', '4437', 5.0),
 ('133', '593', 3.0),
 ('414', '3308', 4.0),
 ('518', '1371', 0.5),
 ('358', '2572', 4.0),
 ('34', '8636', 5.0),
 ('158', '58293', 3.5),
 ('18', '50', 5.0),
 ('105', '1293', 4.0),
 ('610', '143859', 4.0),
 ('294', '349', 2.0),
 ('8', '47', 4.0),
 ('328', '1247', 3.0),
 ('414', '91542', 3.5),
 ('534', '65514', 4.0),
 ('393', '1240', 0.5),
 ('19', '325', 2.0),
 ('495', '145', 4.0),
 ('357', '587', 3.5),
 ('544', '694', 4.0),
 ('66', '912', 4.5),
 ('497', '109487', 5.0),
 ('318', '65037', 3.5),
 ('564', '49286', 3.0),
 ('599', '112852', 3.5),
 ('380', '94985', 4.0),
 ('581', '4886', 4.5),
 ('414', '7381', 2.0),
 ('211', '4367', 2.5),
 ('160', '95', 1.0),
 ('288', '2057', 3.0),
 ('610', '4848', 5.0),
 ('418', '59369', 0.5),
 ('405', '7123', 3.5),
 ('610', '4816', 4.0),
 ('305', '54999', 4.0),
 ('282', '5989', 5.0),
 ('182', '5219', 2.0),
 ('288', '2243', 3.0),
 ('91', '5445', 3.5),
 ('610', '70994', 4.5),
 ('235', '780', 5.0),
 ('593', '50', 4.5),
 ('603', '1280', 5.0),
 ('234', '2613', 4.0),
 ('121', '353', 3.0),
 ('202', '2983', 4.0),
 ('520', '3529', 4.0),
 ('84', '356', 5.0),
 ('307', '1997', 3.0),
 ('405', '54503', 4.0),
 ('298', '4020', 1.0),
 ('17', '527', 4.5),
 ('461', '91500', 0.5),
 ('465', '3682', 4.0),
 ('50', '69122', 1.0),
 ('487', '1198', 3.5),
 ('331', '3717', 2.0),
 ('186', '748', 4.0),
 ('438', '34319', 3.5),
 ('57', '2324', 5.0),
 ('606', '4973', 4.5),
 ('434', '1517', 4.0),
 ('400', '1197', 4.5),
 ('606', '2012', 2.5),
 ('414', '1387', 4.0),
 ('67', '6377', 4.0),
 ('80', '84601', 4.0),
 ('480', '5673', 3.5),
 ('316', '168', 1.5),
 ('207', '2949', 4.5),
 ('226', '40732', 3.5),
 ('525', '6890', 3.5),
 ('63', '8665', 3.0),
 ('311', '2174', 0.5),
 ('215', '1061', 3.5),
 ('141', '4816', 3.5),
 ('224', '3358', 5.0),
 ('224', '953', 4.0),
 ('186', '2617', 5.0),
 ('231', '1214', 4.0),
 ('304', '185', 4.0),
 ('474', '2919', 4.0),
 ('256', '3257', 4.0),
 ('362', '60072', 3.5),
 ('286', '527', 4.0),
 ('105', '3593', 2.0),
 ('67', '7153', 2.0),
 ('610', '112290', 5.0),
 ('153', '1206', 2.5),
 ('328', '5989', 3.5),
 ('410', '1131', 5.0),
 ('7', '8970', 2.5),
 ('187', '6214', 4.0),
 ('603', '2877', 3.0),
 ('68', '4141', 3.0),
 ('219', '2085', 4.0),
 ('596', '102445', 3.0),
 ('318', '140737', 3.5),
 ('21', '103384', 4.0),
 ('294', '420', 2.0),
 ('540', '4993', 4.0),
 ('307', '3623', 2.0),
 ('156', '1909', 3.0),
 ('19', '1330', 2.0),
 ('381', '1552', 2.5),
 ('234', '1359', 4.0),
 ('357', '1247', 4.5),
 ('187', '555', 4.0),
 ('7', '5991', 4.5),
 ('5', '318', 3.0),
 ('599', '3915', 2.0),
 ('240', '19', 5.0),
 ('474', '913', 4.0),
 ('298', '1584', 2.5),
 ('484', '33679', 2.5),
 ('125', '4226', 4.0),
 ('66', '799', 4.0),
 ('28', '60674', 2.5),
 ('610', '86190', 3.5),
 ('448', '3247', 4.0),
 ('434', '1584', 2.5),
 ('488', '3114', 4.0),
 ('177', '44191', 5.0),
 ('603', '464', 3.0),
 ('318', '67197', 3.0),
 ('600', '3247', 2.0),
 ('424', '81591', 3.5),
 ('318', '4239', 4.0),
 ('274', '318', 4.5),
 ('520', '7454', 3.5),
 ('104', '47629', 4.0),
 ('514', '2148', 2.5),
 ('45', '3033', 4.0),
 ('424', '1219', 4.0),
 ('415', '7156', 4.5),
 ('27', '1200', 1.0),
 ('391', '2275', 5.0),
 ('274', '43921', 4.0),
 ('254', '48516', 5.0),
 ('111', '3253', 5.0),
 ('213', '2115', 3.5),
 ...]
  • n_factors : 잠재 요인 K의 개수. 기본값은 100, 값이 커질수록 정확도가 높아질 수 있고, 과적합 문제가 발생 가능.
  • n_epochs : SGD(Stochastic Gradient Descent) 수행시 반복 횟수, 기본값은 20
  • biased (bool) : 사용자 편향 적용 여부, 디폴트는 True
In [33]:
algo = SVD(n_factors=50, random_state=0)
algo.fit(train)
pred = algo.test(test)  # 모두 테스트 데이터에 대한 평점 예측
pred
Out[33]:
[Prediction(uid='63', iid='2000', r_ui=3.0, est=3.5016267817280697, details={'was_impossible': False}),
 Prediction(uid='31', iid='788', r_ui=2.0, est=3.2840758900255937, details={'was_impossible': False}),
 Prediction(uid='159', iid='6373', r_ui=4.0, est=2.804939396068158, details={'was_impossible': False}),
 Prediction(uid='105', iid='81564', r_ui=3.0, est=3.9326180027723914, details={'was_impossible': False}),
 Prediction(uid='394', iid='480', r_ui=3.0, est=3.3135580105479114, details={'was_impossible': False}),
 Prediction(uid='181', iid='587', r_ui=5.0, est=3.0461782765780097, details={'was_impossible': False}),
 Prediction(uid='224', iid='3072', r_ui=5.0, est=3.8999397231405495, details={'was_impossible': False}),
 Prediction(uid='328', iid='1391', r_ui=4.5, est=2.573115352187292, details={'was_impossible': False}),
 Prediction(uid='50', iid='104283', r_ui=3.5, est=2.6708184859984074, details={'was_impossible': False}),
 Prediction(uid='125', iid='176371', r_ui=3.5, est=3.8777290199943573, details={'was_impossible': False}),
 Prediction(uid='372', iid='709', r_ui=2.0, est=3.1958654308661805, details={'was_impossible': False}),
 Prediction(uid='448', iid='2951', r_ui=5.0, est=3.4206115029975166, details={'was_impossible': False}),
 Prediction(uid='438', iid='6617', r_ui=4.5, est=3.553001773047821, details={'was_impossible': False}),
 Prediction(uid='169', iid='3', r_ui=5.0, est=4.016193822628381, details={'was_impossible': False}),
 Prediction(uid='111', iid='96432', r_ui=3.5, est=3.559766181769218, details={'was_impossible': False}),
 Prediction(uid='328', iid='34', r_ui=5.0, est=3.332970006548387, details={'was_impossible': False}),
 Prediction(uid='117', iid='595', r_ui=4.0, est=3.637454045974828, details={'was_impossible': False}),
 Prediction(uid='260', iid='7022', r_ui=4.0, est=3.6836914594089016, details={'was_impossible': False}),
 Prediction(uid='521', iid='32', r_ui=3.0, est=4.006331565028151, details={'was_impossible': False}),
 Prediction(uid='42', iid='4482', r_ui=5.0, est=3.3603380082872096, details={'was_impossible': False}),
 Prediction(uid='545', iid='1367', r_ui=3.5, est=3.3002689725755867, details={'was_impossible': False}),
 Prediction(uid='232', iid='43904', r_ui=2.0, est=2.3996554072016365, details={'was_impossible': False}),
 Prediction(uid='179', iid='648', r_ui=3.0, est=3.617620690793972, details={'was_impossible': False}),
 Prediction(uid='387', iid='8972', r_ui=3.5, est=3.1254184868384254, details={'was_impossible': False}),
 Prediction(uid='288', iid='2372', r_ui=1.0, est=2.612722726534522, details={'was_impossible': False}),
 Prediction(uid='604', iid='62', r_ui=4.0, est=3.7846555627726186, details={'was_impossible': False}),
 Prediction(uid='160', iid='1748', r_ui=5.0, est=2.813375726688263, details={'was_impossible': False}),
 Prediction(uid='482', iid='1961', r_ui=3.0, est=3.7763058334643547, details={'was_impossible': False}),
 Prediction(uid='82', iid='4386', r_ui=2.5, est=3.274605274011222, details={'was_impossible': False}),
 Prediction(uid='102', iid='349', r_ui=4.0, est=3.284560841423004, details={'was_impossible': False}),
 Prediction(uid='568', iid='3363', r_ui=4.0, est=4.210020520382302, details={'was_impossible': False}),
 Prediction(uid='48', iid='2571', r_ui=5.0, est=4.624948696484833, details={'was_impossible': False}),
 Prediction(uid='36', iid='2269', r_ui=3.0, est=2.4831791169881177, details={'was_impossible': False}),
 Prediction(uid='298', iid='3254', r_ui=2.5, est=2.198057623669355, details={'was_impossible': False}),
 Prediction(uid='111', iid='1485', r_ui=3.5, est=3.3427401356078854, details={'was_impossible': False}),
 Prediction(uid='524', iid='23', r_ui=2.0, est=3.2023432494549864, details={'was_impossible': False}),
 Prediction(uid='249', iid='53519', r_ui=4.0, est=3.344746778052254, details={'was_impossible': False}),
 Prediction(uid='352', iid='99007', r_ui=4.0, est=3.561679537028378, details={'was_impossible': False}),
 Prediction(uid='182', iid='1480', r_ui=4.0, est=3.5074740018442805, details={'was_impossible': False}),
 Prediction(uid='380', iid='147382', r_ui=4.0, est=3.911487348546209, details={'was_impossible': False}),
 Prediction(uid='103', iid='122882', r_ui=4.0, est=3.807907739414402, details={'was_impossible': False}),
 Prediction(uid='288', iid='3034', r_ui=3.0, est=3.1976960833372705, details={'was_impossible': False}),
 Prediction(uid='483', iid='94777', r_ui=3.0, est=3.3375985012287477, details={'was_impossible': False}),
 Prediction(uid='249', iid='98961', r_ui=4.0, est=4.047615027697042, details={'was_impossible': False}),
 Prediction(uid='457', iid='3593', r_ui=1.0, est=2.5822731329950614, details={'was_impossible': False}),
 Prediction(uid='28', iid='6974', r_ui=3.0, est=2.75930072180862, details={'was_impossible': False}),
 Prediction(uid='304', iid='2858', r_ui=2.0, est=4.137533578789811, details={'was_impossible': False}),
 Prediction(uid='414', iid='2469', r_ui=3.0, est=3.452869398532001, details={'was_impossible': False}),
 Prediction(uid='309', iid='1201', r_ui=4.5, est=4.210019708849028, details={'was_impossible': False}),
 Prediction(uid='288', iid='1952', r_ui=4.0, est=3.532217081277342, details={'was_impossible': False}),
 Prediction(uid='563', iid='5943', r_ui=3.5, est=2.7563039969617673, details={'was_impossible': False}),
 Prediction(uid='28', iid='1275', r_ui=2.0, est=3.1594135116768682, details={'was_impossible': False}),
 Prediction(uid='410', iid='2352', r_ui=3.0, est=4.100100470169475, details={'was_impossible': False}),
 Prediction(uid='384', iid='60', r_ui=4.0, est=2.812568011145, details={'was_impossible': False}),
 Prediction(uid='41', iid='61132', r_ui=3.0, est=2.864329121200194, details={'was_impossible': False}),
 Prediction(uid='387', iid='3408', r_ui=3.0, est=3.345756512636758, details={'was_impossible': False}),
 Prediction(uid='177', iid='6952', r_ui=3.5, est=2.927618774371412, details={'was_impossible': False}),
 Prediction(uid='610', iid='160836', r_ui=3.0, est=3.5849446825687177, details={'was_impossible': False}),
 Prediction(uid='68', iid='89774', r_ui=3.0, est=3.63147277603158, details={'was_impossible': False}),
 Prediction(uid='6', iid='191', r_ui=2.0, est=3.4392040844828426, details={'was_impossible': False}),
 Prediction(uid='606', iid='5956', r_ui=4.0, est=3.7259991882485486, details={'was_impossible': False}),
 Prediction(uid='140', iid='1721', r_ui=4.0, est=3.321719029923502, details={'was_impossible': False}),
 Prediction(uid='414', iid='340', r_ui=3.0, est=3.6230156525691983, details={'was_impossible': False}),
 Prediction(uid='448', iid='1387', r_ui=4.0, est=3.442981876099061, details={'was_impossible': False}),
 Prediction(uid='586', iid='786', r_ui=4.0, est=4.018922486027106, details={'was_impossible': False}),
 Prediction(uid='500', iid='2916', r_ui=3.0, est=3.3879525654505693, details={'was_impossible': False}),
 Prediction(uid='222', iid='431', r_ui=3.5, est=3.3715130148194357, details={'was_impossible': False}),
 Prediction(uid='603', iid='2967', r_ui=4.0, est=3.4944139364123648, details={'was_impossible': False}),
 Prediction(uid='434', iid='5349', r_ui=3.5, est=3.4902172545225545, details={'was_impossible': False}),
 Prediction(uid='414', iid='31101', r_ui=4.0, est=3.4124628591920367, details={'was_impossible': False}),
 Prediction(uid='509', iid='1127', r_ui=3.5, est=3.36900803373314, details={'was_impossible': False}),
 Prediction(uid='477', iid='5265', r_ui=3.0, est=3.8185605126233573, details={'was_impossible': False}),
 Prediction(uid='433', iid='5299', r_ui=5.0, est=3.1757015820660763, details={'was_impossible': False}),
 Prediction(uid='132', iid='7371', r_ui=3.0, est=3.628372470602079, details={'was_impossible': False}),
 Prediction(uid='603', iid='851', r_ui=4.0, est=3.4376805563810535, details={'was_impossible': False}),
 Prediction(uid='471', iid='8360', r_ui=2.0, est=3.7548108285500943, details={'was_impossible': False}),
 Prediction(uid='364', iid='858', r_ui=5.0, est=4.3093010715338, details={'was_impossible': False}),
 Prediction(uid='462', iid='104339', r_ui=4.5, est=3.214599325224974, details={'was_impossible': False}),
 Prediction(uid='89', iid='184791', r_ui=4.0, est=3.385027569305655, details={'was_impossible': False}),
 Prediction(uid='560', iid='115149', r_ui=4.0, est=3.977022942039447, details={'was_impossible': False}),
 Prediction(uid='84', iid='916', r_ui=3.0, est=3.9716516634437897, details={'was_impossible': False}),
 Prediction(uid='357', iid='8011', r_ui=4.0, est=3.9031930987506813, details={'was_impossible': False}),
 Prediction(uid='352', iid='3863', r_ui=4.0, est=3.4976923739995347, details={'was_impossible': False}),
 Prediction(uid='280', iid='4973', r_ui=4.0, est=4.651091902460761, details={'was_impossible': False}),
 Prediction(uid='93', iid='1499', r_ui=4.0, est=3.1630470686070615, details={'was_impossible': False}),
 Prediction(uid='449', iid='4011', r_ui=4.0, est=3.998311460137172, details={'was_impossible': False}),
 Prediction(uid='498', iid='339', r_ui=5.0, est=3.773745910242424, details={'was_impossible': False}),
 Prediction(uid='561', iid='63082', r_ui=4.0, est=3.6031700783969813, details={'was_impossible': False}),
 Prediction(uid='156', iid='1089', r_ui=4.0, est=4.118498357369104, details={'was_impossible': False}),
 Prediction(uid='319', iid='69844', r_ui=4.5, est=4.355895717997771, details={'was_impossible': False}),
 Prediction(uid='306', iid='53322', r_ui=3.0, est=3.2316632446559956, details={'was_impossible': False}),
 Prediction(uid='448', iid='3617', r_ui=4.0, est=2.684612356405329, details={'was_impossible': False}),
 Prediction(uid='328', iid='84944', r_ui=1.5, est=3.356366710237917, details={'was_impossible': False}),
 Prediction(uid='125', iid='83349', r_ui=3.0, est=3.575508672586732, details={'was_impossible': False}),
 Prediction(uid='104', iid='6377', r_ui=4.0, est=4.056229854847885, details={'was_impossible': False}),
 Prediction(uid='201', iid='2145', r_ui=4.0, est=3.9110692449900704, details={'was_impossible': False}),
 Prediction(uid='464', iid='318', r_ui=5.0, est=4.547613223756588, details={'was_impossible': False}),
 Prediction(uid='599', iid='4728', r_ui=2.0, est=2.2889905799273027, details={'was_impossible': False}),
 Prediction(uid='488', iid='4178', r_ui=3.0, est=3.7724686955905367, details={'was_impossible': False}),
 Prediction(uid='469', iid='296', r_ui=5.0, est=4.232051072153403, details={'was_impossible': False}),
 Prediction(uid='226', iid='7153', r_ui=4.5, est=4.272177430286106, details={'was_impossible': False}),
 Prediction(uid='599', iid='86880', r_ui=2.5, est=2.3693694710591835, details={'was_impossible': False}),
 Prediction(uid='376', iid='1610', r_ui=4.0, est=4.126037356271531, details={'was_impossible': False}),
 Prediction(uid='474', iid='1282', r_ui=3.0, est=3.445636447322265, details={'was_impossible': False}),
 Prediction(uid='258', iid='122904', r_ui=5.0, est=3.8089680464783493, details={'was_impossible': False}),
 Prediction(uid='125', iid='1732', r_ui=4.5, est=4.372360461948234, details={'was_impossible': False}),
 Prediction(uid='240', iid='344', r_ui=5.0, est=3.932179511770652, details={'was_impossible': False}),
 Prediction(uid='165', iid='5464', r_ui=3.0, est=3.6351749952686605, details={'was_impossible': False}),
 Prediction(uid='603', iid='1130', r_ui=2.0, est=3.4060012461802955, details={'was_impossible': False}),
 Prediction(uid='181', iid='339', r_ui=4.0, est=3.207415622593551, details={'was_impossible': False}),
 Prediction(uid='178', iid='1270', r_ui=4.5, est=4.470923405137731, details={'was_impossible': False}),
 Prediction(uid='140', iid='3257', r_ui=3.0, est=3.0806886611208895, details={'was_impossible': False}),
 Prediction(uid='387', iid='7008', r_ui=3.5, est=3.454528986338573, details={'was_impossible': False}),
 Prediction(uid='600', iid='104', r_ui=3.0, est=3.1041329768684047, details={'was_impossible': False}),
 Prediction(uid='378', iid='97304', r_ui=3.5, est=3.764716584099699, details={'was_impossible': False}),
 Prediction(uid='544', iid='650', r_ui=5.0, est=3.8157287399099356, details={'was_impossible': False}),
 Prediction(uid='597', iid='1186', r_ui=5.0, est=3.7341120388209608, details={'was_impossible': False}),
 Prediction(uid='200', iid='165', r_ui=4.0, est=3.511085118217014, details={'was_impossible': False}),
 Prediction(uid='474', iid='58', r_ui=3.5, est=3.848894084553892, details={'was_impossible': False}),
 Prediction(uid='380', iid='2713', r_ui=3.0, est=3.2687090929786042, details={'was_impossible': False}),
 Prediction(uid='187', iid='1339', r_ui=3.5, est=3.81369370961837, details={'was_impossible': False}),
 Prediction(uid='387', iid='3071', r_ui=2.5, est=3.288591664172677, details={'was_impossible': False}),
 Prediction(uid='302', iid='736', r_ui=3.0, est=3.3629073793632442, details={'was_impossible': False}),
 Prediction(uid='14', iid='282', r_ui=5.0, est=3.152334019201428, details={'was_impossible': False}),
 Prediction(uid='274', iid='2793', r_ui=3.0, est=2.7500631826382897, details={'was_impossible': False}),
 Prediction(uid='567', iid='110102', r_ui=3.5, est=2.340499452750006, details={'was_impossible': False}),
 Prediction(uid='305', iid='48780', r_ui=3.0, est=4.485746721505194, details={'was_impossible': False}),
 Prediction(uid='477', iid='8376', r_ui=4.5, est=3.6805470932199413, details={'was_impossible': False}),
 Prediction(uid='411', iid='590', r_ui=5.0, est=3.660068297174417, details={'was_impossible': False}),
 Prediction(uid='517', iid='7669', r_ui=0.5, est=2.6955240198398807, details={'was_impossible': False}),
 Prediction(uid='486', iid='316', r_ui=3.0, est=3.7788588002180235, details={'was_impossible': False}),
 Prediction(uid='414', iid='61406', r_ui=4.0, est=3.4124628591920367, details={'was_impossible': False}),
 Prediction(uid='600', iid='2010', r_ui=4.0, est=3.4764989101087336, details={'was_impossible': False}),
 Prediction(uid='62', iid='5903', r_ui=4.5, est=4.288331249423581, details={'was_impossible': False}),
 Prediction(uid='346', iid='1572', r_ui=2.5, est=3.3758572596624745, details={'was_impossible': False}),
 Prediction(uid='600', iid='1327', r_ui=2.0, est=3.0350310251466865, details={'was_impossible': False}),
 Prediction(uid='105', iid='2495', r_ui=5.0, est=3.912845141298957, details={'was_impossible': False}),
 Prediction(uid='446', iid='160', r_ui=3.0, est=2.7744144641722195, details={'was_impossible': False}),
 Prediction(uid='334', iid='4306', r_ui=4.5, est=3.687117437748643, details={'was_impossible': False}),
 Prediction(uid='313', iid='1240', r_ui=5.0, est=3.6960969911068573, details={'was_impossible': False}),
 Prediction(uid='292', iid='2000', r_ui=4.5, est=3.925638847988379, details={'was_impossible': False}),
 Prediction(uid='603', iid='617', r_ui=2.0, est=3.414632864722943, details={'was_impossible': False}),
 Prediction(uid='167', iid='35836', r_ui=1.5, est=3.5195828755129246, details={'was_impossible': False}),
 Prediction(uid='219', iid='59315', r_ui=5.0, est=3.4579142365535787, details={'was_impossible': False}),
 Prediction(uid='325', iid='2596', r_ui=4.0, est=3.6888542918629774, details={'was_impossible': False}),
 Prediction(uid='20', iid='3972', r_ui=3.0, est=4.084556435352967, details={'was_impossible': False}),
 Prediction(uid='222', iid='81932', r_ui=4.5, est=3.4267637482919637, details={'was_impossible': False}),
 Prediction(uid='555', iid='2539', r_ui=4.0, est=3.267277592648075, details={'was_impossible': False}),
 Prediction(uid='131', iid='2871', r_ui=4.0, est=3.4094642699001216, details={'was_impossible': False}),
 Prediction(uid='352', iid='76175', r_ui=2.0, est=3.215962602777053, details={'was_impossible': False}),
 Prediction(uid='45', iid='2687', r_ui=4.0, est=3.8830483134718614, details={'was_impossible': False}),
 Prediction(uid='484', iid='4639', r_ui=2.5, est=3.36670456821625, details={'was_impossible': False}),
 Prediction(uid='211', iid='1136', r_ui=4.0, est=4.3664246246036, details={'was_impossible': False}),
 Prediction(uid='140', iid='7143', r_ui=3.5, est=4.0087636396719635, details={'was_impossible': False}),
 Prediction(uid='606', iid='5618', r_ui=4.5, est=4.469794486249732, details={'was_impossible': False}),
 Prediction(uid='253', iid='6773', r_ui=4.5, est=4.474763725805051, details={'was_impossible': False}),
 Prediction(uid='309', iid='1682', r_ui=4.0, est=3.872204420540068, details={'was_impossible': False}),
 Prediction(uid='448', iid='2533', r_ui=2.0, est=2.686488662509917, details={'was_impossible': False}),
 Prediction(uid='600', iid='3438', r_ui=4.0, est=2.2899194092801274, details={'was_impossible': False}),
 Prediction(uid='474', iid='8796', r_ui=2.5, est=3.129101592290726, details={'was_impossible': False}),
 Prediction(uid='365', iid='83134', r_ui=1.5, est=2.6873435607724887, details={'was_impossible': False}),
 Prediction(uid='322', iid='46578', r_ui=4.5, est=3.6682909007383917, details={'was_impossible': False}),
 Prediction(uid='19', iid='837', r_ui=4.0, est=2.5114762481333686, details={'was_impossible': False}),
 Prediction(uid='398', iid='32', r_ui=5.0, est=4.314106150687406, details={'was_impossible': False}),
 Prediction(uid='300', iid='4973', r_ui=4.0, est=4.529571501465705, details={'was_impossible': False}),
 Prediction(uid='129', iid='5618', r_ui=4.5, est=4.494840902610089, details={'was_impossible': False}),
 Prediction(uid='336', iid='296', r_ui=5.0, est=4.453032514187086, details={'was_impossible': False}),
 Prediction(uid='525', iid='72998', r_ui=3.0, est=3.310237191133114, details={'was_impossible': False}),
 Prediction(uid='380', iid='4366', r_ui=5.0, est=3.6115156427767077, details={'was_impossible': False}),
 Prediction(uid='339', iid='48385', r_ui=4.5, est=3.8257315846427886, details={'was_impossible': False}),
 Prediction(uid='352', iid='56171', r_ui=2.5, est=3.6128912816094214, details={'was_impossible': False}),
 Prediction(uid='356', iid='223', r_ui=3.5, est=4.211937404832871, details={'was_impossible': False}),
 Prediction(uid='21', iid='79134', r_ui=2.0, est=3.6903834298448657, details={'was_impossible': False}),
 Prediction(uid='534', iid='7373', r_ui=4.5, est=3.840703417514205, details={'was_impossible': False}),
 Prediction(uid='352', iid='4014', r_ui=4.5, est=3.6740493857892136, details={'was_impossible': False}),
 Prediction(uid='68', iid='56941', r_ui=2.0, est=3.1866417015066437, details={'was_impossible': False}),
 Prediction(uid='177', iid='2694', r_ui=2.5, est=3.3857986537559177, details={'was_impossible': False}),
 Prediction(uid='305', iid='61350', r_ui=3.0, est=4.0456277111019485, details={'was_impossible': False}),
 Prediction(uid='448', iid='98160', r_ui=1.5, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='38', iid='317', r_ui=3.0, est=2.8859221223792892, details={'was_impossible': False}),
 Prediction(uid='414', iid='6620', r_ui=4.5, est=3.959008710432, details={'was_impossible': False}),
 Prediction(uid='298', iid='68073', r_ui=0.5, est=2.479235575478853, details={'was_impossible': False}),
 Prediction(uid='253', iid='965', r_ui=3.5, est=4.287868456607478, details={'was_impossible': False}),
 Prediction(uid='489', iid='3081', r_ui=3.0, est=2.7896000000678645, details={'was_impossible': False}),
 Prediction(uid='514', iid='1617', r_ui=4.0, est=4.044596759821012, details={'was_impossible': False}),
 Prediction(uid='548', iid='356', r_ui=5.0, est=4.479415113668262, details={'was_impossible': False}),
 Prediction(uid='314', iid='349', r_ui=3.0, est=3.2615370183394985, details={'was_impossible': False}),
 Prediction(uid='313', iid='3386', r_ui=3.0, est=3.485179064324738, details={'was_impossible': False}),
 Prediction(uid='226', iid='432', r_ui=3.0, est=2.6058231696082355, details={'was_impossible': False}),
 Prediction(uid='318', iid='64167', r_ui=3.5, est=3.605183187236981, details={'was_impossible': False}),
 Prediction(uid='371', iid='3809', r_ui=4.0, est=4.0073084932464536, details={'was_impossible': False}),
 Prediction(uid='448', iid='3397', r_ui=4.0, est=3.015289117133334, details={'was_impossible': False}),
 Prediction(uid='307', iid='2081', r_ui=3.0, est=2.9329563786798745, details={'was_impossible': False}),
 Prediction(uid='298', iid='4247', r_ui=3.0, est=1.62939863541769, details={'was_impossible': False}),
 Prediction(uid='314', iid='1042', r_ui=3.0, est=2.999113426608047, details={'was_impossible': False}),
 Prediction(uid='610', iid='56145', r_ui=4.5, est=3.203006330682184, details={'was_impossible': False}),
 Prediction(uid='382', iid='4701', r_ui=3.5, est=3.3347866224504896, details={'was_impossible': False}),
 Prediction(uid='438', iid='852', r_ui=3.5, est=2.90527969100224, details={'was_impossible': False}),
 Prediction(uid='182', iid='1449', r_ui=4.0, est=3.6816961346191404, details={'was_impossible': False}),
 Prediction(uid='445', iid='4896', r_ui=3.0, est=3.7348177000817078, details={'was_impossible': False}),
 Prediction(uid='223', iid='6365', r_ui=3.0, est=3.0748606607598674, details={'was_impossible': False}),
 Prediction(uid='596', iid='90746', r_ui=3.5, est=3.4394680520384493, details={'was_impossible': False}),
 Prediction(uid='377', iid='1274', r_ui=5.0, est=4.120045565880448, details={'was_impossible': False}),
 Prediction(uid='211', iid='70286', r_ui=2.5, est=3.934504192843529, details={'was_impossible': False}),
 Prediction(uid='305', iid='648', r_ui=4.0, est=3.952307096640352, details={'was_impossible': False}),
 Prediction(uid='103', iid='2054', r_ui=3.5, est=3.029240946468469, details={'was_impossible': False}),
 Prediction(uid='438', iid='2321', r_ui=3.5, est=3.3866105587418494, details={'was_impossible': False}),
 Prediction(uid='608', iid='6888', r_ui=1.5, est=2.1082501033967995, details={'was_impossible': False}),
 Prediction(uid='200', iid='1029', r_ui=3.5, est=3.998672597808746, details={'was_impossible': False}),
 Prediction(uid='346', iid='3083', r_ui=4.5, est=3.6096934080924292, details={'was_impossible': False}),
 Prediction(uid='474', iid='919', r_ui=4.5, est=3.562737775769076, details={'was_impossible': False}),
 Prediction(uid='391', iid='2396', r_ui=4.0, est=3.976123571659791, details={'was_impossible': False}),
 Prediction(uid='540', iid='145', r_ui=3.5, est=3.5276487391388747, details={'was_impossible': False}),
 Prediction(uid='101', iid='2683', r_ui=3.0, est=3.3022744104660204, details={'was_impossible': False}),
 Prediction(uid='303', iid='3175', r_ui=4.0, est=4.03215370627828, details={'was_impossible': False}),
 Prediction(uid='527', iid='1259', r_ui=4.0, est=4.4212414149393195, details={'was_impossible': False}),
 Prediction(uid='351', iid='344', r_ui=3.5, est=3.0481769498269573, details={'was_impossible': False}),
 Prediction(uid='94', iid='292', r_ui=3.0, est=2.9874684234311966, details={'was_impossible': False}),
 Prediction(uid='514', iid='185473', r_ui=3.0, est=3.137684304284104, details={'was_impossible': False}),
 Prediction(uid='500', iid='597', r_ui=1.0, est=2.941668609493692, details={'was_impossible': False}),
 Prediction(uid='603', iid='2813', r_ui=1.0, est=3.431307529013665, details={'was_impossible': False}),
 Prediction(uid='17', iid='77455', r_ui=3.5, est=4.145593091946718, details={'was_impossible': False}),
 Prediction(uid='6', iid='848', r_ui=4.0, est=3.435158499454031, details={'was_impossible': False}),
 Prediction(uid='82', iid='2001', r_ui=4.5, est=3.1322964007436784, details={'was_impossible': False}),
 Prediction(uid='314', iid='314', r_ui=4.0, est=3.204219855538928, details={'was_impossible': False}),
 Prediction(uid='603', iid='1596', r_ui=4.0, est=3.604032106564321, details={'was_impossible': False}),
 Prediction(uid='414', iid='7151', r_ui=4.0, est=3.0585345846027137, details={'was_impossible': False}),
 Prediction(uid='573', iid='76251', r_ui=4.5, est=4.019471269398591, details={'was_impossible': False}),
 Prediction(uid='42', iid='4359', r_ui=4.0, est=3.6223921077867125, details={'was_impossible': False}),
 Prediction(uid='367', iid='3591', r_ui=4.0, est=3.310050121081457, details={'was_impossible': False}),
 Prediction(uid='217', iid='1812', r_ui=4.0, est=3.1711802699556553, details={'was_impossible': False}),
 Prediction(uid='8', iid='21', r_ui=4.0, est=3.607755761110874, details={'was_impossible': False}),
 Prediction(uid='318', iid='1361', r_ui=4.0, est=3.694402996900332, details={'was_impossible': False}),
 Prediction(uid='313', iid='3751', r_ui=2.0, est=3.5584088023050433, details={'was_impossible': False}),
 Prediction(uid='226', iid='473', r_ui=3.5, est=2.950671595804745, details={'was_impossible': False}),
 Prediction(uid='233', iid='2329', r_ui=4.0, est=3.7484917886405853, details={'was_impossible': False}),
 Prediction(uid='166', iid='349', r_ui=3.5, est=3.8473641697480487, details={'was_impossible': False}),
 Prediction(uid='15', iid='6377', r_ui=3.0, est=3.855194360184123, details={'was_impossible': False}),
 Prediction(uid='316', iid='48', r_ui=1.5, est=2.8216115025143464, details={'was_impossible': False}),
 Prediction(uid='307', iid='52375', r_ui=3.5, est=2.778439582093219, details={'was_impossible': False}),
 Prediction(uid='195', iid='4452', r_ui=4.0, est=3.0590245415782236, details={'was_impossible': False}),
 Prediction(uid='368', iid='3811', r_ui=3.0, est=3.1408751001162805, details={'was_impossible': False}),
 Prediction(uid='249', iid='185435', r_ui=3.0, est=3.6735782415021023, details={'was_impossible': False}),
 Prediction(uid='480', iid='5810', r_ui=2.5, est=2.836806955937125, details={'was_impossible': False}),
 Prediction(uid='294', iid='3552', r_ui=5.0, est=2.9678626005715323, details={'was_impossible': False}),
 Prediction(uid='199', iid='6016', r_ui=4.0, est=3.9971916424789264, details={'was_impossible': False}),
 Prediction(uid='599', iid='6867', r_ui=3.0, est=3.0474620450052936, details={'was_impossible': False}),
 Prediction(uid='564', iid='111617', r_ui=4.0, est=3.5704272280974023, details={'was_impossible': False}),
 Prediction(uid='357', iid='26471', r_ui=5.0, est=3.655126767898458, details={'was_impossible': False}),
 Prediction(uid='462', iid='87232', r_ui=3.0, est=3.1505787522440083, details={'was_impossible': False}),
 Prediction(uid='185', iid='5377', r_ui=3.0, est=3.8006544952297503, details={'was_impossible': False}),
 Prediction(uid='13', iid='3513', r_ui=3.0, est=3.9075716352195613, details={'was_impossible': False}),
 Prediction(uid='66', iid='1517', r_ui=4.0, est=4.026821083742778, details={'was_impossible': False}),
 Prediction(uid='249', iid='162606', r_ui=3.5, est=3.6719070481754432, details={'was_impossible': False}),
 Prediction(uid='91', iid='1197', r_ui=5.0, est=4.039028061250735, details={'was_impossible': False}),
 Prediction(uid='111', iid='39715', r_ui=0.5, est=2.680915117810546, details={'was_impossible': False}),
 Prediction(uid='479', iid='4621', r_ui=3.0, est=2.6350027553118918, details={'was_impossible': False}),
 Prediction(uid='351', iid='5989', r_ui=4.0, est=3.9185350570356166, details={'was_impossible': False}),
 Prediction(uid='577', iid='494', r_ui=3.0, est=3.1797500501280878, details={'was_impossible': False}),
 Prediction(uid='330', iid='235', r_ui=1.5, est=3.597476241104795, details={'was_impossible': False}),
 Prediction(uid='460', iid='48516', r_ui=4.0, est=4.6385470812320495, details={'was_impossible': False}),
 Prediction(uid='68', iid='4246', r_ui=4.0, est=3.5854346060591977, details={'was_impossible': False}),
 Prediction(uid='274', iid='54736', r_ui=4.0, est=3.399617278608456, details={'was_impossible': False}),
 Prediction(uid='139', iid='5816', r_ui=3.0, est=2.492982646161438, details={'was_impossible': False}),
 Prediction(uid='294', iid='3263', r_ui=1.0, est=2.5794577981526814, details={'was_impossible': False}),
 Prediction(uid='243', iid='10', r_ui=5.0, est=4.463569651797171, details={'was_impossible': False}),
 Prediction(uid='432', iid='51662', r_ui=4.0, est=3.5960818471167797, details={'was_impossible': False}),
 Prediction(uid='286', iid='455', r_ui=4.0, est=2.849111162734352, details={'was_impossible': False}),
 Prediction(uid='327', iid='3481', r_ui=5.0, est=3.9794473760473283, details={'was_impossible': False}),
 Prediction(uid='504', iid='6932', r_ui=4.5, est=3.596596742132271, details={'was_impossible': False}),
 Prediction(uid='474', iid='6545', r_ui=4.5, est=3.318407793026961, details={'was_impossible': False}),
 Prediction(uid='425', iid='1387', r_ui=3.0, est=3.9229342459624, details={'was_impossible': False}),
 Prediction(uid='288', iid='3253', r_ui=3.0, est=3.0557265407699656, details={'was_impossible': False}),
 Prediction(uid='562', iid='1500', r_ui=4.0, est=4.1311247203382, details={'was_impossible': False}),
 Prediction(uid='414', iid='457', r_ui=5.0, est=4.089007559064596, details={'was_impossible': False}),
 Prediction(uid='122', iid='2160', r_ui=5.0, est=4.957655268408475, details={'was_impossible': False}),
 Prediction(uid='203', iid='3101', r_ui=3.0, est=3.423617478657386, details={'was_impossible': False}),
 Prediction(uid='119', iid='84392', r_ui=4.0, est=4.038426769147588, details={'was_impossible': False}),
 Prediction(uid='28', iid='1459', r_ui=2.5, est=2.610568323078466, details={'was_impossible': False}),
 Prediction(uid='52', iid='119145', r_ui=4.0, est=4.689659200380693, details={'was_impossible': False}),
 Prediction(uid='351', iid='1717', r_ui=2.0, est=3.1495621690451574, details={'was_impossible': False}),
 Prediction(uid='414', iid='5971', r_ui=5.0, est=3.991304230854645, details={'was_impossible': False}),
 Prediction(uid='68', iid='55765', r_ui=3.5, est=3.581396294595374, details={'was_impossible': False}),
 Prediction(uid='517', iid='167746', r_ui=1.0, est=2.8386136841844043, details={'was_impossible': False}),
 Prediction(uid='551', iid='3948', r_ui=3.0, est=3.6641094171190938, details={'was_impossible': False}),
 Prediction(uid='525', iid='1073', r_ui=3.5, est=3.717126066659199, details={'was_impossible': False}),
 Prediction(uid='135', iid='2804', r_ui=5.0, est=3.9068788991843846, details={'was_impossible': False}),
 Prediction(uid='330', iid='25', r_ui=4.5, est=3.2436117372176407, details={'was_impossible': False}),
 Prediction(uid='534', iid='134775', r_ui=2.0, est=3.8099522159417685, details={'was_impossible': False}),
 Prediction(uid='283', iid='1580', r_ui=4.0, est=3.0559539912372906, details={'was_impossible': False}),
 Prediction(uid='298', iid='52281', r_ui=2.0, est=2.670483127697685, details={'was_impossible': False}),
 Prediction(uid='263', iid='5952', r_ui=4.0, est=4.369957577789053, details={'was_impossible': False}),
 Prediction(uid='608', iid='5449', r_ui=3.0, est=2.992353343617054, details={'was_impossible': False}),
 Prediction(uid='414', iid='3844', r_ui=2.0, est=3.6504270520325264, details={'was_impossible': False}),
 Prediction(uid='52', iid='110501', r_ui=5.0, est=4.259412699959697, details={'was_impossible': False}),
 Prediction(uid='448', iid='5025', r_ui=2.0, est=2.531985838458575, details={'was_impossible': False}),
 Prediction(uid='590', iid='2410', r_ui=3.0, est=2.766513946671495, details={'was_impossible': False}),
 Prediction(uid='117', iid='500', r_ui=4.0, est=3.355530472562954, details={'was_impossible': False}),
 Prediction(uid='68', iid='920', r_ui=5.0, est=3.5976909077932295, details={'was_impossible': False}),
 Prediction(uid='597', iid='288', r_ui=3.0, est=3.5699906420554495, details={'was_impossible': False}),
 Prediction(uid='380', iid='32031', r_ui=3.0, est=3.3994617893894423, details={'was_impossible': False}),
 Prediction(uid='136', iid='163', r_ui=1.0, est=3.4642817597116498, details={'was_impossible': False}),
 Prediction(uid='393', iid='4226', r_ui=5.0, est=4.09316611306704, details={'was_impossible': False}),
 Prediction(uid='332', iid='2396', r_ui=4.0, est=3.6389972134682083, details={'was_impossible': False}),
 Prediction(uid='419', iid='1876', r_ui=4.0, est=3.2362689959152213, details={'was_impossible': False}),
 Prediction(uid='51', iid='849', r_ui=4.5, est=3.2531453479369277, details={'was_impossible': False}),
 Prediction(uid='339', iid='107406', r_ui=2.5, est=3.8013452901882427, details={'was_impossible': False}),
 Prediction(uid='318', iid='114678', r_ui=4.0, est=3.6014670154546193, details={'was_impossible': False}),
 Prediction(uid='599', iid='38886', r_ui=2.5, est=2.718646195249797, details={'was_impossible': False}),
 Prediction(uid='610', iid='4262', r_ui=4.5, est=4.044343903783123, details={'was_impossible': False}),
 Prediction(uid='19', iid='1127', r_ui=3.0, est=2.8364227642932556, details={'was_impossible': False}),
 Prediction(uid='68', iid='2174', r_ui=2.5, est=3.590749164456039, details={'was_impossible': False}),
 Prediction(uid='606', iid='51086', r_ui=2.5, est=2.9933537704782855, details={'was_impossible': False}),
 Prediction(uid='571', iid='3024', r_ui=1.0, est=2.294874501325821, details={'was_impossible': False}),
 Prediction(uid='433', iid='74458', r_ui=3.0, est=3.7932960689245583, details={'was_impossible': False}),
 Prediction(uid='374', iid='595', r_ui=3.0, est=3.981167814935887, details={'was_impossible': False}),
 Prediction(uid='82', iid='592', r_ui=3.5, est=3.2946854584014837, details={'was_impossible': False}),
 Prediction(uid='362', iid='81417', r_ui=3.0, est=3.783186090700008, details={'was_impossible': False}),
 Prediction(uid='183', iid='3726', r_ui=3.0, est=3.5702184859050217, details={'was_impossible': False}),
 Prediction(uid='307', iid='70', r_ui=3.5, est=2.837347239558256, details={'was_impossible': False}),
 Prediction(uid='107', iid='160', r_ui=4.0, est=3.409080806907024, details={'was_impossible': False}),
 Prediction(uid='298', iid='8917', r_ui=2.0, est=2.086012382483725, details={'was_impossible': False}),
 Prediction(uid='82', iid='6566', r_ui=1.5, est=3.3110202941392113, details={'was_impossible': False}),
 Prediction(uid='111', iid='162602', r_ui=4.5, est=3.3293092840773824, details={'was_impossible': False}),
 Prediction(uid='21', iid='149380', r_ui=1.5, est=3.245039202289564, details={'was_impossible': False}),
 Prediction(uid='504', iid='4993', r_ui=4.0, est=4.260975427910565, details={'was_impossible': False}),
 Prediction(uid='213', iid='58103', r_ui=3.5, est=3.826352899610103, details={'was_impossible': False}),
 Prediction(uid='205', iid='71462', r_ui=5.0, est=3.4013903879493554, details={'was_impossible': False}),
 Prediction(uid='590', iid='1124', r_ui=3.5, est=3.215470189796776, details={'was_impossible': False}),
 Prediction(uid='226', iid='3751', r_ui=3.0, est=3.5460241467002716, details={'was_impossible': False}),
 Prediction(uid='599', iid='1244', r_ui=4.0, est=3.014566955916659, details={'was_impossible': False}),
 Prediction(uid='605', iid='587', r_ui=3.0, est=3.299744305912293, details={'was_impossible': False}),
 Prediction(uid='593', iid='6776', r_ui=4.0, est=2.915700040665768, details={'was_impossible': False}),
 Prediction(uid='6', iid='257', r_ui=5.0, est=3.6142917583121608, details={'was_impossible': False}),
 Prediction(uid='489', iid='2762', r_ui=3.0, est=3.789921522986386, details={'was_impossible': False}),
 Prediction(uid='606', iid='7265', r_ui=3.5, est=3.9292829736088843, details={'was_impossible': False}),
 Prediction(uid='28', iid='43928', r_ui=3.0, est=2.1467975977979763, details={'was_impossible': False}),
 Prediction(uid='603', iid='390', r_ui=5.0, est=3.524463427704346, details={'was_impossible': False}),
 Prediction(uid='474', iid='2019', r_ui=4.0, est=3.858258337902831, details={'was_impossible': False}),
 Prediction(uid='599', iid='68945', r_ui=4.5, est=2.654756873110253, details={'was_impossible': False}),
 Prediction(uid='554', iid='2657', r_ui=2.0, est=3.789551619113905, details={'was_impossible': False}),
 Prediction(uid='216', iid='3993', r_ui=1.0, est=3.285726257282391, details={'was_impossible': False}),
 Prediction(uid='524', iid='445', r_ui=3.0, est=3.126558998996516, details={'was_impossible': False}),
 Prediction(uid='331', iid='5418', r_ui=4.0, est=3.721045349492493, details={'was_impossible': False}),
 Prediction(uid='318', iid='4754', r_ui=3.5, est=3.722203617780279, details={'was_impossible': False}),
 Prediction(uid='599', iid='1212', r_ui=3.0, est=3.387294313659664, details={'was_impossible': False}),
 Prediction(uid='19', iid='3400', r_ui=3.0, est=2.6419875454501143, details={'was_impossible': False}),
 Prediction(uid='608', iid='4816', r_ui=3.0, est=3.1698997028661693, details={'was_impossible': False}),
 Prediction(uid='279', iid='2791', r_ui=3.5, est=3.8480424643647173, details={'was_impossible': False}),
 Prediction(uid='474', iid='903', r_ui=4.5, est=4.094898117407376, details={'was_impossible': False}),
 Prediction(uid='610', iid='1923', r_ui=5.0, est=3.680228760421707, details={'was_impossible': False}),
 Prediction(uid='69', iid='4876', r_ui=3.0, est=3.602328286680174, details={'was_impossible': False}),
 Prediction(uid='111', iid='94478', r_ui=4.0, est=2.9297179663686173, details={'was_impossible': False}),
 Prediction(uid='47', iid='5991', r_ui=2.0, est=2.9931924656190287, details={'was_impossible': False}),
 Prediction(uid='64', iid='1387', r_ui=5.0, est=4.316314649253482, details={'was_impossible': False}),
 Prediction(uid='84', iid='802', r_ui=4.0, est=3.5468084260816575, details={'was_impossible': False}),
 Prediction(uid='448', iid='157122', r_ui=3.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='305', iid='6874', r_ui=5.0, est=4.35049923013979, details={'was_impossible': False}),
 Prediction(uid='448', iid='4638', r_ui=4.0, est=2.4664432002849694, details={'was_impossible': False}),
 Prediction(uid='292', iid='1544', r_ui=4.0, est=2.3544412669489923, details={'was_impossible': False}),
 Prediction(uid='448', iid='85399', r_ui=1.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='95', iid='260', r_ui=5.0, est=4.653595142699709, details={'was_impossible': False}),
 Prediction(uid='325', iid='532', r_ui=3.0, est=2.94477411934726, details={'was_impossible': False}),
 Prediction(uid='599', iid='2002', r_ui=2.0, est=2.303310396723667, details={'was_impossible': False}),
 Prediction(uid='6', iid='151', r_ui=4.0, est=3.694992427305418, details={'was_impossible': False}),
 Prediction(uid='58', iid='551', r_ui=5.0, est=4.237401520610305, details={'was_impossible': False}),
 Prediction(uid='384', iid='4396', r_ui=1.0, est=2.994244780897376, details={'was_impossible': False}),
 Prediction(uid='191', iid='94', r_ui=4.0, est=3.6825564358903633, details={'was_impossible': False}),
 Prediction(uid='19', iid='2371', r_ui=4.0, est=2.420802262275549, details={'was_impossible': False}),
 Prediction(uid='169', iid='7143', r_ui=4.5, est=4.655314141551583, details={'was_impossible': False}),
 Prediction(uid='298', iid='3018', r_ui=3.5, est=2.454552165607329, details={'was_impossible': False}),
 Prediction(uid='599', iid='93510', r_ui=2.5, est=2.9374407550181054, details={'was_impossible': False}),
 Prediction(uid='274', iid='8984', r_ui=2.0, est=3.3046737113602758, details={'was_impossible': False}),
 Prediction(uid='119', iid='296', r_ui=4.0, est=4.711613959721489, details={'was_impossible': False}),
 Prediction(uid='582', iid='40815', r_ui=4.5, est=3.972147508364428, details={'was_impossible': False}),
 Prediction(uid='554', iid='3037', r_ui=5.0, est=4.26984864291558, details={'was_impossible': False}),
 Prediction(uid='20', iid='5481', r_ui=1.0, est=3.2413873188948448, details={'was_impossible': False}),
 Prediction(uid='62', iid='89745', r_ui=4.0, est=4.189129995155088, details={'was_impossible': False}),
 Prediction(uid='196', iid='62', r_ui=4.5, est=3.684290847730444, details={'was_impossible': False}),
 Prediction(uid='249', iid='44195', r_ui=4.0, est=4.283035851335086, details={'was_impossible': False}),
 Prediction(uid='405', iid='33004', r_ui=3.5, est=3.7534855995348164, details={'was_impossible': False}),
 Prediction(uid='561', iid='32587', r_ui=3.0, est=3.4898934297456177, details={'was_impossible': False}),
 Prediction(uid='401', iid='5952', r_ui=3.0, est=3.831194089431971, details={'was_impossible': False}),
 Prediction(uid='298', iid='60756', r_ui=3.0, est=2.23606871681738, details={'was_impossible': False}),
 Prediction(uid='288', iid='3959', r_ui=3.0, est=3.3029056916900235, details={'was_impossible': False}),
 Prediction(uid='605', iid='8368', r_ui=4.0, est=3.8913671075684344, details={'was_impossible': False}),
 Prediction(uid='445', iid='74458', r_ui=4.5, est=3.8634842116821586, details={'was_impossible': False}),
 Prediction(uid='550', iid='1', r_ui=4.0, est=4.233852445806578, details={'was_impossible': False}),
 Prediction(uid='475', iid='111759', r_ui=4.0, est=4.771421834189673, details={'was_impossible': False}),
 Prediction(uid='540', iid='2628', r_ui=4.5, est=3.6089466437590705, details={'was_impossible': False}),
 Prediction(uid='59', iid='1299', r_ui=5.0, est=4.356223528796695, details={'was_impossible': False}),
 Prediction(uid='91', iid='6707', r_ui=3.5, est=3.106302622976782, details={'was_impossible': False}),
 Prediction(uid='186', iid='4310', r_ui=3.0, est=3.6841577479419754, details={'was_impossible': False}),
 Prediction(uid='224', iid='3948', r_ui=5.0, est=4.262294529131533, details={'was_impossible': False}),
 Prediction(uid='84', iid='1387', r_ui=4.0, est=4.234007826770305, details={'was_impossible': False}),
 Prediction(uid='156', iid='2997', r_ui=5.0, est=3.9182651451918007, details={'was_impossible': False}),
 Prediction(uid='182', iid='104', r_ui=3.0, est=3.286097386491866, details={'was_impossible': False}),
 Prediction(uid='555', iid='3707', r_ui=3.0, est=3.372627465086417, details={'was_impossible': False}),
 Prediction(uid='368', iid='780', r_ui=2.0, est=2.9925034517560634, details={'was_impossible': False}),
 Prediction(uid='165', iid='1127', r_ui=4.0, est=3.37170143913759, details={'was_impossible': False}),
 Prediction(uid='171', iid='1276', r_ui=5.0, est=5, details={'was_impossible': False}),
 Prediction(uid='489', iid='4014', r_ui=3.5, est=3.255517412761509, details={'was_impossible': False}),
 Prediction(uid='509', iid='27731', r_ui=3.5, est=3.142568117614957, details={'was_impossible': False}),
 Prediction(uid='410', iid='1079', r_ui=4.0, est=4.260362834203099, details={'was_impossible': False}),
 Prediction(uid='380', iid='6541', r_ui=4.0, est=2.7425779821484664, details={'was_impossible': False}),
 Prediction(uid='288', iid='1064', r_ui=2.0, est=2.839746956912648, details={'was_impossible': False}),
 Prediction(uid='160', iid='1589', r_ui=3.0, est=2.6993306330549887, details={'was_impossible': False}),
 Prediction(uid='141', iid='3753', r_ui=3.0, est=3.5395038425234, details={'was_impossible': False}),
 Prediction(uid='177', iid='8808', r_ui=3.5, est=3.2058386294247225, details={'was_impossible': False}),
 Prediction(uid='119', iid='114662', r_ui=5.0, est=4.1183258318039195, details={'was_impossible': False}),
 Prediction(uid='462', iid='171763', r_ui=4.5, est=3.638519031876974, details={'was_impossible': False}),
 Prediction(uid='215', iid='1206', r_ui=4.0, est=4.304882520736024, details={'was_impossible': False}),
 Prediction(uid='489', iid='51540', r_ui=4.0, est=3.15452256109393, details={'was_impossible': False}),
 Prediction(uid='317', iid='296', r_ui=5.0, est=4.014051245451218, details={'was_impossible': False}),
 Prediction(uid='534', iid='107406', r_ui=3.5, est=3.9425456649977844, details={'was_impossible': False}),
 Prediction(uid='328', iid='2080', r_ui=3.5, est=2.868424166422955, details={'was_impossible': False}),
 Prediction(uid='365', iid='216', r_ui=3.5, est=2.263631033295233, details={'was_impossible': False}),
 Prediction(uid='220', iid='8644', r_ui=4.0, est=3.840161591992055, details={'was_impossible': False}),
 Prediction(uid='510', iid='420', r_ui=0.5, est=2.0583163880210047, details={'was_impossible': False}),
 Prediction(uid='440', iid='6774', r_ui=3.5, est=4.0166226213021305, details={'was_impossible': False}),
 Prediction(uid='357', iid='2657', r_ui=3.0, est=3.6610718778067097, details={'was_impossible': False}),
 Prediction(uid='599', iid='5508', r_ui=3.0, est=2.9052296614416013, details={'was_impossible': False}),
 Prediction(uid='414', iid='346', r_ui=3.0, est=3.4135065730511815, details={'was_impossible': False}),
 Prediction(uid='211', iid='91500', r_ui=4.0, est=3.6103720637615777, details={'was_impossible': False}),
 Prediction(uid='84', iid='1305', r_ui=3.0, est=3.472236396035105, details={'was_impossible': False}),
 Prediction(uid='42', iid='507', r_ui=4.0, est=3.491141170407366, details={'was_impossible': False}),
 Prediction(uid='552', iid='2968', r_ui=4.0, est=3.2204645158450176, details={'was_impossible': False}),
 Prediction(uid='282', iid='3578', r_ui=4.0, est=3.9147815908007026, details={'was_impossible': False}),
 Prediction(uid='561', iid='3499', r_ui=3.0, est=3.771207043548938, details={'was_impossible': False}),
 Prediction(uid='68', iid='56336', r_ui=2.0, est=3.2665727016738053, details={'was_impossible': False}),
 Prediction(uid='580', iid='2012', r_ui=3.0, est=3.3336211964782083, details={'was_impossible': False}),
 Prediction(uid='573', iid='51255', r_ui=4.5, est=4.47360789359586, details={'was_impossible': False}),
 Prediction(uid='382', iid='2720', r_ui=1.0, est=2.8309478666653245, details={'was_impossible': False}),
 Prediction(uid='431', iid='163', r_ui=3.0, est=3.118864673089376, details={'was_impossible': False}),
 Prediction(uid='608', iid='2827', r_ui=2.0, est=1.8752987483444334, details={'was_impossible': False}),
 Prediction(uid='89', iid='5299', r_ui=2.0, est=3.2192656837607068, details={'was_impossible': False}),
 Prediction(uid='211', iid='4262', r_ui=4.5, est=4.078003516960482, details={'was_impossible': False}),
 Prediction(uid='226', iid='1911', r_ui=2.5, est=2.897579715871215, details={'was_impossible': False}),
 Prediction(uid='330', iid='3949', r_ui=4.5, est=3.894010531617975, details={'was_impossible': False}),
 Prediction(uid='599', iid='3981', r_ui=1.5, est=2.2555472841474877, details={'was_impossible': False}),
 Prediction(uid='89', iid='74946', r_ui=3.0, est=3.503515556917025, details={'was_impossible': False}),
 Prediction(uid='187', iid='2076', r_ui=5.0, est=3.570947774797484, details={'was_impossible': False}),
 Prediction(uid='198', iid='1732', r_ui=3.0, est=3.803718691443146, details={'was_impossible': False}),
 Prediction(uid='288', iid='1307', r_ui=4.5, est=3.350844467894004, details={'was_impossible': False}),
 Prediction(uid='525', iid='5283', r_ui=3.0, est=3.267506100262869, details={'was_impossible': False}),
 Prediction(uid='18', iid='5816', r_ui=3.5, est=3.679117029628522, details={'was_impossible': False}),
 Prediction(uid='140', iid='2819', r_ui=3.0, est=3.6621579858362736, details={'was_impossible': False}),
 Prediction(uid='448', iid='778', r_ui=4.0, est=3.514879477039565, details={'was_impossible': False}),
 Prediction(uid='414', iid='6552', r_ui=3.5, est=3.7205996193404354, details={'was_impossible': False}),
 Prediction(uid='21', iid='116823', r_ui=3.5, est=3.4615911906218013, details={'was_impossible': False}),
 Prediction(uid='610', iid='71535', r_ui=3.5, est=3.7711215407875454, details={'was_impossible': False}),
 Prediction(uid='599', iid='3016', r_ui=2.0, est=2.724134711408938, details={'was_impossible': False}),
 Prediction(uid='474', iid='3859', r_ui=4.0, est=3.1779200893026385, details={'was_impossible': False}),
 Prediction(uid='217', iid='1686', r_ui=3.0, est=2.8699178700548025, details={'was_impossible': False}),
 Prediction(uid='122', iid='714', r_ui=5.0, est=4.360789501737638, details={'was_impossible': False}),
 Prediction(uid='599', iid='548', r_ui=1.5, est=2.427675400019219, details={'was_impossible': False}),
 Prediction(uid='268', iid='2890', r_ui=4.0, est=3.4047482341772315, details={'was_impossible': False}),
 Prediction(uid='256', iid='6550', r_ui=3.0, est=3.4565663722337754, details={'was_impossible': False}),
 Prediction(uid='298', iid='103539', r_ui=2.5, est=2.3904722009047523, details={'was_impossible': False}),
 Prediction(uid='251', iid='593', r_ui=5.0, est=4.835885655045024, details={'was_impossible': False}),
 Prediction(uid='187', iid='2700', r_ui=4.5, est=3.906497038881989, details={'was_impossible': False}),
 Prediction(uid='28', iid='3429', r_ui=3.5, est=3.1680868053786826, details={'was_impossible': False}),
 Prediction(uid='298', iid='86377', r_ui=4.0, est=2.6336577645933286, details={'was_impossible': False}),
 Prediction(uid='337', iid='778', r_ui=4.0, est=4.920421128594716, details={'was_impossible': False}),
 Prediction(uid='84', iid='1268', r_ui=3.0, est=3.877974402421657, details={'was_impossible': False}),
 Prediction(uid='45', iid='3270', r_ui=1.0, est=3.653583890841062, details={'was_impossible': False}),
 Prediction(uid='483', iid='1199', r_ui=5.0, est=4.225517975056262, details={'was_impossible': False}),
 Prediction(uid='200', iid='3489', r_ui=3.0, est=3.914872263939078, details={'was_impossible': False}),
 Prediction(uid='438', iid='7375', r_ui=3.0, est=3.277443556595571, details={'was_impossible': False}),
 Prediction(uid='211', iid='1556', r_ui=2.0, est=2.66624177064938, details={'was_impossible': False}),
 Prediction(uid='425', iid='1653', r_ui=4.0, est=4.006456629485145, details={'was_impossible': False}),
 Prediction(uid='252', iid='81847', r_ui=4.0, est=4.1831852188018885, details={'was_impossible': False}),
 Prediction(uid='292', iid='60074', r_ui=3.5, est=3.171589375172831, details={'was_impossible': False}),
 Prediction(uid='599', iid='44241', r_ui=2.0, est=2.654756873110253, details={'was_impossible': False}),
 Prediction(uid='68', iid='8807', r_ui=4.0, est=3.397265218884011, details={'was_impossible': False}),
 Prediction(uid='365', iid='5349', r_ui=3.0, est=2.4945549624727734, details={'was_impossible': False}),
 Prediction(uid='200', iid='40815', r_ui=4.0, est=4.008347878437721, details={'was_impossible': False}),
 Prediction(uid='507', iid='165', r_ui=3.0, est=3.2326459976186808, details={'was_impossible': False}),
 Prediction(uid='386', iid='292', r_ui=1.0, est=2.9301325710153705, details={'was_impossible': False}),
 Prediction(uid='495', iid='3081', r_ui=2.0, est=3.7991560462845473, details={'was_impossible': False}),
 Prediction(uid='298', iid='6754', r_ui=2.5, est=2.543342509840931, details={'was_impossible': False}),
 Prediction(uid='409', iid='2581', r_ui=2.0, est=3.0505308614482236, details={'was_impossible': False}),
 Prediction(uid='305', iid='53322', r_ui=3.0, est=3.7743587188833905, details={'was_impossible': False}),
 Prediction(uid='178', iid='2571', r_ui=4.5, est=4.231298502613236, details={'was_impossible': False}),
 Prediction(uid='380', iid='42009', r_ui=2.0, est=3.2864337827218213, details={'was_impossible': False}),
 Prediction(uid='483', iid='109846', r_ui=3.5, est=3.589822573360562, details={'was_impossible': False}),
 Prediction(uid='387', iid='1104', r_ui=4.0, est=3.6344073084587807, details={'was_impossible': False}),
 Prediction(uid='280', iid='3210', r_ui=4.0, est=4.098080677383622, details={'was_impossible': False}),
 Prediction(uid='475', iid='41566', r_ui=5.0, est=4.3936912779949875, details={'was_impossible': False}),
 Prediction(uid='474', iid='4427', r_ui=3.5, est=3.322686288632727, details={'was_impossible': False}),
 Prediction(uid='66', iid='29', r_ui=4.5, est=4.227043725548029, details={'was_impossible': False}),
 Prediction(uid='350', iid='748', r_ui=4.0, est=3.367505752907417, details={'was_impossible': False}),
 Prediction(uid='560', iid='1210', r_ui=4.0, est=3.9631207004230755, details={'was_impossible': False}),
 Prediction(uid='202', iid='1385', r_ui=3.0, est=2.983866188106888, details={'was_impossible': False}),
 Prediction(uid='20', iid='4783', r_ui=3.5, est=3.572840166315952, details={'was_impossible': False}),
 Prediction(uid='21', iid='48', r_ui=3.0, est=3.229171725925083, details={'was_impossible': False}),
 Prediction(uid='318', iid='61236', r_ui=2.5, est=3.445705022053898, details={'was_impossible': False}),
 Prediction(uid='590', iid='1304', r_ui=4.5, est=3.517309307156004, details={'was_impossible': False}),
 Prediction(uid='306', iid='135436', r_ui=3.5, est=3.183299109865986, details={'was_impossible': False}),
 Prediction(uid='332', iid='2997', r_ui=3.5, est=3.6278496282429806, details={'was_impossible': False}),
 Prediction(uid='125', iid='158238', r_ui=4.0, est=4.070428748786845, details={'was_impossible': False}),
 Prediction(uid='39', iid='1994', r_ui=4.0, est=3.6018163345878307, details={'was_impossible': False}),
 Prediction(uid='260', iid='5673', r_ui=3.0, est=3.54857181924118, details={'was_impossible': False}),
 Prediction(uid='24', iid='7143', r_ui=4.0, est=3.720362444539472, details={'was_impossible': False}),
 Prediction(uid='305', iid='4223', r_ui=5.0, est=3.641273564165424, details={'was_impossible': False}),
 Prediction(uid='448', iid='149590', r_ui=2.5, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='380', iid='6157', r_ui=3.0, est=3.0373842738147765, details={'was_impossible': False}),
 Prediction(uid='245', iid='2289', r_ui=3.0, est=3.092993432242872, details={'was_impossible': False}),
 Prediction(uid='305', iid='75813', r_ui=3.5, est=3.590074080793635, details={'was_impossible': False}),
 Prediction(uid='297', iid='494', r_ui=2.0, est=2.6388150359945137, details={'was_impossible': False}),
 Prediction(uid='493', iid='2924', r_ui=4.0, est=3.597827061153478, details={'was_impossible': False}),
 Prediction(uid='98', iid='7153', r_ui=1.5, est=4.502636637817834, details={'was_impossible': False}),
 Prediction(uid='509', iid='6266', r_ui=2.0, est=3.0333643657597658, details={'was_impossible': False}),
 Prediction(uid='600', iid='899', r_ui=4.5, est=3.6271433449021204, details={'was_impossible': False}),
 Prediction(uid='28', iid='5445', r_ui=3.5, est=3.1167378846160183, details={'was_impossible': False}),
 Prediction(uid='68', iid='370', r_ui=1.5, est=2.868928093091362, details={'was_impossible': False}),
 Prediction(uid='489', iid='6287', r_ui=2.5, est=2.722092361524893, details={'was_impossible': False}),
 Prediction(uid='230', iid='4370', r_ui=4.0, est=2.3091155117627515, details={'was_impossible': False}),
 Prediction(uid='387', iid='2136', r_ui=2.5, est=2.4020562742334275, details={'was_impossible': False}),
 Prediction(uid='415', iid='971', r_ui=4.5, est=4.190686408966849, details={'was_impossible': False}),
 Prediction(uid='31', iid='1', r_ui=5.0, est=4.195748397929298, details={'was_impossible': False}),
 Prediction(uid='552', iid='1438', r_ui=3.0, est=2.247187058114724, details={'was_impossible': False}),
 Prediction(uid='177', iid='6333', r_ui=3.5, est=3.669559814821614, details={'was_impossible': False}),
 Prediction(uid='448', iid='7007', r_ui=3.5, est=2.667403449195508, details={'was_impossible': False}),
 Prediction(uid='564', iid='46970', r_ui=4.5, est=3.2996602564005846, details={'was_impossible': False}),
 Prediction(uid='220', iid='4219', r_ui=3.0, est=3.532238484678179, details={'was_impossible': False}),
 Prediction(uid='7', iid='592', r_ui=3.0, est=3.136352673544815, details={'was_impossible': False}),
 Prediction(uid='109', iid='440', r_ui=3.0, est=3.1808195994428936, details={'was_impossible': False}),
 Prediction(uid='466', iid='47099', r_ui=5.0, est=4.03695917470383, details={'was_impossible': False}),
 Prediction(uid='240', iid='161', r_ui=4.0, est=4.253065152404913, details={'was_impossible': False}),
 Prediction(uid='357', iid='1593', r_ui=4.0, est=3.425205845131737, details={'was_impossible': False}),
 Prediction(uid='414', iid='380', r_ui=4.0, est=3.450076826425714, details={'was_impossible': False}),
 Prediction(uid='5', iid='21', r_ui=4.0, est=3.5878148766742157, details={'was_impossible': False}),
 Prediction(uid='514', iid='185033', r_ui=2.0, est=3.137684304284104, details={'was_impossible': False}),
 Prediction(uid='610', iid='5049', r_ui=4.5, est=3.816007161133582, details={'was_impossible': False}),
 Prediction(uid='567', iid='103042', r_ui=2.0, est=1.9563486107926016, details={'was_impossible': False}),
 Prediction(uid='151', iid='141', r_ui=3.0, est=3.9350352045165238, details={'was_impossible': False}),
 Prediction(uid='235', iid='25', r_ui=5.0, est=3.5959396446216747, details={'was_impossible': False}),
 Prediction(uid='438', iid='30822', r_ui=3.0, est=3.583485355638185, details={'was_impossible': False}),
 Prediction(uid='253', iid='5791', r_ui=4.0, est=4.326997370288391, details={'was_impossible': False}),
 Prediction(uid='42', iid='223', r_ui=5.0, est=3.636327132729783, details={'was_impossible': False}),
 Prediction(uid='415', iid='4369', r_ui=3.0, est=3.39084360233237, details={'was_impossible': False}),
 Prediction(uid='599', iid='1468', r_ui=1.0, est=2.31738060419717, details={'was_impossible': False}),
 Prediction(uid='96', iid='3033', r_ui=1.0, est=3.8190726866019915, details={'was_impossible': False}),
 Prediction(uid='334', iid='4027', r_ui=4.0, est=3.5131171600692515, details={'was_impossible': False}),
 Prediction(uid='464', iid='16', r_ui=4.5, est=3.977821994426898, details={'was_impossible': False}),
 Prediction(uid='292', iid='63082', r_ui=4.0, est=3.5011392010817284, details={'was_impossible': False}),
 Prediction(uid='199', iid='5450', r_ui=2.0, est=3.102678548732505, details={'was_impossible': False}),
 Prediction(uid='220', iid='61160', r_ui=3.0, est=3.295632187219602, details={'was_impossible': False}),
 Prediction(uid='317', iid='2028', r_ui=5.0, est=3.977632612469904, details={'was_impossible': False}),
 Prediction(uid='599', iid='4593', r_ui=2.0, est=2.739478088584029, details={'was_impossible': False}),
 Prediction(uid='391', iid='1249', r_ui=5.0, est=4.236218742855778, details={'was_impossible': False}),
 Prediction(uid='500', iid='449', r_ui=1.0, est=3.0858596888963303, details={'was_impossible': False}),
 Prediction(uid='560', iid='4979', r_ui=4.0, est=3.6856179491757177, details={'was_impossible': False}),
 Prediction(uid='380', iid='587', r_ui=3.0, est=3.896833147935831, details={'was_impossible': False}),
 Prediction(uid='477', iid='51255', r_ui=4.5, est=4.012264482636442, details={'was_impossible': False}),
 Prediction(uid='167', iid='1198', r_ui=4.0, est=4.155978315632872, details={'was_impossible': False}),
 Prediction(uid='201', iid='994', r_ui=4.0, est=4.238878972529075, details={'was_impossible': False}),
 Prediction(uid='316', iid='2723', r_ui=3.0, est=2.8511923285319325, details={'was_impossible': False}),
 Prediction(uid='462', iid='9018', r_ui=4.0, est=3.380454400976522, details={'was_impossible': False}),
 Prediction(uid='216', iid='905', r_ui=4.0, est=3.581671784862376, details={'was_impossible': False}),
 Prediction(uid='434', iid='10', r_ui=3.5, est=3.465428694284958, details={'was_impossible': False}),
 Prediction(uid='597', iid='2523', r_ui=3.0, est=3.8395747230461907, details={'was_impossible': False}),
 Prediction(uid='160', iid='2021', r_ui=1.0, est=3.3362926150799805, details={'was_impossible': False}),
 Prediction(uid='361', iid='3948', r_ui=3.5, est=3.446710725928277, details={'was_impossible': False}),
 Prediction(uid='597', iid='3060', r_ui=4.0, est=4.160699734526517, details={'was_impossible': False}),
 Prediction(uid='490', iid='55261', r_ui=2.5, est=2.767288038080096, details={'was_impossible': False}),
 Prediction(uid='589', iid='350', r_ui=3.0, est=3.784901586174294, details={'was_impossible': False}),
 Prediction(uid='522', iid='2542', r_ui=4.5, est=3.900892432965928, details={'was_impossible': False}),
 Prediction(uid='418', iid='3147', r_ui=4.5, est=3.81982023660233, details={'was_impossible': False}),
 Prediction(uid='395', iid='368', r_ui=4.0, est=3.0563156139214405, details={'was_impossible': False}),
 Prediction(uid='348', iid='1196', r_ui=5.0, est=4.897573902164164, details={'was_impossible': False}),
 Prediction(uid='122', iid='48516', r_ui=5.0, est=4.9483414088843745, details={'was_impossible': False}),
 Prediction(uid='470', iid='648', r_ui=3.0, est=3.414808930686206, details={'was_impossible': False}),
 Prediction(uid='462', iid='2336', r_ui=1.5, est=3.344802445088239, details={'was_impossible': False}),
 Prediction(uid='376', iid='4226', r_ui=5.0, est=4.448733087701476, details={'was_impossible': False}),
 Prediction(uid='380', iid='65514', r_ui=5.0, est=3.7344709785429115, details={'was_impossible': False}),
 Prediction(uid='577', iid='3109', r_ui=4.0, est=3.3599147063006374, details={'was_impossible': False}),
 Prediction(uid='368', iid='2409', r_ui=3.0, est=2.6832687698291835, details={'was_impossible': False}),
 Prediction(uid='365', iid='52973', r_ui=3.5, est=2.436715858952861, details={'was_impossible': False}),
 Prediction(uid='141', iid='2478', r_ui=3.5, est=3.1527958279566817, details={'was_impossible': False}),
 Prediction(uid='489', iid='58162', r_ui=2.5, est=2.329906778062715, details={'was_impossible': False}),
 Prediction(uid='134', iid='595', r_ui=5.0, est=3.9107351631314975, details={'was_impossible': False}),
 Prediction(uid='603', iid='3098', r_ui=2.0, est=3.484231075611829, details={'was_impossible': False}),
 Prediction(uid='5', iid='590', r_ui=5.0, est=3.828685634588086, details={'was_impossible': False}),
 Prediction(uid='222', iid='5523', r_ui=2.5, est=2.8947133300563355, details={'was_impossible': False}),
 Prediction(uid='599', iid='122922', r_ui=2.5, est=2.8951424975002684, details={'was_impossible': False}),
 Prediction(uid='389', iid='653', r_ui=4.0, est=3.873369300066152, details={'was_impossible': False}),
 Prediction(uid='222', iid='2396', r_ui=3.0, est=3.553953744755724, details={'was_impossible': False}),
 Prediction(uid='33', iid='1653', r_ui=5.0, est=3.794216180641992, details={'was_impossible': False}),
 Prediction(uid='599', iid='94478', r_ui=2.0, est=2.4273113406096516, details={'was_impossible': False}),
 Prediction(uid='396', iid='1092', r_ui=1.5, est=3.0785359235928618, details={'was_impossible': False}),
 Prediction(uid='73', iid='95510', r_ui=4.0, est=3.4554862802000192, details={'was_impossible': False}),
 Prediction(uid='139', iid='7317', r_ui=2.0, est=2.056400729033529, details={'was_impossible': False}),
 Prediction(uid='249', iid='1320', r_ui=3.0, est=3.6284139366501376, details={'was_impossible': False}),
 Prediction(uid='580', iid='51662', r_ui=5.0, est=3.898227035118467, details={'was_impossible': False}),
 Prediction(uid='140', iid='3107', r_ui=3.0, est=3.592841854393912, details={'was_impossible': False}),
 Prediction(uid='135', iid='2407', r_ui=3.0, est=3.3551396340541384, details={'was_impossible': False}),
 Prediction(uid='249', iid='110730', r_ui=3.0, est=3.336532511169766, details={'was_impossible': False}),
 Prediction(uid='290', iid='800', r_ui=5.0, est=4.044871526641332, details={'was_impossible': False}),
 Prediction(uid='155', iid='2384', r_ui=2.0, est=3.1502965669499914, details={'was_impossible': False}),
 Prediction(uid='51', iid='1093', r_ui=5.0, est=3.5179976641467197, details={'was_impossible': False}),
 Prediction(uid='506', iid='7444', r_ui=3.0, est=3.033117124699168, details={'was_impossible': False}),
 Prediction(uid='105', iid='102407', r_ui=4.5, est=3.7322664217693404, details={'was_impossible': False}),
 Prediction(uid='480', iid='3671', r_ui=0.5, est=3.9121529395036343, details={'was_impossible': False}),
 Prediction(uid='240', iid='160', r_ui=4.0, est=3.647427907707791, details={'was_impossible': False}),
 Prediction(uid='169', iid='5218', r_ui=4.0, est=4.536365111383677, details={'was_impossible': False}),
 Prediction(uid='275', iid='2937', r_ui=5.0, est=4.147459434728233, details={'was_impossible': False}),
 Prediction(uid='453', iid='2572', r_ui=5.0, est=3.9497827150832516, details={'was_impossible': False}),
 Prediction(uid='15', iid='60069', r_ui=3.5, est=3.89754351436882, details={'was_impossible': False}),
 Prediction(uid='479', iid='5135', r_ui=5.0, est=3.270830456028963, details={'was_impossible': False}),
 Prediction(uid='474', iid='3210', r_ui=2.0, est=3.587387956836661, details={'was_impossible': False}),
 Prediction(uid='73', iid='4226', r_ui=4.0, est=4.1460844117683795, details={'was_impossible': False}),
 Prediction(uid='387', iid='5291', r_ui=3.5, est=3.2877267052840287, details={'was_impossible': False}),
 Prediction(uid='448', iid='4681', r_ui=4.0, est=2.8511340225744264, details={'was_impossible': False}),
 Prediction(uid='332', iid='5903', r_ui=3.5, est=3.7915600324801244, details={'was_impossible': False}),
 Prediction(uid='111', iid='4255', r_ui=2.0, est=2.5669786066241853, details={'was_impossible': False}),
 Prediction(uid='14', iid='47', r_ui=5.0, est=3.8232585777627635, details={'was_impossible': False}),
 Prediction(uid='593', iid='110', r_ui=3.0, est=3.772909679895079, details={'was_impossible': False}),
 Prediction(uid='288', iid='2077', r_ui=3.5, est=2.981379786264698, details={'was_impossible': False}),
 Prediction(uid='356', iid='1206', r_ui=4.0, est=4.13570115663637, details={'was_impossible': False}),
 Prediction(uid='91', iid='92', r_ui=2.0, est=2.996928827208506, details={'was_impossible': False}),
 Prediction(uid='599', iid='95449', r_ui=2.0, est=2.545954556418308, details={'was_impossible': False}),
 Prediction(uid='474', iid='7285', r_ui=4.0, est=3.6148107769737843, details={'was_impossible': False}),
 Prediction(uid='111', iid='4896', r_ui=4.0, est=4.073355052693667, details={'was_impossible': False}),
 Prediction(uid='103', iid='1258', r_ui=4.0, est=4.388935482962575, details={'was_impossible': False}),
 Prediction(uid='141', iid='1527', r_ui=3.5, est=3.6831813407117533, details={'was_impossible': False}),
 Prediction(uid='304', iid='13', r_ui=4.0, est=3.7758108111681454, details={'was_impossible': False}),
 Prediction(uid='170', iid='350', r_ui=3.0, est=3.1604308292906693, details={'was_impossible': False}),
 Prediction(uid='448', iid='93982', r_ui=2.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='561', iid='3527', r_ui=5.0, est=3.311712998907812, details={'was_impossible': False}),
 Prediction(uid='448', iid='84772', r_ui=3.0, est=2.66587207124818, details={'was_impossible': False}),
 Prediction(uid='474', iid='3230', r_ui=3.5, est=3.3175226562848623, details={'was_impossible': False}),
 Prediction(uid='249', iid='2232', r_ui=4.0, est=3.808208738871056, details={'was_impossible': False}),
 Prediction(uid='249', iid='51662', r_ui=5.0, est=3.95479362358514, details={'was_impossible': False}),
 Prediction(uid='18', iid='51662', r_ui=3.5, est=3.7508074995895786, details={'was_impossible': False}),
 Prediction(uid='480', iid='2081', r_ui=3.0, est=3.4464199149572905, details={'was_impossible': False}),
 Prediction(uid='304', iid='349', r_ui=4.0, est=4.1245162573862695, details={'was_impossible': False}),
 Prediction(uid='122', iid='134130', r_ui=4.0, est=4.622994240238078, details={'was_impossible': False}),
 Prediction(uid='111', iid='46948', r_ui=0.5, est=3.2497669289523774, details={'was_impossible': False}),
 Prediction(uid='105', iid='9010', r_ui=4.5, est=4.110620686886656, details={'was_impossible': False}),
 Prediction(uid='21', iid='72641', r_ui=3.0, est=3.78539155240133, details={'was_impossible': False}),
 Prediction(uid='84', iid='1291', r_ui=3.0, est=4.1423126446618905, details={'was_impossible': False}),
 Prediction(uid='143', iid='2706', r_ui=4.5, est=2.935931685971989, details={'was_impossible': False}),
 Prediction(uid='525', iid='6503', r_ui=3.5, est=2.715766790143661, details={'was_impossible': False}),
 Prediction(uid='57', iid='224', r_ui=4.0, est=3.06210160114155, details={'was_impossible': False}),
 Prediction(uid='274', iid='4214', r_ui=3.5, est=2.958236930509786, details={'was_impossible': False}),
 Prediction(uid='288', iid='1961', r_ui=3.0, est=3.5800010324916345, details={'was_impossible': False}),
 Prediction(uid='368', iid='315', r_ui=2.0, est=2.3928558298728735, details={'was_impossible': False}),
 Prediction(uid='599', iid='1947', r_ui=3.0, est=2.821502933927359, details={'was_impossible': False}),
 Prediction(uid='90', iid='1041', r_ui=5.0, est=4.32387057777885, details={'was_impossible': False}),
 Prediction(uid='425', iid='8360', r_ui=4.0, est=3.6063137695647685, details={'was_impossible': False}),
 Prediction(uid='256', iid='64969', r_ui=4.5, est=3.951322756124625, details={'was_impossible': False}),
 Prediction(uid='68', iid='8528', r_ui=4.0, est=3.2954227121181545, details={'was_impossible': False}),
 Prediction(uid='80', iid='53000', r_ui=4.0, est=4.022241901309907, details={'was_impossible': False}),
 Prediction(uid='424', iid='293', r_ui=4.0, est=3.9569173174563175, details={'was_impossible': False}),
 Prediction(uid='222', iid='41285', r_ui=3.5, est=3.0364531316073835, details={'was_impossible': False}),
 Prediction(uid='415', iid='2686', r_ui=3.5, est=4.225115087148904, details={'was_impossible': False}),
 Prediction(uid='590', iid='2947', r_ui=4.5, est=3.6422514813501876, details={'was_impossible': False}),
 Prediction(uid='448', iid='7245', r_ui=1.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='387', iid='1617', r_ui=4.5, est=4.017911066463515, details={'was_impossible': False}),
 Prediction(uid='226', iid='3098', r_ui=4.0, est=3.453796478336169, details={'was_impossible': False}),
 Prediction(uid='226', iid='51255', r_ui=4.5, est=3.882993833870942, details={'was_impossible': False}),
 Prediction(uid='45', iid='2541', r_ui=4.0, est=3.7408936126787196, details={'was_impossible': False}),
 Prediction(uid='414', iid='34332', r_ui=3.0, est=3.1107682957190734, details={'was_impossible': False}),
 Prediction(uid='462', iid='592', r_ui=3.0, est=3.0218499200290196, details={'was_impossible': False}),
 Prediction(uid='603', iid='1809', r_ui=5.0, est=3.654660824604124, details={'was_impossible': False}),
 Prediction(uid='108', iid='5450', r_ui=5.0, est=4.03451249040114, details={'was_impossible': False}),
 Prediction(uid='590', iid='2422', r_ui=2.0, est=2.3651186735141816, details={'was_impossible': False}),
 Prediction(uid='471', iid='60069', r_ui=4.5, est=3.949348558586119, details={'was_impossible': False}),
 Prediction(uid='448', iid='130083', r_ui=2.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='275', iid='4214', r_ui=3.0, est=3.268505778729754, details={'was_impossible': False}),
 Prediction(uid='425', iid='1589', r_ui=3.5, est=3.2372225746367596, details={'was_impossible': False}),
 Prediction(uid='118', iid='1196', r_ui=4.0, est=4.104060373449157, details={'was_impossible': False}),
 Prediction(uid='414', iid='4516', r_ui=2.0, est=3.1620323958176235, details={'was_impossible': False}),
 Prediction(uid='399', iid='3578', r_ui=5.0, est=3.9466558388466457, details={'was_impossible': False}),
 Prediction(uid='590', iid='1320', r_ui=2.0, est=3.2558482337943513, details={'was_impossible': False}),
 Prediction(uid='441', iid='1036', r_ui=4.0, est=4.410822503741555, details={'was_impossible': False}),
 Prediction(uid='475', iid='34150', r_ui=4.0, est=3.7251079410900854, details={'was_impossible': False}),
 Prediction(uid='411', iid='515', r_ui=2.0, est=3.5497919111942555, details={'was_impossible': False}),
 Prediction(uid='105', iid='143511', r_ui=5.0, est=3.915847666450869, details={'was_impossible': False}),
 Prediction(uid='50', iid='92427', r_ui=1.0, est=2.5895402697192695, details={'was_impossible': False}),
 Prediction(uid='560', iid='8368', r_ui=3.0, est=3.9113429039158527, details={'was_impossible': False}),
 Prediction(uid='561', iid='146656', r_ui=3.5, est=3.10500111185021, details={'was_impossible': False}),
 Prediction(uid='222', iid='88405', r_ui=2.5, est=2.9116980862168806, details={'was_impossible': False}),
 Prediction(uid='608', iid='2474', r_ui=4.5, est=3.413933149875836, details={'was_impossible': False}),
 Prediction(uid='448', iid='82527', r_ui=4.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='288', iid='1909', r_ui=3.5, est=2.9605776976397986, details={'was_impossible': False}),
 Prediction(uid='580', iid='37733', r_ui=4.0, est=3.533142192103137, details={'was_impossible': False}),
 Prediction(uid='19', iid='933', r_ui=4.0, est=2.890372042662776, details={'was_impossible': False}),
 Prediction(uid='381', iid='4571', r_ui=3.5, est=3.602980822992242, details={'was_impossible': False}),
 Prediction(uid='177', iid='3798', r_ui=3.5, est=3.0876618971411656, details={'was_impossible': False}),
 Prediction(uid='57', iid='69', r_ui=4.0, est=3.425586679274293, details={'was_impossible': False}),
 Prediction(uid='11', iid='511', r_ui=4.0, est=3.5965393112197592, details={'was_impossible': False}),
 Prediction(uid='586', iid='122920', r_ui=5.0, est=4.43628494586624, details={'was_impossible': False}),
 Prediction(uid='141', iid='34162', r_ui=3.5, est=3.507769172541215, details={'was_impossible': False}),
 Prediction(uid='217', iid='2088', r_ui=3.0, est=2.424169912520485, details={'was_impossible': False}),
 Prediction(uid='160', iid='1059', r_ui=5.0, est=3.171581501023292, details={'was_impossible': False}),
 Prediction(uid='296', iid='110', r_ui=5.0, est=4.314096572973539, details={'was_impossible': False}),
 Prediction(uid='274', iid='4728', r_ui=3.0, est=2.7288910739368117, details={'was_impossible': False}),
 Prediction(uid='150', iid='786', r_ui=3.0, est=3.412228354378461, details={'was_impossible': False}),
 Prediction(uid='68', iid='6942', r_ui=4.5, est=3.269286226501724, details={'was_impossible': False}),
 Prediction(uid='414', iid='48', r_ui=3.0, est=3.016844361422163, details={'was_impossible': False}),
 Prediction(uid='330', iid='58559', r_ui=5.0, est=3.991448814890787, details={'was_impossible': False}),
 Prediction(uid='561', iid='8665', r_ui=4.0, est=3.5475292216823164, details={'was_impossible': False}),
 Prediction(uid='448', iid='3390', r_ui=2.0, est=2.8978772896463414, details={'was_impossible': False}),
 Prediction(uid='387', iid='7099', r_ui=5.0, est=3.688128019008098, details={'was_impossible': False}),
 Prediction(uid='325', iid='4714', r_ui=2.0, est=3.316444353564986, details={'was_impossible': False}),
 Prediction(uid='554', iid='1210', r_ui=5.0, est=4.354614915957127, details={'was_impossible': False}),
 Prediction(uid='572', iid='1252', r_ui=5.0, est=4.242772491059363, details={'was_impossible': False}),
 Prediction(uid='199', iid='51255', r_ui=4.0, est=3.922455036721231, details={'was_impossible': False}),
 Prediction(uid='381', iid='2701', r_ui=2.0, est=2.3726682702850863, details={'was_impossible': False}),
 Prediction(uid='448', iid='1073', r_ui=4.0, est=3.3828885074616806, details={'was_impossible': False}),
 Prediction(uid='593', iid='2959', r_ui=4.0, est=3.8264814099144657, details={'was_impossible': False}),
 Prediction(uid='222', iid='95307', r_ui=2.0, est=3.0201248391554594, details={'was_impossible': False}),
 Prediction(uid='517', iid='3549', r_ui=3.0, est=2.8533459705372564, details={'was_impossible': False}),
 Prediction(uid='117', iid='616', r_ui=4.0, est=3.3956761845037025, details={'was_impossible': False}),
 Prediction(uid='380', iid='128968', r_ui=3.0, est=3.917870482737578, details={'was_impossible': False}),
 Prediction(uid='414', iid='30707', r_ui=4.5, est=3.8987234842102296, details={'was_impossible': False}),
 Prediction(uid='480', iid='8361', r_ui=2.5, est=2.5423887321906653, details={'was_impossible': False}),
 Prediction(uid='50', iid='38038', r_ui=3.0, est=2.942273844239267, details={'was_impossible': False}),
 Prediction(uid='233', iid='54286', r_ui=3.0, est=3.3990623649251437, details={'was_impossible': False}),
 Prediction(uid='177', iid='103141', r_ui=5.0, est=3.5838168981622007, details={'was_impossible': False}),
 Prediction(uid='321', iid='339', r_ui=3.0, est=3.4842683065407574, details={'was_impossible': False}),
 Prediction(uid='368', iid='3764', r_ui=2.0, est=2.7349616803505383, details={'was_impossible': False}),
 Prediction(uid='318', iid='5618', r_ui=4.5, est=4.3394646642050825, details={'was_impossible': False}),
 Prediction(uid='219', iid='39183', r_ui=2.5, est=3.301729424923787, details={'was_impossible': False}),
 Prediction(uid='563', iid='82152', r_ui=3.5, est=3.2540943813285366, details={'was_impossible': False}),
 Prediction(uid='116', iid='1029', r_ui=3.0, est=3.4580683915266848, details={'was_impossible': False}),
 Prediction(uid='44', iid='6', r_ui=3.0, est=3.9482294421968227, details={'was_impossible': False}),
 Prediction(uid='462', iid='3424', r_ui=4.0, est=3.976674680323293, details={'was_impossible': False}),
 Prediction(uid='45', iid='1610', r_ui=4.0, est=4.26668552266756, details={'was_impossible': False}),
 Prediction(uid='1', iid='1408', r_ui=3.0, est=4.548953966774162, details={'was_impossible': False}),
 Prediction(uid='599', iid='2301', r_ui=3.0, est=2.9602230403049017, details={'was_impossible': False}),
 Prediction(uid='237', iid='43936', r_ui=3.0, est=3.0255502106039676, details={'was_impossible': False}),
 Prediction(uid='410', iid='2176', r_ui=5.0, est=3.8104188056112758, details={'was_impossible': False}),
 Prediction(uid='352', iid='82202', r_ui=3.0, est=3.4723687410710475, details={'was_impossible': False}),
 Prediction(uid='476', iid='412', r_ui=3.0, est=3.804270833902821, details={'was_impossible': False}),
 Prediction(uid='608', iid='2174', r_ui=3.0, est=3.2720797581310217, details={'was_impossible': False}),
 Prediction(uid='535', iid='2583', r_ui=3.0, est=3.1495284892753435, details={'was_impossible': False}),
 Prediction(uid='432', iid='47', r_ui=4.0, est=3.8692328131567817, details={'was_impossible': False}),
 Prediction(uid='509', iid='118997', r_ui=2.5, est=3.1418756565455324, details={'was_impossible': False}),
 Prediction(uid='356', iid='34164', r_ui=3.5, est=3.7318868693716114, details={'was_impossible': False}),
 Prediction(uid='405', iid='8254', r_ui=4.0, est=4.01084845592569, details={'was_impossible': False}),
 Prediction(uid='232', iid='3483', r_ui=3.0, est=3.0300349493978946, details={'was_impossible': False}),
 Prediction(uid='75', iid='36519', r_ui=4.0, est=2.986724108792125, details={'was_impossible': False}),
 Prediction(uid='425', iid='1907', r_ui=3.0, est=3.510896350757264, details={'was_impossible': False}),
 Prediction(uid='274', iid='5944', r_ui=1.0, est=3.107066182419811, details={'was_impossible': False}),
 Prediction(uid='105', iid='163072', r_ui=5.0, est=3.915847666450869, details={'was_impossible': False}),
 Prediction(uid='328', iid='2000', r_ui=1.5, est=3.5606654721140165, details={'was_impossible': False}),
 Prediction(uid='312', iid='1573', r_ui=3.0, est=3.601718113359227, details={'was_impossible': False}),
 Prediction(uid='305', iid='7438', r_ui=5.0, est=4.06074914544474, details={'was_impossible': False}),
 Prediction(uid='591', iid='3510', r_ui=3.0, est=3.2564014406215676, details={'was_impossible': False}),
 Prediction(uid='599', iid='72479', r_ui=3.5, est=2.654756873110253, details={'was_impossible': False}),
 Prediction(uid='448', iid='6893', r_ui=4.5, est=2.855372767994891, details={'was_impossible': False}),
 Prediction(uid='599', iid='136562', r_ui=3.5, est=2.5425521387165437, details={'was_impossible': False}),
 Prediction(uid='225', iid='380', r_ui=3.0, est=3.4195005727009065, details={'was_impossible': False}),
 Prediction(uid='52', iid='122900', r_ui=5.0, est=4.316612448497218, details={'was_impossible': False}),
 Prediction(uid='42', iid='4322', r_ui=4.0, est=4.092158027696069, details={'was_impossible': False}),
 Prediction(uid='113', iid='943', r_ui=5.0, est=3.4254501170112137, details={'was_impossible': False}),
 Prediction(uid='606', iid='7037', r_ui=4.5, est=3.5288450877618542, details={'was_impossible': False}),
 Prediction(uid='606', iid='2432', r_ui=3.5, est=3.3366547117726837, details={'was_impossible': False}),
 Prediction(uid='104', iid='7034', r_ui=5.0, est=3.6979990094319044, details={'was_impossible': False}),
 Prediction(uid='144', iid='4027', r_ui=3.5, est=3.8462905206192652, details={'was_impossible': False}),
 Prediction(uid='572', iid='1682', r_ui=3.0, est=4.1260902691341395, details={'was_impossible': False}),
 Prediction(uid='318', iid='76093', r_ui=4.0, est=4.107550404339409, details={'was_impossible': False}),
 Prediction(uid='414', iid='2500', r_ui=3.0, est=2.5546407433970266, details={'was_impossible': False}),
 Prediction(uid='306', iid='166534', r_ui=4.0, est=3.155979396459429, details={'was_impossible': False}),
 Prediction(uid='249', iid='164179', r_ui=5.0, est=3.939565109002301, details={'was_impossible': False}),
 Prediction(uid='4', iid='4246', r_ui=4.0, est=3.403788690451987, details={'was_impossible': False}),
 Prediction(uid='483', iid='2291', r_ui=4.0, est=4.151917112485068, details={'was_impossible': False}),
 Prediction(uid='266', iid='733', r_ui=5.0, est=3.1378683030627386, details={'was_impossible': False}),
 Prediction(uid='514', iid='44', r_ui=2.5, est=2.3874480042134913, details={'was_impossible': False}),
 Prediction(uid='580', iid='1544', r_ui=3.0, est=2.612541553936289, details={'was_impossible': False}),
 Prediction(uid='18', iid='80489', r_ui=4.0, est=3.885436384474069, details={'was_impossible': False}),
 Prediction(uid='140', iid='2618', r_ui=3.5, est=3.2353479444759867, details={'was_impossible': False}),
 Prediction(uid='489', iid='79299', r_ui=3.0, est=2.942582127268931, details={'was_impossible': False}),
 Prediction(uid='448', iid='118985', r_ui=3.5, est=2.6486250743903175, details={'was_impossible': False}),
 Prediction(uid='600', iid='2424', r_ui=1.0, est=2.488687117262421, details={'was_impossible': False}),
 Prediction(uid='469', iid='1831', r_ui=2.0, est=2.929812126309963, details={'was_impossible': False}),
 Prediction(uid='474', iid='5863', r_ui=1.0, est=3.318407793026961, details={'was_impossible': False}),
 Prediction(uid='143', iid='103335', r_ui=4.0, est=3.2467730920212525, details={'was_impossible': False}),
 Prediction(uid='590', iid='594', r_ui=5.0, est=3.5427595011555315, details={'was_impossible': False}),
 Prediction(uid='577', iid='1263', r_ui=4.0, est=3.8829997358429087, details={'was_impossible': False}),
 Prediction(uid='232', iid='51540', r_ui=4.0, est=3.44576680362657, details={'was_impossible': False}),
 Prediction(uid='589', iid='300', r_ui=3.0, est=3.71657062199389, details={'was_impossible': False}),
 Prediction(uid='438', iid='4308', r_ui=4.5, est=3.572642301093894, details={'was_impossible': False}),
 Prediction(uid='380', iid='67923', r_ui=3.0, est=3.5978970791055325, details={'was_impossible': False}),
 Prediction(uid='337', iid='737', r_ui=5.0, est=3.841869465453087, details={'was_impossible': False}),
 Prediction(uid='300', iid='318', r_ui=4.0, est=4.867285047071851, details={'was_impossible': False}),
 Prediction(uid='387', iid='1377', r_ui=2.0, est=2.6333564281635855, details={'was_impossible': False}),
 Prediction(uid='45', iid='2716', r_ui=4.0, est=4.179317915594087, details={'was_impossible': False}),
 Prediction(uid='506', iid='109487', r_ui=5.0, est=3.7254963468234155, details={'was_impossible': False}),
 Prediction(uid='603', iid='3374', r_ui=4.0, est=3.431307529013665, details={'was_impossible': False}),
 Prediction(uid='485', iid='457', r_ui=4.0, est=4.211499843415635, details={'was_impossible': False}),
 Prediction(uid='247', iid='48394', r_ui=4.0, est=3.6756647520195824, details={'was_impossible': False}),
 Prediction(uid='323', iid='1385', r_ui=2.5, est=2.4430913967917225, details={'was_impossible': False}),
 Prediction(uid='610', iid='95558', r_ui=3.5, est=3.728411689726745, details={'was_impossible': False}),
 Prediction(uid='600', iid='208', r_ui=2.0, est=2.3772124942511477, details={'was_impossible': False}),
 Prediction(uid='601', iid='109487', r_ui=5.0, est=4.486047558085486, details={'was_impossible': False}),
 Prediction(uid='362', iid='8961', r_ui=4.0, est=4.52959555479794, details={'was_impossible': False}),
 Prediction(uid='318', iid='79702', r_ui=4.0, est=3.850201313921023, details={'was_impossible': False}),
 Prediction(uid='346', iid='3362', r_ui=4.5, est=3.7919856427177034, details={'was_impossible': False}),
 Prediction(uid='453', iid='4027', r_ui=5.0, est=4.108160847895219, details={'was_impossible': False}),
 Prediction(uid='460', iid='48780', r_ui=4.5, est=4.4622110481276955, details={'was_impossible': False}),
 Prediction(uid='290', iid='3476', r_ui=3.0, est=4.011083971523625, details={'was_impossible': False}),
 Prediction(uid='50', iid='858', r_ui=4.0, est=3.3715023092496903, details={'was_impossible': False}),
 Prediction(uid='322', iid='2353', r_ui=4.0, est=3.068892162217835, details={'was_impossible': False}),
 Prediction(uid='307', iid='44840', r_ui=2.0, est=2.822803165724645, details={'was_impossible': False}),
 Prediction(uid='314', iid='520', r_ui=3.0, est=2.698253377763007, details={'was_impossible': False}),
 Prediction(uid='391', iid='1291', r_ui=4.0, est=3.6956497991599138, details={'was_impossible': False}),
 Prediction(uid='339', iid='2160', r_ui=5.0, est=4.32925356283007, details={'was_impossible': False}),
 Prediction(uid='125', iid='32460', r_ui=4.0, est=3.8770167185996534, details={'was_impossible': False}),
 Prediction(uid='234', iid='2373', r_ui=4.0, est=2.932060177151622, details={'was_impossible': False}),
 Prediction(uid='232', iid='49278', r_ui=3.5, est=3.268241324930214, details={'was_impossible': False}),
 Prediction(uid='483', iid='317', r_ui=4.5, est=3.0611219354851205, details={'was_impossible': False}),
 Prediction(uid='305', iid='592', r_ui=2.5, est=3.609413465892731, details={'was_impossible': False}),
 Prediction(uid='199', iid='37741', r_ui=3.5, est=3.500030515250199, details={'was_impossible': False}),
 Prediction(uid='303', iid='1246', r_ui=2.0, est=4.442673517731553, details={'was_impossible': False}),
 Prediction(uid='437', iid='50', r_ui=4.0, est=4.4429063526943136, details={'was_impossible': False}),
 Prediction(uid='418', iid='5445', r_ui=2.0, est=3.7227033356872936, details={'was_impossible': False}),
 Prediction(uid='560', iid='2712', r_ui=3.5, est=3.4950758667186155, details={'was_impossible': False}),
 Prediction(uid='503', iid='1214', r_ui=2.5, est=3.804704557797741, details={'was_impossible': False}),
 Prediction(uid='307', iid='1', r_ui=4.0, est=3.1283381355466835, details={'was_impossible': False}),
 Prediction(uid='68', iid='66198', r_ui=3.0, est=2.992537543708517, details={'was_impossible': False}),
 Prediction(uid='610', iid='148626', r_ui=4.0, est=4.012751249585924, details={'was_impossible': False}),
 Prediction(uid='80', iid='8957', r_ui=4.5, est=3.7479231946970053, details={'was_impossible': False}),
 Prediction(uid='91', iid='3840', r_ui=4.0, est=2.9633600628529932, details={'was_impossible': False}),
 Prediction(uid='356', iid='40955', r_ui=4.0, est=3.810609336796711, details={'was_impossible': False}),
 Prediction(uid='474', iid='28', r_ui=4.5, est=3.369822608954508, details={'was_impossible': False}),
 Prediction(uid='274', iid='765', r_ui=3.0, est=3.091323005595375, details={'was_impossible': False}),
 Prediction(uid='488', iid='3671', r_ui=4.0, est=4.2532726134065735, details={'was_impossible': False}),
 Prediction(uid='599', iid='6711', r_ui=5.0, est=3.395315740926981, details={'was_impossible': False}),
 Prediction(uid='474', iid='7151', r_ui=3.0, est=3.260533633322658, details={'was_impossible': False}),
 Prediction(uid='543', iid='99114', r_ui=4.0, est=5, details={'was_impossible': False}),
 Prediction(uid='387', iid='1088', r_ui=1.5, est=3.1182542108478337, details={'was_impossible': False}),
 Prediction(uid='385', iid='45', r_ui=3.0, est=3.256049104519103, details={'was_impossible': False}),
 Prediction(uid='73', iid='53125', r_ui=4.5, est=3.778146159480338, details={'was_impossible': False}),
 Prediction(uid='292', iid='33677', r_ui=3.5, est=3.5024438384181233, details={'was_impossible': False}),
 Prediction(uid='555', iid='414', r_ui=3.0, est=3.509159185241683, details={'was_impossible': False}),
 Prediction(uid='186', iid='3516', r_ui=4.0, est=3.986147775086234, details={'was_impossible': False}),
 Prediction(uid='38', iid='648', r_ui=4.0, est=3.2671643372276686, details={'was_impossible': False}),
 Prediction(uid='475', iid='2006', r_ui=4.5, est=3.9634167157739735, details={'was_impossible': False}),
 Prediction(uid='243', iid='376', r_ui=3.0, est=4.009359092444002, details={'was_impossible': False}),
 Prediction(uid='232', iid='783', r_ui=2.0, est=3.101399671800107, details={'was_impossible': False}),
 Prediction(uid='161', iid='7247', r_ui=5.0, est=3.5005390295287997, details={'was_impossible': False}),
 Prediction(uid='603', iid='4743', r_ui=3.0, est=3.908860021742961, details={'was_impossible': False}),
 Prediction(uid='10', iid='54286', r_ui=3.5, est=3.2074421098126833, details={'was_impossible': False}),
 Prediction(uid='246', iid='50', r_ui=4.5, est=4.76799828739256, details={'was_impossible': False}),
 Prediction(uid='600', iid='2059', r_ui=3.0, est=2.665440042638713, details={'was_impossible': False}),
 Prediction(uid='193', iid='593', r_ui=3.5, est=3.9291220470154626, details={'was_impossible': False}),
 Prediction(uid='315', iid='1201', r_ui=3.0, est=3.8386031801875617, details={'was_impossible': False}),
 Prediction(uid='448', iid='432', r_ui=3.0, est=1.8996849421501802, details={'was_impossible': False}),
 Prediction(uid='226', iid='3668', r_ui=3.5, est=3.5391932782826516, details={'was_impossible': False}),
 Prediction(uid='41', iid='112183', r_ui=3.0, est=3.0222098155907813, details={'was_impossible': False}),
 Prediction(uid='448', iid='91653', r_ui=4.0, est=3.00618263558326, details={'was_impossible': False}),
 Prediction(uid='562', iid='2133', r_ui=4.5, est=4.045040343347518, details={'was_impossible': False}),
 Prediction(uid='288', iid='205', r_ui=3.5, est=3.103407892611626, details={'was_impossible': False}),
 Prediction(uid='610', iid='4437', r_ui=5.0, est=3.671002841898997, details={'was_impossible': False}),
 Prediction(uid='133', iid='593', r_ui=3.0, est=3.4942153498915216, details={'was_impossible': False}),
 Prediction(uid='414', iid='3308', r_ui=4.0, est=3.5712348315863047, details={'was_impossible': False}),
 Prediction(uid='518', iid='1371', r_ui=0.5, est=3.270606707246846, details={'was_impossible': False}),
 Prediction(uid='358', iid='2572', r_ui=4.0, est=3.5117932288478593, details={'was_impossible': False}),
 Prediction(uid='34', iid='8636', r_ui=5.0, est=3.872394257134357, details={'was_impossible': False}),
 Prediction(uid='158', iid='58293', r_ui=3.5, est=2.954174816053958, details={'was_impossible': False}),
 Prediction(uid='18', iid='50', r_ui=5.0, est=4.3770082125210585, details={'was_impossible': False}),
 Prediction(uid='105', iid='1293', r_ui=4.0, est=4.213319821909982, details={'was_impossible': False}),
 Prediction(uid='610', iid='143859', r_ui=4.0, est=3.2407403411924736, details={'was_impossible': False}),
 Prediction(uid='294', iid='349', r_ui=2.0, est=2.81968281478492, details={'was_impossible': False}),
 Prediction(uid='8', iid='47', r_ui=4.0, est=3.8364402285950265, details={'was_impossible': False}),
 Prediction(uid='328', iid='1247', r_ui=3.0, est=3.5900487785483643, details={'was_impossible': False}),
 Prediction(uid='414', iid='91542', r_ui=3.5, est=3.5084599459124814, details={'was_impossible': False}),
 Prediction(uid='534', iid='65514', r_ui=4.0, est=3.8078550095585753, details={'was_impossible': False}),
 Prediction(uid='393', iid='1240', r_ui=0.5, est=4.163542570247893, details={'was_impossible': False}),
 Prediction(uid='19', iid='325', r_ui=2.0, est=2.3880577212612444, details={'was_impossible': False}),
 Prediction(uid='495', iid='145', r_ui=4.0, est=3.4509113457248137, details={'was_impossible': False}),
 Prediction(uid='357', iid='587', r_ui=3.5, est=3.592289087378423, details={'was_impossible': False}),
 Prediction(uid='544', iid='694', r_ui=4.0, est=3.539998786068324, details={'was_impossible': False}),
 Prediction(uid='66', iid='912', r_ui=4.5, est=4.505879252559621, details={'was_impossible': False}),
 Prediction(uid='497', iid='109487', r_ui=5.0, est=3.451877817994016, details={'was_impossible': False}),
 Prediction(uid='318', iid='65037', r_ui=3.5, est=3.6317072238735473, details={'was_impossible': False}),
 Prediction(uid='564', iid='49286', r_ui=3.0, est=3.2836843308304777, details={'was_impossible': False}),
 Prediction(uid='599', iid='112852', r_ui=3.5, est=3.227211953413596, details={'was_impossible': False}),
 Prediction(uid='380', iid='94985', r_ui=4.0, est=3.686866985338176, details={'was_impossible': False}),
 Prediction(uid='581', iid='4886', r_ui=4.5, est=4.341029484322628, details={'was_impossible': False}),
 Prediction(uid='414', iid='7381', r_ui=2.0, est=3.270334492670327, details={'was_impossible': False}),
 Prediction(uid='211', iid='4367', r_ui=2.5, est=3.1718665911526682, details={'was_impossible': False}),
 Prediction(uid='160', iid='95', r_ui=1.0, est=2.126562340186614, details={'was_impossible': False}),
 Prediction(uid='288', iid='2057', r_ui=3.0, est=3.2740287576640448, details={'was_impossible': False}),
 Prediction(uid='610', iid='4848', r_ui=5.0, est=4.20412960197338, details={'was_impossible': False}),
 Prediction(uid='418', iid='59369', r_ui=0.5, est=3.871530700094081, details={'was_impossible': False}),
 Prediction(uid='405', iid='7123', r_ui=3.5, est=3.6939689377983145, details={'was_impossible': False}),
 Prediction(uid='610', iid='4816', r_ui=4.0, est=3.8210357674014928, details={'was_impossible': False}),
 Prediction(uid='305', iid='54999', r_ui=4.0, est=3.5911443612506004, details={'was_impossible': False}),
 Prediction(uid='282', iid='5989', r_ui=5.0, est=4.210123405699018, details={'was_impossible': False}),
 Prediction(uid='182', iid='5219', r_ui=2.0, est=3.166802843175569, details={'was_impossible': False}),
 Prediction(uid='288', iid='2243', r_ui=3.0, est=2.9753392306799635, details={'was_impossible': False}),
 Prediction(uid='91', iid='5445', r_ui=3.5, est=3.5462155544024334, details={'was_impossible': False}),
 Prediction(uid='610', iid='70994', r_ui=4.5, est=3.3300263582745804, details={'was_impossible': False}),
 Prediction(uid='235', iid='780', r_ui=5.0, est=3.701278715323635, details={'was_impossible': False}),
 Prediction(uid='593', iid='50', r_ui=4.5, est=3.9480389829222258, details={'was_impossible': False}),
 Prediction(uid='603', iid='1280', r_ui=5.0, est=3.698005348058501, details={'was_impossible': False}),
 Prediction(uid='234', iid='2613', r_ui=4.0, est=3.2304343890661342, details={'was_impossible': False}),
 Prediction(uid='121', iid='353', r_ui=3.0, est=3.560616614408777, details={'was_impossible': False}),
 Prediction(uid='202', iid='2983', r_ui=4.0, est=3.5918150194237692, details={'was_impossible': False}),
 Prediction(uid='520', iid='3529', r_ui=4.0, est=3.663205788627003, details={'was_impossible': False}),
 Prediction(uid='84', iid='356', r_ui=5.0, est=4.044421973508168, details={'was_impossible': False}),
 Prediction(uid='307', iid='1997', r_ui=3.0, est=3.1063713617838626, details={'was_impossible': False}),
 Prediction(uid='405', iid='54503', r_ui=4.0, est=4.126889462630485, details={'was_impossible': False}),
 Prediction(uid='298', iid='4020', r_ui=1.0, est=2.12106858465097, details={'was_impossible': False}),
 Prediction(uid='17', iid='527', r_ui=4.5, est=4.315556610254545, details={'was_impossible': False}),
 Prediction(uid='461', iid='91500', r_ui=0.5, est=2.7766944599572634, details={'was_impossible': False}),
 Prediction(uid='465', iid='3682', r_ui=4.0, est=3.878618381257945, details={'was_impossible': False}),
 Prediction(uid='50', iid='69122', r_ui=1.0, est=2.621733141421707, details={'was_impossible': False}),
 Prediction(uid='487', iid='1198', r_ui=3.5, est=3.711543744605671, details={'was_impossible': False}),
 Prediction(uid='331', iid='3717', r_ui=2.0, est=3.18778390686466, details={'was_impossible': False}),
 Prediction(uid='186', iid='748', r_ui=4.0, est=4.027061153369554, details={'was_impossible': False}),
 Prediction(uid='438', iid='34319', r_ui=3.5, est=3.2893384283218245, details={'was_impossible': False}),
 Prediction(uid='57', iid='2324', r_ui=5.0, est=4.000411171475695, details={'was_impossible': False}),
 Prediction(uid='606', iid='4973', r_ui=4.5, est=4.332147009148366, details={'was_impossible': False}),
 Prediction(uid='434', iid='1517', r_ui=4.0, est=3.748722847258759, details={'was_impossible': False}),
 Prediction(uid='400', iid='1197', r_ui=4.5, est=4.765671926275712, details={'was_impossible': False}),
 Prediction(uid='606', iid='2012', r_ui=2.5, est=3.534261533100961, details={'was_impossible': False}),
 Prediction(uid='414', iid='1387', r_ui=4.0, est=3.9304489314842552, details={'was_impossible': False}),
 Prediction(uid='67', iid='6377', r_ui=4.0, est=4.239202973583993, details={'was_impossible': False}),
 Prediction(uid='80', iid='84601', r_ui=4.0, est=4.052071659123307, details={'was_impossible': False}),
 Prediction(uid='480', iid='5673', r_ui=3.5, est=3.4696085248000115, details={'was_impossible': False}),
 Prediction(uid='316', iid='168', r_ui=1.5, est=2.8156087426829206, details={'was_impossible': False}),
 Prediction(uid='207', iid='2949', r_ui=4.5, est=3.2758485086792004, details={'was_impossible': False}),
 Prediction(uid='226', iid='40732', r_ui=3.5, est=3.4809583799709234, details={'was_impossible': False}),
 Prediction(uid='525', iid='6890', r_ui=3.5, est=3.7111060585208353, details={'was_impossible': False}),
 Prediction(uid='63', iid='8665', r_ui=3.0, est=3.5405036300228367, details={'was_impossible': False}),
 Prediction(uid='311', iid='2174', r_ui=0.5, est=2.455051184382468, details={'was_impossible': False}),
 Prediction(uid='215', iid='1061', r_ui=3.5, est=3.809676414999056, details={'was_impossible': False}),
 Prediction(uid='141', iid='4816', r_ui=3.5, est=3.03132774678743, details={'was_impossible': False}),
 Prediction(uid='224', iid='3358', r_ui=5.0, est=3.9695920380567613, details={'was_impossible': False}),
 Prediction(uid='224', iid='953', r_ui=4.0, est=4.28900642976637, details={'was_impossible': False}),
 Prediction(uid='186', iid='2617', r_ui=5.0, est=3.8470076341931354, details={'was_impossible': False}),
 Prediction(uid='231', iid='1214', r_ui=4.0, est=3.871290813883659, details={'was_impossible': False}),
 Prediction(uid='304', iid='185', r_ui=4.0, est=3.6510120493287745, details={'was_impossible': False}),
 Prediction(uid='474', iid='2919', r_ui=4.0, est=3.2269284373634877, details={'was_impossible': False}),
 Prediction(uid='256', iid='3257', r_ui=4.0, est=3.6662062062230305, details={'was_impossible': False}),
 Prediction(uid='362', iid='60072', r_ui=3.5, est=3.623120837161006, details={'was_impossible': False}),
 Prediction(uid='286', iid='527', r_ui=4.0, est=4.199989669117317, details={'was_impossible': False}),
 Prediction(uid='105', iid='3593', r_ui=2.0, est=3.00693249582644, details={'was_impossible': False}),
 Prediction(uid='67', iid='7153', r_ui=2.0, est=4.19455804954451, details={'was_impossible': False}),
 Prediction(uid='610', iid='112290', r_ui=5.0, est=3.881181570175444, details={'was_impossible': False}),
 Prediction(uid='153', iid='1206', r_ui=2.5, est=3.0375381785495463, details={'was_impossible': False}),
 Prediction(uid='328', iid='5989', r_ui=3.5, est=3.436558819942384, details={'was_impossible': False}),
 Prediction(uid='410', iid='1131', r_ui=5.0, est=4.12541442205346, details={'was_impossible': False}),
 Prediction(uid='7', iid='8970', r_ui=2.5, est=3.4446905674754302, details={'was_impossible': False}),
 Prediction(uid='187', iid='6214', r_ui=4.0, est=3.6918681096624115, details={'was_impossible': False}),
 Prediction(uid='603', iid='2877', r_ui=3.0, est=3.348677933999612, details={'was_impossible': False}),
 Prediction(uid='68', iid='4141', r_ui=3.0, est=3.0787054484777014, details={'was_impossible': False}),
 Prediction(uid='219', iid='2085', r_ui=4.0, est=3.3211911768290814, details={'was_impossible': False}),
 Prediction(uid='596', iid='102445', r_ui=3.0, est=3.633751480942377, details={'was_impossible': False}),
 Prediction(uid='318', iid='140737', r_ui=3.5, est=3.6317072238735473, details={'was_impossible': False}),
 Prediction(uid='21', iid='103384', r_ui=4.0, est=3.194601612695335, details={'was_impossible': False}),
 Prediction(uid='294', iid='420', r_ui=2.0, est=1.9859564985769642, details={'was_impossible': False}),
 Prediction(uid='540', iid='4993', r_ui=4.0, est=4.493620097976043, details={'was_impossible': False}),
 Prediction(uid='307', iid='3623', r_ui=2.0, est=2.3138278168998023, details={'was_impossible': False}),
 Prediction(uid='156', iid='1909', r_ui=3.0, est=3.260849483407307, details={'was_impossible': False}),
 Prediction(uid='19', iid='1330', r_ui=2.0, est=2.3161677056875614, details={'was_impossible': False}),
 Prediction(uid='381', iid='1552', r_ui=2.5, est=3.2574923718515314, details={'was_impossible': False}),
 Prediction(uid='234', iid='1359', r_ui=4.0, est=2.955604628728859, details={'was_impossible': False}),
 Prediction(uid='357', iid='1247', r_ui=4.5, est=4.51608830223668, details={'was_impossible': False}),
 Prediction(uid='187', iid='555', r_ui=4.0, est=3.7892301885124127, details={'was_impossible': False}),
 Prediction(uid='7', iid='5991', r_ui=4.5, est=3.5377328178872514, details={'was_impossible': False}),
 Prediction(uid='5', iid='318', r_ui=3.0, est=4.478009822602891, details={'was_impossible': False}),
 Prediction(uid='599', iid='3915', r_ui=2.0, est=2.8875049567852438, details={'was_impossible': False}),
 Prediction(uid='240', iid='19', r_ui=5.0, est=3.4155155315131784, details={'was_impossible': False}),
 Prediction(uid='474', iid='913', r_ui=4.0, est=3.988608548864997, details={'was_impossible': False}),
 Prediction(uid='298', iid='1584', r_ui=2.5, est=2.599298911714329, details={'was_impossible': False}),
 Prediction(uid='484', iid='33679', r_ui=2.5, est=3.858724811320688, details={'was_impossible': False}),
 Prediction(uid='125', iid='4226', r_ui=4.0, est=4.586102143542148, details={'was_impossible': False}),
 Prediction(uid='66', iid='799', r_ui=4.0, est=3.9371761570766237, details={'was_impossible': False}),
 Prediction(uid='28', iid='60674', r_ui=2.5, est=2.803685109555715, details={'was_impossible': False}),
 Prediction(uid='610', iid='86190', r_ui=3.5, est=3.503449100657818, details={'was_impossible': False}),
 Prediction(uid='448', iid='3247', r_ui=4.0, est=2.3147122298743787, details={'was_impossible': False}),
 Prediction(uid='434', iid='1584', r_ui=2.5, est=3.9077249606551128, details={'was_impossible': False}),
 Prediction(uid='488', iid='3114', r_ui=4.0, est=4.158469979241586, details={'was_impossible': False}),
 Prediction(uid='177', iid='44191', r_ui=5.0, est=3.566257631910461, details={'was_impossible': False}),
 Prediction(uid='603', iid='464', r_ui=3.0, est=3.3673461390641672, details={'was_impossible': False}),
 Prediction(uid='318', iid='67197', r_ui=3.0, est=3.474248604789731, details={'was_impossible': False}),
 Prediction(uid='600', iid='3247', r_ui=2.0, est=2.3968884863517337, details={'was_impossible': False}),
 Prediction(uid='424', iid='81591', r_ui=3.5, est=3.8241680833512786, details={'was_impossible': False}),
 Prediction(uid='318', iid='4239', r_ui=4.0, est=3.9833290999297857, details={'was_impossible': False}),
 Prediction(uid='274', iid='318', r_ui=4.5, est=4.10803491307202, details={'was_impossible': False}),
 Prediction(uid='520', iid='7454', r_ui=3.5, est=3.168354718101771, details={'was_impossible': False}),
 Prediction(uid='104', iid='47629', r_ui=4.0, est=3.6842906696665425, details={'was_impossible': False}),
 Prediction(uid='514', iid='2148', r_ui=2.5, est=3.1848011292423486, details={'was_impossible': False}),
 Prediction(uid='45', iid='3033', r_ui=4.0, est=3.827691277342558, details={'was_impossible': False}),
 Prediction(uid='424', iid='1219', r_ui=4.0, est=4.08607685969222, details={'was_impossible': False}),
 Prediction(uid='415', iid='7156', r_ui=4.5, est=4.145016181651546, details={'was_impossible': False}),
 Prediction(uid='27', iid='1200', r_ui=1.0, est=3.6222412470781618, details={'was_impossible': False}),
 Prediction(uid='391', iid='2275', r_ui=5.0, est=3.711223174820224, details={'was_impossible': False}),
 Prediction(uid='274', iid='43921', r_ui=4.0, est=3.410029869423139, details={'was_impossible': False}),
 Prediction(uid='254', iid='48516', r_ui=5.0, est=4.335069346479019, details={'was_impossible': False}),
 Prediction(uid='111', iid='3253', r_ui=5.0, est=3.3216465064527583, details={'was_impossible': False}),
 Prediction(uid='213', iid='2115', r_ui=3.5, est=4.078256480111735, details={'was_impossible': False}),
 ...]
  • uid(사용자 id), iid(아이템id), r_ui(사용자가 아이템을 평가한 실제 평점), est(예측평점)

평가¶

In [34]:
accuracy.rmse(pred)
RMSE: 0.8682
Out[34]:
0.8681952927143516
In [37]:
from surprise.model_selection import cross_validate

# Pandas DF 형태로 데이터 로드
ratings = pd.read_csv('../data/grouplens/ml_small/ratings.csv')
reader = Reader(rating_scale=(0.5, 5))

data = Dataset.load_from_df(ratings[['userId','movieId','rating']],
                           reader=reader)

algo = SVD(n_factors=50, random_state=42)
# cross_validate에는 파라미터를 입력시켜 놓은 모델을 인자로 넣어주자!
cross_validate(algo, data, measures=['RMSE','MAE'], cv=5,
              verbose=True)
Evaluating RMSE, MAE of algorithm SVD on 5 split(s).

                  Fold 1  Fold 2  Fold 3  Fold 4  Fold 5  Mean    Std     
RMSE (testset)    0.8685  0.8775  0.8634  0.8764  0.8678  0.8707  0.0054  
MAE (testset)     0.6669  0.6718  0.6607  0.6764  0.6658  0.6683  0.0054  
Fit time          1.25    0.92    0.90    0.91    0.91    0.98    0.14    
Test time         0.19    0.17    0.29    0.17    0.17    0.20    0.05    
Out[37]:
{'test_rmse': array([0.86849882, 0.87747177, 0.86336464, 0.87643814, 0.86777732]),
 'test_mae': array([0.66689102, 0.67182534, 0.66069156, 0.67637212, 0.66579196]),
 'fit_time': (1.253281831741333,
  0.9197146892547607,
  0.9012012481689453,
  0.907203197479248,
  0.9102025032043457),
 'test_time': (0.1885526180267334,
  0.16556882858276367,
  0.2880821228027344,
  0.17003941535949707,
  0.17454957962036133)}
In [ ]: