Introduction

The article “Be Suspicious Of Online Movie Ratings, Especially Fandango’s” by Walt Hickey published at https://fivethirtyeight.com/features/fandango-movies-ratings/ outlines the disparity in ratings between the movie ticket-selling company Fandango against the ratings of aggregation sites such as Rotten Tomatoes, Metacritic, and IMDB. The article indicates that Fandango movie ratings are typically higher than the users and the critics ratings from the other aggregation web sites. The author of the article also identified a likely defect in the Fandango web site display of ratings which always rounds a movie’s rating up to the nearest half-star which is counter to normal rounding standards. According to the author’s research, due to Fandango’s rating algoritm, essentially all movies on the Fandango site are rated 3 stars or above on a 5-star scale.

Load and Transform Data

I load the raw csv file from the fivethirtyeight Github repo into an R data frame and output the number of rows and columns as a sanity check against the information provided on the Github repo. The repo page does identify 147 entries in the csv dataset. I also perform the head function to visually see some of the records.

# Import RCurl to pull the csv file from the Github repo
library(RCurl)
## Loading required package: bitops
# Load the csv file from the repo's URL
movings_ratings_url <- getURL("https://raw.githubusercontent.com/fivethirtyeight/data/master/fandango/fandango_score_comparison.csv")
movie_ratings <-data.frame(read.csv(text=movings_ratings_url, header=T))

# Output initial dimensions of the data frame object
dim(movie_ratings)
## [1] 146  22
head(movie_ratings)
##                             FILM RottenTomatoes RottenTomatoes_User
## 1 Avengers: Age of Ultron (2015)             74                  86
## 2              Cinderella (2015)             85                  80
## 3                 Ant-Man (2015)             80                  90
## 4         Do You Believe? (2015)             18                  84
## 5  Hot Tub Time Machine 2 (2015)             14                  28
## 6       The Water Diviner (2015)             63                  62
##   Metacritic Metacritic_User IMDB Fandango_Stars Fandango_Ratingvalue
## 1         66             7.1  7.8            5.0                  4.5
## 2         67             7.5  7.1            5.0                  4.5
## 3         64             8.1  7.8            5.0                  4.5
## 4         22             4.7  5.4            5.0                  4.5
## 5         29             3.4  5.1            3.5                  3.0
## 6         50             6.8  7.2            4.5                  4.0
##   RT_norm RT_user_norm Metacritic_norm Metacritic_user_nom IMDB_norm
## 1    3.70          4.3            3.30                3.55      3.90
## 2    4.25          4.0            3.35                3.75      3.55
## 3    4.00          4.5            3.20                4.05      3.90
## 4    0.90          4.2            1.10                2.35      2.70
## 5    0.70          1.4            1.45                1.70      2.55
## 6    3.15          3.1            2.50                3.40      3.60
##   RT_norm_round RT_user_norm_round Metacritic_norm_round
## 1           3.5                4.5                   3.5
## 2           4.5                4.0                   3.5
## 3           4.0                4.5                   3.0
## 4           1.0                4.0                   1.0
## 5           0.5                1.5                   1.5
## 6           3.0                3.0                   2.5
##   Metacritic_user_norm_round IMDB_norm_round Metacritic_user_vote_count
## 1                        3.5             4.0                       1330
## 2                        4.0             3.5                        249
## 3                        4.0             4.0                        627
## 4                        2.5             2.5                         31
## 5                        1.5             2.5                         88
## 6                        3.5             3.5                         34
##   IMDB_user_vote_count Fandango_votes Fandango_Difference
## 1               271107          14846                 0.5
## 2                65709          12640                 0.5
## 3               103660          12055                 0.5
## 4                 3136           1793                 0.5
## 5                19560           1021                 0.5
## 6                39373            397                 0.5

I remove several of the columns from the dataset that pertain to critics’ ratings. As the Fandango data is based on user voting, I have decided to only include user rating data from the aggregation sites to ensure a fair comparison.

# Remove the columns from Rotten Tomatoes and Metacritic for the critics reviews
# Considering Fandango only allows for user voting, only keep data from equivalent users for comparison
movie_ratings <- movie_ratings[,c('FILM', 'RottenTomatoes_User', 'Metacritic_User', 'IMDB', 'Fandango_Stars', 'Fandango_Ratingvalue', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'RT_user_norm_round', 'Metacritic_user_norm_round', 'IMDB_norm_round', 'Metacritic_user_vote_count', 'IMDB_user_vote_count', 'Fandango_votes', 'Fandango_Difference')]

dim(movie_ratings)
## [1] 146  16

I rename several of the columns to remove abbreviations and shortened words to allow for better readability of the columns. The column names tend to get long with this approach, but I do believe it adds clarity to the resulting document.

library(plyr)
movie_ratings <- rename(movie_ratings ,c("FILM"="Movie","IMDB"="IMDB_User","Fandango_Ratingvalue"="Fandango_User_Rating","RT_user_norm"="RottenTomatoes_user_normalized","Metacritic_user_nom"="Metacritic_user_normalized","IMDB_norm"="IMDB_normalized", "RT_user_norm_round"="RottenTomatoes_user_normalized_rounded", "Metacritic_user_norm_round"="Metacritic_user_normalized_rounded","IMDB_norm_round"="IMDB_normalized_rounded"))

Create Derived Columns

To more easily compare the Fandango star ratings to the normalized user ratings of the three aggregation sites, I calculate the difference in resulting stars and then add that result as a column to the movie ratings data frame. By calculating and adding the three derived columns to the primary data frame, the data is now readily available to assist in identifying potentially meaningful differences in the star ratings. I consider the movie_ratings data frame with the derived columns as the primary dataset for any analysis to be performed.

# Calculate difference between Rotten Tomatoes normalized 5-star score with Fandango
# Add derived column to data frame
movie_ratings$RottenTomatoes_Fandango_Star_Difference <- with(movie_ratings, 
                                              Fandango_Stars - RottenTomatoes_user_normalized_rounded)

# Calculate difference between Metacritic normalized 5-star score with Fandango
# Add derived column to data frame
movie_ratings$Metacritic_Fandango_Star_Difference <- with(movie_ratings, 
                                              Fandango_Stars - Metacritic_user_normalized_rounded)

# Calculate difference between IMDB normalized 5-star score with Fandango
# Add derived column to data frame
movie_ratings$IMDB_Fandango_Star_Difference <- with(movie_ratings, 
                                              Fandango_Stars - IMDB_normalized_rounded)

dim(movie_ratings)
## [1] 146  19

As the article highlights a meaningful disparity in the Fandango web site ratings against those of three aggregation sites, I created subset data frames for each of the three aggregation sites in which the Fandango star rating was at least one star or greater than the normalized users rating from the aggregation site. I thought it would be interesting to then be able to compare the resulting data frames in which the discrepancy is at least a whole star difference. The following subsets allow for analysis between Fandango and each of the aggregation sites.

# 
ratings_diff_greater_than_5_rotten_tomates <- subset(movie_ratings, RottenTomatoes_Fandango_Star_Difference >= 1.0)

summary(ratings_diff_greater_than_5_rotten_tomates)
##                    Movie    RottenTomatoes_User Metacritic_User
##  5 Flights Up (2015)  : 1   Min.   :20.00       Min.   :2.4    
##  A Little Chaos (2015): 1   1st Qu.:38.50       1st Qu.:4.8    
##  Aloha (2015)         : 1   Median :52.00       Median :5.8    
##  American Ultra (2015): 1   Mean   :50.55       Mean   :5.7    
##  Annie (2014)         : 1   3rd Qu.:61.25       3rd Qu.:6.8    
##  Black or White (2015): 1   Max.   :84.00       Max.   :8.4    
##  (Other)              :74                                      
##    IMDB_User     Fandango_Stars  Fandango_User_Rating
##  Min.   :4.000   Min.   :3.000   Min.   :2.700       
##  1st Qu.:5.500   1st Qu.:3.500   1st Qu.:3.400       
##  Median :6.300   Median :4.000   Median :3.800       
##  Mean   :6.131   Mean   :3.994   Mean   :3.739       
##  3rd Qu.:6.600   3rd Qu.:4.500   3rd Qu.:4.100       
##  Max.   :7.800   Max.   :5.000   Max.   :4.800       
##                                                      
##  RottenTomatoes_user_normalized Metacritic_user_normalized IMDB_normalized
##  Min.   :1.000                  Min.   :1.20               Min.   :2.000  
##  1st Qu.:1.925                  1st Qu.:2.40               1st Qu.:2.750  
##  Median :2.600                  Median :2.90               Median :3.150  
##  Mean   :2.527                  Mean   :2.85               Mean   :3.066  
##  3rd Qu.:3.062                  3rd Qu.:3.40               3rd Qu.:3.300  
##  Max.   :4.200                  Max.   :4.20               Max.   :3.900  
##                                                                           
##  RottenTomatoes_user_normalized_rounded Metacritic_user_normalized_rounded
##  Min.   :1.000                          Min.   :1.00                      
##  1st Qu.:2.000                          1st Qu.:2.50                      
##  Median :2.500                          Median :3.00                      
##  Mean   :2.544                          Mean   :2.85                      
##  3rd Qu.:3.000                          3rd Qu.:3.50                      
##  Max.   :4.000                          Max.   :4.00                      
##                                                                           
##  IMDB_normalized_rounded Metacritic_user_vote_count IMDB_user_vote_count
##  Min.   :2.000           Min.   :  5.0              Min.   :   952      
##  1st Qu.:3.000           1st Qu.: 40.5              1st Qu.:  9467      
##  Median :3.000           Median : 80.0              Median : 19594      
##  Mean   :3.087           Mean   :136.4              Mean   : 33107      
##  3rd Qu.:3.500           3rd Qu.:167.5              3rd Qu.: 41617      
##  Max.   :4.000           Max.   :779.0              Max.   :207211      
##                                                                         
##  Fandango_votes    Fandango_Difference
##  Min.   :   35.0   Min.   :0.000      
##  1st Qu.:  818.5   1st Qu.:0.100      
##  Median : 2169.5   Median :0.300      
##  Mean   : 4018.5   Mean   :0.255      
##  3rd Qu.: 5483.0   3rd Qu.:0.400      
##  Max.   :34846.0   Max.   :0.500      
##                                       
##  RottenTomatoes_Fandango_Star_Difference
##  Min.   :1.00                           
##  1st Qu.:1.00                           
##  Median :1.50                           
##  Mean   :1.45                           
##  3rd Qu.:1.50                           
##  Max.   :2.50                           
##                                         
##  Metacritic_Fandango_Star_Difference IMDB_Fandango_Star_Difference
##  Min.   :-0.500                      Min.   :0.0000               
##  1st Qu.: 0.500                      1st Qu.:0.5000               
##  Median : 1.000                      Median :1.0000               
##  Mean   : 1.144                      Mean   :0.9062               
##  3rd Qu.: 1.500                      3rd Qu.:1.0000               
##  Max.   : 3.000                      Max.   :2.5000               
## 

The above data frame subset for Rotten Tomatoes compared to Fandango returns 80 entries in which the Fandango star rating is 1 or more stars greater than the Rotten Tomatoes normalized user rating.

# 
ratings_diff_greater_than_5_metacritic <- subset(movie_ratings, Metacritic_Fandango_Star_Difference >= 1.0)

summary(ratings_diff_greater_than_5_metacritic)
##                             Movie    RottenTomatoes_User Metacritic_User
##  Aloha (2015)                  : 1   Min.   :20.00       Min.   :2.400  
##  American Sniper (2015)        : 1   1st Qu.:46.50       1st Qu.:4.625  
##  Annie (2014)                  : 1   Median :61.50       Median :5.950  
##  Ant-Man (2015)                : 1   Mean   :61.54       Mean   :5.677  
##  Avengers: Age of Ultron (2015): 1   3rd Qu.:81.00       3rd Qu.:6.900  
##  Child 44 (2015)               : 1   Max.   :94.00       Max.   :8.200  
##  (Other)                       :68                                      
##    IMDB_User     Fandango_Stars Fandango_User_Rating
##  Min.   :4.000   Min.   :3.00   Min.   :2.700       
##  1st Qu.:5.825   1st Qu.:4.00   1st Qu.:3.700       
##  Median :6.600   Median :4.50   Median :4.100       
##  Mean   :6.518   Mean   :4.27   Mean   :4.012       
##  3rd Qu.:7.300   3rd Qu.:4.50   3rd Qu.:4.400       
##  Max.   :8.400   Max.   :5.00   Max.   :4.800       
##                                                     
##  RottenTomatoes_user_normalized Metacritic_user_normalized IMDB_normalized
##  Min.   :1.000                  Min.   :1.200              Min.   :2.000  
##  1st Qu.:2.325                  1st Qu.:2.312              1st Qu.:2.913  
##  Median :3.075                  Median :2.975              Median :3.300  
##  Mean   :3.077                  Mean   :2.839              Mean   :3.259  
##  3rd Qu.:4.050                  3rd Qu.:3.450              3rd Qu.:3.650  
##  Max.   :4.700                  Max.   :4.100              Max.   :4.200  
##                                                                           
##  RottenTomatoes_user_normalized_rounded Metacritic_user_normalized_rounded
##  Min.   :1.000                          Min.   :1.000                     
##  1st Qu.:2.500                          1st Qu.:2.500                     
##  Median :3.000                          Median :3.000                     
##  Mean   :3.095                          Mean   :2.818                     
##  3rd Qu.:4.000                          3rd Qu.:3.500                     
##  Max.   :4.500                          Max.   :4.000                     
##                                                                           
##  IMDB_normalized_rounded Metacritic_user_vote_count IMDB_user_vote_count
##  Min.   :2.000           Min.   :   4.0             Min.   :   243      
##  1st Qu.:3.000           1st Qu.:  49.5             1st Qu.: 14204      
##  Median :3.500           Median : 101.5             Median : 25174      
##  Mean   :3.284           Mean   : 209.5             Mean   : 53063      
##  3rd Qu.:3.500           3rd Qu.: 209.8             3rd Qu.: 50401      
##  Max.   :4.000           Max.   :1330.0             Max.   :334164      
##                                                                         
##  Fandango_votes  Fandango_Difference
##  Min.   :   38   Min.   :0.0000     
##  1st Qu.: 1200   1st Qu.:0.1000     
##  Median : 3344   Median :0.3000     
##  Mean   : 5936   Mean   :0.2581     
##  3rd Qu.: 7098   3rd Qu.:0.4000     
##  Max.   :34846   Max.   :0.5000     
##                                     
##  RottenTomatoes_Fandango_Star_Difference
##  Min.   :0.000                          
##  1st Qu.:0.500                          
##  Median :1.000                          
##  Mean   :1.176                          
##  3rd Qu.:1.500                          
##  Max.   :2.000                          
##                                         
##  Metacritic_Fandango_Star_Difference IMDB_Fandango_Star_Difference
##  Min.   :1.000                       Min.   :0.5000               
##  1st Qu.:1.000                       1st Qu.:0.5000               
##  Median :1.500                       Median :1.0000               
##  Mean   :1.453                       Mean   :0.9865               
##  3rd Qu.:1.500                       3rd Qu.:1.0000               
##  Max.   :3.000                       Max.   :2.5000               
## 

The above data frame subset for Metacritic compared to Fandango returns 74 entries in which the Fandango star rating is 1 or more stars greater than the Metacritic normalized user rating.

# 
ratings_diff_greater_than_5_imdb <- subset(movie_ratings, IMDB_Fandango_Star_Difference >= 1.0)

summary(ratings_diff_greater_than_5_imdb)
##                             Movie    RottenTomatoes_User Metacritic_User
##  5 Flights Up (2015)           : 1   Min.   :20.00       Min.   :2.400  
##  A Little Chaos (2015)         : 1   1st Qu.:47.75       1st Qu.:5.300  
##  American Sniper (2015)        : 1   Median :63.00       Median :6.500  
##  Annie (2014)                  : 1   Mean   :62.72       Mean   :6.069  
##  Ant-Man (2015)                : 1   3rd Qu.:80.25       3rd Qu.:7.125  
##  Avengers: Age of Ultron (2015): 1   Max.   :94.00       Max.   :8.800  
##  (Other)                       :58                                      
##    IMDB_User     Fandango_Stars  Fandango_User_Rating
##  Min.   :4.000   Min.   :3.000   Min.   :2.700       
##  1st Qu.:6.100   1st Qu.:4.000   1st Qu.:3.875       
##  Median :6.600   Median :4.500   Median :4.200       
##  Mean   :6.520   Mean   :4.375   Mean   :4.089       
##  3rd Qu.:7.225   3rd Qu.:4.500   3rd Qu.:4.400       
##  Max.   :8.400   Max.   :5.000   Max.   :4.800       
##                                                      
##  RottenTomatoes_user_normalized Metacritic_user_normalized IMDB_normalized
##  Min.   :1.000                  Min.   :1.200              Min.   :2.000  
##  1st Qu.:2.388                  1st Qu.:2.650              1st Qu.:3.050  
##  Median :3.150                  Median :3.250              Median :3.300  
##  Mean   :3.136                  Mean   :3.034              Mean   :3.260  
##  3rd Qu.:4.013                  3rd Qu.:3.562              3rd Qu.:3.612  
##  Max.   :4.700                  Max.   :4.400              Max.   :4.200  
##                                                                           
##  RottenTomatoes_user_normalized_rounded Metacritic_user_normalized_rounded
##  Min.   :1.000                          Min.   :1.000                     
##  1st Qu.:2.500                          1st Qu.:2.500                     
##  Median :3.000                          Median :3.500                     
##  Mean   :3.164                          Mean   :3.039                     
##  3rd Qu.:4.000                          3rd Qu.:3.500                     
##  Max.   :4.500                          Max.   :4.500                     
##                                                                           
##  IMDB_normalized_rounded Metacritic_user_vote_count IMDB_user_vote_count
##  Min.   :2.000           Min.   :   6.0             Min.   :   883      
##  1st Qu.:3.000           1st Qu.:  46.5             1st Qu.: 12202      
##  Median :3.500           Median :  95.5             Median : 24348      
##  Mean   :3.219           Mean   : 204.7             Mean   : 50727      
##  3rd Qu.:3.500           3rd Qu.: 207.2             3rd Qu.: 50089      
##  Max.   :4.000           Max.   :1330.0             Max.   :334164      
##                                                                         
##  Fandango_votes  Fandango_Difference
##  Min.   :   55   Min.   :0.0000     
##  1st Qu.:  995   1st Qu.:0.2000     
##  Median : 3388   Median :0.3000     
##  Mean   : 6032   Mean   :0.2859     
##  3rd Qu.: 7050   3rd Qu.:0.4000     
##  Max.   :34846   Max.   :0.5000     
##                                     
##  RottenTomatoes_Fandango_Star_Difference
##  Min.   :0.500                          
##  1st Qu.:0.875                          
##  Median :1.000                          
##  Mean   :1.211                          
##  3rd Qu.:1.500                          
##  Max.   :2.500                          
##                                         
##  Metacritic_Fandango_Star_Difference IMDB_Fandango_Star_Difference
##  Min.   :-0.500                      Min.   :1.000                
##  1st Qu.: 1.000                      1st Qu.:1.000                
##  Median : 1.500                      Median :1.000                
##  Mean   : 1.336                      Mean   :1.156                
##  3rd Qu.: 1.625                      3rd Qu.:1.125                
##  Max.   : 3.000                      Max.   :2.500                
## 

The above data frame subset for IMDB compared to Fandango returns 64 entries in which the Fandango star rating is 1 or more stars greater than the IMDB normalized user rating.

Findings and Recommendations

Based on the article analysis and subset data frames above, the results do indicate a Fandango rating system not in-line with the three movie rating aggregation sites. Not only do the results indicate higher scores by Fandango but scores quite a bit higher than the aggregation sites. For future analysis, as the article was initially published in 2015, a good exercise would be to perform the same ratings’ analysis for movies released after the article’s published date. This subsequent analysis exercise would then confirm if Fandango performed any meaningful adjustments to its movie-rating algorithm to be more in-line with aggregation sites. Also, additional research should be performed to confirm that Fandango did fix the abnormal rounding practice on Fandango’s web site.