Who Will Win RuPaul’s Drag Race All Stars Season 5? (Week 4)*
By: Joe Sanders
Tags: Machine Learning, Rupauls Drag Race, Data Science, Python, Statistics

The competition may be half-over, but according to the (very rough) first draft of my model, it may be all sewn up.

Courtesy of In Magazine

Note: This story was updated on 6/30 to add a methodology section to make clearer how each queen’s placement was determined. Each queen’s placement was also clarified accordingly.

As I mentioned in my last article, I have a not-so-secret love of all things RuPaul’s Drag Race. I love pouring over the data, memorizing the statistics the way my peers memorize baseball players’ RBIs and ERAs, and getting every opportunity possible to understand the art of drag more. So, when I found out we’d be learning machine learning and predictive analysis as a part of my Flatiron School Data Science program, I couldn’t help but get excited at the prospect of taking my love for Drag Race to the next level. Thus: my quest to build a predictive model to determine the eventual winner of RuPaul’s Drag Race All Stars Season 5. I set to work right away, and I’m excited to share my initial findings with you.

Before I get into my analysis, let my start by saying two things:

*First of all: I am five weeks into my data science program. In fact, we haven’t even started the type of modeling I’ve attempted here. I’m certain this model could be better, and even more certain that I’ll continue to improve it as the season goes on and as my skill set improves. So, if your favorite has a 0.00% chance of winning right now — don’t fret, this is mostly just for fun… for now.

Next up, If you are a big data nerd like me, you can reference the data I’ve used for the initial draft of my model here. This will be a living document that I update as I iterate it moving forward.

Now that THAT is out of the way, let’s get down to business. I’ll first discuss a TL;DR version of what the model determined and why. Next up, I’ll outline WHAT the model found (since let’s be honest, that’s what you came here for). Third will be HOW I created the model, and finally, what changes I’m considering for the next draft (and there are many).

TL;DR: What was the methodology, and what factors did this version of the model deem as important?

The model I created leverages 37 unique variables for each queen that has competed AND is not actively on All Stars 2–5 (34 in all). These included race, gender identity, stated hometown for both the queen’s original season and All Stars season, various performance metrics for both seasons (such as wins, highs, and bottoms), as well as metrics for specific challenge wins.

From there, I used a method called Univariate Selection to determine the 10 most important factors that indicate overall placement on All Stars. For this version of the model, these were:

All Stars challenge wins

All Stars challenge “high” placements

All Stars challenge “safe” placements

All Stars lip sync wins (regardless of whether it was “for their life” or “for their legacy”)

The latitude of their original hometown

The number of years between their original season and All Stars

Original season challenge wins

Whether someone is Latinx

Whether the queen won the All Stars “Ball” challenge

Whether the queen won the All Stars “Makeover” challenge

From there, I used 80% of the data for these 10 data points to train a model on how to predict eventual All Stars outcome. I then used the remaining 20% of the data to test the model. It is important to note, the most accurate model option had an accuracy score of only .571 (out of 1.00), meaning that this model has significant room for improvement.

After training the model, I loaded only the remaining six queens and ran it again, calling the probabilities that each queen would get each placement (meaning I had 6 x 10 probabilities, despite the fact 7th through 10th place have already been determined). Finally, I took the sum of probabilities that each queen would get first, and divided each queen’s probability over the sum to get the likelihood that the queen would get first place. To put this a different way, where P is the probability:

P[Alexis][1st] + P[Blaire][1st] + P[Cracker][1st] + P[India][1st] + P[Jujubee][1st] + P[Shea][1st] = P[Total][1st] P[Alexis][1st]/P[Total][1st] = Alexis’s chance to win All Stars 5 compared to the other 5 comeptitors.

SO, who is poised to snatch the crown according to version 1 of the model, four weeks into the competition?

Are you feeling parched? Because Miz Cracker is currently sitting at a 98.6% chance of taking this whole competition home. This is due largely to her Episode 4 main challenge win (and subsequent Lip Sync for her Legacy tie with Lip Sync Assassin du jour Morgan McMichaels). She has also had a consistent record of high performance without ever landing in the bottom. What’s more, she was a consistently high performer in her original season, who didn’t wait too long between her original outing and All Stars.

While her unrealistically-high chance of victory will certainly plummet as the model evolves and as the season wears on, right now, Madame Cracker is the one to beat.

How do the rest of the queens shake out?

The queen you should expect to see statistical improvement from as the season goes on is Shea Coulee. While she’s sitting at just 1.39% chance of victory in this version of the model, any Drag Race fan knows that Shea’s record is nothing to balk at. Unfortunately, Shea falling into the bottom in Episode 3 greatly hurt her chances in the model because it reduced her number of wins/high/safes. That said, due to the low accuracy of the initial model, we should expect to see this percentage higher than where its currently sitting. Whereas I believe we should expect Cracker’s stock to fall, look for Shea’s to rise as the season wears on — even just one more challenge win under her belt should be enough to see a massive statistical rebound.

Next up is Blair St. Claire (.020%) and India Farrah (.018%). Blair has had a middling track record that is keeping her from falling, but her lack of wins (or even high placements) is hindering her chances in the model. India, on the other hand, is benefiting from the fact that the number of bottom placements doesn’t have a strong correlation to eventual placement in the competition (you can thank queens like Roxxxy Andrews for that). That said, a lack of top-placements will negatively impact your chances, which isn’t serving India.

Finally are Jujubee (.006%) and Alexis Mateo (.000%). Unfortunately, Juju is being dragged down due by the fact she couldn’t pull off the W against Assassin/All Stars 4 co-winner Monet X Change, and the fact she won her first challenge ever in Episode 3 of AS5. Alexis has yet to pull off a win all season and has had a few lows which pull her stock down. What’s more, both queens have had large gaps between their original run and this season of All Stars. As mentioned previously, the gap between the original season and All Stars hurts overall chances the larger it gets, meaning the Season 2 and 3 queens have that as a handicap. Making matters even worse for Alexis is, unfortunately (and definitely not justly), the fact she is Latinx; of previous contestants, Roxxxy Andrews placed the highest at 4th place, and otherwise, both other Latinx queens (Aja and Valentina) placed 7th.

In Greater Depth: How I Created the Model

Because this was my first attempt (ever) at a model, I wasn’t certain what Python libraries I might need. As a result, I started the process by pulling in a large cross-section to ensure that as I worked through the model I would have access to call different functions.

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn import svm

from sklearn import metrics

from sklearn.metrics import classification_report

from sklearn.metrics import confusion_matrix

from sklearn.metrics import accuracy_score

from sklearn.model_selection import train_test_split

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

from sklearn.ensemble import RandomForestClassifier

from sklearn.linear_model import LogisticRegression

from sklearn.neighbors import KNeighborsClassifier

from sklearn.naive_bayes import GaussianNB

from scipy.io import arff

%matplotlib inline

Next up: I import my data and created dummy variables for categorical data such as gender identity and ethnicity, and then dropped the “defaults,” which I set as male and white (as a majority of All Stars queens identify as such):

df=pd.read_csv(‘/Users/joesanders/Desktop/DragRaceModel/AllStars.csv’) df_gender = pd.get_dummies(df[‘gender_id’])

df_ethnicity = pd.get_dummies(df[‘ethnicity’])

df_concat = pd.concat([df, df_gender, df_ethnicity], axis=1) df_concat.drop([‘gender_id’, ‘ethnicity’,’White’ , ‘M’], inplace=True, axis=1)

Next, I leveraged Univariate Selection to determine the best columns to use for the model.

from sklearn.feature_selection import SelectKBest

from sklearn.feature_selection import chi2 fit_X = df_concat[[‘original_season’, ‘os_ht_long’, ‘os_hit_lat’, ‘os_age’, ‘os_placement’, ‘os_wins’, ‘os_highs’,‘os_safes’, ‘os_lows’, ‘os_btm2’, ‘os_lipsync_wins’, ‘as_ht_long’, ‘as_ht_lat’, ‘moved’, ‘as_age’,‘os_as_age_gap’, ‘as_wins’, ‘as_highs’, ‘as_safes’,‘as_lows’, ‘as_btms’, ‘as_lipsync_wins’, ‘as_varietyshow’,‘as_snatchgame’, ‘as_rusical’, ‘as_parody’, ‘as_standup’, ‘as_business’,‘as_makeover’, ‘as_supergroup’, ‘as_ball’, ‘F’, ’N’, ‘Asian’, ‘Black’, ‘Latinx’, ‘Multiracial’]] fit_y = df_concat[‘as_placement’] bestfeatures = SelectKBest(score_func=chi2, k=10)

fit = bestfeatures.fit(fit_X,fit_y)

dfscores = pd.DataFrame(fit.scores_)

dfcolumns = pd.DataFrame(fit_X.columns) featureScores = pd.concat([dfcolumns,dfscores],axis=1)

featureScores.columns = [‘Specs’,’Score’]

print(featureScores.nlargest(10,’Score’))

Based on the resulting data set, it would seem that All Stars Wins, All Stars Lip Sync Wins, Original Season Hometown Latitude, Gap Between Original and All Stars season, All Stars and Original Season High placements, whether someone is Latinx, All Stars Safe placements, and performance in the All Stars Ball and Makeover challenges are the 10 primary factors to consider for the model.

To be certain, I also ran a correlation Heat Map.