Python:映画推奨システムを試してみる

今回はこのサイトのmovie recommender system(映画推奨システム)を試してみる。映画推奨システムとは、映画鑑賞者お気に入りの映画を参考にしてその映画に似たその鑑賞者が気に入りそうな映画を推奨してくれるシステムのことだ。

スポンサーリンク

環境設定

上記のサイトのgitをクローンする前にgitフォルダに移動する。

cd git
/home/workspace/git

gitをクローンする。

!git clone https://github.com/xmuffin/cupcake.git
Cloning into 'cupcake'...
remote: Counting objects: 77, done.
remote: Total 77 (delta 0), reused 0 (delta 0), pack-reused 77
Unpacking objects: 100% (77/77), done.
Checking connectivity... done.

クローンしたgitフォルダに移動する。

cd cupcake
/home/workspace/git/cupcake

データのダウンロード

下記のサイトから必要なデータをダウンロードして解凍する。

!curl -SOL http://files.grouplens.org/datasets/movielens/ml-latest-small.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  896k  100  896k    0     0   522k      0  0:00:01  0:00:01 --:--:--  522k
!unzip ml-latest-small.zip
Archive:  ml-latest-small.zip
   creating: ml-latest-small/
  inflating: ml-latest-small/links.csv  
  inflating: ml-latest-small/movies.csv  
  inflating: ml-latest-small/ratings.csv  
  inflating: ml-latest-small/README.txt  
  inflating: ml-latest-small/tags.csv  

ダウンロードした書庫ファイルを消去する。

!rm -f ml-latest-small.zip

Loading data

モジュールのインポートとデータのロード

import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
movies = pd.DataFrame.from_csv('./ml-latest-small/movies.csv', index_col=None)
ratings = pd.DataFrame.from_csv('./ml-latest-small/ratings.csv', index_col=None)
ratings.drop(labels=['timestamp'], axis=1, inplace=True)
# Fixing movieIds to use them with userIds as indices
dict_norm_movieId = dict([(trueId, normId)
                          for normId, trueId in enumerate(np.sort(pd.unique(ratings['movieId'])))])
norm_movieId = list()
old_movieId = dict()
for rating in ratings.as_matrix():
    norm_movieId.append(dict_norm_movieId[rating[1]])
    old_movieId[dict_norm_movieId[rating[1]]] = rating[1]

ratings['movieId'] = norm_movieId
ratings['userId'] = ratings['userId'] - 1
ratings["rating"] = ratings["rating"].astype(np.float32)
def train_test_split(df, train_size=0.9, random_state=123):
    df = df.iloc[np.random.permutation(df.shape[0])].reset_index(drop=True)
    return np.array(df[:int(train_size * df.shape[0])]), np.array(df[int(train_size * df.shape[0]):])
X_train, X_test = train_test_split(ratings)
X_train.shape, X_test.shape
((90003, 3), (10001, 3))

Fitting BMF model

from cupcake.models import BMF
bmf = BMF(max_iter=500, device='GPU', verbose=1)
bmf.fit(X_train, X_test)
Initializing model...
SVD created...
Optimizer initialized...
Variables initialized...
Metric: root_mean_squared_error
Iteration:	Batch			Train			Test
Initialized...
0		1.0920326110194782	1.059260291024051	1.0595372863574994
1		1.0292197308373199	1.0586679955208587	1.0591069449722892
2		1.030568908599337	1.0583080123244468	1.0589586939059377
3		1.0607199669569616	1.0579554092867802	1.0588602776194733
4		1.0815025961502762	1.0576263065775897	1.0587931192807079
5		1.052427714669414	1.0573300349644499	1.0587819882096425
6		1.084823307391744	1.0570382236494997	1.0588068856370023
7		1.0615381022915356	1.0567369314472574	1.0588145405321159
8		1.0548761111002558	1.056433250405727	1.0588194563007092
9		1.083236364151795	1.056128962293638	1.058823947725941
10		1.0643971744578384	1.0558412993767563	1.0588569654118583
11		1.0754462250488517	1.0555568536170004	1.0589131790736177
12		1.0679915429518656	1.055273971625329	1.0589672987874816
13		1.075886277321775	1.0550290657527552	1.0590657227535718
14		1.0282266046181818	1.0548026322871957	1.0592015768511671
15		1.0780125411300392	1.0544978766784268	1.059276588673654
16		1.0337794343143383	1.0540673696225757	1.0592296989178953
17		1.0203214190907115	1.0536466860591593	1.05919670211662
18		1.0282267209891927	1.0531999224041073	1.0591364951097406
19		1.0309567139967526	1.0527263155471307	1.0590604152522083
20		1.0693915855478942	1.0522783851473712	1.059008413837395
21		1.0143175911618771	1.051833545203388	1.058967037329399
22		1.0266400975717378	1.051369569712362	1.0589267212793503
23		1.0814302448975681	1.0509227492049968	1.0589120826744982
24		1.0414240348056591	1.0504780279529644	1.0589047059228232
25		1.0956409096527193	1.0500360117942744	1.0588962297092177
26		1.0364331902649064	1.0495812244867788	1.0588820504911922
27		1.0615517007670976	1.0491166655391526	1.0588619680599303
28		1.0637951875544405	1.0486486123600085	1.0588518208013544
29		1.0289866913477737	1.0481588749743538	1.0588271084184406
30		1.033842100240036	1.0476416083062108	1.0587848827918174
31		1.036296345336109	1.0471207264452018	1.0587541527781006
32		1.045945894296761	1.0465891066916748	1.0587268688567668
33		1.042520056893465	1.046045994796193	1.0587005286214468
34		1.0580484388918536	1.045488015142097	1.058666951268008
35		1.0686212390691088	1.0449187349503761	1.0586374481522993
36		1.0503296781673561	1.0443419846927555	1.058608612809114
37		1.0490429472757954	1.0437337968532816	1.058550167073043
38		1.0868230557413758	1.0431033718462612	1.0584889157583328
39		1.014335048098225	1.0424576640358088	1.058423323802169
40		1.0506907230144913	1.0418036002884081	1.0583471809942744
41		1.0249522952656622	1.0411354826692845	1.0582846395072771
42		1.0622025109732645	1.0404480738140387	1.0582285468179184
43		1.0425015552530061	1.0397291150853778	1.0581590479766694
44		1.090823000974995	1.0389852176909449	1.0580731398693277
45		1.0429684899243665	1.0382233621435435	1.0579741486259837
46		1.0334571867504543	1.0374417685562536	1.0578706352194198
47		1.0454311373501475	1.0366270826755672	1.0577603902594361
48		1.0770407331538183	1.0357776443824542	1.0576345383820753
49		1.0477119820134835	1.0349045492213904	1.0575024797082038
50		1.0558129004546337	1.0340081436825543	1.057366654952516
51		1.0751736631411195	1.0330783260738916	1.0572266228392027
52		1.0041637531463552	1.0321531540343882	1.0570904392666813
53		1.004077564800161	1.0312131904092339	1.0569597405213653
54		1.0713816988983518	1.0302218470632343	1.0567964238527603
55		1.0465468212866273	1.0291839105162983	1.0566149208435194
56		1.0103079876367616	1.0281123728524237	1.0564053487833307
57		1.0458316246509454	1.026993016351498	1.056176632765943
58		0.9893401025148079	1.0258747113754216	1.0559821391842208
59		1.028566501757331	1.0247825398644543	1.055817087039382
60		1.0282494673375304	1.0237306845222067	1.055707321912681
61		1.0064297930277104	1.0226396749061577	1.055570229043176
62		1.0193841669376507	1.0215045717330316	1.0554139618739096
63		1.0501017874931762	1.0202129213368951	1.0551484102957926
64		1.0649270148171714	1.0187954799511585	1.0547726943410363
65		1.0305753414782615	1.0172883841945408	1.0543454763563385
66		0.9748477473554993	1.015890865440097	1.0540282748115744
67		1.063531372331921	1.014318735073083	1.0535493665266724
68		1.012489069648215	1.012660732334645	1.0529907997660106
69		1.0273741558852842	1.010998232593691	1.0524398965367827
70		1.014605676750525	1.0093337041932458	1.0518835922588985
71		1.0266570136539723	1.0077086414888987	1.0513744750891405
72		0.9982255851664192	1.0060842606429663	1.0508747025297536
73		0.9870211230784306	1.0044336835281145	1.0503798092657004
74		1.0071084135869275	1.0027698290611855	1.0499015996894427
75		1.0266561746761542	1.0009514206424808	1.049286403210209
76		1.0115787591725673	0.9990438982129664	1.0486110654723706
77		0.9969953549149736	0.9970456269395432	1.0478705058435753
78		1.0092927342264684	0.9950640546885651	1.047122202905668
79		0.9570226203971842	0.9930331714564287	1.04634831285323
80		0.9604684177930983	0.9909751667575116	1.0455716083489843
81		0.9767771102629582	0.988937420300218	1.044820017305432
82		1.0225861026165588	0.9868518942144062	1.0440417619620856
83		0.9999540480008318	0.9846903006469528	1.0432179318984975
84		0.9716033735284496	0.9824709087651914	1.0423556210902905
85		0.9948322832465304	0.9801740212780198	1.0414193322963343
86		0.9740322943865082	0.9778626511745957	1.0404831784588144
87		0.9167356372067479	0.9755151966772256	1.0395097772713797
88		0.9687635473696051	0.9731429939251487	1.0385392934658673
89		0.9484278273556435	0.9707474632620329	1.0375540128399718
90		0.9935601573742899	0.9682876158815367	1.036531662665487
91		0.974654766792919	0.9657943551580694	1.0355256137570092
92		0.9959433840881095	0.9632314176817937	1.0344605042966213
93		0.9383656519319413	0.9606243764185559	1.0333554709325667
94		0.9577634971837005	0.9579742375063545	1.032247042249276
95		0.9750818572934725	0.9552803375811968	1.0310985108632298
96		0.9298651324196624	0.9525508103189785	1.0299560741067604
97		0.9258556890257048	0.9498088428895709	1.028850703855171
98		0.9474071470448509	0.9470086306860315	1.0277086797428892
99		0.9405277120616896	0.9441827656143238	1.026523889468254
100		0.9755820696032899	0.9413266275344616	1.0253315140780697
101		0.9159040108297316	0.9384607405208567	1.0241554938271222
102		0.9602803539181605	0.9355401604688417	1.0229492534152416
103		0.9333142754631532	0.9326040882434626	1.0217283047657257
104		0.9004458182470634	0.9297148743137356	1.020524416299784
105		0.9233958276064234	0.9268255260385694	1.0192932194531876
106		0.9332059760558206	0.9238411502415005	1.017972640162439
107		0.9720826332163306	0.9208096195499773	1.0166869152019193
108		0.9096241946337921	0.9177793638456112	1.0153945557525517
109		0.9341768682767996	0.9147327917958322	1.0140942237204904
110		0.9135870337288049	0.9117045882210271	1.0128202132568873
111		0.8863363815664632	0.9086878783021902	1.0115724213213357
112		0.8970444600827578	0.9056962510075769	1.0103330354285953
113		0.8732672227089058	0.9027051377153157	1.0091040675122736
114		0.869317141687944	0.8997466707195824	1.007905659897203
115		0.8906172779618794	0.8968010931233735	1.0067229001456923
116		0.8926355394647033	0.8939189306882853	1.005593911126036
117		0.8895088700786498	0.8910466534630324	1.004494137401064
118		0.9375695035402494	0.8881158432736292	1.0033796931555412
119		0.8972141056253874	0.8852106699036592	1.002293340040359
120		0.9015746906468813	0.8823178749064949	1.0012400779880906
121		0.9010568563051933	0.879426700692103	1.0001823472280926
122		0.8861452850473768	0.8765623621703525	0.9991590591593469
123		0.8678646892093838	0.873734215567984	0.998150875774582
124		0.910152087221338	0.870913978734658	0.9970918187766287
125		0.8664750522096426	0.8681771546835954	0.9960615717847094
126		0.8522719969671244	0.8654698728285157	0.9950605534348926
127		0.8526859798829067	0.8628201904897493	0.9940861180860142
128		0.8414918644445133	0.860214239751669	0.993163646747977
129		0.8684445602700892	0.8576519257004781	0.992235813561464
130		0.8438506960529983	0.8550569142408986	0.9912590183596983
131		0.8404881881508511	0.8524709553210785	0.9902502661948456
132		0.8160853759858763	0.84990575070705	0.9892281097418536
133		0.8194426973614012	0.8473898476654093	0.9882773504318448
134		0.8701483751984269	0.8449105899312538	0.9873599648139673
135		0.8854437524216807	0.8425388026474802	0.9865388730429261
136		0.8236315061295949	0.8402223553457735	0.9858078620421542
137		0.8251415046842202	0.8379177144686217	0.9850460672136391
138		0.8262405392475922	0.835683631569145	0.9842978440192184
139		0.8276242578172117	0.8333988025025661	0.9834606945851867
140		0.8450804725594663	0.8311274438321415	0.9826701303078319
141		0.8014047278241332	0.8288466147364113	0.9818451276596133
142		0.8646470169922804	0.8265644974857244	0.9809923411388937
143		0.8559817401901025	0.8242021076875663	0.9800740370153341
144		0.8148812809486112	0.8220016180325613	0.9792980038438757
145		0.8673304521987965	0.8199564238181754	0.9786012304653242
146		0.7799956603682735	0.8179931445370995	0.9779600500828194
147		0.8302869581866161	0.8160518439840301	0.9773585817089401
148		0.7935555861469232	0.8140423366191751	0.9766770116107206
149		0.8054171528799695	0.8119232088724642	0.9759377349014722
150		0.8082677314725109	0.8098721325923206	0.9752754216292299
151		0.7906145746714249	0.8078169335381473	0.9746555492916357
152		0.8115216425593244	0.8057100139202787	0.9740418085450636
153		0.7826606661738144	0.8035731660062649	0.9733909187460581
154		0.8051272616867555	0.8015581816083135	0.9728426358835518
155		0.800104950074407	0.7996391390785698	0.9724102875929742
156		0.7996149008025263	0.797781361172458	0.9719912818476215
157		0.7795583812068972	0.79599663945076	0.9716710704996451
158		0.7850564131974763	0.794285740899207	0.9714302285072327
159		0.8258476456382947	0.7925521031404652	0.9711165456549448
160		0.7988893990878158	0.7907566571287074	0.9707138282286013
161		0.8193618192603855	0.7888178606516653	0.9701195954665414
162		0.7789257200739838	0.7868222520346057	0.9694740460437665
163		0.7819904393118313	0.7848678700214485	0.9688164438826493
164		0.7431386283629227	0.7830962543987895	0.9682987501843803
165		0.8098415922248532	0.78133728733316	0.9678132220892065
166		0.7677665973515807	0.7796168458834866	0.9672823178326173
167		0.7665343834685886	0.7779428572578398	0.9667615874032367
168		0.7326431964732277	0.7763424925273477	0.9662664954761542
169		0.7613093708035649	0.7748044969517727	0.9657851316411711
170		0.790685057686421	0.7732595342359578	0.9653102292023762
171		0.7368336947504718	0.7717382123634646	0.9648038363248053
172		0.8181581352863856	0.7701928967857742	0.9642736120744108
173		0.7737809589353266	0.7686553241713576	0.9638329190996648
174		0.7443507169906128	0.7671482079500745	0.9634085964744667
175		0.7832060758108905	0.7656056567758628	0.9630286873605315
176		0.7413569425978348	0.7640798066779708	0.9626188844952667
177		0.7367384813154334	0.7625636918199246	0.9621566963284133
178		0.7573946853246044	0.7610888132430302	0.9616954357252122
179		0.7587866891314251	0.7596065332797212	0.96126985120701
180		0.7576137730094152	0.7581571404210541	0.9608667142330282
181		0.7498409883612487	0.7567322201510386	0.9604949145142488
182		0.7623089723241981	0.7553288778266785	0.9601642581134306
183		0.7374055710791158	0.753986730176985	0.9599010646561511
184		0.7495559592684112	0.7526356523425949	0.9595741539102826
185		0.7454506429200782	0.7512247243493546	0.9591754712621327
186		0.7022973369087734	0.7498275684695174	0.9588030094570138
187		0.7657587170814976	0.7484322363325896	0.9584153883601595
188		0.7674446647260321	0.7470624291626564	0.9580634362682416
189		0.7508990752230811	0.7457251557623888	0.9576701642343933
190		0.7234636237776344	0.7444154665895777	0.957272162399044
191		0.7310977390392623	0.7431468063494769	0.956936844748234
192		0.7461999916471729	0.741869242115781	0.9566319614418556
193		0.7804675657057577	0.7405926137545251	0.9563438965880424
194		0.7531446044786985	0.7393074751420258	0.9561022734608601
195		0.7194609209142788	0.7380247463949586	0.9558575473102167
196		0.7489667238434007	0.736715689887062	0.9556067304563137
197		0.7735707832629151	0.7354379829062969	0.9554051713915468
198		0.7222894313048769	0.7341552408787075	0.9552306791687095
199		0.7457866821292436	0.7328584830343103	0.9551022952977801
200		0.7467301499153313	0.7315780763455011	0.9549211672593455
201		0.7373523587310772	0.7303219613562225	0.9547992287991649
202		0.6897134762429666	0.72909239961424	0.9546653256888394
203		0.7218672235953316	0.7278885767748846	0.9545397368216162
204		0.684504659569783	0.726702303713679	0.9544710487031598
205		0.7330276564488203	0.7254887028323997	0.9543684187487788
206		0.707882860501265	0.724268337620835	0.9542715751130505
207		0.6999540436201938	0.7230633729277082	0.9541528348050953
208		0.763044340493534	0.7218315246521139	0.9540665320809443
209		0.7249798224348093	0.7206437002824985	0.9540023402946126
210		0.7396625785868849	0.719489453642047	0.9539412222144342
211		0.6734848255768768	0.7184063339275174	0.9539409702823123
Converged.
y_hat = bmf.predict(ratings['userId'].values, ratings['movieId'].values)
y_hat.shape
(671, 9066)

Recommending movies

(推奨を作成するためのもっと複雑なメソッドが存在するが)、とりあえず上位Nの推論(推奨)映画だけを表示する。

I = pd.Index(sorted(pd.unique(ratings['userId'])), name='userId')
C = pd.Index([int(old_movieId[col]) for col in sorted(pd.unique(ratings['movieId']))], name="movieId")

y_hat = pd.DataFrame(y_hat, index=I, columns=C)
y_hat.head()
movieId 1 2 3 4 5 6 7 8 9 10 161084 161155 161594 161830 161918 161944 162376 162542 162672 163949
userId
0 2.770211 3.110432 3.565813 3.734226 3.715267 2.750980 3.635165 3.685497 3.233603 3.183866 3.659990 3.599522 3.527394 3.763640 3.655542 3.635494 3.261973 3.703194 3.397892 3.476666
1 3.815375 3.183018 3.065149 3.522935 3.146302 4.174326 3.455585 3.615565 3.243947 3.760884 3.525393 3.860126 3.460695 3.089119 3.181223 3.294705 3.993854 3.717845 3.560241 3.418046
2 3.933369 3.658009 3.259222 3.284391 3.297184 3.716631 3.725820 3.232388 3.560615 3.975207 3.665621 3.533366 3.582454 3.556542 3.607675 3.624778 3.694650 3.527423 3.631665 3.621549
3 5.240953 4.442733 3.372609 3.319376 3.612625 5.038885 3.598238 3.886176 3.721496 4.326051 3.652570 4.298028 3.680193 3.302231 3.435590 3.496588 4.057296 3.584856 3.825447 3.709856
4 4.086194 4.035969 3.968340 3.755962 3.734658 3.484819 3.448808 3.574874 3.409624 4.038321 3.693979 4.328406 3.521236 3.665636 3.601706 3.391447 3.788581 3.685856 3.569719 3.741552

5 rows × 9066 columns

def recommend_movies(y_pred, userId, movies, ratings, top_n=5):
    true_ratings = ratings.copy()
    true_ratings['movieId'] = [int(old_movieId[movieId]) for movieId in ratings['movieId']]
    
    # Let's sort ratings for given user and put into separate DataFrame
    ratings_u_pred = y_pred.iloc[userId].sort_values(ascending=False)
    ratings_u = true_ratings[true_ratings['userId'] == userId].merge(movies,
                                                                     how='left',
                                                                     left_on='movieId',
                                                                     right_on='movieId').sort_values(['rating'],
                                                                                                     ascending=False)
    # Get information about top_n films
    recommendations = movies[~movies['movieId'].isin(ratings_u['movieId'])].\
                      merge(pd.DataFrame(ratings_u_pred).reset_index(),
                            how='left',
                            left_on = 'movieId',
                            right_on = 'movieId').\
                      rename(columns={userId : 'predicted_rating'}).\
                      sort_values('predicted_rating', ascending = False).\
                      iloc[:top_n]
    ratings_u.reset_index(drop=True, inplace=True)
    recommendations.reset_index(drop=True, inplace=True)
    ratings_u = ratings_u[['title', 'rating']]
    ratings_u.columns = ['already_watched', 'rating']
    recommendations = recommendations[['title', 'predicted_rating']]
    recommendations.columns = ['RECOMMENDED_MOVIE', 'PREDICTED_RATING']
    recommendations['PREDICTED_RATING'] = recommendations['PREDICTED_RATING'] * 5 / np.max(recommendations['PREDICTED_RATING'])
    return pd.concat((ratings_u, recommendations), axis=1)
recommend_movies(y_hat, 100, movies, ratings, 50)
already_watched rating RECOMMENDED_MOVIE PREDICTED_RATING
0 Inception (2010) 5.0 Run Lola Run (Lola rennt) (1998) 5.000000
1 Raiders of the Lost Ark (Indiana Jones and the… 5.0 Seabiscuit (2003) 4.965912
2 Lord of the Rings: The Fellowship of the Ring,… 5.0 Forrest Gump (1994) 4.937039
3 Lord of the Rings: The Two Towers, The (2002) 5.0 Usual Suspects, The (1995) 4.833285
4 Dark Knight, The (2008) 5.0 Big Fish (2003) 4.824080
5 Batman Begins (2005) 5.0 Silence of the Lambs, The (1991) 4.823491
6 Matrix, The (1999) 4.5 Side Effects (2013) 4.816724
7 Saving Private Ryan (1998) 4.5 Beautiful Mind, A (2001) 4.805757
8 Lord of the Rings: The Return of the King, The… 4.5 Howl’s Moving Castle (Hauru no ugoku shiro) (2… 4.800771
9 Star Trek IV: The Voyage Home (1986) 4.5 Iron Man (2008) 4.789909
10 Star Trek II: The Wrath of Khan (1982) 4.5 Precious (2009) 4.773391
11 Indiana Jones and the Last Crusade (1989) 4.5 Godfather, The (1972) 4.755628
12 Back to the Future (1985) 4.5 Toy Story 3 (2010) 4.754298
13 Battlestar Galactica (2003) 4.5 Gandhi (1982) 4.751344
14 Aliens (1986) 4.5 October Sky (1999) 4.747097
15 Star Wars: Episode VI – Return of the Jedi (1983) 4.5 Sixth Sense, The (1999) 4.739024
16 Star Wars: Episode V – The Empire Strikes Back… 4.5 Almost Famous (2000) 4.736005
17 District 9 (2009) 4.5 Gran Torino (2008) 4.735133
18 Terminator 2: Judgment Day (1991) 4.5 My Neighbor Totoro (Tonari no Totoro) (1988) 4.733510
19 Star Trek (2009) 4.5 Stalag 17 (1953) 4.726318
20 Schindler’s List (1993) 4.5 Young Frankenstein (1974) 4.718084
21 Moon (2009) 4.0 Taxi Driver (1976) 4.716926
22 Enemy of the State (1998) 4.0 Memento (2000) 4.715808
23 Star Wars: Episode IV – A New Hope (1977) 4.0 Sting, The (1973) 4.706643
24 Seven Samurai (Shichinin no samurai) (1954) 4.0 American History X (1998) 4.706136
25 Lethal Weapon 2 (1989) 4.0 Wizard of Oz, The (1939) 4.705136
26 Shawshank Redemption, The (1994) 4.0 Midnight in Paris (2011) 4.702174
27 Inside Man (2006) 4.0 Snatch (2000) 4.692149
28 Hunt for Red October, The (1990) 4.0 Captain America: The Winter Soldier (2014) 4.680635
29 Battlestar Galactica: Razor (2007) 4.0 Lion in Winter, The (1968) 4.679670
30 Bourne Ultimatum, The (2007) 4.0 Lawrence of Arabia (1962) 4.676980
31 Blade Runner (1982) 4.0 My Fair Lady (1964) 4.676735
32 Patlabor: The Movie (Kidô keisatsu patorebâ: T… 4.0 Paperman (2012) 4.675219
33 Green Mile, The (1999) 4.0 Inherit the Wind (1960) 4.671472
34 Close Encounters of the Third Kind (1977) 4.0 WALL·E (2008) 4.670675
35 Predator (1987) 3.5 Pianist, The (2002) 4.660679
36 Bad Boys (1995) 3.5 Patton (1970) 4.660154
37 Die Hard (1988) 3.5 X-Men: First Class (2011) 4.654526
38 Terminator, The (1984) 3.5 Graduate, The (1967) 4.654449
39 Species (1995) 3.5 Gladiator (2000) 4.652591
40 Fugitive, The (1993) 3.5 Departed, The (2006) 4.651858
41 Ghostbusters (a.k.a. Ghost Busters) (1984) 3.5 Cinema Paradiso (Nuovo cinema Paradiso) (1989) 4.650976
42 Alien (1979) 3.5 Body Heat (1981) 4.650353
43 Lethal Weapon (1987) 3.5 Fight Club (1999) 4.650260
44 Few Good Men, A (1992) 3.5 Pursuit of Happyness, The (2006) 4.649209
45 X-Files: Fight the Future, The (1998) 3.0 Butch Cassidy and the Sundance Kid (1969) 4.648775
46 Arachnophobia (1990) 3.0 Crimes and Misdemeanors (1989) 4.648326
47 Bowfinger (1999) 3.0 Bucket List, The (2007) 4.642815
48 Desperado (1995) 2.5 Breaking the Waves (1996) 4.641902
49 Striptease (1996) 2.5 Requiem for a Dream (2000) 4.638392
50 Robin Hood: Men in Tights (1993) 2.5 NaN NaN
51 My Cousin Vinny (1992) 2.5 NaN NaN
52 Naked Gun 33 1/3: The Final Insult (1994) 2.5 NaN NaN
53 Johnny Mnemonic (1995) 2.5 NaN NaN
54 Specialist, The (1994) 2.0 NaN NaN

Inception(渡辺謙が出演した映画)とRun Lola Run (Lola rennt)はなかなか絶妙な推奨だと思うけど、後はどうかなってのが多い。